Full Code of d2-projects/d2-admin for AI

master 35d7aa1fc1fc cached
392 files
4.7 MB
1.3M tokens
1032 symbols
1 requests
Download .txt
Showing preview only (5,053K chars total). Download the full file or copy to clipboard to get everything.
Repository: d2-projects/d2-admin
Branch: master
Commit: 35d7aa1fc1fc
Files: 392
Total size: 4.7 MB

Directory structure:
gitextract_0rh1tlrf/

├── .browserslistrc
├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug.md
│   │   ├── demo.md
│   │   ├── display.md
│   │   ├── doc.md
│   │   ├── feature.md
│   │   ├── other.md
│   │   ├── question.md
│   │   └── update.md
│   └── workflows/
│       ├── release.yml
│       └── star.yml
├── .gitignore
├── .postcssrc.js
├── .releaserc.js
├── LICENSE
├── README.md
├── README.zh.md
├── babel.config.js
├── d2-admin.babel
├── docs/
│   └── CHANGELOG.md
├── jest.config.js
├── jsconfig.json
├── package.json
├── public/
│   ├── html/
│   │   └── demo.html
│   ├── index.html
│   ├── lib/
│   │   └── UEditor/
│   │       ├── dialogs/
│   │       │   ├── anchor/
│   │       │   │   └── anchor.html
│   │       │   ├── attachment/
│   │       │   │   ├── attachment.css
│   │       │   │   ├── attachment.html
│   │       │   │   └── attachment.js
│   │       │   ├── background/
│   │       │   │   ├── background.css
│   │       │   │   ├── background.html
│   │       │   │   └── background.js
│   │       │   ├── charts/
│   │       │   │   ├── chart.config.js
│   │       │   │   ├── charts.css
│   │       │   │   ├── charts.html
│   │       │   │   └── charts.js
│   │       │   ├── emotion/
│   │       │   │   ├── emotion.css
│   │       │   │   ├── emotion.html
│   │       │   │   └── emotion.js
│   │       │   ├── gmap/
│   │       │   │   └── gmap.html
│   │       │   ├── help/
│   │       │   │   ├── help.css
│   │       │   │   ├── help.html
│   │       │   │   └── help.js
│   │       │   ├── image/
│   │       │   │   ├── image.css
│   │       │   │   ├── image.html
│   │       │   │   └── image.js
│   │       │   ├── insertframe/
│   │       │   │   └── insertframe.html
│   │       │   ├── internal.js
│   │       │   ├── link/
│   │       │   │   └── link.html
│   │       │   ├── map/
│   │       │   │   ├── map.html
│   │       │   │   └── show.html
│   │       │   ├── music/
│   │       │   │   ├── music.css
│   │       │   │   ├── music.html
│   │       │   │   └── music.js
│   │       │   ├── preview/
│   │       │   │   └── preview.html
│   │       │   ├── scrawl/
│   │       │   │   ├── scrawl.css
│   │       │   │   ├── scrawl.html
│   │       │   │   └── scrawl.js
│   │       │   ├── searchreplace/
│   │       │   │   ├── searchreplace.html
│   │       │   │   └── searchreplace.js
│   │       │   ├── snapscreen/
│   │       │   │   └── snapscreen.html
│   │       │   ├── spechars/
│   │       │   │   ├── spechars.html
│   │       │   │   └── spechars.js
│   │       │   ├── table/
│   │       │   │   ├── edittable.css
│   │       │   │   ├── edittable.html
│   │       │   │   ├── edittable.js
│   │       │   │   ├── edittd.html
│   │       │   │   └── edittip.html
│   │       │   ├── template/
│   │       │   │   ├── config.js
│   │       │   │   ├── template.css
│   │       │   │   ├── template.html
│   │       │   │   └── template.js
│   │       │   ├── video/
│   │       │   │   ├── video.css
│   │       │   │   ├── video.html
│   │       │   │   └── video.js
│   │       │   ├── webapp/
│   │       │   │   └── webapp.html
│   │       │   └── wordimage/
│   │       │       ├── tangram.js
│   │       │       ├── wordimage.html
│   │       │       └── wordimage.js
│   │       ├── index.html
│   │       ├── jsp/
│   │       │   ├── config.json
│   │       │   ├── controller.jsp
│   │       │   └── lib/
│   │       │       ├── commons-codec-1.9.jar
│   │       │       ├── commons-fileupload-1.3.1.jar
│   │       │       ├── commons-io-2.4.jar
│   │       │       ├── json.jar
│   │       │       └── ueditor-1.1.2.jar
│   │       ├── lang/
│   │       │   ├── en/
│   │       │   │   └── en.js
│   │       │   └── zh-cn/
│   │       │       └── zh-cn.js
│   │       ├── themes/
│   │       │   ├── default/
│   │       │   │   ├── css/
│   │       │   │   │   └── ueditor.css
│   │       │   │   └── dialogbase.css
│   │       │   └── iframe.css
│   │       ├── third-party/
│   │       │   ├── SyntaxHighlighter/
│   │       │   │   ├── shCore.js
│   │       │   │   └── shCoreDefault.css
│   │       │   ├── codemirror/
│   │       │   │   ├── codemirror.css
│   │       │   │   └── codemirror.js
│   │       │   ├── highcharts/
│   │       │   │   ├── adapters/
│   │       │   │   │   ├── mootools-adapter.js
│   │       │   │   │   ├── mootools-adapter.src.js
│   │       │   │   │   ├── prototype-adapter.js
│   │       │   │   │   ├── prototype-adapter.src.js
│   │       │   │   │   ├── standalone-framework.js
│   │       │   │   │   └── standalone-framework.src.js
│   │       │   │   ├── highcharts-more.js
│   │       │   │   ├── highcharts-more.src.js
│   │       │   │   ├── highcharts.js
│   │       │   │   ├── highcharts.src.js
│   │       │   │   ├── modules/
│   │       │   │   │   ├── annotations.js
│   │       │   │   │   ├── annotations.src.js
│   │       │   │   │   ├── canvas-tools.js
│   │       │   │   │   ├── canvas-tools.src.js
│   │       │   │   │   ├── data.js
│   │       │   │   │   ├── data.src.js
│   │       │   │   │   ├── drilldown.js
│   │       │   │   │   ├── drilldown.src.js
│   │       │   │   │   ├── exporting.js
│   │       │   │   │   ├── exporting.src.js
│   │       │   │   │   ├── funnel.js
│   │       │   │   │   ├── funnel.src.js
│   │       │   │   │   ├── heatmap.js
│   │       │   │   │   ├── heatmap.src.js
│   │       │   │   │   ├── map.js
│   │       │   │   │   ├── map.src.js
│   │       │   │   │   ├── no-data-to-display.js
│   │       │   │   │   └── no-data-to-display.src.js
│   │       │   │   └── themes/
│   │       │   │       ├── dark-blue.js
│   │       │   │       ├── dark-green.js
│   │       │   │       ├── gray.js
│   │       │   │       ├── grid.js
│   │       │   │       └── skies.js
│   │       │   ├── jquery-1.10.2.js
│   │       │   ├── video-js/
│   │       │   │   ├── video-js.css
│   │       │   │   ├── video.dev.js
│   │       │   │   └── video.js
│   │       │   ├── webuploader/
│   │       │   │   ├── webuploader.css
│   │       │   │   ├── webuploader.custom.js
│   │       │   │   ├── webuploader.flashonly.js
│   │       │   │   ├── webuploader.html5only.js
│   │       │   │   ├── webuploader.js
│   │       │   │   └── webuploader.withoutimage.js
│   │       │   └── zeroclipboard/
│   │       │       └── ZeroClipboard.js
│   │       ├── ueditor.all.js
│   │       ├── ueditor.config.js
│   │       └── ueditor.parse.js
│   ├── markdown/
│   │   └── demo.md
│   └── mobile.html
├── src/
│   ├── App.vue
│   ├── api/
│   │   ├── _service.js
│   │   ├── _tools.js
│   │   ├── demo.js
│   │   └── sys.user.js
│   ├── assets/
│   │   ├── style/
│   │   │   ├── animate/
│   │   │   │   └── vue-transition.scss
│   │   │   ├── fixed/
│   │   │   │   ├── base.scss
│   │   │   │   ├── element.scss
│   │   │   │   ├── markdown.scss
│   │   │   │   ├── n-progress.scss
│   │   │   │   ├── tree-view.scss
│   │   │   │   ├── vue-grid-layout.scss
│   │   │   │   └── vue-splitpane.scss
│   │   │   ├── public-class.scss
│   │   │   ├── public.scss
│   │   │   ├── theme/
│   │   │   │   ├── chester/
│   │   │   │   │   ├── index.scss
│   │   │   │   │   └── setting.scss
│   │   │   │   ├── d2/
│   │   │   │   │   ├── index.scss
│   │   │   │   │   └── setting.scss
│   │   │   │   ├── element/
│   │   │   │   │   ├── index.scss
│   │   │   │   │   └── setting.scss
│   │   │   │   ├── line/
│   │   │   │   │   ├── index.scss
│   │   │   │   │   └── setting.scss
│   │   │   │   ├── register.scss
│   │   │   │   ├── star/
│   │   │   │   │   ├── index.scss
│   │   │   │   │   └── setting.scss
│   │   │   │   ├── theme-base.scss
│   │   │   │   ├── theme.scss
│   │   │   │   ├── tomorrow-night-blue/
│   │   │   │   │   ├── index.scss
│   │   │   │   │   └── setting.scss
│   │   │   │   └── violet/
│   │   │   │       ├── index.scss
│   │   │   │       └── setting.scss
│   │   │   └── unit/
│   │   │       └── color.scss
│   │   └── svg-icons/
│   │       └── index.js
│   ├── components/
│   │   ├── d2-container/
│   │   │   ├── components/
│   │   │   │   ├── d2-container-card-bs.vue
│   │   │   │   ├── d2-container-card.vue
│   │   │   │   ├── d2-container-full-bs.vue
│   │   │   │   ├── d2-container-full.vue
│   │   │   │   ├── d2-container-ghost-bs.vue
│   │   │   │   ├── d2-container-ghost.vue
│   │   │   │   ├── d2-source.vue
│   │   │   │   └── mixins/
│   │   │   │       ├── bs.js
│   │   │   │       └── normal.js
│   │   │   └── index.js
│   │   ├── d2-container-frame/
│   │   │   └── index.vue
│   │   ├── d2-count-up/
│   │   │   └── index.vue
│   │   ├── d2-highlight/
│   │   │   ├── index.vue
│   │   │   └── libs/
│   │   │       ├── htmlFormat.js
│   │   │       └── style.github.css
│   │   ├── d2-icon/
│   │   │   ├── font-awesome-4.7.0/
│   │   │   │   └── fonts/
│   │   │   │       └── FontAwesome.otf
│   │   │   └── index.vue
│   │   ├── d2-icon-select/
│   │   │   ├── data/
│   │   │   │   └── index.js
│   │   │   └── index.vue
│   │   ├── d2-icon-svg/
│   │   │   └── index.vue
│   │   ├── d2-icon-svg-select/
│   │   │   └── index.vue
│   │   ├── d2-link-btn/
│   │   │   └── index.vue
│   │   ├── d2-markdown/
│   │   │   ├── index.vue
│   │   │   └── plugin/
│   │   │       └── baidupan.js
│   │   ├── d2-module-index-banner/
│   │   │   └── index.vue
│   │   ├── d2-module-index-menu/
│   │   │   ├── components/
│   │   │   │   ├── group.vue
│   │   │   │   └── item.vue
│   │   │   └── index.vue
│   │   ├── d2-quill/
│   │   │   └── index.vue
│   │   ├── d2-scrollbar/
│   │   │   └── index.vue
│   │   ├── d2-ueditor/
│   │   │   ├── button/
│   │   │   │   └── d2admin.js
│   │   │   ├── index.vue
│   │   │   └── ueditor.config.js
│   │   └── index.js
│   ├── i18n.js
│   ├── layout/
│   │   └── header-aside/
│   │       ├── components/
│   │       │   ├── contextmenu/
│   │       │   │   ├── components/
│   │       │   │   │   └── contentmenuList/
│   │       │   │   │       └── index.vue
│   │       │   │   └── index.vue
│   │       │   ├── header-color/
│   │       │   │   └── index.vue
│   │       │   ├── header-fullscreen/
│   │       │   │   └── index.vue
│   │       │   ├── header-locales/
│   │       │   │   └── index.vue
│   │       │   ├── header-log/
│   │       │   │   └── index.vue
│   │       │   ├── header-search/
│   │       │   │   └── index.vue
│   │       │   ├── header-size/
│   │       │   │   └── index.vue
│   │       │   ├── header-theme/
│   │       │   │   ├── components/
│   │       │   │   │   └── d2-theme-list/
│   │       │   │   │       └── index.vue
│   │       │   │   └── index.vue
│   │       │   ├── header-user/
│   │       │   │   └── index.vue
│   │       │   ├── libs/
│   │       │   │   └── util.menu.js
│   │       │   ├── menu-header/
│   │       │   │   └── index.js
│   │       │   ├── menu-side/
│   │       │   │   └── index.js
│   │       │   ├── mixin/
│   │       │   │   └── menu.js
│   │       │   ├── panel-search/
│   │       │   │   ├── components/
│   │       │   │   │   └── panel-search-item/
│   │       │   │   │       └── index.vue
│   │       │   │   └── index.vue
│   │       │   └── tabs/
│   │       │       └── index.vue
│   │       ├── index.js
│   │       ├── layout.vue
│   │       └── mixins/
│   │           └── search.js
│   ├── libs/
│   │   ├── util.cookies.js
│   │   ├── util.db.js
│   │   ├── util.import.development.js
│   │   ├── util.import.production.js
│   │   ├── util.js
│   │   └── util.log.js
│   ├── locales/
│   │   ├── en.json
│   │   ├── ja.json
│   │   ├── mixin.js
│   │   ├── zh-chs.json
│   │   └── zh-cht.json
│   ├── main.js
│   ├── menu/
│   │   ├── index.js
│   │   └── modules/
│   │       ├── demo-components.js
│   │       ├── demo-playground.js
│   │       └── demo-plugins.js
│   ├── plugin/
│   │   ├── d2admin/
│   │   │   └── index.js
│   │   ├── error/
│   │   │   └── index.js
│   │   ├── log/
│   │   │   └── index.js
│   │   └── open/
│   │       └── index.js
│   ├── router/
│   │   ├── index.js
│   │   ├── modules/
│   │   │   ├── components.js
│   │   │   ├── playground.js
│   │   │   └── plugins.js
│   │   └── routes.js
│   ├── setting.js
│   ├── store/
│   │   ├── index.js
│   │   └── modules/
│   │       └── d2admin/
│   │           ├── index.js
│   │           └── modules/
│   │               ├── account.js
│   │               ├── color.js
│   │               ├── db.js
│   │               ├── fullscreen.js
│   │               ├── gray.js
│   │               ├── log.js
│   │               ├── menu.js
│   │               ├── page.js
│   │               ├── releases.js
│   │               ├── search.js
│   │               ├── size.js
│   │               ├── theme.js
│   │               ├── transition.js
│   │               ├── ua.js
│   │               └── user.js
│   └── views/
│       ├── demo/
│       │   ├── components/
│       │   │   ├── container/
│       │   │   │   ├── api.vue
│       │   │   │   ├── card-bs.vue
│       │   │   │   ├── card-slot.vue
│       │   │   │   ├── card.vue
│       │   │   │   ├── components/
│       │   │   │   │   └── d2-demo-article.vue
│       │   │   │   ├── full-bs.vue
│       │   │   │   ├── full-slot.vue
│       │   │   │   ├── full.vue
│       │   │   │   ├── ghost-bs.vue
│       │   │   │   ├── ghost-slot.vue
│       │   │   │   ├── ghost.vue
│       │   │   │   └── md/
│       │   │   │       ├── long.md
│       │   │   │       └── short.md
│       │   │   ├── countup/
│       │   │   │   └── index.vue
│       │   │   ├── editor-quill/
│       │   │   │   ├── index.vue
│       │   │   │   └── value.js
│       │   │   ├── editor-ueditor/
│       │   │   │   └── index.vue
│       │   │   ├── highlight/
│       │   │   │   ├── code/
│       │   │   │   │   ├── css.js
│       │   │   │   │   ├── html.js
│       │   │   │   │   ├── javascript.js
│       │   │   │   │   └── scss.js
│       │   │   │   └── index.vue
│       │   │   ├── icon/
│       │   │   │   ├── components/
│       │   │   │   │   └── d2-icon-cell.vue
│       │   │   │   ├── data/
│       │   │   │   │   └── index.js
│       │   │   │   ├── icon-svg.vue
│       │   │   │   ├── icon.vue
│       │   │   │   ├── list.vue
│       │   │   │   ├── select-svg.vue
│       │   │   │   └── select.vue
│       │   │   ├── index/
│       │   │   │   └── index.vue
│       │   │   ├── json-tree/
│       │   │   │   └── index.vue
│       │   │   ├── layout/
│       │   │   │   ├── grid.vue
│       │   │   │   └── splitpane.vue
│       │   │   └── markdown/
│       │   │       ├── md/
│       │   │       │   └── doc.md
│       │   │       ├── source.vue
│       │   │       └── url.vue
│       │   ├── playground/
│       │   │   ├── add-routes/
│       │   │   │   ├── alternates/
│       │   │   │   │   ├── 1.vue
│       │   │   │   │   ├── 2.vue
│       │   │   │   │   └── 3.vue
│       │   │   │   └── routes.vue
│       │   │   ├── db/
│       │   │   │   ├── all/
│       │   │   │   │   └── index.vue
│       │   │   │   ├── page-public/
│       │   │   │   │   └── index.vue
│       │   │   │   ├── page-snapshot-public/
│       │   │   │   │   └── index.vue
│       │   │   │   ├── page-snapshot-user/
│       │   │   │   │   └── index.vue
│       │   │   │   ├── page-user/
│       │   │   │   │   └── index.vue
│       │   │   │   ├── public/
│       │   │   │   │   └── index.vue
│       │   │   │   └── user/
│       │   │   │       └── index.vue
│       │   │   ├── env/
│       │   │   │   └── index.vue
│       │   │   ├── frame/
│       │   │   │   ├── d2-doc/
│       │   │   │   │   └── index.vue
│       │   │   │   ├── html/
│       │   │   │   │   └── index.vue
│       │   │   │   └── report/
│       │   │   │       └── index.vue
│       │   │   ├── index/
│       │   │   │   └── index.vue
│       │   │   ├── locales/
│       │   │   │   └── index.vue
│       │   │   ├── log/
│       │   │   │   ├── ajax/
│       │   │   │   │   └── index.vue
│       │   │   │   ├── console/
│       │   │   │   │   └── index.vue
│       │   │   │   ├── error/
│       │   │   │   │   └── index.vue
│       │   │   │   └── log/
│       │   │   │       └── index.vue
│       │   │   ├── page-argu/
│       │   │   │   ├── get.vue
│       │   │   │   └── send.vue
│       │   │   ├── page-cache/
│       │   │   │   ├── off.vue
│       │   │   │   ├── on.vue
│       │   │   │   └── params.vue
│       │   │   └── store/
│       │   │       ├── fullscreen/
│       │   │       │   └── index.vue
│       │   │       ├── gray/
│       │   │       │   └── index.vue
│       │   │       ├── menu/
│       │   │       │   └── index.vue
│       │   │       ├── page/
│       │   │       │   └── index.vue
│       │   │       ├── size/
│       │   │       │   └── index.vue
│       │   │       ├── theme/
│       │   │       │   └── index.vue
│       │   │       ├── transition/
│       │   │       │   └── index.vue
│       │   │       └── ua/
│       │   │           └── index.vue
│       │   └── plugins/
│       │       ├── clipboard-polyfill/
│       │       │   └── index.vue
│       │       ├── day/
│       │       │   └── index.vue
│       │       ├── export/
│       │       │   ├── table.vue
│       │       │   └── txt.vue
│       │       ├── import/
│       │       │   ├── csv.vue
│       │       │   └── xlsx.vue
│       │       ├── index/
│       │       │   └── index.vue
│       │       └── js-cookie/
│       │           └── index.vue
│       └── system/
│           ├── error/
│           │   └── 404/
│           │       └── index.vue
│           ├── function/
│           │   ├── redirect/
│           │   │   └── index.js
│           │   └── refresh/
│           │       └── index.js
│           ├── index/
│           │   ├── components/
│           │   │   ├── d2-badge/
│           │   │   │   └── index.vue
│           │   │   ├── d2-help/
│           │   │   │   └── index.vue
│           │   │   └── d2-page-cover/
│           │   │       └── index.vue
│           │   └── index.vue
│           ├── log/
│           │   └── index.vue
│           └── login/
│               └── index.vue
├── src.mobile/
│   ├── App.vue
│   ├── main.js
│   ├── router/
│   │   └── index.js
│   ├── store/
│   │   └── index.js
│   ├── vant.js
│   └── views/
│       └── index.vue
├── tests/
│   └── unit/
│       ├── .eslintrc.js
│       ├── d2-container-card-bs.spec.js
│       ├── d2-container-card.spec.js
│       ├── d2-container-frame.spec.js
│       ├── d2-container-full-bs.spec.js
│       ├── d2-container-full.spec.js
│       ├── d2-container-ghost-bs.spec.js
│       ├── d2-container-ghost.spec.js
│       ├── d2-count-up.spec.js
│       ├── d2-icon-select.spec.js
│       ├── d2-icon-svg.spec.js
│       ├── d2-icon.spec.js
│       ├── d2-link-btn.spec.js
│       ├── d2-module-index-banner.spec.js
│       ├── d2-module-index-menu.spec.js
│       ├── d2-page-cover.spec.js
│       └── d2-source.spec.js
└── vue.config.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .browserslistrc
================================================
> 1%
last 2 versions


================================================
FILE: .editorconfig
================================================
[*.{js,jsx,ts,tsx,vue}]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
insert_final_newline = true


================================================
FILE: .eslintignore
================================================
# 忽略目录
build/
tests/
node_modules/

# node 覆盖率文件
coverage/

# 忽略文件
**/*-min.js
**/*.min.js


================================================
FILE: .eslintrc.js
================================================
module.exports = {
  root: true,
  env: {
    node: true
  },
  'extends': [
    'plugin:vue/essential',
    '@vue/standard'
  ],
  rules: {
    'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
  },
  parserOptions: {
    parser: 'babel-eslint'
  },
  overrides: [
    {
      files: [
        '**/__tests__/*.{j,t}s?(x)',
        '**/tests/unit/**/*.spec.{j,t}s?(x)'
      ],
      env: {
        jest: true
      }
    }
  ]
}


================================================
FILE: .github/ISSUE_TEMPLATE/bug.md
================================================
---
name: "👾 BUG"
about: 代码错误
---

```
为了统一格式,请将下面一行复制到 `Title` 栏,然后删除这部分
👾 BUG | 你的标题
```

如果需要,在这里描述具体内容

================================================
FILE: .github/ISSUE_TEMPLATE/demo.md
================================================
---
name: "🎮 示例相关"
about: 增加或者完善示例
---

```
为了统一格式,请将下面一行复制到 `Title` 栏,然后删除这部分
🎮 示例相关 | 你的标题
```

如果需要,在这里描述具体内容

================================================
FILE: .github/ISSUE_TEMPLATE/display.md
================================================
---
name: "🌈 显示优化"
about: 显示方面调整
---

```
为了统一格式,请将下面一行复制到 `Title` 栏,然后删除这部分
🌈 显示优化 | 你的标题
```

如果需要,在这里描述具体内容

================================================
FILE: .github/ISSUE_TEMPLATE/doc.md
================================================
---
name: "📔 文档相关"
about: 更新或者新增文档内容
---

```
为了统一格式,请将下面一行复制到 `Title` 栏,然后删除这部分
📔 文档相关 | 你的标题
```

如果需要,在这里描述具体内容

================================================
FILE: .github/ISSUE_TEMPLATE/feature.md
================================================
---
name: "🔩 功能开发"
about: 开发新的功能
---

```
为了统一格式,请将下面一行复制到 `Title` 栏,然后删除这部分
🔩 功能开发 | 你的标题
```

如果需要,在这里描述具体内容

================================================
FILE: .github/ISSUE_TEMPLATE/other.md
================================================
---
name: "🖐 其它问题"
about: 其它类型的 issue 请使用该模板
---

```
为了统一格式,请将下面一行复制到 `Title` 栏,然后删除这部分
🖐 其它问题 | 你的标题
```

如果需要,在这里描述具体内容

================================================
FILE: .github/ISSUE_TEMPLATE/question.md
================================================
---
name: "🤔 提问"
about: 提出使用方面的问题
---

```
为了统一格式,请将下面一行复制到 `Title` 栏,然后删除这部分
🤔 提问 | 你的标题
```

如果需要,在这里描述具体内容

================================================
FILE: .github/ISSUE_TEMPLATE/update.md
================================================
---
name: "⚙ 功能升级"
about: 升级某个功能
---

```
为了统一格式,请将下面一行复制到 `Title` 栏,然后删除这部分
⚙ 功能升级 | 你的标题
```

如果需要,在这里描述具体内容

================================================
FILE: .github/workflows/release.yml
================================================
name: Release pipeline

on:
  push:
    branches:
      - master

jobs:
  publish:
    if: ${{ !contains(github.event.head_commit.message, '[skip ci]') }}
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Semantic Release
      uses: cycjimmy/semantic-release-action@v3
      with:
        extra_plugins: |
          @semantic-release/changelog
          @semantic-release/git
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  # !TRICKY
  # https://github.community/t5/GitHub-Actions/Workflow-is-failing-if-no-job-can-be-ran-due-to-condition/td-p/38085
  always_job:
    name: Always run job
    runs-on: ubuntu-latest
    steps:
      - name: Always run
        run: echo "TRICKY run"

================================================
FILE: .github/workflows/star.yml
================================================
name: Star notice

on:
  watch:
    types: [started]

jobs:
  bark:

    runs-on: ubuntu-latest

    steps:
    - name: send bark message
      run: |
        repo=${GITHUB_REPOSITORY//\//:}
        actor=$GITHUB_ACTOR
        curl https://api.day.app/B3H8T6rF2p5Mj6z6oha82K/$actor%20star%20了你的仓库/$repo

================================================
FILE: .gitignore
================================================
.DS_Store
node_modules
/dist

# local env files
.env.local
.env.*.local

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?


================================================
FILE: .postcssrc.js
================================================
module.exports = {
  plugins: {
    autoprefixer: {}
  }
}


================================================
FILE: .releaserc.js
================================================
module.exports = {
  branch: 'master',
  plugins: [
    '@semantic-release/commit-analyzer',
    '@semantic-release/release-notes-generator',
    [
      '@semantic-release/changelog',
      {
        changelogFile: 'docs/CHANGELOG.md',
        changelogTitle: '# Changelog\n\nAll notable changes to this project will be documented in this file.'
      }
    ],
    [
      '@semantic-release/npm',
      {
        npmPublish: false
      }
    ],
    '@semantic-release/github',
    [
      '@semantic-release/git',
      {
        assets: [
          'docs/CHANGELOG.md',
          'package.json'
        ]
      }
    ]
  ]
}


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2018 李杨

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
![banner](https://raw.githubusercontent.com/d2-projects/d2-admin/master/docs/image/banner.png)

<p align="center">
	<a href="https://github.com/d2-projects/d2-admin/stargazers" target="_blank"><img src="https://img.shields.io/github/stars/d2-projects/d2-admin.svg"></a>
	<a href="https://github.com/d2-projects/d2-admin/network/members" target="_blank"><img src="https://img.shields.io/github/forks/d2-projects/d2-admin.svg"></a>
	<a href="https://github.com/d2-projects/d2-admin/issues" target="_blank"><img src="https://img.shields.io/github/issues/d2-projects/d2-admin.svg"></a>
	<a href="https://github.com/d2-projects/d2-admin/issues?q=is%3Aissue+is%3Aclosed" target="_blank"><img src="https://img.shields.io/github/issues-closed/d2-projects/d2-admin.svg"></a>
	<a href="https://github.com/d2-projects/d2-admin/pulls" target="_blank"><img src="https://img.shields.io/github/issues-pr/d2-projects/d2-admin.svg"></a>
	<a href="https://github.com/d2-projects/d2-admin/pulls?q=is%3Apr+is%3Aclosed" target="_blank"><img src="https://img.shields.io/github/issues-pr-closed/d2-projects/d2-admin.svg"></a>
	<a href="https://github.com/d2-projects/d2-admin" target="_blank"><img src="https://img.shields.io/github/last-commit/d2-projects/d2-admin.svg"></a>
</p>
<p align="center">
	<a href="https://github.com/d2-projects/d2-admin" target="_blank"><img src="https://visitor-badge.glitch.me/badge?page_id=d2-projects.d2-admin"></a>
	<a href="https://github.com/d2-projects/d2-admin/releases" target="_blank"><img src="https://img.shields.io/github/release/d2-projects/d2-admin.svg"></a>
	<a href="https://deepscan.io/dashboard#view=project&tid=8014&pid=10161&bid=136697"><img src="https://deepscan.io/api/teams/8014/projects/10161/branches/136697/badge/grade.svg" alt="DeepScan grade"></a>
</p>

[D2Admin](https://github.com/d2-projects/d2-admin) is a fully open source and free enterprise back-end product front-end integration solution, using the latest front-end technology stack, javascript files loading of local first screen less than 60kb, has prepared most of the project preparations, and with a lot of sample code to help the management system agile development.

[![Open in Visual Studio Code](https://open.vscode.dev/badges/open-in-vscode.svg)](https://open.vscode.dev/d2-projects/d2-admin)

[中文](https://github.com/d2-projects/d2-admin/blob/master/README.zh.md) | **English**

## Preview

![Deploy preview](https://github.com/d2-projects/d2-admin/workflows/Deploy%20preview/badge.svg)
[![Netlify Status](https://api.netlify.com/api/v1/badges/a5dd4bbd-da3f-4145-98a9-8012577bdcf5/deploy-status)](https://app.netlify.com/sites/d2-admin/deploys)

The following access addresses are built and deployed by the latest master branch code at the same time. The access effect is completely consistent. Please select the appropriate access link according to your own network situation.

| server | link | server |
| --- | --- | --- |
| github | [Link](https://d2-projects.github.io/d2-admin) | GitHub pages |
| netlify | [Link](https://d2-admin.netlify.com) | Netlify CDN |

## Document

[document on https://d2.pub](https://d2.pub/doc/d2-admin/)

## Features

* Build with vue-cli3
* First screen loading waiting animation
* Five themes
* Built-in UEditor rich text editor
* Detailed documentation
* Login and logout
* Separate routing and menu settings
* Foldable sidebar
* Multi-national language
* Rich text editor
* Markdown editor
* full screen
* Fontawesome icon library
* Icon selector
* Automatically register SVG icon
* Simulation data
* Clipboard package
* Chart library
* Time and date calculation tool
* Import Excel ( xlsx + csv )
* Data export Excel ( xlsx + csv )
* Data export text
* Digital animation
* Drag and drop the size of the block layout
* Grid layout for drag and resize and position
* Out-of-the-box page layout components
* Load and parse markdown files
* GitHub style markdown display component
* markdown internal code highlighting
* Expanded Baidu cloud link resolution and optimized display for markdown
* Right click menu component
* Custom scrollbars and scrolling controls
* Common style extraction, convenient theme customization
* Support temporary menu configuration
* System function display module `1.1.4 +`
* Multi-tab mode `1.1.4 +`
* Beautify the scroll bar `1.1.4 +`
* json view `1.1.4 +`
* cookie wrapper `1.1.5 +`
* Multi-tab global control API `1.1.5 +`
* Menu Global Control API `1.1.5 +`
* Multi-tab page close control support right-click menu `1.1.10 +`
* Modular global state management `1.2.0 +`
* Multiple data persistence methods: distinguish users, distinguish routes, page data snapshot function `1.2.0 +`
* Support for menu system that jumps out of external links `1.2.0 +`
* Support menu svg icon `1.3.0 +`
* Logging and error catching `1.3.0 +`
* Global menu search `1.3.0 +`
* Custom login redirect `1.3.0 +`
* Switch global base component size `1.4.0 +`
* Page loading progress bar `1.4.1 +`
* Adaptive top menu bar `1.4.7 +`
* Support for merging cells when exporting xslx `1.5.4 +`
* Multiple tabs support drag and drop sorting `1.8.0 +`
* load only local JavaScript code less than 60kb on the homepage `1.8.0 +`
* Built in build file volume checking tool `1.8.0 +`
* Example of multi page `1.23.0 +`
* Split chunks `1.23.0 +`

## Other synchronous repositories

| type | link |
| --- | --- |
| gitee | [https://gitee.com/d2-projects/d2-admin](https://gitee.com/d2-projects/d2-admin) |
| coding | [https://d2-projects.coding.net/p/d2-projects/d/d2-admin/git](https://d2-projects.coding.net/p/d2-projects/d/d2-admin/git) |

## Other versions

| Name | HomePage  | Preview | Introduction |
| --- | --- | --- | --- |
| Starter template | [Link](https://github.com/d2-projects/d2-admin-start-kit) | - | The simplest version |

## Open source backend implementation

> The backend is contributed by the open source community. The latest version of D2Admin is not guaranteed. Please contact its open source author for related usage issues.

| Name | technology | HomePage | Preview | Introduction |
| --- | --- | --- | --- | --- |
| django-vue-admin-pro | Django | [Link](https://github.com/dvadmin-pro/django-vue-admin-pro) | [Link](http://demo.pro.django-vue-admin.com) | Django + Jwt + D2Admin |
| boot-admin | SpringBoot | [Link](https://github.com/hb0730/boot-admin) | [Link](http://admin.hb0730.com/) | Management system based on SpringBoot |
| FlaskPermission | Flask | [Link](https://github.com/huguodong/flask-permission) | [Link](http://47.97.218.139:9999) | Permission management based on Flask |
| CareyShop | ThinkPHP5 | [Link](https://github.com/dnyz520/careyshop-admin) | [Link](https://demo.careyshop.cn/admin/) | High Performance Mall Framework System for CareyShop |
| jiiiiiin-security | Spring Boot | [Link](https://github.com/Jiiiiiin/jiiiiiin-security) | [Link](https://github.com/Jiiiiiin/jiiiiiin-security) | Content management infrastructure projects |
| Taroco | Spring Cloud | [Link](https://github.com/liuht777/Taroco) | [Link](http://111.231.192.110/) | Complete microservice enterprise solution |
| Aooms | Spring Cloud | [Link](https://gitee.com/cyb-javaer/Aooms) | [Link](https://www.yuboon.com/Aooms) | Extremely fast microservice development, not just as simple as JFinal |
| GOA | Beego | [Link](https://github.com/Qsnh/goa) | [Link](http://goaio.vip/) | Online question answering system based on Beego + Vue |
| CMDB | Django | [Link](https://github.com/CJFJack/django_vue_cmdb) | [Link](https://mp.weixin.qq.com/s?__biz=MzU1OTYzODA4Mw==&mid=2247484250&idx=1&sn=981024ac0580d8a3eba95742bd32b268) | authority system with dynamic menu |

## Community projects

> These projects are contributed by the open source community and are not guaranteed to use the latest version of D2Admin. Please contact their open source authors for related usage questions.

| Name | HomePage | Preview | Introduction |
| --- | --- | --- | --- |
| d2-admin-xiya-go-cms | [Link](https://github.com/d2-projects/d2-admin-xiya-go-cms) | - | D2Admin + authority system + dynamic router |
| d2-advance | [Link](https://github.com/d2-projects/d2-advance) | - | Technical exploration inspired by D2Admin |
| d2-crud-plus | [Link](https://github.com/greper/d2-crud-plus) | [Link](http://qiniu.veryreader.com/D2CrudPlusExample/index.html) | Easy development of crud function |
| d2-crud | [Link](https://github.com/d2-projects/d2-crud) | [Link]() | Encapsulation of common operations in tables |
| d2-admin-pm | [Link](https://github.com/wjkang/d2-admin-pm) | [Link](http://jaycewu.coding.me/d2-admin-pm) | RBAC privilege management solution based on D2Admin |
| LanBlog | [Link](https://github.com/sinksmell/LanBlog) | [Link](http://47.101.222.133/) | Vue + Beego restful api personal blog system |
| d2-admin-start-kit-plus | [Link](https://github.com/hank-cp/d2-admin-start-kit-plus) | [Link](https://github.com/hank-cp/d2-admin-start-kit-plus) | D2Admin Start kit modular version |
| d2-ribbons | [Link](https://github.com/d2-projects/d2-ribbons) | [Link](https://github.com/d2-projects/d2-ribbons) | Open source project logo Library |

## Badge

If your open source project is based on D2Admin development, please add the following badge to your README:

<a href="https://github.com/d2-projects/d2-admin" target="_blank">
	<img src="https://raw.githubusercontent.com/d2-projects/d2-admin/master/docs/image/d2-admin@2x.png" width="200">
</a>

Copy the following code into the README to:

``` html
<a href="https://github.com/d2-projects/d2-admin" target="_blank"><img src="https://raw.githubusercontent.com/d2-projects/d2-admin/master/docs/image/d2-admin@2x.png" width="200"></a>
```

At the same time, you can report your project to us. We will place the excellent project in D2Admin and help you publicize it.

## Contributor

* [@FairyEver](https://github.com/FairyEver)
* [@sunhaoxiang](https://github.com/sunhaoxiang)
* [@Aysnine](https://github.com/Aysnine)
* [@luchaohai](https://github.com/luchaohai)
* [@han-feng](https://github.com/han-feng)
* [@rongxingsun](https://github.com/rongxingsun)
* [@dnyz520](https://github.com/dnyz520)

## Become a sponsor

[Sponsor me on afdian.net](https://afdian.net/@fairyever)

## Sponsor

**cochlea** | **Baron** | **苦行僧** | **吴地安宁** | **KingDong** | **sunyongmofang**

## Visitor

![Total visitor](https://visitor-badge.glitch.me/badge?page_id=d2-projects.d2-admin)

> Total visitor since 2019.08.27

## Star history

[![Stargazers over time](https://starchart.cc/d2-projects/d2-admin.svg)](https://starchart.cc/d2-projects/d2-admin)

## License

[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fd2-projects%2Fd2-admin.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fd2-projects%2Fd2-admin?ref=badge_large)


================================================
FILE: README.zh.md
================================================
![banner](https://raw.githubusercontent.com/FairyEver/d2-admin/master/docs/image/banner.png)

<p align="center">
	<a href="https://github.com/d2-projects/d2-admin/stargazers" target="_blank"><img src="https://img.shields.io/github/stars/d2-projects/d2-admin.svg"></a>
	<a href="https://github.com/d2-projects/d2-admin/network/members" target="_blank"><img src="https://img.shields.io/github/forks/d2-projects/d2-admin.svg"></a>
	<a href="https://github.com/d2-projects/d2-admin/issues" target="_blank"><img src="https://img.shields.io/github/issues/d2-projects/d2-admin.svg"></a>
	<a href="https://github.com/d2-projects/d2-admin/issues?q=is%3Aissue+is%3Aclosed" target="_blank"><img src="https://img.shields.io/github/issues-closed/d2-projects/d2-admin.svg"></a>
	<a href="https://github.com/d2-projects/d2-admin/pulls" target="_blank"><img src="https://img.shields.io/github/issues-pr/d2-projects/d2-admin.svg"></a>
	<a href="https://github.com/d2-projects/d2-admin/pulls?q=is%3Apr+is%3Aclosed" target="_blank"><img src="https://img.shields.io/github/issues-pr-closed/d2-projects/d2-admin.svg"></a>
	<a href="https://github.com/d2-projects/d2-admin" target="_blank"><img src="https://img.shields.io/github/last-commit/d2-projects/d2-admin.svg"></a>
</p>
<p align="center">
	<a href="https://github.com/d2-projects/d2-admin" target="_blank"><img src="https://visitor-badge.glitch.me/badge?page_id=d2-projects.d2-admin"></a>
	<a href="https://github.com/d2-projects/d2-admin/releases" target="_blank"><img src="https://img.shields.io/github/release/d2-projects/d2-admin.svg"></a>
	<a href="https://deepscan.io/dashboard#view=project&tid=8014&pid=10161&bid=136697"><img src="https://deepscan.io/api/teams/8014/projects/10161/branches/136697/badge/grade.svg" alt="DeepScan grade"></a>
</p>

[D2Admin](https://github.com/d2-projects/d2-admin) 是一个完全 **开源免费** 的企业中后台产品前端集成方案,使用最新的前端技术栈,小于 60kb 的本地首屏 js 加载,已经做好大部分项目前期准备工作,并且带有大量示例代码,助力管理系统敏捷开发。

[![Open in Visual Studio Code](https://open.vscode.dev/badges/open-in-vscode.svg)](https://open.vscode.dev/d2-projects/d2-admin)

**中文** | [English](https://github.com/d2-projects/d2-admin)

## 预览

![Deploy preview](https://github.com/d2-projects/d2-admin/workflows/Deploy%20preview/badge.svg)
[![Netlify Status](https://api.netlify.com/api/v1/badges/a5dd4bbd-da3f-4145-98a9-8012577bdcf5/deploy-status)](https://app.netlify.com/sites/d2-admin/deploys)

下列访问地址均由最新的 master 分支代码同时构建部署,访问效果完全一致,请根据自身网络情况选择合适的访问链接。

| 位置 | 链接 | 部署位置 |
| --- | --- | --- |
| github | [preview](https://d2-projects.github.io/d2-admin) | GitHub pages |
| netlify | [preview](https://d2-admin.netlify.com) | Netlify CDN |

## 文档

[在 https://d2.pub 上的本项目文档](https://d2.pub/doc/d2-admin/)

## 功能

* 使用 vue-cli3 构建
* 首屏加载等待动画
* 五款主题
* 内置 UEditor 富文本编辑器
* 详细的文档
* 登录和注销
* 分离的路由和菜单设置
* 可折叠侧边栏
* 多国语
* 富文本编辑器
* Markdown 编辑器
* 全屏
* Fontawesome 图标库
* 图标选择器
* 自动注册 SVG 图标
* 模拟数据
* 剪贴板封装
* 图表库
* 时间日期计算工具
* 导入 Excel ( xlsx + csv )
* 数据导出 Excel ( xlsx + csv )
* 数据导出文本
* 数字动画
* 可拖拽调整大小的区块布局
* 可拖拽调整大小和位置的网格布局
* 开箱即用的页面布局组件
* 加载并解析 markdown 文件
* GitHub 样式的 markdown 显示组件
* markdown 内代码高亮
* 为 markdown 扩展了百度云链接解析和优化显示
* 右键菜单组件
* 自定义滚动条和滚动控制
* 公用样式抽离,方便的主题定制
* 支持临时菜单配置
* 系统功能展示模块 `1.1.4 +`
* 多标签页模式 `1.1.4 +`
* 美化滚动条 `1.1.4 +`
* json view `1.1.4 +`
* cookie 封装 `1.1.5 +`
* 多标签页全局控制 API `1.1.5 +`
* 菜单全局控制 API `1.1.5 +`
* 多标签页关闭控制支持右键菜单 `1.1.10 +`
* 模块化全局状态管理 `1.2.0 +`
* 多种数据持久化方式:区分用户,区分路由,页面数据快照功能 `1.2.0 +`
* 支持跳出外部链接的菜单系统 `1.2.0 +`
* 支持菜单 svg 图标 `1.3.0 +`
* 日志记录和错误捕捉 `1.3.0 +`
* 全局菜单搜索 `1.3.0 +`
* 自定义登录重定向 `1.3.0 +`
* 切换全局基础组件尺寸 `1.4.0 +`
* 页面载入进度条 `1.4.1 +`
* 自适应的顶部菜单栏 `1.4.7 +`
* 数据导出 xslx 时支持合并单元格 `1.5.4 +`
* 多标签页支持拖拽排序 `1.8.0 +`
* 优化生产环境构建,首页只加载小于 60kb 的本地 js 代码 `1.8.0 +`
* 内置了构建文件体积检查工具 `1.8.0 +`
* 构建多页面示例 `1.23.0 +`
* 分包优化 `1.23.0 +`

## 其它同步仓库

| 位置 | 链接 |
| --- | --- |
| 码云 | [https://gitee.com/d2-projects/d2-admin](https://gitee.com/d2-projects/d2-admin) |
| coding | [https://d2-projects.coding.net/p/d2-projects/d/d2-admin/git](https://d2-projects.coding.net/p/d2-projects/d/d2-admin/git) |

> 如果您在 github 仓库下载很慢,可以尝试使用我们的码云仓库克隆代码

## 其它版本

| 名称 | 主页  | 预览 | 介绍 |
| --- | --- | --- | --- |
| 简化版模板 | [Github](https://github.com/d2-projects/d2-admin-start-kit) | - | 无 |

## 开源后端实现

> 后端由开源社区贡献,不保证使用 D2Admin 最新版本,相关使用问题请联系其开源作者。

| 名称 | 技术 | 主页 | 预览 | 介绍 |
| --- | --- | --- | --- | --- |
| django-vue-admin-pro | Django | [Github](https://github.com/dvadmin-pro/django-vue-admin-pro) | [预览](http://demo.pro.django-vue-admin.com) | Django + Jwt + D2Admin |
| boot-admin | SpringBoot | [Github](https://github.com/hb0730/boot-admin) | [预览](http://admin.hb0730.com/) | 基于 SpringBoot 前后端分离的后台管理系统 |
| FlaskPermission | Flask | [Github](https://github.com/huguodong/flask-permission) | [预览](http://47.97.218.139:9999) | 基于 Python Flask 的权限管理 |
| CareyShop | ThinkPHP5 | [Github](https://github.com/dnyz520/careyshop-admin) | [预览](https://demo.careyshop.cn/admin/#/index) | 适用于 CareyShop 的高性能商城框架系统 |
| jiiiiiin-security | Spring Boot | [Github](https://github.com/Jiiiiiin/jiiiiiin-security) | [预览](https://github.com/Jiiiiiin/jiiiiiin-security) | 前后端分离的内容管理基础项目,注重用户权限管理功能 |
| Taroco | Spring Cloud | [Github](https://github.com/liuht777/Taroco) | [预览](http://111.231.192.110/) | 整套微服务企业级解决方案 |
| Aooms | Spring Cloud | [码云](https://gitee.com/cyb-javaer/Aooms) | [预览](https://www.yuboon.com/Aooms) | 极速微服务开发,不止像JFinal一样简单 |
| GOA | Beego | [Github](https://github.com/Qsnh/goa) | [预览](http://goaio.vip/) | 基于 Beego + Vue 开发的在线问答系统 |
| CMDB | Django | [Github](https://github.com/CJFJack/django_vue_cmdb) | [预览](https://mp.weixin.qq.com/s?__biz=MzU1OTYzODA4Mw==&mid=2247484250&idx=1&sn=981024ac0580d8a3eba95742bd32b268) | 分用户加载不同菜单和权限 |

## 社区项目

> 这些项目由开源社区贡献,不保证使用 D2Admin 最新版本,相关使用问题请联系其开源作者。

| 名称 | 主页 | 预览 | 介绍 |
| --- | --- | --- | --- |
| d2-admin-xiya-go-cms | [Github](https://github.com/d2-projects/d2-admin-xiya-go-cms) | - | D2Admin + 权限系统 + 动态路由 |
| d2-advance | [Github](https://github.com/d2-projects/d2-advance) | - | 由 D2Admin 启发的技术探索 |
| d2-crud-plus | [Github](https://github.com/greper/d2-crud-plus) | [预览](http://qiniu.veryreader.com/D2CrudPlusExample/index.html) | 简化d2-crud配置,快速开发crud功能 |
| d2-crud | [Github](https://github.com/d2-projects/d2-crud) | [预览]() | 表格常用操作封装 |
| d2-admin-pm | [Github](https://github.com/wjkang/d2-admin-pm) | [预览](http://jaycewu.coding.me/d2-admin-pm) | 基于 D2Admin 的 RBAC 权限管理解决方案 |
| LanBlog | [Github](https://github.com/sinksmell/LanBlog) | [预览](http://47.101.222.133/) | Vue + Beego restful api 开发的懒人博客 |
| d2-admin-start-kit-plus | [Github](https://github.com/hank-cp/d2-admin-start-kit-plus) | [预览](https://github.com/hank-cp/d2-admin-start-kit-plus) | D2Admin 简化版模块化版本 |
| d2-ribbons | [Github](https://github.com/d2-projects/d2-ribbons) | [预览](https://github.com/d2-projects/d2-ribbons) | 开源项目徽标库 |

## 加入我们

D2Admin 是完全开源免费的项目,旨在帮助开发者更方便地进行管理系统开发,同时也提供 QQ 交流群和微信群,前后端的朋友可以相互答疑,项目组成员全部在内,所有 D2 相关项目使用问题欢迎在群内提问。

* QQ 1 群 `806395827`
* QQ 2 群 `592981556`

![join](https://raw.githubusercontent.com/FairyEver/d2-admin/master/docs/image/join@2x.png)

## 徽章

如果您的开源项目基于 D2Admin 开发,请在您的 README 添加下面的徽章:

<a href="https://github.com/d2-projects/d2-admin" target="_blank">
	<img src="https://raw.githubusercontent.com/FairyEver/d2-admin/master/docs/image/d2-admin@2x.png" width="200">
</a>

复制下面代码加入到 README 中即可:

``` html
<a href="https://github.com/d2-projects/d2-admin" target="_blank"><img src="https://raw.githubusercontent.com/FairyEver/d2-admin/master/docs/image/d2-admin@2x.png" width="200"></a>
```

同时您可以将您的项目汇报给我们,优秀项目我们会放置在 D2Admin 相关位置并帮助您宣传。

## 贡献

* [@FairyEver](https://github.com/FairyEver)
* [@sunhaoxiang](https://github.com/sunhaoxiang)
* [@Aysnine](https://github.com/Aysnine)
* [@luchaohai](https://github.com/luchaohai)
* [@han-feng](https://github.com/han-feng)
* [@rongxingsun](https://github.com/rongxingsun)
* [@dnyz520](https://github.com/dnyz520)

## 成为赞助者

[在 "爱发电" 上赞助我](https://afdian.net/@fairyever)

## 赞助

**cochlea** | **Baron** | **苦行僧** | **吴地安宁** | **KingDong** | **sunyongmofang**

## 访问统计

![](https://visitor-badge.glitch.me/badge?page_id=d2-projects.d2-admin)

> 自 2019-08-27 起

## Star 历史

[![Stargazers over time](https://starchart.cc/d2-projects/d2-admin.svg)](https://starchart.cc/d2-projects/d2-admin)

## License

[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fd2-projects%2Fd2-admin.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fd2-projects%2Fd2-admin?ref=badge_large)

![](https://raw.githubusercontent.com/FairyEver/d2-admin/master/docs/image/give-a-star@2x.png)


================================================
FILE: babel.config.js
================================================
module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset'
  ],
  plugins: [
    [
      'import',
      {
        libraryName: 'vant',
        libraryDirectory: 'es',
        style: (name) => `${name}/style/less`
      },
      'vant'
    ]
  ],
  // common + es6 共存
  sourceType: 'unambiguous'
}


================================================
FILE: d2-admin.babel
================================================
<babeledit_project version="1.2">
    <!--

    BabelEdit project file
    https://www.codeandweb.com/babeledit

    This file contains meta data for all translations, but not the translation texts itself.
    They are stored in framework-specific message files (.json / .vue / .yaml / .properties)

    -->
    <preset_collections/>
    <framework>vue-json</framework>
    <filename>d2-admin.babel</filename>
    <source_root_dir></source_root_dir>
    <folder_node>
        <name></name>
        <children>
            <concept_node>
                <name>_element</name>
                <definition_loaded>false</definition_loaded>
                <description></description>
                <comment></comment>
                <default_text></default_text>
                <translations>
                    <translation>
                        <language>en-US</language>
                        <approved>false</approved>
                    </translation>
                    <translation>
                        <language>ja-JP</language>
                        <approved>false</approved>
                    </translation>
                    <translation>
                        <language>zh-CHS</language>
                        <approved>false</approved>
                    </translation>
                    <translation>
                        <language>zh-CHT</language>
                        <approved>false</approved>
                    </translation>
                </translations>
            </concept_node>
            <concept_node>
                <name>_name</name>
                <definition_loaded>false</definition_loaded>
                <description></description>
                <comment></comment>
                <default_text></default_text>
                <translations>
                    <translation>
                        <language>en-US</language>
                        <approved>false</approved>
                    </translation>
                    <translation>
                        <language>ja-JP</language>
                        <approved>false</approved>
                    </translation>
                    <translation>
                        <language>zh-CHS</language>
                        <approved>false</approved>
                    </translation>
                    <translation>
                        <language>zh-CHT</language>
                        <approved>false</approved>
                    </translation>
                </translations>
            </concept_node>
            <folder_node>
                <name>page</name>
                <children>
                    <folder_node>
                        <name>demo</name>
                        <children>
                            <folder_node>
                                <name>playground</name>
                                <children>
                                    <folder_node>
                                        <name>locales</name>
                                        <children>
                                            <concept_node>
                                                <name>text</name>
                                                <definition_loaded>false</definition_loaded>
                                                <description></description>
                                                <comment></comment>
                                                <default_text></default_text>
                                                <translations>
                                                    <translation>
                                                        <language>en-US</language>
                                                        <approved>false</approved>
                                                    </translation>
                                                    <translation>
                                                        <language>ja-JP</language>
                                                        <approved>false</approved>
                                                    </translation>
                                                    <translation>
                                                        <language>zh-CHS</language>
                                                        <approved>false</approved>
                                                    </translation>
                                                    <translation>
                                                        <language>zh-CHT</language>
                                                        <approved>false</approved>
                                                    </translation>
                                                </translations>
                                            </concept_node>
                                        </children>
                                    </folder_node>
                                </children>
                            </folder_node>
                        </children>
                    </folder_node>
                </children>
            </folder_node>
        </children>
    </folder_node>
    <isTemplateProject>false</isTemplateProject>
    <languages>
        <language>
            <code>en-US</code>
            <source_id></source_id>
            <source_file>src/locales/en.json</source_file>
        </language>
        <language>
            <code>ja-JP</code>
            <source_id></source_id>
            <source_file>src/locales/ja.json</source_file>
        </language>
        <language>
            <code>zh-CHS</code>
            <source_id></source_id>
            <source_file>src/locales/zh-chs.json</source_file>
        </language>
        <language>
            <code>zh-CHT</code>
            <source_id></source_id>
            <source_file>src/locales/zh-cht.json</source_file>
        </language>
    </languages>
    <translation_files>
        <translation_file>
            <file>src/locales/en.json</file>
        </translation_file>
        <translation_file>
            <file>src/locales/ja.json</file>
        </translation_file>
        <translation_file>
            <file>src/locales/zh-chs.json</file>
        </translation_file>
        <translation_file>
            <file>src/locales/zh-cht.json</file>
        </translation_file>
    </translation_files>
    <editor_configuration>
        <save_empty_translations>true</save_empty_translations>
        <copy_templates>
            <copy_template>$t('%1')</copy_template>
            <copy_template>{{ $t('%1') }}</copy_template>
            <copy_template>this.$t('%1')</copy_template>
        </copy_templates>
    </editor_configuration>
    <primary_language>zh-CHS</primary_language>
    <configuration>
        <indent>tab</indent>
        <format>namespaced-json</format>
    </configuration>
</babeledit_project>


================================================
FILE: docs/CHANGELOG.md
================================================
# Changelog

All notable changes to this project will be documented in this file.

# [1.27.0](https://github.com/d2-projects/d2-admin/compare/v1.26.0...v1.27.0) (2023-09-16)


### Features

* ${{ !contains(github.event.head_commit.message, '[skip ci]') }} ([40d1ed1](https://github.com/d2-projects/d2-admin/commit/40d1ed196dd858b1546100c63970c993fa0e96c2))
* contains ([f0bf16e](https://github.com/d2-projects/d2-admin/commit/f0bf16e2f316feec5f40a5b27091a6b07cf0f290))
* if ([dbd461f](https://github.com/d2-projects/d2-admin/commit/dbd461f2bdc5581796852eae3b1e8c57d68f7943))
* if ([c1b220d](https://github.com/d2-projects/d2-admin/commit/c1b220d08cc5a76e3af36929ff2befe8c82d4047))
* secrets.GITHUB_TOKEN ([ec74266](https://github.com/d2-projects/d2-admin/commit/ec742660bffe350113d5c7a4f3fae738a602f931))

# [1.26.0](https://github.com/d2-projects/d2-admin/compare/v1.25.0...v1.26.0) (2023-09-13)


### Features

* update badges ([0575b8a](https://github.com/d2-projects/d2-admin/commit/0575b8a73cdb90dab383fbb16fc3da91f704b1f5))
* update lock ([b386840](https://github.com/d2-projects/d2-admin/commit/b3868401d9d31d157ae960c7a8ec01a5867fbe3c))
* update send bark message ([e644bfc](https://github.com/d2-projects/d2-admin/commit/e644bfc12922a9e9243c7af50d117b81e125999b))
* 不再使用 action 部署 ([58e5cef](https://github.com/d2-projects/d2-admin/commit/58e5cef45b178bbe17977fc2bae14790aab286b7))
* 更新文档 ([37cae60](https://github.com/d2-projects/d2-admin/commit/37cae6021796c8d261467326f9fd556ed5ff062e))
* 更新链接地址 ([22b9be1](https://github.com/d2-projects/d2-admin/commit/22b9be11549036196e1c80fa9172d15556a651a4))

# [1.25.0](https://github.com/d2-projects/d2-admin/compare/v1.24.3...v1.25.0) (2022-08-23)


### Features

* update packages minor ([85bdc01](https://github.com/d2-projects/d2-admin/commit/85bdc019ea5e2c7afde157fd278a98add7868c03))
* update packages patch ([24a2f64](https://github.com/d2-projects/d2-admin/commit/24a2f64d275e7e5992588b305bafdf99be40b5c6))

## [1.24.3](https://github.com/d2-projects/d2-admin/compare/v1.24.2...v1.24.3) (2022-08-23)


### Bug Fixes

* 🐛 注销用户清空vuex用户信息失效 ([a7784d4](https://github.com/d2-projects/d2-admin/commit/a7784d4a321138e712a0c2434e2c8a5334de359d))
* remove never used code ([57534be](https://github.com/d2-projects/d2-admin/commit/57534be3fbec2796f998192e26aea3616be2b87c))
* remove simplemde ([dd99b57](https://github.com/d2-projects/d2-admin/commit/dd99b57b6e1330c58c33c57da5785ae4e256847c))

## [1.24.2](https://github.com/d2-projects/d2-admin/compare/v1.24.1...v1.24.2) (2021-07-23)


### Bug Fixes

* merge replaced Object.assign ([37f63bf](https://github.com/d2-projects/d2-admin/commit/37f63bf20c51312b48ca5b468f10514729948a97))

## [1.24.1](https://github.com/d2-projects/d2-admin/compare/v1.24.0...v1.24.1) (2021-07-20)


### Bug Fixes

* update sass and options ([ba795d0](https://github.com/d2-projects/d2-admin/commit/ba795d0887686284bd22d5f882a74da83240d3cc))

# [1.24.0](https://github.com/d2-projects/d2-admin/compare/v1.23.0...v1.24.0) (2020-12-28)


### Features

* :sparkles: 更改 api 引入的方法更合理化 ([e02f490](https://github.com/d2-projects/d2-admin/commit/e02f4909d05bdb4e3e8e3f79f6a1a4c10023437f))

# [1.23.0](https://github.com/d2-projects/d2-admin/compare/v1.22.0...v1.23.0) (2020-12-03)


### Features

* :sparkles: 提供多页面构建示例,优化了打包分包,取消CDN加载依赖但保留了设置入口 ([41a7e02](https://github.com/d2-projects/d2-admin/commit/41a7e02eb5709c2a3faf4c4727bcd54fbf84c525))

# [1.22.0](https://github.com/d2-projects/d2-admin/compare/v1.21.0...v1.22.0) (2020-11-30)


### Bug Fixes

* :package: lodash-es to lodash (lowdb存在导致lodash无法移除) ([136e6cd](https://github.com/d2-projects/d2-admin/commit/136e6cd040f1a2bc74a830f7e94f91c6a5680609))


### Features

* :package: update @d2-projects/vue-table-export and @d2-projects/vue-table-import ([0d4f315](https://github.com/d2-projects/d2-admin/commit/0d4f315a27d74b1318a916888d0cf3500d590fd8))

# [1.21.0](https://github.com/d2-projects/d2-admin/compare/v1.20.1...v1.21.0) (2020-11-30)


### Features

* :package: lodash to lodash-es ([f539271](https://github.com/d2-projects/d2-admin/commit/f53927121ecbcc24afdd243c8fad02374ac5f21d))
* update visitor count badge ([abcd573](https://github.com/d2-projects/d2-admin/commit/abcd5738347ce317f28e10f81d36965a02019110))
* 移除已经不需要的页面注册 index.js ([041fe66](https://github.com/d2-projects/d2-admin/commit/041fe66ae76c8a4611f0b9619b5aa4298a7005e5))
* 调整 createRequest 中 params 处理顺序 ([bf7ed65](https://github.com/d2-projects/d2-admin/commit/bf7ed65e231d766869247e7590b1fd269d38aa84))
* 默认 layout 使用处理过的 element 滚动条组件替代 better-scroll ([a93e966](https://github.com/d2-projects/d2-admin/commit/a93e9664573c08aa87b299a1f492524dc2ba3e88))
* **api:** :sparkles: 完善 service 代码,request 现在会根据需要自动序列化参数 ([886a4a8](https://github.com/d2-projects/d2-admin/commit/886a4a863821f69cebc27860db97a0b59bc10d9c))

## [1.20.1](https://github.com/d2-projects/d2-admin/compare/v1.20.0...v1.20.1) (2020-09-27)


### Bug Fixes

* :bug: 组件mounted钩子执行时 页面可能已经onload 导致 滚动校验不成功 ([93d4267](https://github.com/d2-projects/d2-admin/commit/93d4267567a02eeb28f86c8612c0d645ccd853f1))


### Performance Improvements

* 升级d2-crud-plus版本,分组示例增加图片上传和富文本 ([09b9baa](https://github.com/d2-projects/d2-admin/commit/09b9baa5399f57d0ee2551ff4f06ef6edb6df724))

# [1.20.0](https://github.com/d2-projects/d2-admin/compare/v1.19.0...v1.20.0) (2020-09-01)


### Bug Fixes

* 修复请求缺少/api不走fake的问题 ([02d6db3](https://github.com/d2-projects/d2-admin/commit/02d6db3bebf56008dfb47faef1d44c15c41b03ca))


### Features

* :sparkles: api 配置文件新增 .api.js 命名规则 ([cb98286](https://github.com/d2-projects/d2-admin/commit/cb9828605f77b0e74f62732b6a3e68fff087d897))
* :sparkles: 移除了 d2-container 组件上的 betterScrollOptions 不必要声明 ([0accc40](https://github.com/d2-projects/d2-admin/commit/0accc401e7f88ae4313698ec41ccd7ccec329ee1))

# [1.19.0](https://github.com/d2-projects/d2-admin/compare/v1.18.0...v1.19.0) (2020-09-01)


### Features

* :sparkles: d2-crud-plus 演示首页优化 ([d505583](https://github.com/d2-projects/d2-admin/commit/d505583b35901afe5f4943895d6fadef808a3dce))
* :sparkles: 在扫描 src/api/modules 下的接口配置时 支持多级文件夹下的文件 ([bb8ece7](https://github.com/d2-projects/d2-admin/commit/bb8ece7d25efc79d2f435cd44216763a3db96c3f))
* :sparkles: 提供better-scroll 配置项 ([b785d92](https://github.com/d2-projects/d2-admin/commit/b785d92b2e0689ae69fdccfba77be4a3f50d0098))
* :sparkles: 新窗口打开链接 入口位置迁移 ([ebc9cf7](https://github.com/d2-projects/d2-admin/commit/ebc9cf78ccaad91b9dec86b251d4f4bc5963b13c))
* :sparkles: 更新 d2-crud-plus logo ([c4f85c9](https://github.com/d2-projects/d2-admin/commit/c4f85c9f007a026dbb8e740cce15548c927819fa))
* :sparkles: 移除废弃页面 ([d88d393](https://github.com/d2-projects/d2-admin/commit/d88d393e2979dcf5e914aead38b5177c98a0b7f4))
* :sparkles: 简化 d2-crud-plus 演示 ([bcf3ffa](https://github.com/d2-projects/d2-admin/commit/bcf3ffa7d08787e6b189ac921461eb10214afaa1))
* :sparkles: 路由调整 菜单调整 删除无用演示 ([ec0d6f3](https://github.com/d2-projects/d2-admin/commit/ec0d6f38196feca594f43c4cb4c42088e6a2ecaa))
* :sparkles: 迁移嵌套页面演示 ([9485aab](https://github.com/d2-projects/d2-admin/commit/9485aabf31ddc669e185bc6729b3300daf307c7c))
* :sparkles: 顶栏菜单调整 ([0c3601d](https://github.com/d2-projects/d2-admin/commit/0c3601ddbabdccfdb5cd7fe1e60679d12ce63cc7))
* 增加d2-crud-plus示例 ([8e7d750](https://github.com/d2-projects/d2-admin/commit/8e7d7501a5461e0f00fbcab51c0db186151dc4ff))

# [1.18.0](https://github.com/d2-projects/d2-admin/compare/v1.17.0...v1.18.0) (2020-08-25)


### Features

* :sparkles: 优化合并的代码 完成刷新单页面功能 ([5e3eadf](https://github.com/d2-projects/d2-admin/commit/5e3eadf0eb844e2090a28174ff63feda3b82edbe))

# [1.17.0](https://github.com/d2-projects/d2-admin/compare/v1.16.0...v1.17.0) (2020-06-18)


### Features

* :sparkles: 增加构建分析页面示例 ([099fde5](https://github.com/d2-projects/d2-admin/commit/099fde59e74c3aba8bef744d02a0047d48c559af))

# [1.16.0](https://github.com/d2-projects/d2-admin/compare/v1.15.0...v1.16.0) (2020-06-08)


### Features

* :sparkles: 移除对 error 的无用判断 ([079fd1c](https://github.com/d2-projects/d2-admin/commit/079fd1c2809ea7f47d3f835a65d94a39ed9a8cf6))

# [1.15.0](https://github.com/d2-projects/d2-admin/compare/v1.14.0...v1.15.0) (2020-06-08)


### Features

* :sparkles: jsx 重写 d2-container 的 render ([f64b267](https://github.com/d2-projects/d2-admin/commit/f64b267ee92172ec0b25d8b2c19294360b83ed5e))

# [1.14.0](https://github.com/d2-projects/d2-admin/compare/v1.13.0...v1.14.0) (2020-06-08)


### Bug Fixes

* :bug: d2-count-up 组件删除错误代码和无用代码 ([93414eb](https://github.com/d2-projects/d2-admin/commit/93414ebc86093fedc62eb0b8d72bf2d51ecb009c))
* :bug: 修复示例代码中错误的 required 属性 ([a657395](https://github.com/d2-projects/d2-admin/commit/a6573955335456d9de65f5ba795f9a7df8897f49))


### Features

* :art: 解决关于 error 信息的检查遗漏提示 ([b1ea3e8](https://github.com/d2-projects/d2-admin/commit/b1ea3e81a6f2de93080427c9ee648a4015e06821))
* :art: 解决关于 page 是否存在判断不合理的问题 ([7062d06](https://github.com/d2-projects/d2-admin/commit/7062d0622ea74bea1397e24ba6b318b1a4a2dbcc))
* :sparkles: menu-header 和 menu-side 组件使用 jsx 重写 render ([0e54179](https://github.com/d2-projects/d2-admin/commit/0e541795a90ebff825bf1add3a147ef46809076b))

# [1.13.0](https://github.com/d2-projects/d2-admin/compare/v1.12.1...v1.13.0) (2020-06-04)


### Features

* :arrow_up: upgrade element-ui 2.13.2 ([b43f472](https://github.com/d2-projects/d2-admin/commit/b43f472db2d5970f51a8e002d54f400e5359a01a))

## [1.12.1](https://github.com/d2-projects/d2-admin/compare/v1.12.0...v1.12.1) (2020-05-19)


### Bug Fixes

* :bug: 修复静态资源请求错误 ([1983506](https://github.com/d2-projects/d2-admin/commit/1983506e46b117a064d959ee5b189e20168b5d71)), closes [#280](https://github.com/d2-projects/d2-admin/issues/280)

# [1.12.0](https://github.com/d2-projects/d2-admin/compare/v1.11.0...v1.12.0) (2020-05-19)


### Features

* :bulb: 分离用于真实网络请求和模拟请求的 service ([d6704da](https://github.com/d2-projects/d2-admin/commit/d6704dad5c2fd4ebea611aaccd714d0003f64935))

# [1.11.0](https://github.com/d2-projects/d2-admin/compare/v1.10.0...v1.11.0) (2020-05-08)


### Features

* fuse.js from 3.6.1 to 5.2.3 & 完善页面搜索相关代码 ([79e43a6](https://github.com/d2-projects/d2-admin/commit/79e43a69d878d7b31f60d0d7a61f67c9217a4e1e))
* github-markdown-css from 3.0.1 to 4.0.0 ([46d3649](https://github.com/d2-projects/d2-admin/commit/46d3649f0096cb7752ab682cc2087536b663901b))
* highlight.js from 9.18.1 to 10.0.2 ([9e61f30](https://github.com/d2-projects/d2-admin/commit/9e61f306f20ab58af1a76f0d3d9c94f16141a860))
* marked 0.8.2 to 1.0.0 ([8968fd4](https://github.com/d2-projects/d2-admin/commit/8968fd45cb16d0d9c792dfc05e6a7bdd24e91090))
* update devDependencies ([ef9ab55](https://github.com/d2-projects/d2-admin/commit/ef9ab5545f6ceef9a19e59400b31225cce245b5f))
* 优化接口配置设计,注册的网络请求会自动注册到 vue 原型 $api 上,修改了一些旧的接口调用方式 ([28acfdb](https://github.com/d2-projects/d2-admin/commit/28acfdbb04cb12079981dc495d1f95f5c6cad0aa))
* 使用 axios 扩展的方式实现 mock 数据 ([ac9b1ea](https://github.com/d2-projects/d2-admin/commit/ac9b1ea26dc9924ac97582033df6f747579ac2f7))
* 全局错误捕捉 ([60349f0](https://github.com/d2-projects/d2-admin/commit/60349f03445c9cab21ea378a9311e6191471b835))
* 更新 eslint 后,修复新检查出的错误 ([f4a10ed](https://github.com/d2-projects/d2-admin/commit/f4a10ed3c3c28f735af9f7e3538c6cc507caa2f9))
* 移除 mockjs 以及相关示例 ([804f66e](https://github.com/d2-projects/d2-admin/commit/804f66eb0581a20c3601f17ea0e384700c114e6b))
* 简化错误捕捉插件代码 ([6628f1b](https://github.com/d2-projects/d2-admin/commit/6628f1b462733f319cbd89a7a7ddf1dc1ca745ce))
* **theme:** add element theme ([97f00c2](https://github.com/d2-projects/d2-admin/commit/97f00c21ddd678789d1b88bfe2466e2bd9cf0c81))

# [1.10.0](https://github.com/d2-projects/d2-admin/compare/v1.9.2...v1.10.0) (2020-04-26)


### Bug Fixes

* 升级 cdn 依赖版本 ([771031d](https://github.com/d2-projects/d2-admin/commit/771031d7d39a3ab2d013cbf5d8d18ee949f64b97))


### Features

* add theme chester ([e3fd543](https://github.com/d2-projects/d2-admin/commit/e3fd543573d42f2f06c0214d34dea6263f8c3294))

## [1.9.2](https://github.com/d2-projects/d2-admin/compare/v1.9.1...v1.9.2) (2020-04-25)


### Bug Fixes

* **dependencies-cdn:** 修复生产环境中 CDN 没有引用 .min 的问题 ([f1f7b91](https://github.com/d2-projects/d2-admin/commit/f1f7b91c3f0fcdceca3815b700343b38194805c9))

## [1.9.1](https://github.com/d2-projects/d2-admin/compare/v1.9.0...v1.9.1) (2020-04-23)


### Bug Fixes

* 修复"增加侧边栏菜单折叠动画效果切换与设置"提交中遗留的问题 ([0e4f61c](https://github.com/d2-projects/d2-admin/commit/0e4f61c05965411e9013dcef0281517fba7a6635))

# [1.9.0](https://github.com/d2-projects/d2-admin/compare/v1.8.5...v1.9.0) (2020-04-22)


### Bug Fixes

* **store:** 修复 keepAliveRemove 操作后不能恢复页面缓存的 bug 以及相关 demo 页面 ([d249c86](https://github.com/d2-projects/d2-admin/commit/d249c86406bd3d808a3ef83ac0fd6f8e3103e8c6))
* 修正多标签页控制演示页面的错误代码 ([c13b59e](https://github.com/d2-projects/d2-admin/commit/c13b59e5e295f41fff52627474acca23055a2308))


### Features

* **demo:** 更新色盘样式 ([32421fe](https://github.com/d2-projects/d2-admin/commit/32421fe351d47e56ed1d81e5fd8e5a17c361b1f2))
* 移除无用的 __filename 设置 ([c19ff32](https://github.com/d2-projects/d2-admin/commit/c19ff32287204db680b76999d1c4ae500a6d44a4))
* **message:** 增强 message 提示的配色对比 ([c36fd8e](https://github.com/d2-projects/d2-admin/commit/c36fd8e5a27b574180aa4f055a55a4e12960e0f5)), closes [#243](https://github.com/d2-projects/d2-admin/issues/243)
* 移除无用的 d2-crud v1 提示 ([a494560](https://github.com/d2-projects/d2-admin/commit/a494560c8a6bab6a17bce423286e5593de0f3b8f))
* **element demo:** 移除内置的 elementUI demo ([8b37d3e](https://github.com/d2-projects/d2-admin/commit/8b37d3e77ffd9d713dc8f0a18d416f5606d14c21))
* **search panel:** 关闭搜索面板中列表容器的阴影 ([eb08ca1](https://github.com/d2-projects/d2-admin/commit/eb08ca19d4db485eded5f92491b420d74d3188ef))

# [1.9.0](https://github.com/d2-projects/d2-admin/compare/v1.8.5...v1.9.0) (2020-04-21)


### Features

* **demo:** 更新色盘样式 ([32421fe](https://github.com/d2-projects/d2-admin/commit/32421fe351d47e56ed1d81e5fd8e5a17c361b1f2))
* 移除无用的 __filename 设置 ([c19ff32](https://github.com/d2-projects/d2-admin/commit/c19ff32287204db680b76999d1c4ae500a6d44a4))
* **message:** 增强 message 提示的配色对比 ([c36fd8e](https://github.com/d2-projects/d2-admin/commit/c36fd8e5a27b574180aa4f055a55a4e12960e0f5)), closes [#243](https://github.com/d2-projects/d2-admin/issues/243)
* 移除无用的 d2-crud v1 提示 ([a494560](https://github.com/d2-projects/d2-admin/commit/a494560c8a6bab6a17bce423286e5593de0f3b8f))
* **element demo:** 移除内置的 elementUI demo ([8b37d3e](https://github.com/d2-projects/d2-admin/commit/8b37d3e77ffd9d713dc8f0a18d416f5606d14c21))
* **search panel:** 关闭搜索面板中列表容器的阴影 ([eb08ca1](https://github.com/d2-projects/d2-admin/commit/eb08ca19d4db485eded5f92491b420d74d3188ef))

## [1.8.5](https://github.com/d2-projects/d2-admin/compare/v1.8.4...v1.8.5) (2020-04-21)


### Bug Fixes

* **tab:** 修复多标签页拖拽排序后首页 tab 变为可关闭的状态,并使用更合理的方法控制首页标签不可关闭 ([606e143](https://github.com/d2-projects/d2-admin/commit/606e14380d66709b0a18bfedb5dd11cf973e81f9))

## [1.8.4](https://github.com/d2-projects/d2-admin/compare/v1.8.3...v1.8.4) (2020-04-19)


### Bug Fixes

* 更新演示表格下载地址和下载方式 ([be64607](https://github.com/d2-projects/d2-admin/commit/be64607cec294337fbcbe7622550846ffcdd351a)), closes [#259](https://github.com/d2-projects/d2-admin/issues/259)

## [1.8.3](https://github.com/d2-projects/d2-admin/compare/v1.8.2...v1.8.3) (2020-04-19)


### Bug Fixes

* **menu-side:** 修复侧边栏菜单自动展开失效 ([72cc381](https://github.com/d2-projects/d2-admin/commit/72cc381a141fa7302039366ef4078ea221ba9900)), closes [#258](https://github.com/d2-projects/d2-admin/issues/258)
* 修复菜单自动折叠的 bug ([06f1acf](https://github.com/d2-projects/d2-admin/commit/06f1acf522c83b966ec244bd2c9bbd9b3972f0a5)), closes [#229](https://github.com/d2-projects/d2-admin/issues/229)


### Performance Improvements

* **menu-side:** 直接使用 $route.fullPath 决定侧边栏菜单激活 ([0ed6922](https://github.com/d2-projects/d2-admin/commit/0ed6922140f673da3a64724a47c442b2a0b9b9b1))


================================================
FILE: jest.config.js
================================================
module.exports = {
  preset: '@vue/cli-plugin-unit-jest'
}


================================================
FILE: jsconfig.json
================================================
{
  "compilerOptions": {
    "target": "es2017",
    "allowSyntheticDefaultImports": false,
    "baseUrl": "./",
    "paths": {
      "@/*": ["src/*"]
    }
  },
  "exclude": ["node_modules", "dist"]
}


================================================
FILE: package.json
================================================
{
  "name": "d2-admin",
  "version": "1.27.0",
  "scripts": {
    "serve": "vue-cli-service serve --open",
    "start": "npm run serve",
    "dev": "npm run serve",
    "build": "vue-cli-service build --report",
    "build:preview": "NODE_OPTIONS=--max_old_space_size=4096 vue-cli-service build --mode preview",
    "lint": "vue-cli-service lint --fix",
    "test:unit": "vue-cli-service test:unit"
  },
  "dependencies": {
    "@d2-projects/vue-table-export": "^1.1.3",
    "@d2-projects/vue-table-import": "^1.0.1",
    "axios": "^0.27.2",
    "axios-mock-adapter": "^1.21.5",
    "better-scroll": "^1.15.2",
    "clipboard-polyfill": "^2.8.6",
    "core-js": "^3.24.1",
    "countup.js": "^2.3.2",
    "dayjs": "^1.11.9",
    "element-ui": "^2.15.14",
    "faker": "^4.1.0",
    "flex.css": "^1.1.7",
    "fuse.js": "^5.2.3",
    "github-markdown-css": "^4.0.0",
    "highlight.js": "^10.7.3",
    "hotkeys-js": "^3.9.5",
    "js-cookie": "^2.2.1",
    "lodash": "^4.17.21",
    "lowdb": "^1.0.0",
    "marked": "^2.1.3",
    "nprogress": "^0.2.0",
    "qs": "^6.11.2",
    "quill": "^1.3.7",
    "screenfull": "^5.2.0",
    "sortablejs": "^1.15.0",
    "ua-parser-js": "^0.8.1",
    "vant": "^2.12.54",
    "vue": "^2.7.14",
    "vue-grid-layout": "^2.4.0",
    "vue-i18n": "^8.27.2",
    "vue-json-tree-view": "^2.1.6",
    "vue-router": "^3.6.5",
    "vue-splitpane": "^1.0.6",
    "vue-ueditor-wrap": "^2.5.6",
    "vuex": "^3.6.2"
  },
  "devDependencies": {
    "@d2-projects/vue-filename-injector": "^1.1.1",
    "@kazupon/vue-i18n-loader": "^0.5.0",
    "@vue/cli-plugin-babel": "^4.5.19",
    "@vue/cli-plugin-eslint": "^4.5.19",
    "@vue/cli-plugin-router": "^4.5.19",
    "@vue/cli-plugin-unit-jest": "^4.5.19",
    "@vue/cli-plugin-vuex": "^4.5.19",
    "@vue/cli-service": "^4.5.19",
    "@vue/eslint-config-standard": "^5.1.2",
    "@vue/test-utils": "^1.3.6",
    "babel-eslint": "^10.0.3",
    "babel-plugin-import": "^1.13.8",
    "compression-webpack-plugin": "^3.1.0",
    "cz-conventional-changelog": "^3.3.0",
    "eslint": "^6.8.0",
    "eslint-plugin-import": "^2.26.0",
    "eslint-plugin-node": "^11.1.0",
    "eslint-plugin-promise": "^4.3.1",
    "eslint-plugin-standard": "^4.1.0",
    "eslint-plugin-vue": "^6.2.2",
    "less": "^3.13.1",
    "less-loader": "^7.3.0",
    "sass": "^1.54.9",
    "sass-loader": "^10.3.1",
    "svg-sprite-loader": "^4.3.0",
    "text-loader": "^0.0.1",
    "vue-cli-plugin-i18n": "^1.0.1",
    "vue-template-compiler": "^2.7.14",
    "webpack-bundle-analyzer": "^3.9.0",
    "webpack-theme-color-replacer": "^1.4.7"
  },
  "config": {
    "commitizen": {
      "path": "./node_modules/cz-conventional-changelog"
    }
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/d2-projects/d2-admin.git"
  }
}


================================================
FILE: public/html/demo.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <style>
  body, html {
    width: 100%;
    height: 100%;
    margin: 0px;
  }
  body {
    display: flex;
    align-items: center;
    justify-content: center;
    perspective: 900px;
    background-color: #FFF;
  }
  .cube {
    width: 100px;
    height: 100px;
    position: relative;
    transform-style: preserve-3d;
    animation: rotate 10s linear infinite;
  }
  .cube:after {
    content: '';
    width: 100%;
    height: 100%;
    box-shadow: 0 0 50px rgba(0, 0, 0, 0.2);
    position: absolute;
    transform-origin: bottom;
    transform-style: preserve-3d;
    transform: rotateX(90deg) translateY(50px) translateZ(-50px);
    background-color: rgba(0, 0, 0, 0.1);
  }
  .cube div {
    background-color: rgba(64, 158, 255, 0.7);
    position: absolute;
    width: 100%;
    height: 100%;
    border: 1px solid rgb(27, 99, 170);
    box-shadow: 0 0 60px rgba(64, 158, 255, 0.7);
  }
  .cube div:nth-child(1) {
    transform: translateZ(-50px);
    animation: shade 10s -5s linear infinite;
  }
  .cube div:nth-child(2) {
    transform: translateZ(50px) rotateY(180deg);
    animation: shade 10s linear infinite;
  }
  .cube div:nth-child(3) {
    transform-origin: right;
    transform: translateZ(50px) rotateY(270deg);
    animation: shade 10s -2.5s linear infinite;
  }
  .cube div:nth-child(4) {
    transform-origin: left;
    transform: translateZ(50px) rotateY(90deg);
    animation: shade 10s -7.5s linear infinite;
  }
  .cube div:nth-child(5) {
    transform-origin: bottom;
    transform: translateZ(50px) rotateX(90deg);
    background-color: rgba(0, 0, 0, 0.7);
  }
  .cube div:nth-child(6) {
    transform-origin: top;
    transform: translateZ(50px) rotateX(270deg);
  }

  @keyframes rotate {
    0% {
      transform: rotateX(-15deg) rotateY(0deg);
    }
    100% {
      transform: rotateX(-15deg) rotateY(360deg);
    }
  }
  @keyframes shade {
    50% {
      background-color: rgba(0, 0, 0, 0.7);
    }
  }
  </style>
  <title>demo</title>
</head>
<body>
  <div class="cube">
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
  </div>
</body>
</html>

================================================
FILE: public/index.html
================================================
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>icon.ico">
    <!-- 使用 CDN 加速的 CSS 文件,配置在 vue.config.js 下 -->
    <% for (var i in htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.css) { %>
    <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="stylesheet">
    <% } %>
    <title><%= VUE_APP_TITLE %></title>
    <style>
      html, body, #app { height: 100%; margin: 0px; padding: 0px; width: 100%; }
      .d2-home { background-color: #303133; height: 100%; display: flex; flex-direction: column; }
      .d2-home__main { user-select: none; width: 100%; flex-grow: 1; display: flex; justify-content: center; align-items: center; flex-direction: column; }
      .d2-home__footer { width: 100%; flex-grow: 0; text-align: center; padding: 1em 0; }
      .d2-home__footer > a { font-size: 12px; color: #ABABAB; text-decoration: none; }
      .d2-home__loading { height: 32px; width: 32px; margin-bottom: 20px; }
    </style>
    <!-- 统计代码 帮助 D2Admin 作者大致统计使用此框架的用户数量 -->
    <script>
      var _hmt = _hmt || [];
      var hmid = "bc38887aa5588add05a38704342ad7e8";
      (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?" + hmid; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s);})();
    </script>
  </head>
  <body>
    <noscript>
      <strong>
        Sorry, D2Admin will not work properly without JavaScript support. Enable JavaScript for browsers and continue.
      </strong>
    </noscript>
    <div id="app">
      <div class="d2-home">
        <div class="d2-home__main">
          <img
            class="d2-home__loading"
            src="./image/loading/loading-spin.svg"
            alt="loading">
        </div>
        <div class="d2-home__footer">
          <a
            href="https://github.com/d2-projects/d2-admin"
            target="_blank">
            https://github.com/d2-projects/d2-admin
          </a>
        </div>
      </div>
    </div>
    <!-- 使用 CDN 加速的 JS 文件,配置在 vue.config.js 下 -->
    <% for (var i in htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.js) { %>
    <script src="<%= htmlWebpackPlugin.options.cdn.js[i] %>"></script>
    <% } %>
  </body>
</html>


================================================
FILE: public/lib/UEditor/dialogs/anchor/anchor.html
================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title></title>
        <style type="text/css">
            *{color: #838383;margin: 0;padding: 0}
            html,body {font-size: 12px;overflow: hidden; }
            .content{padding:5px 0 0 15px;}
            input{width:210px;height:21px;line-height:21px;margin-left: 4px;}
        </style>
    </head>
    <body>
        <div class="content">
            <span><var id="lang_input_anchorName"></var></span><input id="anchorName"  value="" />
        </div>
        <script type="text/javascript" src="../internal.js"></script>
        <script type="text/javascript">
            var anchorInput = $G('anchorName'),
                node = editor.selection.getRange().getClosedNode();
            if(node && node.tagName == 'IMG' && (node = node.getAttribute('anchorname'))){
                anchorInput.value = node;
            }
            anchorInput.onkeydown = function(evt){
                evt = evt || window.event;
                if(evt.keyCode == 13){
                    editor.execCommand('anchor', anchorInput.value);
                    dialog.close();
                    domUtils.preventDefault(evt)
                }
            };
            dialog.onok = function (){
                editor.execCommand('anchor', anchorInput.value);
                dialog.close();
            };
            $focus(anchorInput);
        </script>
    </body>
</html>

================================================
FILE: public/lib/UEditor/dialogs/attachment/attachment.css
================================================
@charset "utf-8";
/* dialog样式 */
.wrapper {
    zoom: 1;
    width: 630px;
    *width: 626px;
    height: 380px;
    margin: 0 auto;
    padding: 10px;
    position: relative;
    font-family: sans-serif;
}

/*tab样式框大小*/
.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: 0px dashed #e6e6e6;
    height: 172px;
    padding-top: 150px;
    text-align: center;
    background: url(./images/image.png) center 70px no-repeat;
    color: #cccccc;
    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 auto;
    cursor: pointer;
    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
}

#upload .placeholder .webuploader-pick-hover {
    background: #00a2d4;
}


#filePickerContainer {
    text-align: center;
}

#upload .placeholder .flashTip {
    color: #666666;
    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: #999999;
}

#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: none;
    -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 #eeeeee 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 #eeeeee;
    border-radius: 0;
}
#upload .filelist li.filePickerBlock div.webuploader-pick  {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    opacity: 0;
    background: none;
    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, 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: #666666;
}

#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: #ffffff;
    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:0.6;
    -khtml-opacity: 0.6;
    opacity: 0.6;
}



/* 图片管理样式 */
#online {
    width: 100%;
    height: 336px;
    padding: 10px 0 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 0;
    font-size: 12px;
    height: 13px;
    color: #555555;
    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;
}

================================================
FILE: public/lib/UEditor/dialogs/attachment/attachment.html
================================================
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>ueditor图片对话框</title>
    <script type="text/javascript" src="../internal.js"></script>

    <!-- jquery -->
    <script type="text/javascript" src="../../third-party/jquery-1.10.2.min.js"></script>

    <!-- webuploader -->
    <script src="../../third-party/webuploader/webuploader.min.js"></script>
    <link rel="stylesheet" type="text/css" href="../../third-party/webuploader/webuploader.css">

    <!-- attachment dialog -->
    <link rel="stylesheet" href="attachment.css" type="text/css" />
</head>
<body>

    <div class="wrapper">
        <div id="tabhead" class="tabhead">
            <span class="tab focus" data-content-id="upload"><var id="lang_tab_upload"></var></span>
            <span class="tab" data-content-id="online"><var id="lang_tab_online"></var></span>
        </div>
        <div id="tabbody" class="tabbody">
            <!-- 上传图片 -->
            <div id="upload" class="panel focus">
                <div id="queueList" class="queueList">
                    <div class="statusBar element-invisible">
                        <div class="progress">
                            <span class="text">0%</span>
                            <span class="percentage"></span>
                        </div><div class="info"></div>
                        <div class="btns">
                            <div id="filePickerBtn"></div>
                            <div class="uploadBtn"><var id="lang_start_upload"></var></div>
                        </div>
                    </div>
                    <div id="dndArea" class="placeholder">
                        <div class="filePickerContainer">
                            <div id="filePickerReady"></div>
                        </div>
                    </div>
                    <ul class="filelist element-invisible">
                        <li id="filePickerBlock" class="filePickerBlock"></li>
                    </ul>
                </div>
            </div>

            <!-- 在线图片 -->
            <div id="online" class="panel">
                <div id="fileList"><var id="lang_imgLoading"></var></div>
            </div>

        </div>
    </div>
    <script type="text/javascript" src="attachment.js"></script>

</body>
</html>

================================================
FILE: public/lib/UEditor/dialogs/attachment/attachment.js
================================================
/**
 * User: Jinqn
 * Date: 14-04-08
 * Time: 下午16:34
 * 上传图片对话框逻辑代码,包括tab: 远程图片/上传图片/在线图片/搜索图片
 */

(function () {

    var uploadFile,
        onlineFile;

    window.onload = function () {
        initTabs();
        initButtons();
    };

    /* 初始化tab标签 */
    function initTabs() {
        var tabs = $G('tabhead').children;
        for (var i = 0; i < tabs.length; i++) {
            domUtils.on(tabs[i], "click", function (e) {
                var target = e.target || e.srcElement;
                setTabFocus(target.getAttribute('data-content-id'));
            });
        }

        setTabFocus('upload');
    }

    /* 初始化tabbody */
    function setTabFocus(id) {
        if(!id) return;
        var i, bodyId, tabs = $G('tabhead').children;
        for (i = 0; i < tabs.length; i++) {
            bodyId = tabs[i].getAttribute('data-content-id')
            if (bodyId == id) {
                domUtils.addClass(tabs[i], 'focus');
                domUtils.addClass($G(bodyId), 'focus');
            } else {
                domUtils.removeClasses(tabs[i], 'focus');
                domUtils.removeClasses($G(bodyId), 'focus');
            }
        }
        switch (id) {
            case 'upload':
                uploadFile = uploadFile || new UploadFile('queueList');
                break;
            case 'online':
                onlineFile = onlineFile || new OnlineFile('fileList');
                break;
        }
    }

    /* 初始化onok事件 */
    function initButtons() {

        dialog.onok = function () {
            var list = [], id, tabs = $G('tabhead').children;
            for (var i = 0; i < tabs.length; i++) {
                if (domUtils.hasClass(tabs[i], 'focus')) {
                    id = tabs[i].getAttribute('data-content-id');
                    break;
                }
            }

            switch (id) {
                case 'upload':
                    list = uploadFile.getInsertList();
                    var count = uploadFile.getQueueCount();
                    if (count) {
                        $('.info', '#queueList').html('<span style="color:red;">' + '还有2个未上传文件'.replace(/[\d]/, count) + '</span>');
                        return false;
                    }
                    break;
                case 'online':
                    list = onlineFile.getInsertList();
                    break;
            }

            editor.execCommand('insertfile', list);
        };
    }


    /* 上传附件 */
    function UploadFile(target) {
        this.$wrap = target.constructor == String ? $('#' + target) : $(target);
        this.init();
    }
    UploadFile.prototype = {
        init: function () {
            this.fileList = [];
            this.initContainer();
            this.initUploader();
        },
        initContainer: function () {
            this.$queue = this.$wrap.find('.filelist');
        },
        /* 初始化容器 */
        initUploader: function () {
            var _this = this,
                $ = jQuery,    // just in case. Make sure it's not an other libaray.
                $wrap = _this.$wrap,
            // 图片容器
                $queue = $wrap.find('.filelist'),
            // 状态栏,包括进度和控制按钮
                $statusBar = $wrap.find('.statusBar'),
            // 文件总体选择信息。
                $info = $statusBar.find('.info'),
            // 上传按钮
                $upload = $wrap.find('.uploadBtn'),
            // 上传按钮
                $filePickerBtn = $wrap.find('.filePickerBtn'),
            // 上传按钮
                $filePickerBlock = $wrap.find('.filePickerBlock'),
            // 没选择文件之前的内容。
                $placeHolder = $wrap.find('.placeholder'),
            // 总体进度条
                $progress = $statusBar.find('.progress').hide(),
            // 添加的文件数量
                fileCount = 0,
            // 添加的文件总大小
                fileSize = 0,
            // 优化retina, 在retina下这个值是2
                ratio = window.devicePixelRatio || 1,
            // 缩略图大小
                thumbnailWidth = 113 * ratio,
                thumbnailHeight = 113 * ratio,
            // 可能有pedding, ready, uploading, confirm, done.
                state = '',
            // 所有文件的进度信息,key为file id
                percentages = {},
                supportTransition = (function () {
                    var s = document.createElement('p').style,
                        r = 'transition' in s ||
                            'WebkitTransition' in s ||
                            'MozTransition' in s ||
                            'msTransition' in s ||
                            'OTransition' in s;
                    s = null;
                    return r;
                })(),
            // WebUploader实例
                uploader,
                actionUrl = editor.getActionUrl(editor.getOpt('fileActionName')),
                fileMaxSize = editor.getOpt('fileMaxSize'),
                acceptExtensions = (editor.getOpt('fileAllowFiles') || []).join('').replace(/\./g, ',').replace(/^[,]/, '');;

            if (!WebUploader.Uploader.support()) {
                $('#filePickerReady').after($('<div>').html(lang.errorNotSupport)).hide();
                return;
            } else if (!editor.getOpt('fileActionName')) {
                $('#filePickerReady').after($('<div>').html(lang.errorLoadConfig)).hide();
                return;
            }

            uploader = _this.uploader = WebUploader.create({
                pick: {
                    id: '#filePickerReady',
                    label: lang.uploadSelectFile
                },
                swf: '../../third-party/webuploader/Uploader.swf',
                server: actionUrl,
                fileVal: editor.getOpt('fileFieldName'),
                duplicate: true,
                fileSingleSizeLimit: fileMaxSize,
                compress: false
            });
            uploader.addButton({
                id: '#filePickerBlock'
            });
            uploader.addButton({
                id: '#filePickerBtn',
                label: lang.uploadAddFile
            });

            setState('pedding');

            // 当有文件添加进来时执行,负责view的创建
            function addFile(file) {
                var $li = $('<li id="' + file.id + '">' +
                        '<p class="title">' + file.name + '</p>' +
                        '<p class="imgWrap"></p>' +
                        '<p class="progress"><span></span></p>' +
                        '</li>'),

                    $btns = $('<div class="file-panel">' +
                        '<span class="cancel">' + lang.uploadDelete + '</span>' +
                        '<span class="rotateRight">' + lang.uploadTurnRight + '</span>' +
                        '<span class="rotateLeft">' + lang.uploadTurnLeft + '</span></div>').appendTo($li),
                    $prgress = $li.find('p.progress span'),
                    $wrap = $li.find('p.imgWrap'),
                    $info = $('<p class="error"></p>').hide().appendTo($li),

                    showError = function (code) {
                        switch (code) {
                            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;
                                break;
                        }
                        $info.text(text).show();
                    };

                if (file.getStatus() === 'invalid') {
                    showError(file.statusText);
                } else {
                    $wrap.text(lang.uploadPreview);
                    if ('|png|jpg|jpeg|bmp|gif|'.indexOf('|'+file.ext.toLowerCase()+'|') == -1) {
                        $wrap.empty().addClass('notimage').append('<i class="file-preview file-type-' + file.ext.toLowerCase() + '"></i>' +
                        '<span class="file-title" title="' + file.name + '">' + file.name + '</span>');
                    } else {
                        if (browser.ie && browser.version <= 7) {
                            $wrap.text(lang.uploadNoPreview);
                        } else {
                            uploader.makeThumb(file, function (error, src) {
                                if (error || !src) {
                                    $wrap.text(lang.uploadNoPreview);
                                } else {
                                    var $img = $('<img src="' + src + '">');
                                    $wrap.empty().append($img);
                                    $img.on('error', function () {
                                        $wrap.text(lang.uploadNoPreview);
                                    });
                                }
                            }, thumbnailWidth, thumbnailHeight);
                        }
                    }
                    percentages[ file.id ] = [ file.size, 0 ];
                    file.rotation = 0;

                    /* 检查文件格式 */
                    if (!file.ext || acceptExtensions.indexOf(file.ext.toLowerCase()) == -1) {
                        showError('not_allow_type');
                        uploader.removeFile(file);
                    }
                }

                file.on('statuschange', function (cur, prev) {
                    if (prev === 'progress') {
                        $prgress.hide().width(0);
                    } else if (prev === 'queued') {
                        $li.off('mouseenter mouseleave');
                        $btns.remove();
                    }
                    // 成功
                    if (cur === 'error' || cur === 'invalid') {
                        showError(file.statusText);
                        percentages[ file.id ][ 1 ] = 1;
                    } else if (cur === 'interrupt') {
                        showError('interrupt');
                    } else if (cur === 'queued') {
                        percentages[ file.id ][ 1 ] = 0;
                    } else if (cur === 'progress') {
                        $info.hide();
                        $prgress.css('display', 'block');
                    } else if (cur === 'complete') {
                    }

                    $li.removeClass('state-' + prev).addClass('state-' + cur);
                });

                $li.on('mouseenter', function () {
                    $btns.stop().animate({height: 30});
                });
                $li.on('mouseleave', function () {
                    $btns.stop().animate({height: 0});
                });

                $btns.on('click', 'span', function () {
                    var index = $(this).index(),
                        deg;

                    switch (index) {
                        case 0:
                            uploader.removeFile(file);
                            return;
                        case 1:
                            file.rotation += 90;
                            break;
                        case 2:
                            file.rotation -= 90;
                            break;
                    }

                    if (supportTransition) {
                        deg = 'rotate(' + file.rotation + 'deg)';
                        $wrap.css({
                            '-webkit-transform': deg,
                            '-mos-transform': deg,
                            '-o-transform': deg,
                            'transform': deg
                        });
                    } else {
                        $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')');
                    }

                });

                $li.insertBefore($filePickerBlock);
            }

            // 负责view的销毁
            function removeFile(file) {
                var $li = $('#' + file.id);
                delete percentages[ file.id ];
                updateTotalProgress();
                $li.off().find('.file-panel').off().end().remove();
            }

            function updateTotalProgress() {
                var loaded = 0,
                    total = 0,
                    spans = $progress.children(),
                    percent;

                $.each(percentages, function (k, v) {
                    total += v[ 0 ];
                    loaded += v[ 0 ] * v[ 1 ];
                });

                percent = total ? loaded / total : 0;

                spans.eq(0).text(Math.round(percent * 100) + '%');
                spans.eq(1).css('width', Math.round(percent * 100) + '%');
                updateStatus();
            }

            function setState(val, files) {

                if (val != state) {

                    var stats = uploader.getStats();

                    $upload.removeClass('state-' + state);
                    $upload.addClass('state-' + val);

                    switch (val) {

                        /* 未选择文件 */
                        case 'pedding':
                            $queue.addClass('element-invisible');
                            $statusBar.addClass('element-invisible');
                            $placeHolder.removeClass('element-invisible');
                            $progress.hide(); $info.hide();
                            uploader.refresh();
                            break;

                        /* 可以开始上传 */
                        case 'ready':
                            $placeHolder.addClass('element-invisible');
                            $queue.removeClass('element-invisible');
                            $statusBar.removeClass('element-invisible');
                            $progress.hide(); $info.show();
                            $upload.text(lang.uploadStart);
                            uploader.refresh();
                            break;

                        /* 上传中 */
                        case 'uploading':
                            $progress.show(); $info.hide();
                            $upload.text(lang.uploadPause);
                            break;

                        /* 暂停上传 */
                        case 'paused':
                            $progress.show(); $info.hide();
                            $upload.text(lang.uploadContinue);
                            break;

                        case 'confirm':
                            $progress.show(); $info.hide();
                            $upload.text(lang.uploadStart);

                            stats = uploader.getStats();
                            if (stats.successNum && !stats.uploadFailNum) {
                                setState('finish');
                                return;
                            }
                            break;

                        case 'finish':
                            $progress.hide(); $info.show();
                            if (stats.uploadFailNum) {
                                $upload.text(lang.uploadRetry);
                            } else {
                                $upload.text(lang.uploadStart);
                            }
                            break;
                    }

                    state = val;
                    updateStatus();

                }

                if (!_this.getQueueCount()) {
                    $upload.addClass('disabled')
                } else {
                    $upload.removeClass('disabled')
                }

            }

            function updateStatus() {
                var text = '', stats;

                if (state === 'ready') {
                    text = lang.updateStatusReady.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize));
                } else if (state === 'confirm') {
                    stats = uploader.getStats();
                    if (stats.uploadFailNum) {
                        text = lang.updateStatusConfirm.replace('_', stats.successNum).replace('_', stats.successNum);
                    }
                } else {
                    stats = uploader.getStats();
                    text = lang.updateStatusFinish.replace('_', fileCount).
                        replace('_KB', WebUploader.formatSize(fileSize)).
                        replace('_', stats.successNum);

                    if (stats.uploadFailNum) {
                        text += lang.updateStatusError.replace('_', stats.uploadFailNum);
                    }
                }

                $info.html(text);
            }

            uploader.on('fileQueued', function (file) {
                fileCount++;
                fileSize += file.size;

                if (fileCount === 1) {
                    $placeHolder.addClass('element-invisible');
                    $statusBar.show();
                }

                addFile(file);
            });

            uploader.on('fileDequeued', function (file) {
                fileCount--;
                fileSize -= file.size;

                removeFile(file);
                updateTotalProgress();
            });

            uploader.on('filesQueued', function (file) {
                if (!uploader.isInProgress() && (state == 'pedding' || state == 'finish' || state == 'confirm' || state == 'ready')) {
                    setState('ready');
                }
                updateTotalProgress();
            });

            uploader.on('all', function (type, files) {
                switch (type) {
                    case 'uploadFinished':
                        setState('confirm', files);
                        break;
                    case 'startUpload':
                        /* 添加额外的GET参数 */
                        var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',
                            url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + 'encode=utf-8&' + params);
                        uploader.option('server', url);
                        setState('uploading', files);
                        break;
                    case 'stopUpload':
                        setState('paused', files);
                        break;
                }
            });

            uploader.on('uploadBeforeSend', function (file, data, header) {
                //这里可以通过data对象添加POST参数
                header['X_Requested_With'] = 'XMLHttpRequest';
                // HaoChuan9421
                if(editor.options.headers && Object.prototype.toString.apply(editor.options.headers) === "[object Object]"){
                    for(var key in editor.options.headers){
                        header[key] = editor.options.headers[key]
                    }
                }
            });

            uploader.on('uploadProgress', function (file, percentage) {
                var $li = $('#' + file.id),
                    $percent = $li.find('.progress span');

                $percent.css('width', percentage * 100 + '%');
                percentages[ file.id ][ 1 ] = percentage;
                updateTotalProgress();
            });

            uploader.on('uploadSuccess', function (file, ret) {
                var $file = $('#' + file.id);
                try {
                    var responseText = (ret._raw || ret),
                        json = utils.str2json(responseText);
                    if (json.state == 'SUCCESS') {
                        _this.fileList.push(json);
                        $file.append('<span class="success"></span>');
                    } else {
                        $file.find('.error').text(json.state).show();
                    }
                } catch (e) {
                    $file.find('.error').text(lang.errorServerUpload).show();
                }
            });

            uploader.on('uploadError', function (file, code) {
            });
            uploader.on('error', function (code, file) {
                if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') {
                    addFile(file);
                }
            });
            uploader.on('uploadComplete', function (file, ret) {
            });

            $upload.on('click', function () {
                if ($(this).hasClass('disabled')) {
                    return false;
                }

                if (state === 'ready') {
                    uploader.upload();
                } else if (state === 'paused') {
                    uploader.upload();
                } else if (state === 'uploading') {
                    uploader.stop();
                }
            });

            $upload.addClass('state-' + state);
            updateTotalProgress();
        },
        getQueueCount: function () {
            var file, i, status, readyFile = 0, files = this.uploader.getFiles();
            for (i = 0; file = files[i++]; ) {
                status = file.getStatus();
                if (status == 'queued' || status == 'uploading' || status == 'progress') readyFile++;
            }
            return readyFile;
        },
        getInsertList: function () {
            var i, link, data, list = [],
                prefix = editor.getOpt('fileUrlPrefix');
            for (i = 0; i < this.fileList.length; i++) {
                data = this.fileList[i];
                link = data.url;
                list.push({
                    title: data.original || link.substr(link.lastIndexOf('/') + 1),
                    url: prefix + link
                });
            }
            return list;
        }
    };


    /* 在线附件 */
    function OnlineFile(target) {
        this.container = utils.isString(target) ? document.getElementById(target) : target;
        this.init();
    }
    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 _this = this;

            /* 滚动拉取图片 */
            domUtils.on($G('fileList'), 'scroll', function(e){
                var panel = this;
                if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {
                    _this.getFileData();
                }
            });
            /* 选中图片 */
            domUtils.on(this.list, 'click', function (e) {
                var target = e.target || e.srcElement,
                    li = target.parentNode;

                if (li.tagName.toLowerCase() == 'li') {
                    if (domUtils.hasClass(li, 'selected')) {
                        domUtils.removeClasses(li, 'selected');
                    } else {
                        domUtils.addClass(li, 'selected');
                    }
                }
            });
        },
        /* 初始化第一次的数据 */
        initData: function () {

            /* 拉取数据需要使用的值 */
            this.state = 0;
            this.listSize = editor.getOpt('fileManagerListSize');
            this.listIndex = 0;
            this.listEnd = false;

            /* 第一次拉取数据 */
            this.getFileData();
        },
        /* 向后台拉取图片列表数据 */
        getFileData: function () {
            var _this = this;

            if(!_this.listEnd && !this.isLoadingData) {
                this.isLoadingData = true;
                ajax.request(editor.getActionUrl(editor.getOpt('fileManagerActionName')), {
                    timeout: 100000,
                    data: utils.extend({
                            start: this.listIndex,
                            size: this.listSize
                        }, editor.queryCommandValue('serverparam')),
                    method: 'get',
                    onsuccess: function (r) {
                        try {
                            var json = eval('(' + r.responseText + ')');
                            if (json.state == 'SUCCESS') {
                                _this.pushData(json.list);
                                _this.listIndex = parseInt(json.start) + parseInt(json.list.length);
                                if(_this.listIndex >= json.total) {
                                    _this.listEnd = true;
                                }
                                _this.isLoadingData = false;
                            }
                        } 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 = true;
                                _this.isLoadingData = false;
                            }
                        }
                    },
                    onerror: function () {
                        _this.isLoadingData = false;
                    }
                });
            }
        },
        /* 添加图片到列表界面上 */
        pushData: function (list) {
            var i, item, img, filetype, preview, icon, _this = this,
                urlPrefix = editor.getOpt('fileManagerUrlPrefix');
            for (i = 0; i < list.length; i++) {
                if(list[i] && list[i].url) {
                    item = document.createElement('li');
                    icon = document.createElement('span');
                    filetype = list[i].url.substr(list[i].url.lastIndexOf('.') + 1);

                    if ( "png|jpg|jpeg|gif|bmp".indexOf(filetype) != -1 ) {
                        preview = document.createElement('img');
                        domUtils.on(preview, 'load', (function(image){
                            return function(){
                                _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);
                            };
                        })(preview));
                        preview.width = 113;
                        preview.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=':'&noCache=') + (+new Date()).toString(36) );
                    } else {
                        var ic = document.createElement('i'),
                            textSpan = document.createElement('span');
                        textSpan.innerHTML = list[i].url.substr(list[i].url.lastIndexOf('/') + 1);
                        preview = document.createElement('div');
                        preview.appendChild(ic);
                        preview.appendChild(textSpan);
                        domUtils.addClass(preview, 'file-wrapper');
                        domUtils.addClass(textSpan, 'file-title');
                        domUtils.addClass(ic, 'file-type-' + filetype);
                        domUtils.addClass(ic, 'file-preview');
                    }
                    domUtils.addClass(icon, 'icon');
                    item.setAttribute('data-url', urlPrefix + list[i].url);
                    if (list[i].original) {
                        item.setAttribute('data-title', list[i].original);
                    }

                    item.appendChild(preview);
                    item.appendChild(icon);
                    this.list.insertBefore(item, this.clearFloat);
                }
            }
        },
        /* 改变图片大小 */
        scale: function (img, w, h, type) {
            var ow = img.width,
                oh = img.height;

            if (type == 'justify') {
                if (ow >= oh) {
                    img.width = w;
                    img.height = h * oh / ow;
                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
                } else {
                    img.width = w * ow / oh;
                    img.height = h;
                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
                }
            } else {
                if (ow >= oh) {
                    img.width = w * ow / oh;
                    img.height = h;
                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
                } else {
                    img.width = w;
                    img.height = h * oh / ow;
                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
                }
            }
        },
        getInsertList: function () {
            var i, lis = this.list.children, list = [];
            for (i = 0; i < lis.length; i++) {
                if (domUtils.hasClass(lis[i], 'selected')) {
                    var url = lis[i].getAttribute('data-url');
                    var title = lis[i].getAttribute('data-title') || url.substr(url.lastIndexOf('/') + 1);
                    list.push({
                        title: title,
                        url: url
                    });
                }
            }
            return list;
        }
    };


})();

================================================
FILE: public/lib/UEditor/dialogs/background/background.css
================================================
.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 white;}

.bgarea{margin: 10px;padding: 5px;height: 84%;border: 1px solid #A8A297;}
.content div{margin: 10px 0 10px 5px;}
.content .iptradio{margin: 0px 5px 5px 0px;}
.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;
}

================================================
FILE: public/lib/UEditor/dialogs/background/background.html
================================================
<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <script type="text/javascript" src="../internal.js"></script>
    <link rel="stylesheet" type="text/css" href="background.css">
</head>
<body>
    <div id="bg_container" class="wrapper">
        <div id="tabHeads" class="tabhead">
            <span class="focus" data-content-id="normal"><var id="lang_background_normal"></var></span>
            <span class="" data-content-id="imgManager"><var id="lang_background_local"></var></span>
        </div>
        <div id="tabBodys" class="tabbody">
            <div id="normal" class="panel focus">
                <fieldset class="bgarea">
                    <legend><var id="lang_background_set"></var></legend>
                    <div class="content">
                        <div>
                            <label><input id="nocolorRadio" class="iptradio" type="radio" name="t" value="none" checked="checked"><var id="lang_background_none"></var></label>
                            <label><input id="coloredRadio" class="iptradio" type="radio" name="t" value="color"><var id="lang_background_colored"></var></label>
                        </div>
                        <div class="wrapcolor pl">
                            <div class="color">
                                <var id="lang_background_color"></var>:
                            </div>
                            <div id="colorPicker"></div>
                            <div class="clear"></div>
                        </div>
                        <div class="wrapcolor pl">
                            <label><var id="lang_background_netimg"></var>:</label><input class="txt" type="text" id="url">
                        </div>
                        <div id="alignment" class="alignment">
                            <var id="lang_background_align"></var>:<select id="repeatType">
                                <option value="center"></option>
                                <option value="repeat-x"></option>
                                <option value="repeat-y"></option>
                                <option value="repeat"></option>
                                <option value="self"></option>
                            </select>
                        </div>
                        <div id="custom" >
                            <var id="lang_background_position"></var>:x:<input type="text" size="1" id="x" maxlength="4" value="0">px&nbsp;&nbsp;y:<input type="text" size="1" id="y" maxlength="4" value="0">px
                        </div>
                    </div>
                </fieldset>

            </div>
            <div id="imgManager" class="panel">
                <div id="imageList" style=""></div>
            </div>
        </div>
    </div>
    <script type="text/javascript" src="background.js"></script>
</body>
</html>


================================================
FILE: public/lib/UEditor/dialogs/background/background.js
================================================
(function () {

    var onlineImage,
        backupStyle = editor.queryCommandValue('background');

    window.onload = function () {
        initTabs();
        initColorSelector();
    };

    /* 初始化tab标签 */
    function initTabs(){
        var tabs = $G('tabHeads').children;
        for (var i = 0; i < tabs.length; i++) {
            domUtils.on(tabs[i], "click", function (e) {
                var target = e.target || e.srcElement;
                for (var j = 0; j < tabs.length; j++) {
                    if(tabs[j] == target){
                        tabs[j].className = "focus";
                        var contentId = tabs[j].getAttribute('data-content-id');
                        $G(contentId).style.display = "block";
                        if(contentId == 'imgManager') {
                            initImagePanel();
                        }
                    }else {
                        tabs[j].className = "";
                        $G(tabs[j].getAttribute('data-content-id')).style.display = "none";
                    }
                }
            });
        }
    }

    /* 初始化颜色设置 */
    function initColorSelector () {
        var obj = editor.queryCommandValue('background');
        if (obj) {
            var color = obj['background-color'],
                repeat = obj['background-repeat'] || 'repeat',
                image = obj['background-image'] || '',
                position = obj['background-position'] || 'center center',
                pos = position.split(' '),
                x = parseInt(pos[0]) || 0,
                y = parseInt(pos[1]) || 0;

            if(repeat == 'no-repeat' && (x || y)) repeat = 'self';

            image = image.match(/url[\s]*\(([^\)]*)\)/);
            image = image ? image[1]:'';
            updateFormState('colored', color, image, repeat, x, y);
        } else {
            updateFormState();
        }

        var updateHandler = function () {
            updateFormState();
            updateBackground();
        }
        domUtils.on($G('nocolorRadio'), 'click', updateBackground);
        domUtils.on($G('coloredRadio'), 'click', updateHandler);
        domUtils.on($G('url'), 'keyup', function(){
            if($G('url').value && $G('alignment').style.display == "none") {
                utils.each($G('repeatType').children, function(item){
                    item.selected = ('repeat' == item.getAttribute('value') ? 'selected':false);
                });
            }
            updateHandler();
        });
        domUtils.on($G('repeatType'), 'change', updateHandler);
        domUtils.on($G('x'), 'keyup', updateBackground);
        domUtils.on($G('y'), 'keyup', updateBackground);

        initColorPicker();
    }

    /* 初始化颜色选择器 */
    function initColorPicker() {
        var me = editor,
            cp = $G("colorPicker");

        /* 生成颜色选择器ui对象 */
        var popup = new UE.ui.Popup({
            content: new UE.ui.ColorPicker({
                noColorText: me.getLang("clearColor"),
                editor: me,
                onpickcolor: function (t, color) {
                    updateFormState('colored', color);
                    updateBackground();
                    UE.ui.Popup.postHide();
                },
                onpicknocolor: function (t, color) {
                    updateFormState('colored', 'transparent');
                    updateBackground();
                    UE.ui.Popup.postHide();
                }
            }),
            editor: me,
            onhide: function () {
            }
        });

        /* 设置颜色选择器 */
        domUtils.on(cp, "click", function () {
            popup.showAnchor(this);
        });
        domUtils.on(document, 'mousedown', function (evt) {
            var el = evt.target || evt.srcElement;
            UE.ui.Popup.postHide(el);
        });
        domUtils.on(window, 'scroll', function () {
            UE.ui.Popup.postHide();
        });
    }

    /* 初始化在线图片列表 */
    function initImagePanel() {
        onlineImage = onlineImage || new OnlineImage('imageList');
    }

    /* 更新背景色设置面板 */
    function updateFormState (radio, color, url, align, x, y) {
        var nocolorRadio = $G('nocolorRadio'),
            coloredRadio = $G('coloredRadio');

        if(radio) {
            nocolorRadio.checked = (radio == 'colored' ? false:'checked');
            coloredRadio.checked = (radio == 'colored' ? 'checked':false);
        }
        if(color) {
            domUtils.setStyle($G("colorPicker"), "background-color", color);
        }

        if(url && /^\//.test(url)) {
            var a = document.createElement('a');
            a.href = url;
            browser.ie && (a.href = a.href);
            url = browser.ie ? a.href:(a.protocol + '//' + a.host + a.pathname + a.search + a.hash);
        }

        if(url || url === '') {
            $G('url').value = url;
        }
        if(align) {
            utils.each($G('repeatType').children, function(item){
                item.selected = (align == item.getAttribute('value') ? 'selected':false);
            });
        }
        if(x || y) {
            $G('x').value = parseInt(x) || 0;
            $G('y').value = parseInt(y) || 0;
        }

        $G('alignment').style.display = coloredRadio.checked && $G('url').value ? '':'none';
        $G('custom').style.display = coloredRadio.checked && $G('url').value && $G('repeatType').value == 'self' ? '':'none';
    }

    /* 更新背景颜色 */
    function updateBackground () {
        if ($G('coloredRadio').checked) {
            var color = domUtils.getStyle($G("colorPicker"), "background-color"),
                bgimg = $G("url").value,
                align = $G("repeatType").value,
                backgroundObj = {
                    "background-repeat": "no-repeat",
                    "background-position": "center center"
                };

            if (color) backgroundObj["background-color"] = color;
            if (bgimg) backgroundObj["background-image"] = 'url(' + bgimg + ')';
            if (align == 'self') {
                backgroundObj["background-position"] = $G("x").value + "px " + $G("y").value + "px";
            } else if (align == 'repeat-x' || align == 'repeat-y' || align == 'repeat') {
                backgroundObj["background-repeat"] = align;
            }

            editor.execCommand('background', backgroundObj);
        } else {
            editor.execCommand('background', null);
        }
    }


    /* 在线图片 */
    function OnlineImage(target) {
        this.container = utils.isString(target) ? document.getElementById(target) : target;
        this.init();
    }
    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 _this = this;

            /* 滚动拉取图片 */
            domUtils.on($G('imageList'), 'scroll', function(e){
                var panel = this;
                if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {
                    _this.getImageData();
                }
            });
            /* 选中图片 */
            domUtils.on(this.container, 'click', function (e) {
                var target = e.target || e.srcElement,
                    li = target.parentNode,
                    nodes = $G('imageListUl').childNodes;

                if (li.tagName.toLowerCase() == 'li') {
                    updateFormState('nocolor', null, '');
                    for (var i = 0, node; node = nodes[i++];) {
                        if (node == li && !domUtils.hasClass(node, 'selected')) {
                            domUtils.addClass(node, 'selected');
                            updateFormState('colored', null, li.firstChild.getAttribute("_src"), 'repeat');
                        } else {
                            domUtils.removeClasses(node, 'selected');
                        }
                    }
                    updateBackground();
                }
            });
        },
        /* 初始化第一次的数据 */
        initData: function () {

            /* 拉取数据需要使用的值 */
            this.state = 0;
            this.listSize = editor.getOpt('imageManagerListSize');
            this.listIndex = 0;
            this.listEnd = false;

            /* 第一次拉取数据 */
            this.getImageData();
        },
        /* 重置界面 */
        reset: function() {
            this.initContainer();
            this.initData();
        },
        /* 向后台拉取图片列表数据 */
        getImageData: function () {
            var _this = this;

            if(!_this.listEnd && !this.isLoadingData) {
                this.isLoadingData = true;
                var url = editor.getActionUrl(editor.getOpt('imageManagerActionName')),
                    isJsonp = utils.isCrossDomainUrl(url);
                ajax.request(url, {
                    'timeout': 100000,
                    'dataType': isJsonp ? 'jsonp':'',
                    '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 + ')');
                            if (json.state == 'SUCCESS') {
                                _this.pushData(json.list);
                                _this.listIndex = parseInt(json.start) + parseInt(json.list.length);
                                if(_this.listIndex >= json.total) {
                                    _this.listEnd = true;
                                }
                                _this.isLoadingData = false;
                            }
                        } 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 = true;
                                _this.isLoadingData = false;
                            }
                        }
                    },
                    'onerror': function () {
                        _this.isLoadingData = false;
                    }
                });
            }
        },
        /* 添加图片到列表界面上 */
        pushData: function (list) {
            var i, item, img, icon, _this = this,
                urlPrefix = editor.getOpt('imageManagerUrlPrefix');
            for (i = 0; i < list.length; i++) {
                if(list[i] && list[i].url) {
                    item = document.createElement('li');
                    img = document.createElement('img');
                    icon = document.createElement('span');

                    domUtils.on(img, 'load', (function(image){
                        return function(){
                            _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);
                        }
                    })(img));
                    img.width = 113;
                    img.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=':'&noCache=') + (+new Date()).toString(36) );
                    img.setAttribute('_src', urlPrefix + list[i].url);
                    domUtils.addClass(icon, 'icon');

                    item.appendChild(img);
                    item.appendChild(icon);
                    this.list.insertBefore(item, this.clearFloat);
                }
            }
        },
        /* 改变图片大小 */
        scale: function (img, w, h, type) {
            var ow = img.width,
                oh = img.height;

            if (type == 'justify') {
                if (ow >= oh) {
                    img.width = w;
                    img.height = h * oh / ow;
                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
                } else {
                    img.width = w * ow / oh;
                    img.height = h;
                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
                }
            } else {
                if (ow >= oh) {
                    img.width = w * ow / oh;
                    img.height = h;
                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
                } else {
                    img.width = w;
                    img.height = h * oh / ow;
                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
                }
            }
        },
        getInsertList: function () {
            var i, lis = this.list.children, list = [], align = getAlign();
            for (i = 0; i < lis.length; i++) {
                if (domUtils.hasClass(lis[i], 'selected')) {
                    var img = lis[i].firstChild,
                        src = img.getAttribute('_src');
                    list.push({
                        src: src,
                        _src: src,
                        floatStyle: align
                    });
                }

            }
            return list;
        }
    };

    dialog.onok = function () {
        updateBackground();
        editor.fireEvent('saveScene');
    };
    dialog.oncancel = function () {
        editor.execCommand('background', backupStyle);
    };

})();

================================================
FILE: public/lib/UEditor/dialogs/charts/chart.config.js
================================================
/*
 * 图表配置文件
 * */


//不同类型的配置
var typeConfig = [
    {
        chart: {
            type: 'line'
        },
        plotOptions: {
            line: {
                dataLabels: {
                    enabled: false
                },
                enableMouseTracking: true
            }
        }
    }, {
        chart: {
            type: 'line'
        },
        plotOptions: {
            line: {
                dataLabels: {
                    enabled: true
                },
                enableMouseTracking: false
            }
        }
    }, {
        chart: {
            type: 'area'
        }
    }, {
        chart: {
            type: 'bar'
        }
    }, {
        chart: {
            type: 'column'
        }
    }, {
        chart: {
            plotBackgroundColor: null,
            plotBorderWidth: null,
            plotShadow: false
        },
        plotOptions: {
            pie: {
                allowPointSelect: true,
                cursor: 'pointer',
                dataLabels: {
                    enabled: true,
                    color: '#000000',
                    connectorColor: '#000000',
                    formatter: function() {
                        return '<b>'+ this.point.name +'</b>: '+ ( Math.round( this.point.percentage*100 ) / 100 ) +' %';
                    }
                }
            }
        }
    }
];


================================================
FILE: public/lib/UEditor/dialogs/charts/charts.css
================================================
html, body {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    overflow-x: hidden;
}

.main {
    width: 100%;
    overflow: hidden;
}

.table-view {
    height: 100%;
    float: left;
    margin: 20px;
    width: 40%;
}

.table-view .table-container {
    width: 100%;
    margin-bottom: 50px;
    overflow: scroll;
}

.table-view th {
    padding: 5px 10px;
    background-color: #F7F7F7;
}

.table-view td {
    width: 50px;
    text-align: center;
    padding:0;
}

.table-container input {
    width: 40px;
    padding: 5px;
    border: none;
    outline: none;
}

.table-view caption {
    font-size: 18px;
    text-align: left;
}

.charts-view {
    /*margin-left: 49%!important;*/
    width: 50%;
    margin-left: 49%;
    height: 400px;
}

.charts-container {
    border-left: 1px solid #c3c3c3;
}

.charts-format fieldset {
    padding-left: 20px;
    margin-bottom: 50px;
}

.charts-format legend {
    padding-left: 10px;
    padding-right: 10px;
}

.format-item-container {
    padding: 20px;
}

.format-item-container label {
    display: block;
    margin: 10px 0;
}

.charts-format .data-item {
    border: 1px solid black;
    outline: none;
    padding: 2px 3px;
}

/* 图表类型 */

.charts-type {
    margin-top: 50px;
    height: 300px;
}

.scroll-view {
    border: 1px solid #c3c3c3;
    border-left: none;
    border-right: none;
    overflow: hidden;
}

.scroll-container {
    margin: 20px;
    width: 100%;
    overflow: hidden;
}

.scroll-bed {
    width: 10000px;
    _margin-top: 20px;
    -webkit-transition: margin-left .5s ease;
    -moz-transition: margin-left .5s ease;
    transition: margin-left .5s ease;
}

.view-box {
    display: inline-block;
    *display: inline;
    *zoom: 1;
    margin-right: 20px;
    border: 2px solid white;
    line-height: 0;
    overflow: hidden;
    cursor: pointer;
}

.view-box img {
    border: 1px solid #cecece;
}

.view-box.selected {
    border-color: #7274A7;
}

.button-container {
    margin-bottom: 20px;
    text-align: center;
}

.button-container a {
    display: inline-block;
    width: 100px;
    height: 25px;
    line-height: 25px;
    border: 1px solid #c2ccd1;
    margin-right: 30px;
    text-decoration: none;
    color: black;
    -webkit-border-radius: 2px;
    -moz-border-radius: 2px;
    border-radius: 2px;
}

.button-container a:HOVER {
    background: #fcfcfc;
}

.button-container a:ACTIVE {
    border-top-color: #c2ccd1;
    box-shadow:inset 0 5px 4px -4px rgba(49, 49, 64, 0.1);
}

.edui-charts-not-data {
    height: 100px;
    line-height: 100px;
    text-align: center;
}

================================================
FILE: public/lib/UEditor/dialogs/charts/charts.html
================================================
<!DOCTYPE html>
<html>
    <head>
        <title>chart</title>
        <meta chartset="utf-8">
        <link rel="stylesheet" type="text/css" href="charts.css">
        <script type="text/javascript" src="../internal.js"></script>
    </head>
    <body>
        <div class="main">
            <div class="table-view">
                <h3><var id="lang_data_source"></var></h3>
                <div id="tableContainer" class="table-container"></div>
                <h3><var id="lang_chart_format"></var></h3>
                <form name="data-form">
                    <div class="charts-format">
                        <fieldset>
                            <legend><var id="lang_data_align"></var></legend>
                            <div class="format-item-container">
                                <label>
                                    <input type="radio" class="format-ctrl not-pie-item" name="charts-format" value="1" checked="checked">
                                    <var id="lang_chart_align_same"></var>
                                </label>
                                <label>
                                    <input type="radio" class="format-ctrl not-pie-item" name="charts-format" value="-1">
                                    <var id="lang_chart_align_reverse"></var>
                                </label>
                                <br>
                            </div>
                        </fieldset>
                        <fieldset>
                            <legend><var id="lang_chart_title"></var></legend>
                            <div class="format-item-container">
                                <label>
                                    <var id="lang_chart_main_title"></var><input type="text" name="title" class="data-item">
                                </label>
                                <label>
                                    <var id="lang_chart_sub_title"></var><input type="text" name="sub-title" class="data-item not-pie-item">
                                </label>
                                <label>
                                    <var id="lang_chart_x_title"></var><input type="text" name="x-title" class="data-item not-pie-item">
                                </label>
                                <label>
                                    <var id="lang_chart_y_title"></var><input type="text" name="y-title" class="data-item not-pie-item">
                                </label>
                            </div>
                        </fieldset>
                        <fieldset>
                            <legend><var id="lang_chart_tip"></var></legend>
                            <div class="format-item-container">
                                <label>
                                    <var id="lang_cahrt_tip_prefix"></var>
                                    <input type="text" id="tipInput" name="tip" class="data-item" disabled="disabled">
                                </label>
                                <p><var id="lang_cahrt_tip_description"></var></p>
                            </div>
                        </fieldset>
                        <fieldset>
                            <legend><var id="lang_chart_data_unit"></var></legend>
                            <div class="format-item-container">
                                <label><var id="lang_chart_data_unit_title"></var><input type="text" name="unit" class="data-item"></label>
                                <p><var id="lang_chart_data_unit_description"></var></p>
                            </div>
                        </fieldset>
                    </div>
                </form>
            </div>
            <div class="charts-view">
                <div id="chartsContainer" class="charts-container"></div>
                <div id="chartsType" class="charts-type">
                    <h3><var id="lang_chart_type"></var></h3>
                    <div class="scroll-view">
                        <div class="scroll-container">
                            <div id="scrollBed" class="scroll-bed"></div>
                        </div>
                        <div id="buttonContainer" class="button-container">
                            <a href="#" data-title="prev"><var id="lang_prev_btn"></var></a>
                            <a href="#" data-title="next"><var id="lang_next_btn"></var></a>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <script src="../../third-party/jquery-1.10.2.min.js"></script>
        <script src="../../third-party/highcharts/highcharts.js"></script>
        <script src="chart.config.js"></script>
        <script src="charts.js"></script>
    </body>
</html>

================================================
FILE: public/lib/UEditor/dialogs/charts/charts.js
================================================
/*
 * 图片转换对话框脚本
 **/

var tableData = [],
    //编辑器页面table
    editorTable = null,
    chartsConfig = window.typeConfig,
    resizeTimer = null,
    //初始默认图表类型
    currentChartType = 0;

window.onload = function () {

    editorTable = domUtils.findParentByTagName( editor.selection.getRange().startContainer, 'table', true);

    //未找到表格, 显示错误页面
    if ( !editorTable ) {
        document.body.innerHTML = "<div class='edui-charts-not-data'>未找到数据</div>";
        return;
    }

    //初始化图表类型选择
    initChartsTypeView();
    renderTable( editorTable );
    initEvent();
    initUserConfig( editorTable.getAttribute( "data-chart" ) );
    $( "#scrollBed .view-box:eq("+ currentChartType +")" ).trigger( "click" );
    updateViewType( currentChartType );

    dialog.addListener( "resize", function () {

        if ( resizeTimer != null ) {
            window.clearTimeout( resizeTimer );
        }

        resizeTimer = window.setTimeout( function () {

            resizeTimer = null;

            renderCharts();

        }, 500 );

    } );

};

function initChartsTypeView () {

    var contents = [];

    for ( var i = 0, len = chartsConfig.length; i<len; i++ ) {

        contents.push( '<div class="view-box" data-chart-type="'+ i +'"><img width="300" src="images/charts'+ i +'.png"></div>' );

    }

    $( "#scrollBed" ).html( contents.join( "" ) );

}

//渲染table, 以便用户修改数据
function renderTable ( table ) {

    var tableHtml = [];

    //构造数据
    for ( var i = 0, row; row = table.rows[ i ]; i++ ) {

        tableData[ i ] = [];
        tableHtml[ i ] = [];

        for ( var j = 0, cell; cell = row.cells[ j ]; j++ ) {

            var value = getCellValue( cell );

            if ( i > 0 && j > 0 ) {
                value = +value;
            }

            if ( i === 0 || j === 0 ) {
                tableHtml[ i ].push( '<th>'+ value +'</th>' );
            } else {
                tableHtml[ i ].push( '<td><input type="text" class="data-item" value="'+ value +'"></td>' );
            }

            tableData[ i ][ j ] = value;

        }

        tableHtml[ i ] = tableHtml[ i ].join( "" );

    }

    //draw 表格
    $( "#tableContainer" ).html( '<table id="showTable" border="1"><tbody><tr>'+ tableHtml.join( "</tr><tr>" ) +'</tr></tbody></table>' );

}

/*
 * 根据表格已有的图表属性初始化当前图表属性
 */
function initUserConfig ( config ) {

    var parsedConfig = {};

    if ( !config ) {
        return;
    }

    config = config.split( ";" );

    $.each( config, function ( index, item ) {

        item = item.split( ":" );
        parsedConfig[ item[ 0 ] ] = item[ 1 ];

    } );

    setUserConfig( parsedConfig );

}

function initEvent () {

    var cacheValue = null,
        //图表类型数
        typeViewCount = chartsConfig.length- 1,
        $chartsTypeViewBox = $( '#scrollBed .view-box' );

    $( ".charts-format" ).delegate( ".format-ctrl", "change", function () {

        renderCharts();

    } )

    $( ".table-view" ).delegate( ".data-item", "focus", function () {

        cacheValue = this.value;

    } ).delegate( ".data-item", "blur", function () {

        if ( this.value !== cacheValue ) {
            renderCharts();
        }

        cacheValue = null;

    } );

    $( "#buttonContainer" ).delegate( "a", "click", function (e) {

        e.preventDefault();

        if ( this.getAttribute( "data-title" ) === 'prev' ) {

            if ( currentChartType > 0 ) {
                currentChartType--;
                updateViewType( currentChartType );
            }

        } else {

            if ( currentChartType < typeViewCount ) {
                currentChartType++;
                updateViewType( currentChartType );
            }

        }

    } );

    //图表类型变化
    $( '#scrollBed' ).delegate( ".view-box", "click", function (e) {

        var index = $( this ).attr( "data-chart-type" );
        $chartsTypeViewBox.removeClass( "selected" );
        $( $chartsTypeViewBox[ index ] ).addClass( "selected" );

        currentChartType = index | 0;

        //饼图, 禁用部分配置
        if ( currentChartType === chartsConfig.length - 1 ) {

            disableNotPieConfig();

        //启用完整配置
        } else {

            enableNotPieConfig();

        }

        renderCharts();

    } );

}

function renderCharts () {

    var data = collectData();

    $('#chartsContainer').highcharts( $.extend( {}, chartsConfig[ currentChartType ], {

        credits: {
            enabled: false
        },
        exporting: {
            enabled: false
        },
        title: {
            text: data.title,
            x: -20 //center
        },
        subtitle: {
            text: data.subTitle,
            x: -20
        },
        xAxis: {
            title: {
                text: data.xTitle
            },
            categories: data.categories
        },
        yAxis: {
            title: {
                text: data.yTitle
            },
            plotLines: [{
                value: 0,
                width: 1,
                color: '#808080'
            }]
        },
        tooltip: {
            enabled: true,
            valueSuffix: data.suffix
        },
        legend: {
            layout: 'vertical',
            align: 'right',
            verticalAlign: 'middle',
            borderWidth: 1
        },
        series: data.series

    } ));

}

function updateViewType ( index ) {

    $( "#scrollBed" ).css( 'marginLeft', -index*324+'px' );

}

function collectData () {

    var form = document.forms[ 'data-form' ],
        data = null;

    if ( currentChartType !== chartsConfig.length - 1 ) {

        data = getSeriesAndCategories();
        $.extend( data, getUserConfig() );

    //饼图数据格式
    } else {
        data = getSeriesForPieChart();
        data.title = form[ 'title' ].value;
        data.suffix = form[ 'unit' ].value;
    }

    return data;

}

/**
 * 获取用户配置信息
 */
function getUserConfig () {

    var form = document.forms[ 'data-form' ],
        info = {
            title: form[ 'title' ].value,
            subTitle: form[ 'sub-title' ].value,
            xTitle: form[ 'x-title' ].value,
            yTitle: form[ 'y-title' ].value,
            suffix: form[ 'unit' ].value,
            //数据对齐方式
            tableDataFormat: getTableDataFormat (),
            //饼图提示文字
            tip: $( "#tipInput" ).val()
        };

    return info;

}

function setUserConfig ( config ) {

    var form = document.forms[ 'data-form' ];

    config.title && ( form[ 'title' ].value = config.title );
    config.subTitle && ( form[ 'sub-title' ].value = config.subTitle );
    config.xTitle && ( form[ 'x-title' ].value = config.xTitle );
    config.yTitle && ( form[ 'y-title' ].value = config.yTitle );
    config.suffix && ( form[ 'unit' ].value = config.suffix );
    config.dataFormat == "-1" && ( form[ 'charts-format' ][ 1 ].checked = true );
    config.tip && ( form[ 'tip' ].value = config.tip );
    currentChartType = config.chartType || 0;

}

function getSeriesAndCategories () {

    var form = document.forms[ 'data-form' ],
        series = [],
        categories = [],
        tmp = [],
        tableData = getTableData();

    //反转数据
    if ( getTableDataFormat() === "-1" ) {

        for ( var i = 0, len = tableData.length; i < len; i++ ) {

            for ( var j = 0, jlen = tableData[ i ].length; j < jlen; j++ ) {

                if ( !tmp[ j ] ) {
                    tmp[ j ] = [];
                }

                tmp[ j ][ i ] = tableData[ i ][ j ];

            }

        }

        tableData = tmp;

    }

    categories = tableData[0].slice( 1 );

    for ( var i = 1, data; data = tableData[ i ]; i++ ) {

        series.push( {
            name: data[ 0 ],
            data: data.slice( 1 )
        } );

    }

    return {
        series: series,
        categories: categories
    };

}

/*
 * 获取数据源数据对齐方式
 */
function getTableDataFormat () {

    var form = document.forms[ 'data-form' ],
        items = form['charts-format'];

    return items[ 0 ].checked ? items[ 0 ].value : items[ 1 ].value;

}

/*
 * 禁用非饼图类型的配置项
 */
function disableNotPieConfig() {

    updateConfigItem( 'disable' );

}

/*
 * 启用非饼图类型的配置项
 */
function enableNotPieConfig() {

    updateConfigItem( 'enable' );

}

function updateConfigItem ( value ) {

    var table = $( "#showTable" )[ 0 ],
        isDisable = value === 'disable' ? true : false;

    //table中的input处理
    for ( var i = 2 , row; row = table.rows[ i ]; i++ ) {

        for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) {

            $( "input", cell ).attr( "disabled", isDisable );

        }

    }

    //其他项处理
    $( "input.not-pie-item" ).attr( "disabled", isDisable );
    $( "#tipInput" ).attr( "disabled", !isDisable )

}

/*
 * 获取饼图数据
 * 饼图的数据只取第一行的
 **/
function getSeriesForPieChart () {

    var series = {
            type: 'pie',
            name: $("#tipInput").val(),
            data: []
        },
        tableData = getTableData();


    for ( var j = 1, jlen = tableData[ 0 ].length; j < jlen; j++ ) {

        var title = tableData[ 0 ][ j ],
            val = tableData[ 1 ][ j ];

        series.data.push( [ title, val ] );

    }

    return {
        series: [ series ]
    };

}

function getTableData () {

    var table = document.getElementById( "showTable" ),
        xCount = table.rows[0].cells.length - 1,
        values = getTableInputValue();

    for ( var i = 0, value; value = values[ i ]; i++ ) {

        tableData[ Math.floor( i / xCount ) + 1 ][ i % xCount + 1 ] = values[ i ];

    }

    return tableData;

}

function getTableInputValue () {

    var table = document.getElementById( "showTable" ),
        inputs = table.getElementsByTagName( "input" ),
        values = [];

    for ( var i = 0, input; input = inputs[ i ]; i++ ) {
        values.push( input.value | 0 );
    }

    return values;

}

function getCellValue ( cell ) {

    var value = utils.trim( ( cell.innerText || cell.textContent || '' ) );

    return value.replace( new RegExp( UE.dom.domUtils.fillChar, 'g' ), '' ).replace( /^\s+|\s+$/g, '' );

}


//dialog确认事件
dialog.onok = function () {

    //收集信息
    var form = document.forms[ 'data-form' ],
        info = getUserConfig();

    //添加图表类型
    info.chartType = currentChartType;

    //同步表格数据到编辑器
    syncTableData();

    //执行图表命令
    editor.execCommand( 'charts', info );

};

/*
 * 同步图表编辑视图的表格数据到编辑器里的原始表格
 */
function syncTableData () {

    var tableData = getTableData();

    for ( var i = 1, row; row = editorTable.rows[ i ]; i++ ) {

        for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) {

            cell.innerHTML = tableData[ i ] [ j ];

        }

    }

}

================================================
FILE: public/lib/UEditor/dialogs/emotion/emotion.css
================================================
.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:#FFFFFF;}
#tabContent div{display: none;width:480px;overflow:hidden;}
#tabIconReview.show{left:17px;display:block;}
.menuFocus{background:#ACCD3C;}
.menuDefault{background:#FFFFFF;}
#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:#FFFFFF;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;}

================================================
FILE: public/lib/UEditor/dialogs/emotion/emotion.html
================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="robots" content="noindex, nofollow"/>
    <script type="text/javascript" src="../internal.js"></script>
    <link rel="stylesheet" type="text/css" href="emotion.css">
</head>
<body>
<div id="tabPanel" class="wrapper">
    <div id="tabHeads" class="tabhead">
        <span><var id="lang_input_choice"></var></span>
        <span><var id="lang_input_Tuzki"></var></span>
        <span><var id="lang_input_lvdouwa"></var></span>
        <span><var id="lang_input_BOBO"></var></span>
        <span><var id="lang_input_babyCat"></var></span>
        <span><var id="lang_input_bubble"></var></span>
        <span><var id="lang_input_youa"></var></span>
    </div>
    <div id="tabBodys" class="tabbody">
        <div id="tab0"></div>
        <div id="tab1"></div>
        <div id="tab2"></div>
        <div id="tab3"></div>
        <div id="tab4"></div>
        <div id="tab5"></div>
        <div id="tab6"></div>
    </div>
</div>
<div id="tabIconReview">
    <img id='faceReview' class='review' src="../../themes/default/images/spacer.gif"/>
</div>
<script type="text/javascript" src="emotion.js"></script>
<script type="text/javascript">
    var emotion = {
        tabNum:7, //切换面板数量
        SmilmgName:{ tab0:['j_00', 84], tab1:['t_00', 40], tab2:['w_00', 52], tab3:['B_00', 63], tab4:['C_00', 20], tab5:['i_f', 50], tab6:['y_00', 40] }, //图片前缀名
        imageFolders:{ tab0:'jx2/', tab1:'tsj/', tab2:'ldw/', tab3:'bobo/', tab4:'babycat/', tab5:'face/', tab6:'youa/'}, //图片对应文件夹路径
        imageCss:{tab0:'jd', tab1:'tsj', tab2:'ldw', tab3:'bb', tab4:'cat', tab5:'pp', tab6:'youa'}, //图片css类名
        imageCssOffset:{tab0:35, tab1:35, tab2:35, tab3:35, tab4:35, tab5:25, tab6:35}, //图片偏移
        SmileyInfor:{
            tab0:['Kiss', 'Love', 'Yeah', '啊!', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '打酱油', '俯卧撑', '气愤', '?', '吻', '怒', '胜利', 'HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '微笑', '亲吻', '调皮', '惊恐', '耍酷', '发火', '害羞', '汗水', '大哭', '', '加油', '困', '你NB', '晕倒', '开心', '偷笑', '大哭', '滴汗', '叹气', '超赞', '??', '飞吻', '天使', '撒花', '生气', '被砸', '吓傻', '随意吐'],
            tab1:['Kiss', 'Love', 'Yeah', '啊!', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '摊手', '睡觉', '瘫坐', '无聊', '星星闪', '旋转', '也不行', '郁闷', '正Music', '抓墙', '撞墙至死', '歪头', '戳眼', '飘过', '互相拍砖', '砍死你', '扔桌子', '少林寺', '什么?', '转头', '我爱牛奶', '我踢', '摇晃', '晕厥', '在笼子里', '震荡'],
            tab2:['大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '我错了', 'money', '气愤', '挑逗', '吻', '怒', '胜利', '委屈', '受伤', '说啥呢?', '闭嘴', '不', '逗你玩儿', '飞吻', '眩晕', '魔法', '我来了', '睡了', '我打', '闭嘴', '打', '打晕了', '刷牙', '爆揍', '炸弹', '倒立', '刮胡子', '邪恶的笑', '不要不要', '爱恋中', '放大仔细看', '偷窥', '超高兴', '晕', '松口气', '我跑', '享受', '修养', '哭', '汗', '啊~', '热烈欢迎', '打酱油', '俯卧撑', '?'],
            tab3:['HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '泪眼', '流泪', '生气', '吐舌', '喜欢', '旋转', '再见', '抓狂', '汗', '鄙视', '拜', '吐血', '嘘', '打人', '蹦跳', '变脸', '扯肉', '吃To', '吃花', '吹泡泡糖', '大变身', '飞天舞', '回眸', '可怜', '猛抽', '泡泡', '苹果', '亲', '', '骚舞', '烧香', '睡', '套娃娃', '捅捅', '舞倒', '西红柿', '爱慕', '摇', '摇摆', '杂耍', '招财', '被殴', '被球闷', '大惊', '理想', '欧打', '呕吐', '碎', '吐痰'],
            tab4:['发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '顶', '幸运', '爱心', '躲', '送花', '选择'],
            tab5:['微笑', '亲吻', '调皮', '惊讶', '耍酷', '发火', '害羞', '汗水', '大哭', '得意', '鄙视', '困', '夸奖', '晕倒', '疑问', '媒婆', '狂吐', '青蛙', '发愁', '亲吻', '', '爱心', '心碎', '玫瑰', '礼物', '哭', '奸笑', '可爱', '得意', '呲牙', '暴汗', '楚楚可怜', '困', '哭', '生气', '惊讶', '口水', '彩虹', '夜空', '太阳', '钱钱', '灯泡', '咖啡', '蛋糕', '音乐', '爱', '胜利', '赞', '鄙视', 'OK'],
            tab6:['男兜', '女兜', '开心', '乖乖', '偷笑', '大笑', '抽泣', '大哭', '无奈', '滴汗', '叹气', '狂晕', '委屈', '超赞', '??', '疑问', '飞吻', '天使', '撒花', '生气', '被砸', '口水', '泪奔', '吓傻', '吐舌头', '点头', '随意吐', '旋转', '困困', '鄙视', '狂顶', '篮球', '再见', '欢迎光临', '恭喜发财', '稍等', '我在线', '恕不议价', '库房有货', '货在路上']
        }
    };
</script>
</body>
</html>

================================================
FILE: public/lib/UEditor/dialogs/emotion/emotion.js
================================================
window.onload = function () {
    editor.setOpt({
        emotionLocalization:false
    });

    emotion.SmileyPath = editor.options.emotionLocalization === true ? 'images/' : "http://img.baidu.com/hi/";
    emotion.SmileyBox = createTabList( emotion.tabNum );
    emotion.tabExist = createArr( emotion.tabNum );

    initImgName();
    initEvtHandler( "tabHeads" );
};

function initImgName() {
    for ( var pro in emotion.SmilmgName ) {
        var tempName = emotion.SmilmgName[pro],
                tempBox = emotion.SmileyBox[pro],
                tempStr = "";

        if ( tempBox.length ) return;
        for ( var i = 1; i <= tempName[1]; i++ ) {
            tempStr = tempName[0];
            if ( i < 10 ) tempStr = tempStr + '0';
            tempStr = tempStr + i + '.gif';
            tempBox.push( tempStr );
        }
    }
}

function initEvtHandler( conId ) {
    var tabHeads = $G( conId );
    for ( var i = 0, j = 0; i < tabHeads.childNodes.length; i++ ) {
        var tabObj = tabHeads.childNodes[i];
        if ( tabObj.nodeType == 1 ) {
            domUtils.on( tabObj, "click", (function ( index ) {
                return function () {
                    switchTab( index );
                };
            })( j ) );
            j++;
        }
    }
    switchTab( 0 );
    $G( "tabIconReview" ).style.display = 'none';
}

function InsertSmiley( url, evt ) {
    var obj = {
        src:editor.options.emotionLocalization ? editor.options.UEDITOR_HOME_URL + "dialogs/emotion/" + url : url
    };
    obj._src = obj.src;
    editor.execCommand( 'insertimage', obj );
    if ( !evt.ctrlKey ) {
        dialog.popup.hide();
    }
}

function switchTab( index ) {

    autoHeight( index );
    if ( emotion.tabExist[index] == 0 ) {
        emotion.tabExist[index] = 1;
        createTab( 'tab' + index );
    }
    //获取呈现元素句柄数组
    var tabHeads = $G( "tabHeads" ).getElementsByTagName( "span" ),
            tabBodys = $G( "tabBodys" ).getElementsByTagName( "div" ),
            i = 0, L = tabHeads.length;
    //隐藏所有呈现元素
    for ( ; i < L; i++ ) {
        tabHeads[i].className = "";
        tabBodys[i].style.display = "none";
    }
    //显示对应呈现元素
    tabHeads[index].className = "focus";
    tabBodys[index].style.display = "block";
}

function autoHeight( index ) {
    var iframe = dialog.getDom( "iframe" ),
            parent = iframe.parentNode.parentNode;
    switch ( index ) {
        case 0:
            iframe.style.height = "380px";
            parent.style.height = "392px";
            break;
        case 1:
            iframe.style.height = "220px";
            parent.style.height = "232px";
            break;
        case 2:
            iframe.style.height = "260px";
            parent.style.height = "272px";
            break;
        case 3:
            iframe.style.height = "300px";
            parent.style.height = "312px";
            break;
        case 4:
            iframe.style.height = "140px";
            parent.style.height = "152px";
            break;
        case 5:
            iframe.style.height = "260px";
            parent.style.height = "272px";
            break;
        case 6:
            iframe.style.height = "230px";
            parent.style.height = "242px";
            break;
        default:

    }
}


function createTab( tabName ) {
    var faceVersion = "?v=1.1", //版本号
            tab = $G( tabName ), //获取将要生成的Div句柄
            imagePath = emotion.SmileyPath + emotion.imageFolders[tabName], //获取显示表情和预览表情的路径
            positionLine = 11 / 2, //中间数
            iWidth = iHeight = 35, //图片长宽
            iColWidth = 3, //表格剩余空间的显示比例
            tableCss = emotion.imageCss[tabName],
            cssOffset = emotion.imageCssOffset[tabName],
            textHTML = ['<table class="smileytable">'],
            i = 0, imgNum = emotion.SmileyBox[tabName].length, imgColNum = 11, faceImage,
            sUrl, realUrl, posflag, offset, infor;

    for ( ; i < imgNum; ) {
        textHTML.push( '<tr>' );
        for ( var j = 0; j < imgColNum; j++, i++ ) {
            faceImage = emotion.SmileyBox[tabName][i];
            if ( faceImage ) {
                sUrl = imagePath + faceImage + faceVersion;
                realUrl = imagePath + faceImage;
                posflag = j < positionLine ? 0 : 1;
                offset = cssOffset * i * (-1) - 1;
                infor = emotion.SmileyInfor[tabName][i];

                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)">' );
                textHTML.push( '<span>' );
                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>' );
                textHTML.push( '</span>' );
            } else {
                textHTML.push( '<td width="' + iColWidth + '%"   bgcolor="#FFFFFF">' );
            }
            textHTML.push( '</td>' );
        }
        textHTML.push( '</tr>' );
    }
    textHTML.push( '</table>' );
    textHTML = textHTML.join( "" );
    tab.innerHTML = textHTML;
}

function over( td, srcPath, posFlag ) {
    td.style.backgroundColor = "#ACCD3C";
    $G( 'faceReview' ).style.backgroundImage = "url(" + srcPath + ")";
    if ( posFlag == 1 ) $G( "tabIconReview" ).className = "show";
    $G( "tabIconReview" ).style.display = 'block';
}

function out( td ) {
    td.style.backgroundColor = "transparent";
    var tabIconRevew = $G( "tabIconReview" );
    tabIconRevew.className = "";
    tabIconRevew.style.display = 'none';
}

function createTabList( tabNum ) {
    var obj = {};
    for ( var i = 0; i < tabNum; i++ ) {
        obj["tab" + i] = [];
    }
    return obj;
}

function createArr( tabNum ) {
    var arr = [];
    for ( var i = 0; i < tabNum; i++ ) {
        arr[i] = 0;
    }
    return arr;
}



================================================
FILE: public/lib/UEditor/dialogs/gmap/gmap.html
================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script type="text/javascript" src="../internal.js"></script>
    <style type="text/css">
        .content{width:530px; height: 350px;margin: 10px auto;}
        .content table{width: 100%}
        .content table td{vertical-align: middle;}
        #address{width:220px;height:21px;background: #FFF;border:1px solid #d7d7d7; line-height: 21px;}
    </style>
    <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
</head>
<body>
<div class="content">
    <table>
        <tr>
            <td><label for="address"><var id="lang_input_address"></var></label></td>
            <td><input id="address" type="text" /></td>
            <td><a id="doSearch" href="javascript:void(0)" class="button"><var id="lang_input_search"></var></a></td>
        </tr>
    </table>
    <div id="container" style="width: 100%; height: 340px;margin: 5px auto; border: 1px solid gray;"></div>
</div>
<script type="text/javascript">
    domUtils.on(window,"load",function(){
        var map = new google.maps.Map(document.getElementById('container'), {
                zoom: 3,
                streetViewControl: false,
                scaleControl: true,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            });
            var imgcss;
            var marker = new google.maps.Marker({
                map: map,
                draggable: true
            });
            function doSearch(){
                var address = document.getElementById('address').value;
                var geocoder = new google.maps.Geocoder();
                geocoder.geocode( { 'address': address}, function (results, status) {
                    if (status == google.maps.GeocoderStatus.OK) {
                        var bounds = results[0].geometry.viewport;
                        map.fitBounds(bounds);
                        marker.setPosition(results[0].geometry.location);
                        marker.setTitle(address);
                    } else alert(lang.searchError);
                });
            }
            $G('address').onkeydown = function (evt){
                evt = evt || event;
                if (evt.keyCode == 13) {
                    doSearch();
                }
            };
            $G("doSearch").onclick = doSearch;
            dialog.onok = function (){
                var center = map.getCenter();
                var point = marker.getPosition();
                var url = "http://maps.googleapis.com/maps/api/staticmap?center=" + center.lat() + ',' + center.lng() + "&zoom=" + map.zoom + "&size=520x340&maptype=" + map.getMapTypeId() + "&markers=" + point.lat() + ',' + point.lng() + "&sensor=false";
                editor.execCommand('inserthtml', '<img width="520" height="340" src="' + url + '"' + (imgcss ? ' style="' + imgcss + '"' :'') + '/>');
            };

            function getPars(str,par){
                var reg = new RegExp(par+"=((\\d+|[.,])*)","g");
                return reg.exec(str)[1];
            }
            var img = editor.selection.getRange().getClosedNode();
            if(img && img.src.indexOf("http://maps.googleapis.com/maps/api/staticmap")!=-1){
                var url = img.getAttribute("src");
                var centers = getPars(url,"center").split(",");
                point = new google.maps.LatLng(Number(centers[0]),Number(centers[1]));
                map.setCenter(point);
                map.setZoom(Number(getPars(url,"zoom")));
                centers = getPars(url,"markers").split(",");
                marker.setPosition(new google.maps.LatLng(Number(centers[0]),Number(centers[1])));
                imgcss = img.style.cssText;
            }else{
                setTimeout(function(){
                    doSearch();
                },30)
            }
    });

</script>
</body>
</html>

================================================
FILE: public/lib/UEditor/dialogs/help/help.css
================================================
.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: bold;line-height: 25px;}

================================================
FILE: public/lib/UEditor/dialogs/help/help.html
================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>帮助</title>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
    <script type="text/javascript" src="../internal.js"></script>
    <link rel="stylesheet" type="text/css" href="help.css">
</head>
<body>
<div class="wrapper" id="helptab">
    <div id="tabHeads" class="tabhead">
        <span class="focus" tabsrc="about"><var id="lang_input_about"></var></span>
        <span tabsrc="shortcuts"><var id="lang_input_shortcuts"></var></span>
    </div>
    <div id="tabBodys" class="tabbody">
        <div id="about" class="panel">
            <h1>UEditor</h1>
            <p id="version"></p>
            <p><var id="lang_input_introduction"></var></p>
        </div>
        <div id="shortcuts" class="panel">
            <table>
                <thead>
                <tr>
                    <td><var id="lang_Txt_shortcuts"></var></td>
                    <td><var id="lang_Txt_func"></var></td>
                </tr>
                </thead>
                <tbody>
                <tr>
                    <td>ctrl+b</td>
                    <td><var id="lang_Txt_bold"></var></td>
                </tr>
                <tr>
                    <td>ctrl+c</td>
                    <td><var id="lang_Txt_copy"></var></td>
                </tr>
                <tr>
                    <td>ctrl+x</td>
                    <td><var id="lang_Txt_cut"></var></td>
                </tr>
                <tr>
                    <td>ctrl+v</td>
                    <td><var id="lang_Txt_Paste"></var></td>
                </tr>
                <tr>
                    <td>ctrl+y</td>
                    <td><var id="lang_Txt_undo"></var></td>
                </tr>
                <tr>
                    <td>ctrl+z</td>
                    <td><var id="lang_Txt_redo"></var></td>
                </tr>
                <tr>
                    <td>ctrl+i</td>
                    <td><var id="lang_Txt_italic"></var></td>
                </tr>
                <tr>
                    <td>ctrl+u</td>
                    <td><var id="lang_Txt_underline"></var></td>
                </tr>
                <tr>
                    <td>ctrl+a</td>
                    <td><var id="lang_Txt_selectAll"></var></td>
                </tr>
                <tr>
                    <td>shift+enter</td>
                    <td><var id="lang_Txt_visualEnter"></var></td>
                </tr>
                <tr>
                    <td>alt+z</td>
                    <td><var id="lang_Txt_fullscreen"></var></td>
                </tr>
                </tbody>
            </table>
        </div>
    </div>
</div>
<script type="text/javascript" src="help.js"></script>
</body>
</html>

================================================
FILE: public/lib/UEditor/dialogs/help/help.js
================================================
/**
 * Created with JetBrains PhpStorm.
 * User: xuheng
 * Date: 12-9-26
 * Time: 下午1:06
 * To change this template use File | Settings | File Templates.
 */
/**
 * tab点击处理事件
 * @param tabHeads
 * @param tabBodys
 * @param obj
 */
function clickHandler( tabHeads,tabBodys,obj ) {
    //head样式更改
    for ( var k = 0, len = tabHeads.length; k < len; k++ ) {
        tabHeads[k].className = "";
    }
    obj.className = "focus";
    //body显隐
    var tabSrc = obj.getAttribute( "tabSrc" );
    for ( var j = 0, length = tabBodys.length; j < length; j++ ) {
        var body = tabBodys[j],
            id = body.getAttribute( "id" );
        body.onclick = function(){
            this.style.zoom = 1;
        };
        if ( id != tabSrc ) {
            body.style.zIndex = 1;
        } else {
            body.style.zIndex = 200;
        }
    }

}

/**
 * TAB切换
 * @param tabParentId  tab的父节点ID或者对象本身
 */
function switchTab( tabParentId ) {
    var tabElements = $G( tabParentId ).children,
        tabHeads = tabElements[0].children,
        tabBodys = tabElements[1].children;

    for ( var i = 0, length = tabHeads.length; i < length; i++ ) {
        var head = tabHeads[i];
        if ( head.className === "focus" )clickHandler(tabHeads,tabBodys, head );
        head.onclick = function () {
            clickHandler(tabHeads,tabBodys,this);
        }
    }
}
switchTab("helptab");

document.getElementById('version').innerHTML = parent.UE.version;

================================================
FILE: public/lib/UEditor/dialogs/image/image.css
================================================
@charset "utf-8";
/* dialog样式 */
.wrapper {
    zoom: 1;
    width: 630px;
    *width: 626px;
    height: 380px;
    margin: 0 auto;
    padding: 10px;
    position: relative;
    font-family: sans-serif;
}

/*tab样式框大小*/
.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 {
    border-color: #66afe9;
    outline: 0;
    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
}
#remote #url{
    width: 500px;
    margin-bottom: 2px;
}
#remote #width,
#remote #height{
    width: 20px;
    margin-left: 2px;
    margin-right: 2px;
}
#remote #border,
#remote #vhSpace,
#remote #title{
    width: 180px;
    margin-right: 5px;
}
#remote #lock{
}
#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: 0px dashed #e6e6e6;
    height: 172px;
    padding-top: 150px;
    text-align: center;
    background: url(./images/image.png) center 70px no-repeat;
    color: #cccccc;
    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 auto;
    cursor: pointer;
    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
}

#upload .placeholder .webuploader-pick-hover {
    background: #00a2d4;
}


#filePickerContainer {
    text-align: center;
}

#upload .placeholder .flashTip {
    color: #666666;
    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: #999999;
}

#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: none;
    -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 #eeeeee;
    border-radius: 0;
}
#upload .filelist li.filePickerBlock div.webuploader-pick  {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    opacity: 0;
    background: none;
    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, 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: #666666;
}

#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: #ffffff;
    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:0.6;
    -khtml-opacity: 0.6;
    opacity: 0.6;
}



/* 图片管理样式 */
#online {
    width: 100%;
    height: 336px;
    padding: 10px 0 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;
}


/* 图片搜索样式 */
#search .searchBar {
    width: 100%;
    height: 30px;
    margin: 10px 0 5px 0;
    padding: 0;
}

#search 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;
}
#search input.text:focus {
    border-color: #66afe9;
    outline: 0;
    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
}
#search input.searchTxt {
    margin-left:5px;
    padding-left: 5px;
    background: #FFF;
    width: 300px;
    *width: 260px;
    height: 21px;
    line-height: 21px;
    float: left;
    dislay: block;
}

#search .searchType {
    width: 65px;
    height: 28px;
    padding:0;
    line-height: 28px;
    border: 1px solid #d7d7d7;
    border-radius: 0;
    vertical-align: top;
    margin-left: 5px;
    float: left;
    dislay: block;
}

#search #searchBtn,
#search #searchReset {
    display: inline-block;
    margin-bottom: 0;
    margin-right: 5px;
    padding: 4px 10px;
    font-weight: 400;
    text-align: center;
    vertical-align: middle;
    cursor: pointer;
    background-image: none;
    border: 1px solid transparent;
    white-space: nowrap;
    font-size: 14px;
    border-radius: 4px;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    vertical-align: top;
    float: right;
}

#search #searchBtn {
    color: white;
    border-color: #285e8e;
    background-color: #3b97d7;
}
#search #searchReset {
    color: #333;
    border-color: #ccc;
    background-color: #fff;
}
#search #searchBtn:hover {
    background-color: #3276b1;
}
#search #searchReset:hover {
    background-color: #eee;
}

#search .msg {
    margin-left: 5px;
}

#search .searchList{
    width: 100%;
    height: 300px;
    overflow: hidden;
    clear: both;
}
#search .searchList ul{
    margin:0;
    padding:0;
    list-style:none;
    clear: both;
    width: 100%;
    height: 100%;
    overflow-x: hidden;
    overflow-y: auto;
    zoom: 1;
    position: relative;
}

#search .searchList li {
    list-style:none;
    float: left;
    display: block;
    width: 115px;
    margin: 5px 10px 5px 20px;
    *margin: 5px 10px 5px 15px;
    padding:0;
    font-size: 12px;
    box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
    -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
    -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
    position: relative;
    vertical-align: top;
    text-align: center;
    overflow: hidden;
    cursor: pointer;
    filter: alpha(Opacity=100);
    -moz-opacity: 1;
    opacity: 1;
    border: 2px solid #eee;
}

#search .searchList li.selected {
    filter: alpha(Opacity=40);
    -moz-opacity: 0.4;
    opacity: 0.4;
    border: 2px solid #00a0e9;
}

#search .searchList li p {
    background-color: #eee;
    margin: 0;
    padding: 0;
    position: relative;
    width:100%;
    height:115px;
    overflow: hidden;
}

#search .searchList li p img {
    cursor: pointer;
    border: 0;
}

#search .searchList li a {
    color: #999;
    border-top: 1px solid #F2F2F2;
    background: #FAFAFA;
    text-align: center;
    display: block;
    padding: 0 5px;
    width: 105px;
    height:32px;
    line-height:32px;
    white-space:nowrap;
    text-overflow:ellipsis;
    text-decoration: none;
    overflow: hidden;
    word-break: break-all;
}

#search .searchList a:hover {
    text-decoration: underline;
    color: #333;
}
#search .searchList .clearFloat{
    clear: both;
}

================================================
FILE: public/lib/UEditor/dialogs/image/image.html
================================================
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>ueditor图片对话框</title>
    <script type="text/javascript" src="../internal.js"></script>

    <!-- jquery -->
    <script type="text/javascript" src="../../third-party/jquery-1.10.2.min.js"></script>

    <!-- webuploader -->
    <script src="../../third-party/webuploader/webuploader.min.js"></script>
    <link rel="stylesheet" type="text/css" href="../../third-party/webuploader/webuploader.css">

    <!-- image dialog -->
    <link rel="stylesheet" href="image.css" type="text/css" />
</head>
<body>

    <div class="wrapper">
        <div id="tabhead" class="tabhead">
            <span class="tab" data-content-id="remote"><var id="lang_tab_remote"></var></span>
            <span class="tab focus" data-content-id="upload"><var id="lang_tab_upload"></var></span>
            <span class="tab" data-content-id="online"><var id="lang_tab_online"></var></span>
            <span class="tab" data-content-id="search"><var id="lang_tab_search"></var></span>
        </div>
        <div class="alignBar">
            <label class="algnLabel"><var id="lang_input_align"></var></label>
                    <span id="alignIcon">
                        <span id="noneAlign" class="none-align focus" data-align="none"></span>
                        <span id="leftAlign" class="left-align" data-align="left"></span>
                        <span id="rightAlign" class="right-align" data-align="right"></span>
                        <span id="centerAlign" class="center-align" data-align="center"></span>
                    </span>
            <input id="align" name="align" type="hidden" value="none"/>
        </div>
        <div id="tabbody" class="tabbody">

            <!-- 远程图片 -->
            <div id="remote" class="panel">
                <div class="top">
                    <div class="row">
                        <label for="url"><var id="lang_input_url"></var></label>
                        <span><input class="text" id="url" type="text"/></span>
                    </div>
                </div>
                <div class="left">
                    <div class="row">
                        <label><var id="lang_input_size"></var></label>
                        <span><var id="lang_input_width">&nbsp;&nbsp;</var><input class="text" type="text" id="width"/>px </span>
                        <span><var id="lang_input_height">&nbsp;&nbsp;</var><input class="text" type="text" id="height"/>px </span>
                        <span><input id="lock" type="checkbox" disabled="disabled"><span id="lockicon"></span></span>
                    </div>
                    <div class="row">
                        <label><var id="lang_input_border"></var></label>
                        <span><input class="text" type="text" id="border"/>px </span>
                    </div>
                    <div class="row">
                        <label><var id="lang_input_vhspace"></var></label>
                        <span><input class="text" type="text" id="vhSpace"/>px </span>
                    </div>
                    <div class="row">
                        <label><var id="lang_input_title"></var></label>
                        <span><input class="text" type="text" id="title"/></span>
                    </div>
                </div>
                <div class="right"><div id="preview"></div></div>
            </div>

            <!-- 上传图片 -->
            <div id="upload" class="panel focus">
                <div id="queueList" class="queueList">
                    <div class="statusBar element-invisible">
                        <div class="progress">
                            <span class="text">0%</span>
                            <span class="percentage"></span>
                        </div><div class="info"></div>
                        <div class="btns">
                            <div id="filePickerBtn"></div>
                            <div class="uploadBtn"><var id="lang_start_upload"></var></div>
                        </div>
                    </div>
                    <div id="dndArea" class="placeholder">
                        <div class="filePickerContainer">
                            <div id="filePickerReady"></div>
                        </div>
                    </div>
                    <ul class="filelist element-invisible">
                        <li id="filePickerBlock" class="filePickerBlock"></li>
                    </ul>
                </div>
            </div>

            <!-- 在线图片 -->
            <div id="online" class="panel">
                <div id="imageList"><var id="lang_imgLoading"></var></div>
            </div>

            <!-- 搜索图片 -->
            <div id="search" class="panel">
                <div class="searchBar">
                    <input id="searchTxt" class="searchTxt text" type="text" />
                    <select id="searchType" class="searchType">
                        <option value="&s=4&z=0"></option>
                        <option value="&s=1&z=19"></option>
                        <option value="&s=2&z=0"></option>
                        <option value="&s=3&z=0"></option>
                    </select>
                    <input id="searchReset" type="button"  />
                    <input id="searchBtn" type="button"  />
                </div>
                <div id="searchList" class="searchList"><ul id="searchListUl"></ul></div>
            </div>

        </div>
    </div>
    <script type="text/javascript" src="image.js"></script>

</body>
</html>

================================================
FILE: public/lib/UEditor/dialogs/image/image.js
================================================
/**
 * User: Jinqn
 * Date: 14-04-08
 * Time: 下午16:34
 * 上传图片对话框逻辑代码,包括tab: 远程图片/上传图片/在线图片/搜索图片
 */

(function () {

    var remoteImage,
        uploadImage,
        onlineImage,
        searchImage;

    window.onload = function () {
        initTabs();
        initAlign();
        initButtons();
    };

    /* 初始化tab标签 */
    function initTabs() {
        var tabs = $G('tabhead').children;
        for (var i = 0; i < tabs.length; i++) {
            domUtils.on(tabs[i], "click", function (e) {
                var target = e.target || e.srcElement;
                setTabFocus(target.getAttribute('data-content-id'));
            });
        }

        var img = editor.selection.getRange().getClosedNode();
        if (img && img.tagName && img.tagName.toLowerCase() == 'img') {
            setTabFocus('remote');
        } else {
            setTabFocus('upload');
        }
    }

    /* 初始化tabbody */
    function setTabFocus(id) {
        if(!id) return;
        var i, bodyId, tabs = $G('tabhead').children;
        for (i = 0; i < tabs.length; i++) {
            bodyId = tabs[i].getAttribute('data-content-id');
            if (bodyId == id) {
                domUtils.addClass(tabs[i], 'focus');
                domUtils.addClass($G(bodyId), 'focus');
            } else {
                domUtils.removeClasses(tabs[i], 'focus');
                domUtils.removeClasses($G(bodyId), 'focus');
            }
        }
        switch (id) {
            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();
                break;
            case 'search':
                setAlign(editor.getOpt('imageManagerInsertAlign'));
                searchImage = searchImage || new SearchImage();
                break;
        }
    }

    /* 初始化onok事件 */
    function initButtons() {

        dialog.onok = function () {
            var remote = false, list = [], id, tabs = $G('tabhead').children;
            for (var i = 0; i < tabs.length; i++) {
                if (domUtils.hasClass(tabs[i], 'focus')) {
                    id = tabs[i].getAttribute('data-content-id');
                    break;
                }
            }

            switch (id) {
                case 'remote':
                    list = remoteImage.getInsertList();
                    break;
                case 'upload':
                    list = uploadImage.getInsertList();
                    var count = uploadImage.getQueueCount();
                    if (count) {
                        $('.info', '#queueList').html('<span style="color:red;">' + '还有2个未上传文件'.replace(/[\d]/, count) + '</span>');
                        return false;
                    }
                    break;
                case 'online':
                    list = onlineImage.getInsertList();
                    break;
                case 'search':
                    list = searchImage.getInsertList();
                    remote = true;
                    break;
            }

            if(list) {
                editor.execCommand('insertimage', list);
                remote && editor.fireEvent("catchRemoteImage");
            }
        };
    }


    /* 初始化对其方式的点击事件 */
    function initAlign(){
        /* 点击align图标 */
        domUtils.on($G("alignIcon"), 'click', function(e){
            var target = e.target || e.srcElement;
            if(target.className && target.className.indexOf('-align') != -1) {
                setAlign(target.getAttribute('data-align'));
            }
        });
    }

    /* 设置对齐方式 */
    function setAlign(align){
        align = align || 'none';
        var aligns = $G("alignIcon").childr
Download .txt
gitextract_0rh1tlrf/

├── .browserslistrc
├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug.md
│   │   ├── demo.md
│   │   ├── display.md
│   │   ├── doc.md
│   │   ├── feature.md
│   │   ├── other.md
│   │   ├── question.md
│   │   └── update.md
│   └── workflows/
│       ├── release.yml
│       └── star.yml
├── .gitignore
├── .postcssrc.js
├── .releaserc.js
├── LICENSE
├── README.md
├── README.zh.md
├── babel.config.js
├── d2-admin.babel
├── docs/
│   └── CHANGELOG.md
├── jest.config.js
├── jsconfig.json
├── package.json
├── public/
│   ├── html/
│   │   └── demo.html
│   ├── index.html
│   ├── lib/
│   │   └── UEditor/
│   │       ├── dialogs/
│   │       │   ├── anchor/
│   │       │   │   └── anchor.html
│   │       │   ├── attachment/
│   │       │   │   ├── attachment.css
│   │       │   │   ├── attachment.html
│   │       │   │   └── attachment.js
│   │       │   ├── background/
│   │       │   │   ├── background.css
│   │       │   │   ├── background.html
│   │       │   │   └── background.js
│   │       │   ├── charts/
│   │       │   │   ├── chart.config.js
│   │       │   │   ├── charts.css
│   │       │   │   ├── charts.html
│   │       │   │   └── charts.js
│   │       │   ├── emotion/
│   │       │   │   ├── emotion.css
│   │       │   │   ├── emotion.html
│   │       │   │   └── emotion.js
│   │       │   ├── gmap/
│   │       │   │   └── gmap.html
│   │       │   ├── help/
│   │       │   │   ├── help.css
│   │       │   │   ├── help.html
│   │       │   │   └── help.js
│   │       │   ├── image/
│   │       │   │   ├── image.css
│   │       │   │   ├── image.html
│   │       │   │   └── image.js
│   │       │   ├── insertframe/
│   │       │   │   └── insertframe.html
│   │       │   ├── internal.js
│   │       │   ├── link/
│   │       │   │   └── link.html
│   │       │   ├── map/
│   │       │   │   ├── map.html
│   │       │   │   └── show.html
│   │       │   ├── music/
│   │       │   │   ├── music.css
│   │       │   │   ├── music.html
│   │       │   │   └── music.js
│   │       │   ├── preview/
│   │       │   │   └── preview.html
│   │       │   ├── scrawl/
│   │       │   │   ├── scrawl.css
│   │       │   │   ├── scrawl.html
│   │       │   │   └── scrawl.js
│   │       │   ├── searchreplace/
│   │       │   │   ├── searchreplace.html
│   │       │   │   └── searchreplace.js
│   │       │   ├── snapscreen/
│   │       │   │   └── snapscreen.html
│   │       │   ├── spechars/
│   │       │   │   ├── spechars.html
│   │       │   │   └── spechars.js
│   │       │   ├── table/
│   │       │   │   ├── edittable.css
│   │       │   │   ├── edittable.html
│   │       │   │   ├── edittable.js
│   │       │   │   ├── edittd.html
│   │       │   │   └── edittip.html
│   │       │   ├── template/
│   │       │   │   ├── config.js
│   │       │   │   ├── template.css
│   │       │   │   ├── template.html
│   │       │   │   └── template.js
│   │       │   ├── video/
│   │       │   │   ├── video.css
│   │       │   │   ├── video.html
│   │       │   │   └── video.js
│   │       │   ├── webapp/
│   │       │   │   └── webapp.html
│   │       │   └── wordimage/
│   │       │       ├── tangram.js
│   │       │       ├── wordimage.html
│   │       │       └── wordimage.js
│   │       ├── index.html
│   │       ├── jsp/
│   │       │   ├── config.json
│   │       │   ├── controller.jsp
│   │       │   └── lib/
│   │       │       ├── commons-codec-1.9.jar
│   │       │       ├── commons-fileupload-1.3.1.jar
│   │       │       ├── commons-io-2.4.jar
│   │       │       ├── json.jar
│   │       │       └── ueditor-1.1.2.jar
│   │       ├── lang/
│   │       │   ├── en/
│   │       │   │   └── en.js
│   │       │   └── zh-cn/
│   │       │       └── zh-cn.js
│   │       ├── themes/
│   │       │   ├── default/
│   │       │   │   ├── css/
│   │       │   │   │   └── ueditor.css
│   │       │   │   └── dialogbase.css
│   │       │   └── iframe.css
│   │       ├── third-party/
│   │       │   ├── SyntaxHighlighter/
│   │       │   │   ├── shCore.js
│   │       │   │   └── shCoreDefault.css
│   │       │   ├── codemirror/
│   │       │   │   ├── codemirror.css
│   │       │   │   └── codemirror.js
│   │       │   ├── highcharts/
│   │       │   │   ├── adapters/
│   │       │   │   │   ├── mootools-adapter.js
│   │       │   │   │   ├── mootools-adapter.src.js
│   │       │   │   │   ├── prototype-adapter.js
│   │       │   │   │   ├── prototype-adapter.src.js
│   │       │   │   │   ├── standalone-framework.js
│   │       │   │   │   └── standalone-framework.src.js
│   │       │   │   ├── highcharts-more.js
│   │       │   │   ├── highcharts-more.src.js
│   │       │   │   ├── highcharts.js
│   │       │   │   ├── highcharts.src.js
│   │       │   │   ├── modules/
│   │       │   │   │   ├── annotations.js
│   │       │   │   │   ├── annotations.src.js
│   │       │   │   │   ├── canvas-tools.js
│   │       │   │   │   ├── canvas-tools.src.js
│   │       │   │   │   ├── data.js
│   │       │   │   │   ├── data.src.js
│   │       │   │   │   ├── drilldown.js
│   │       │   │   │   ├── drilldown.src.js
│   │       │   │   │   ├── exporting.js
│   │       │   │   │   ├── exporting.src.js
│   │       │   │   │   ├── funnel.js
│   │       │   │   │   ├── funnel.src.js
│   │       │   │   │   ├── heatmap.js
│   │       │   │   │   ├── heatmap.src.js
│   │       │   │   │   ├── map.js
│   │       │   │   │   ├── map.src.js
│   │       │   │   │   ├── no-data-to-display.js
│   │       │   │   │   └── no-data-to-display.src.js
│   │       │   │   └── themes/
│   │       │   │       ├── dark-blue.js
│   │       │   │       ├── dark-green.js
│   │       │   │       ├── gray.js
│   │       │   │       ├── grid.js
│   │       │   │       └── skies.js
│   │       │   ├── jquery-1.10.2.js
│   │       │   ├── video-js/
│   │       │   │   ├── video-js.css
│   │       │   │   ├── video.dev.js
│   │       │   │   └── video.js
│   │       │   ├── webuploader/
│   │       │   │   ├── webuploader.css
│   │       │   │   ├── webuploader.custom.js
│   │       │   │   ├── webuploader.flashonly.js
│   │       │   │   ├── webuploader.html5only.js
│   │       │   │   ├── webuploader.js
│   │       │   │   └── webuploader.withoutimage.js
│   │       │   └── zeroclipboard/
│   │       │       └── ZeroClipboard.js
│   │       ├── ueditor.all.js
│   │       ├── ueditor.config.js
│   │       └── ueditor.parse.js
│   ├── markdown/
│   │   └── demo.md
│   └── mobile.html
├── src/
│   ├── App.vue
│   ├── api/
│   │   ├── _service.js
│   │   ├── _tools.js
│   │   ├── demo.js
│   │   └── sys.user.js
│   ├── assets/
│   │   ├── style/
│   │   │   ├── animate/
│   │   │   │   └── vue-transition.scss
│   │   │   ├── fixed/
│   │   │   │   ├── base.scss
│   │   │   │   ├── element.scss
│   │   │   │   ├── markdown.scss
│   │   │   │   ├── n-progress.scss
│   │   │   │   ├── tree-view.scss
│   │   │   │   ├── vue-grid-layout.scss
│   │   │   │   └── vue-splitpane.scss
│   │   │   ├── public-class.scss
│   │   │   ├── public.scss
│   │   │   ├── theme/
│   │   │   │   ├── chester/
│   │   │   │   │   ├── index.scss
│   │   │   │   │   └── setting.scss
│   │   │   │   ├── d2/
│   │   │   │   │   ├── index.scss
│   │   │   │   │   └── setting.scss
│   │   │   │   ├── element/
│   │   │   │   │   ├── index.scss
│   │   │   │   │   └── setting.scss
│   │   │   │   ├── line/
│   │   │   │   │   ├── index.scss
│   │   │   │   │   └── setting.scss
│   │   │   │   ├── register.scss
│   │   │   │   ├── star/
│   │   │   │   │   ├── index.scss
│   │   │   │   │   └── setting.scss
│   │   │   │   ├── theme-base.scss
│   │   │   │   ├── theme.scss
│   │   │   │   ├── tomorrow-night-blue/
│   │   │   │   │   ├── index.scss
│   │   │   │   │   └── setting.scss
│   │   │   │   └── violet/
│   │   │   │       ├── index.scss
│   │   │   │       └── setting.scss
│   │   │   └── unit/
│   │   │       └── color.scss
│   │   └── svg-icons/
│   │       └── index.js
│   ├── components/
│   │   ├── d2-container/
│   │   │   ├── components/
│   │   │   │   ├── d2-container-card-bs.vue
│   │   │   │   ├── d2-container-card.vue
│   │   │   │   ├── d2-container-full-bs.vue
│   │   │   │   ├── d2-container-full.vue
│   │   │   │   ├── d2-container-ghost-bs.vue
│   │   │   │   ├── d2-container-ghost.vue
│   │   │   │   ├── d2-source.vue
│   │   │   │   └── mixins/
│   │   │   │       ├── bs.js
│   │   │   │       └── normal.js
│   │   │   └── index.js
│   │   ├── d2-container-frame/
│   │   │   └── index.vue
│   │   ├── d2-count-up/
│   │   │   └── index.vue
│   │   ├── d2-highlight/
│   │   │   ├── index.vue
│   │   │   └── libs/
│   │   │       ├── htmlFormat.js
│   │   │       └── style.github.css
│   │   ├── d2-icon/
│   │   │   ├── font-awesome-4.7.0/
│   │   │   │   └── fonts/
│   │   │   │       └── FontAwesome.otf
│   │   │   └── index.vue
│   │   ├── d2-icon-select/
│   │   │   ├── data/
│   │   │   │   └── index.js
│   │   │   └── index.vue
│   │   ├── d2-icon-svg/
│   │   │   └── index.vue
│   │   ├── d2-icon-svg-select/
│   │   │   └── index.vue
│   │   ├── d2-link-btn/
│   │   │   └── index.vue
│   │   ├── d2-markdown/
│   │   │   ├── index.vue
│   │   │   └── plugin/
│   │   │       └── baidupan.js
│   │   ├── d2-module-index-banner/
│   │   │   └── index.vue
│   │   ├── d2-module-index-menu/
│   │   │   ├── components/
│   │   │   │   ├── group.vue
│   │   │   │   └── item.vue
│   │   │   └── index.vue
│   │   ├── d2-quill/
│   │   │   └── index.vue
│   │   ├── d2-scrollbar/
│   │   │   └── index.vue
│   │   ├── d2-ueditor/
│   │   │   ├── button/
│   │   │   │   └── d2admin.js
│   │   │   ├── index.vue
│   │   │   └── ueditor.config.js
│   │   └── index.js
│   ├── i18n.js
│   ├── layout/
│   │   └── header-aside/
│   │       ├── components/
│   │       │   ├── contextmenu/
│   │       │   │   ├── components/
│   │       │   │   │   └── contentmenuList/
│   │       │   │   │       └── index.vue
│   │       │   │   └── index.vue
│   │       │   ├── header-color/
│   │       │   │   └── index.vue
│   │       │   ├── header-fullscreen/
│   │       │   │   └── index.vue
│   │       │   ├── header-locales/
│   │       │   │   └── index.vue
│   │       │   ├── header-log/
│   │       │   │   └── index.vue
│   │       │   ├── header-search/
│   │       │   │   └── index.vue
│   │       │   ├── header-size/
│   │       │   │   └── index.vue
│   │       │   ├── header-theme/
│   │       │   │   ├── components/
│   │       │   │   │   └── d2-theme-list/
│   │       │   │   │       └── index.vue
│   │       │   │   └── index.vue
│   │       │   ├── header-user/
│   │       │   │   └── index.vue
│   │       │   ├── libs/
│   │       │   │   └── util.menu.js
│   │       │   ├── menu-header/
│   │       │   │   └── index.js
│   │       │   ├── menu-side/
│   │       │   │   └── index.js
│   │       │   ├── mixin/
│   │       │   │   └── menu.js
│   │       │   ├── panel-search/
│   │       │   │   ├── components/
│   │       │   │   │   └── panel-search-item/
│   │       │   │   │       └── index.vue
│   │       │   │   └── index.vue
│   │       │   └── tabs/
│   │       │       └── index.vue
│   │       ├── index.js
│   │       ├── layout.vue
│   │       └── mixins/
│   │           └── search.js
│   ├── libs/
│   │   ├── util.cookies.js
│   │   ├── util.db.js
│   │   ├── util.import.development.js
│   │   ├── util.import.production.js
│   │   ├── util.js
│   │   └── util.log.js
│   ├── locales/
│   │   ├── en.json
│   │   ├── ja.json
│   │   ├── mixin.js
│   │   ├── zh-chs.json
│   │   └── zh-cht.json
│   ├── main.js
│   ├── menu/
│   │   ├── index.js
│   │   └── modules/
│   │       ├── demo-components.js
│   │       ├── demo-playground.js
│   │       └── demo-plugins.js
│   ├── plugin/
│   │   ├── d2admin/
│   │   │   └── index.js
│   │   ├── error/
│   │   │   └── index.js
│   │   ├── log/
│   │   │   └── index.js
│   │   └── open/
│   │       └── index.js
│   ├── router/
│   │   ├── index.js
│   │   ├── modules/
│   │   │   ├── components.js
│   │   │   ├── playground.js
│   │   │   └── plugins.js
│   │   └── routes.js
│   ├── setting.js
│   ├── store/
│   │   ├── index.js
│   │   └── modules/
│   │       └── d2admin/
│   │           ├── index.js
│   │           └── modules/
│   │               ├── account.js
│   │               ├── color.js
│   │               ├── db.js
│   │               ├── fullscreen.js
│   │               ├── gray.js
│   │               ├── log.js
│   │               ├── menu.js
│   │               ├── page.js
│   │               ├── releases.js
│   │               ├── search.js
│   │               ├── size.js
│   │               ├── theme.js
│   │               ├── transition.js
│   │               ├── ua.js
│   │               └── user.js
│   └── views/
│       ├── demo/
│       │   ├── components/
│       │   │   ├── container/
│       │   │   │   ├── api.vue
│       │   │   │   ├── card-bs.vue
│       │   │   │   ├── card-slot.vue
│       │   │   │   ├── card.vue
│       │   │   │   ├── components/
│       │   │   │   │   └── d2-demo-article.vue
│       │   │   │   ├── full-bs.vue
│       │   │   │   ├── full-slot.vue
│       │   │   │   ├── full.vue
│       │   │   │   ├── ghost-bs.vue
│       │   │   │   ├── ghost-slot.vue
│       │   │   │   ├── ghost.vue
│       │   │   │   └── md/
│       │   │   │       ├── long.md
│       │   │   │       └── short.md
│       │   │   ├── countup/
│       │   │   │   └── index.vue
│       │   │   ├── editor-quill/
│       │   │   │   ├── index.vue
│       │   │   │   └── value.js
│       │   │   ├── editor-ueditor/
│       │   │   │   └── index.vue
│       │   │   ├── highlight/
│       │   │   │   ├── code/
│       │   │   │   │   ├── css.js
│       │   │   │   │   ├── html.js
│       │   │   │   │   ├── javascript.js
│       │   │   │   │   └── scss.js
│       │   │   │   └── index.vue
│       │   │   ├── icon/
│       │   │   │   ├── components/
│       │   │   │   │   └── d2-icon-cell.vue
│       │   │   │   ├── data/
│       │   │   │   │   └── index.js
│       │   │   │   ├── icon-svg.vue
│       │   │   │   ├── icon.vue
│       │   │   │   ├── list.vue
│       │   │   │   ├── select-svg.vue
│       │   │   │   └── select.vue
│       │   │   ├── index/
│       │   │   │   └── index.vue
│       │   │   ├── json-tree/
│       │   │   │   └── index.vue
│       │   │   ├── layout/
│       │   │   │   ├── grid.vue
│       │   │   │   └── splitpane.vue
│       │   │   └── markdown/
│       │   │       ├── md/
│       │   │       │   └── doc.md
│       │   │       ├── source.vue
│       │   │       └── url.vue
│       │   ├── playground/
│       │   │   ├── add-routes/
│       │   │   │   ├── alternates/
│       │   │   │   │   ├── 1.vue
│       │   │   │   │   ├── 2.vue
│       │   │   │   │   └── 3.vue
│       │   │   │   └── routes.vue
│       │   │   ├── db/
│       │   │   │   ├── all/
│       │   │   │   │   └── index.vue
│       │   │   │   ├── page-public/
│       │   │   │   │   └── index.vue
│       │   │   │   ├── page-snapshot-public/
│       │   │   │   │   └── index.vue
│       │   │   │   ├── page-snapshot-user/
│       │   │   │   │   └── index.vue
│       │   │   │   ├── page-user/
│       │   │   │   │   └── index.vue
│       │   │   │   ├── public/
│       │   │   │   │   └── index.vue
│       │   │   │   └── user/
│       │   │   │       └── index.vue
│       │   │   ├── env/
│       │   │   │   └── index.vue
│       │   │   ├── frame/
│       │   │   │   ├── d2-doc/
│       │   │   │   │   └── index.vue
│       │   │   │   ├── html/
│       │   │   │   │   └── index.vue
│       │   │   │   └── report/
│       │   │   │       └── index.vue
│       │   │   ├── index/
│       │   │   │   └── index.vue
│       │   │   ├── locales/
│       │   │   │   └── index.vue
│       │   │   ├── log/
│       │   │   │   ├── ajax/
│       │   │   │   │   └── index.vue
│       │   │   │   ├── console/
│       │   │   │   │   └── index.vue
│       │   │   │   ├── error/
│       │   │   │   │   └── index.vue
│       │   │   │   └── log/
│       │   │   │       └── index.vue
│       │   │   ├── page-argu/
│       │   │   │   ├── get.vue
│       │   │   │   └── send.vue
│       │   │   ├── page-cache/
│       │   │   │   ├── off.vue
│       │   │   │   ├── on.vue
│       │   │   │   └── params.vue
│       │   │   └── store/
│       │   │       ├── fullscreen/
│       │   │       │   └── index.vue
│       │   │       ├── gray/
│       │   │       │   └── index.vue
│       │   │       ├── menu/
│       │   │       │   └── index.vue
│       │   │       ├── page/
│       │   │       │   └── index.vue
│       │   │       ├── size/
│       │   │       │   └── index.vue
│       │   │       ├── theme/
│       │   │       │   └── index.vue
│       │   │       ├── transition/
│       │   │       │   └── index.vue
│       │   │       └── ua/
│       │   │           └── index.vue
│       │   └── plugins/
│       │       ├── clipboard-polyfill/
│       │       │   └── index.vue
│       │       ├── day/
│       │       │   └── index.vue
│       │       ├── export/
│       │       │   ├── table.vue
│       │       │   └── txt.vue
│       │       ├── import/
│       │       │   ├── csv.vue
│       │       │   └── xlsx.vue
│       │       ├── index/
│       │       │   └── index.vue
│       │       └── js-cookie/
│       │           └── index.vue
│       └── system/
│           ├── error/
│           │   └── 404/
│           │       └── index.vue
│           ├── function/
│           │   ├── redirect/
│           │   │   └── index.js
│           │   └── refresh/
│           │       └── index.js
│           ├── index/
│           │   ├── components/
│           │   │   ├── d2-badge/
│           │   │   │   └── index.vue
│           │   │   ├── d2-help/
│           │   │   │   └── index.vue
│           │   │   └── d2-page-cover/
│           │   │       └── index.vue
│           │   └── index.vue
│           ├── log/
│           │   └── index.vue
│           └── login/
│               └── index.vue
├── src.mobile/
│   ├── App.vue
│   ├── main.js
│   ├── router/
│   │   └── index.js
│   ├── store/
│   │   └── index.js
│   ├── vant.js
│   └── views/
│       └── index.vue
├── tests/
│   └── unit/
│       ├── .eslintrc.js
│       ├── d2-container-card-bs.spec.js
│       ├── d2-container-card.spec.js
│       ├── d2-container-frame.spec.js
│       ├── d2-container-full-bs.spec.js
│       ├── d2-container-full.spec.js
│       ├── d2-container-ghost-bs.spec.js
│       ├── d2-container-ghost.spec.js
│       ├── d2-count-up.spec.js
│       ├── d2-icon-select.spec.js
│       ├── d2-icon-svg.spec.js
│       ├── d2-icon.spec.js
│       ├── d2-link-btn.spec.js
│       ├── d2-module-index-banner.spec.js
│       ├── d2-module-index-menu.spec.js
│       ├── d2-page-cover.spec.js
│       └── d2-source.spec.js
└── vue.config.js
Download .txt
SYMBOL INDEX (1032 symbols across 83 files)

FILE: public/lib/UEditor/dialogs/attachment/attachment.js
  function initTabs (line 19) | function initTabs() {
  function setTabFocus (line 32) | function setTabFocus(id) {
  function initButtons (line 56) | function initButtons() {
  function UploadFile (line 87) | function UploadFile(target) {
  function addFile (line 181) | function addFile(file) {
  function removeFile (line 316) | function removeFile(file) {
  function updateTotalProgress (line 323) | function updateTotalProgress() {
  function setState (line 341) | function setState(val, files) {
  function updateStatus (line 417) | function updateStatus() {
  function OnlineFile (line 574) | function OnlineFile(target) {

FILE: public/lib/UEditor/dialogs/background/background.js
  function initTabs (line 12) | function initTabs(){
  function initColorSelector (line 35) | function initColorSelector () {
  function initColorPicker (line 77) | function initColorPicker() {
  function initImagePanel (line 116) | function initImagePanel() {
  function updateFormState (line 121) | function updateFormState (radio, color, url, align, x, y) {
  function updateBackground (line 158) | function updateBackground () {
  function OnlineImage (line 184) | function OnlineImage(target) {

FILE: public/lib/UEditor/dialogs/charts/charts.js
  function initChartsTypeView (line 49) | function initChartsTypeView () {
  function renderTable (line 64) | function renderTable ( table ) {
  function initUserConfig (line 104) | function initUserConfig ( config ) {
  function initEvent (line 125) | function initEvent () {
  function renderCharts (line 201) | function renderCharts () {
  function updateViewType (line 253) | function updateViewType ( index ) {
  function collectData (line 259) | function collectData () {
  function getUserConfig (line 283) | function getUserConfig () {
  function setUserConfig (line 302) | function setUserConfig ( config ) {
  function getSeriesAndCategories (line 317) | function getSeriesAndCategories () {
  function getTableDataFormat (line 367) | function getTableDataFormat () {
  function disableNotPieConfig (line 379) | function disableNotPieConfig() {
  function enableNotPieConfig (line 388) | function enableNotPieConfig() {
  function updateConfigItem (line 394) | function updateConfigItem ( value ) {
  function getSeriesForPieChart (line 420) | function getSeriesForPieChart () {
  function getTableData (line 445) | function getTableData () {
  function getTableInputValue (line 461) | function getTableInputValue () {
  function getCellValue (line 475) | function getCellValue ( cell ) {
  function syncTableData (line 505) | function syncTableData () {

FILE: public/lib/UEditor/dialogs/emotion/emotion.js
  function initImgName (line 14) | function initImgName() {
  function initEvtHandler (line 30) | function initEvtHandler( conId ) {
  function InsertSmiley (line 47) | function InsertSmiley( url, evt ) {
  function switchTab (line 58) | function switchTab( index ) {
  function autoHeight (line 79) | function autoHeight( index ) {
  function createTab (line 117) | function createTab( tabName ) {
  function over (line 157) | function over( td, srcPath, posFlag ) {
  function out (line 164) | function out( td ) {
  function createTabList (line 171) | function createTabList( tabNum ) {
  function createArr (line 179) | function createArr( tabNum ) {

FILE: public/lib/UEditor/dialogs/help/help.js
  function clickHandler (line 14) | function clickHandler( tabHeads,tabBodys,obj ) {
  function switchTab (line 41) | function switchTab( tabParentId ) {

FILE: public/lib/UEditor/dialogs/image/image.js
  function initTabs (line 22) | function initTabs() {
  function setTabFocus (line 40) | function setTabFocus(id) {
  function initButtons (line 74) | function initButtons() {
  function initAlign (line 115) | function initAlign(){
  function setAlign (line 126) | function setAlign(align){
  function getAlign (line 139) | function getAlign(){
  function RemoteImage (line 146) | function RemoteImage(target) {
  function updatePreview (line 202) | function updatePreview(){
  function UploadImage (line 293) | function UploadImage(target) {
  function addFile (line 404) | function addFile(file) {
  function removeFile (line 534) | function removeFile(file) {
  function updateTotalProgress (line 541) | function updateTotalProgress() {
  function setState (line 559) | function setState(val, files) {
  function updateStatus (line 635) | function updateStatus() {
  function OnlineImage (line 798) | function OnlineImage(target) {
  function SearchImage (line 977) | function SearchImage() {

FILE: public/lib/UEditor/dialogs/music/music.js
  function Music (line 1) | function Music() {

FILE: public/lib/UEditor/dialogs/scrawl/scrawl.js
  function _appendStyle (line 419) | function _appendStyle() {
  function _getDom (line 441) | function _getDom() {
  function ue_callback (line 570) | function ue_callback(url, state) {
  function removeMaskLayer (line 615) | function removeMaskLayer() {
  function addMaskLayer (line 622) | function addMaskLayer(html) {
  function exec (line 629) | function exec(scrawlObj) {

FILE: public/lib/UEditor/dialogs/searchreplace/searchreplace.js
  function clickHandler (line 19) | function clickHandler( tabHeads,tabBodys,obj ) {
  function switchTab (line 43) | function switchTab( tabParentId ) {
  function getMatchCase (line 61) | function getMatchCase(id) {

FILE: public/lib/UEditor/dialogs/spechars/spechars.js
  function toArray (line 55) | function toArray(str) {

FILE: public/lib/UEditor/dialogs/video/video.js
  function initTabs (line 24) | function initTabs(){
  function initVideo (line 43) | function initVideo(){
  function addOkListener (line 73) | function addOkListener(){
  function updateAlignButton (line 98) | function updateAlignButton( align ) {
  function insertSingle (line 116) | function insertSingle(){
  function insertSearch (line 135) | function insertSearch(id){
  function findFocus (line 156) | function findFocus( id, returnProperty ) {
  function convert_url (line 167) | function convert_url(url){
  function checkNum (line 190) | function checkNum( nodes ) {
  function isNumber (line 207) | function isNumber( value ) {
  function createAlignButton (line 215) | function createAlignButton( ids ) {
  function switchSelect (line 235) | function switchSelect( selectParentId ) {
  function addUrlChangeListener (line 252) | function addUrlChangeListener(url){
  function createPreviewVideo (line 268) | function createPreviewVideo(url){
  function insertUpload (line 286) | function insertUpload(){
  function initUpload (line 312) | function initUpload(){
  function UploadFile (line 318) | function UploadFile(target) {
  function addFile (line 412) | function addFile(file) {
  function removeFile (line 547) | function removeFile(file) {
  function updateTotalProgress (line 554) | function updateTotalProgress() {
  function setState (line 572) | function setState(val, files) {
  function updateStatus (line 648) | function updateStatus() {

FILE: public/lib/UEditor/dialogs/wordimage/tangram.js
  function _createString (line 577) | function _createString(){
  function _checkReady (line 587) | function _checkReady(target){
  function _callFn (line 602) | function _callFn(callQueue, target){
  function _createFunName (line 618) | function _createFunName(fun){
  function _render (line 639) | function _render(options){
  function _check (line 728) | function _check(){
  function _call (line 743) | function _call(){
  function getCallBack (line 1197) | function getCallBack(onTimeOut){
  function encodeString (line 1354) | function encodeString(source) {
  function encodeArray (line 1376) | function encodeArray(source) {
  function pad (line 1405) | function pad(source) {
  function encodeDate (line 1413) | function encodeDate(source){

FILE: public/lib/UEditor/dialogs/wordimage/wordimage.js
  function hideFlash (line 24) | function hideFlash(){
  function addOkListener (line 28) | function addOkListener() {
  function addUploadListener (line 59) | function addUploadListener() {
  function showLocalPath (line 66) | function showLocalPath(id) {
  function createFlashUploader (line 83) | function createFlashUploader(opt, callbacks) {
  function extendProperty (line 112) | function extendProperty(fromObj, toObj) {
  function getPasteData (line 123) | function getPasteData(id) {
  function createCopyButton (line 131) | function createCopyButton(id, dataFrom) {

FILE: public/lib/UEditor/third-party/SyntaxHighlighter/shCore.js
  function clone (line 499) | function clone (regex, additionalFlags) {
  function getNativeFlags (line 513) | function getNativeFlags (regex) {
  function runTokens (line 521) | function runTokens (pattern, index, scope, context) {
  function indexOf (line 550) | function indexOf (array, item, from) {
  function defaultGetHtml (line 801) | function defaultGetHtml(highlighter, name)
  function getValue (line 839) | function getValue(name)
  function hasClass (line 1036) | function hasClass(target, className)
  function addClass (line 1046) | function addClass(target, className)
  function removeClass (line 1057) | function removeClass(target, className)
  function toArray (line 1068) | function toArray(source)
  function splitLines (line 1083) | function splitLines(block)
  function getHighlighterId (line 1093) | function getHighlighterId(id)
  function getHighlighterById (line 1104) | function getHighlighterById(id)
  function getHighlighterDivById (line 1114) | function getHighlighterDivById(id)
  function storeHighlighter (line 1124) | function storeHighlighter(highlighter)
  function findElement (line 1137) | function findElement(target, search, reverse /* optional */)
  function findParentElement (line 1170) | function findParentElement(target, className)
  function indexOf (line 1182) | function indexOf(array, searchElement, fromIndex)
  function guid (line 1196) | function guid(prefix)
  function merge (line 1208) | function merge(obj1, obj2)
  function toBoolean (line 1226) | function toBoolean(value)
  function popup (line 1241) | function popup(url, name, width, height, options)
  function attachEvent (line 1265) | function attachEvent(obj, type, func, scope)
  function alert (line 1297) | function alert(str)
  function findBrush (line 1309) | function findBrush(alias, showAlert)
  function eachLine (line 1352) | function eachLine(str, callback)
  function trimFirstAndLastLines (line 1370) | function trimFirstAndLastLines(str)
  function parseParams (line 1390) | function parseParams(str)
  function wrapLinesWithCode (line 1434) | function wrapLinesWithCode(str, css)
  function padNumber (line 1484) | function padNumber(number, length)
  function processTabs (line 1501) | function processTabs(code, tabSize)
  function processSmartTabs (line 1518) | function processSmartTabs(code, tabSize)
  function fixInputString (line 1566) | function fixInputString(str)
  function trim (line 1585) | function trim(str)
  function unindent (line 1595) | function unindent(str)
  function matchesSortCallback (line 1637) | function matchesSortCallback(m1, m2)
  function getMatches (line 1664) | function getMatches(code, regexInfo)
  function processUrls (line 1695) | function processUrls(code)
  function getSyntaxHighlighterScriptTags (line 1723) | function getSyntaxHighlighterScriptTags()
  function stripCData (line 1742) | function stripCData(original)
  function quickCodeHandler (line 1774) | function quickCodeHandler(e)
  function offsetMatches (line 1880) | function offsetMatches(matches, offset)
  function process (line 1886) | function process(match, info)
  function getBrushNameCss (line 2169) | function getBrushNameCss(match)
  function Brush (line 2388) | function Brush()
  function Brush (line 2432) | function Brush()
  function Brush (line 2491) | function Brush()
  function Brush (line 2534) | function Brush()
  function Brush (line 2618) | function Brush()
  function Brush (line 2699) | function Brush()
  function Brush (line 2748) | function Brush()
  function Brush (line 2823) | function Brush()
  function Brush (line 2862) | function Brush()
  function Brush (line 2887) | function Brush()
  function Brush (line 2923) | function Brush()
  function Brush (line 2974) | function Brush()
  function Brush (line 3015) | function Brush()
  function Brush (line 3057) | function Brush()
  function Brush (line 3093) | function Brush()
  function Brush (line 3170) | function Brush()
  function Brush (line 3242) | function Brush()
  function Brush (line 3259) | function Brush()
  function Brush (line 3318) | function Brush()
  function Brush (line 3366) | function Brush()
  function Brush (line 3405) | function Brush()
  function Brush (line 3483) | function Brush()
  function Brush (line 3518) | function Brush()
  function Brush (line 3568) | function Brush()
  function Brush (line 3608) | function Brush()

FILE: public/lib/UEditor/third-party/codemirror/codemirror.js
  function CodeMirror (line 11) | function CodeMirror(place, givenOptions) {
  function lookupKey (line 1870) | function lookupKey(name, extraMap, map) {
  function isModifierKey (line 1885) | function isModifierKey(event) {
  function save (line 1896) | function save() {textarea.value = instance.getValue();}
  function wrappedSubmit (line 1902) | function wrappedSubmit() {
  function copyState (line 1933) | function copyState(mode, state) {
  function startState (line 1945) | function startState(mode, a1, a2) {
  function StringStream (line 1951) | function StringStream(string, tabSize) {
  function cased (line 1990) | function cased(str) {return caseInsensitive ? str.toLowerCase() : str;}
  function MarkedText (line 2006) | function MarkedText(from, to, className, set) {
  function Bookmark (line 2036) | function Bookmark(pos) {
  function Line (line 2072) | function Line(text, styles) {
  function span (line 2234) | function span(text, style) {
  function nextMark (line 2259) | function nextMark() {
  function copyStyles (line 2306) | function copyStyles(from, to, source, dest) {
  function LeafChunk (line 2322) | function LeafChunk(lines) {
  function BranchChunk (line 2356) | function BranchChunk(children) {
  function getLineAt (line 2454) | function getLineAt(chunk, n) {
  function lineNo (line 2464) | function lineNo(line) {
  function lineAtHeight (line 2475) | function lineAtHeight(chunk, h) {
  function heightAtLine (line 2493) | function heightAtLine(chunk, n) {
  function History (line 2510) | function History() {
  function stopMethod (line 2541) | function stopMethod() {e_stop(this);}
  function addStop (line 2543) | function addStop(event) {
  function e_preventDefault (line 2548) | function e_preventDefault(e) {
  function e_stopPropagation (line 2552) | function e_stopPropagation(e) {
  function e_stop (line 2556) | function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}
  function e_target (line 2561) | function e_target(e) {return e.target || e.srcElement;}
  function e_button (line 2562) | function e_button(e) {
  function connect (line 2571) | function connect(node, type, handler, disconnect) {
  function Delayed (line 2584) | function Delayed() {this.id = null;}
  function countColumn (line 2610) | function countColumn(string, end, tabSize) {
  function computedStyle (line 2622) | function computedStyle(elt) {
  function eltOffset (line 2629) | function eltOffset(node, screen) {
  function eltText (line 2665) | function eltText(node) {
  function posEq (line 2670) | function posEq(a, b) {return a.line == b.line && a.ch == b.ch;}
  function posLess (line 2671) | function posLess(a, b) {return a.line < b.line || (a.line == b.line && a...
  function copyPos (line 2672) | function copyPos(x) {return {line: x.line, ch: x.ch};}
  function htmlEscape (line 2675) | function htmlEscape(str) {
  function editEnd (line 2697) | function editEnd(from, to) {
  function indexOf (line 2705) | function indexOf(collection, elt) {
  function isWordChar (line 2711) | function isWordChar(ch) {
  function inText (line 2775) | function inText(stream, state) {
  function inTag (line 2821) | function inTag(stream, state) {
  function inAttribute (line 2842) | function inAttribute(quote) {
  function inBlock (line 2854) | function inBlock(style, terminator) {
  function doctype (line 2866) | function doctype(depth) {
  function pass (line 2888) | function pass() {
  function cont (line 2891) | function cont() {
  function pushContext (line 2896) | function pushContext(tagName, startOfLine) {
  function popContext (line 2906) | function popContext() {
  function element (line 2910) | function element(type) {
  function endtag (line 2926) | function endtag(startOfLine) {
  function endclosetag (line 2935) | function endclosetag(err) {
  function attributes (line 2944) | function attributes(type) {
  function attvalue (line 2950) | function attvalue(type) {
  function attvaluemaybe (line 2955) | function attvaluemaybe(type) {
  function kw (line 3021) | function kw(type) {return {type: type, style: "keyword"};}
  function chain (line 3037) | function chain(stream, state, f) {
  function nextUntilUnescaped (line 3042) | function nextUntilUnescaped(stream, end) {
  function ret (line 3055) | function ret(tp, style, cont) {
  function jsTokenBase (line 3060) | function jsTokenBase(stream, state) {
  function jsTokenString (line 3108) | function jsTokenString(quote) {
  function jsTokenComment (line 3116) | function jsTokenComment(stream, state) {
  function JSLexical (line 3132) | function JSLexical(indented, column, type, align, prev, info) {
  function inScope (line 3141) | function inScope(state, varname) {
  function parseJS (line 3146) | function parseJS(state, style, type, content, stream) {
  function pass (line 3170) | function pass() {
  function cont (line 3173) | function cont() {
  function register (line 3177) | function register(varname) {
  function pushcontext (line 3190) | function pushcontext() {
  function popcontext (line 3194) | function popcontext() {
  function pushlex (line 3198) | function pushlex(type, info) {
  function poplex (line 3206) | function poplex() {
  function expect (line 3216) | function expect(wanted) {
  function statement (line 3224) | function statement(type) {
  function expression (line 3242) | function expression(type) {
  function maybeexpression (line 3252) | function maybeexpression(type) {
  function maybeoperator (line 3257) | function maybeoperator(type, value) {
  function maybelabel (line 3265) | function maybelabel(type) {
  function property (line 3269) | function property(type) {
  function objprop (line 3272) | function objprop(type) {
  function commasep (line 3276) | function commasep(what, end) {
  function block (line 3287) | function block(type) {
  function vardef1 (line 3291) | function vardef1(type, value) {
  function vardef2 (line 3295) | function vardef2(type, value) {
  function forspec1 (line 3299) | function forspec1(type) {
  function formaybein (line 3305) | function formaybein(type, value) {
  function forspec2 (line 3309) | function forspec2(type, value) {
  function forspec3 (line 3314) | function forspec3(type) {
  function functiondef (line 3317) | function functiondef(type, value) {
  function funarg (line 3321) | function funarg(type, value) {
  function ret (line 3377) | function ret(style, tp) {type = tp; return style;}
  function tokenBase (line 3379) | function tokenBase(stream, state) {
  function tokenCComment (line 3420) | function tokenCComment(stream, state) {
  function tokenSGMLComment (line 3432) | function tokenSGMLComment(stream, state) {
  function tokenString (line 3444) | function tokenString(quote) {
  function html (line 3504) | function html(stream, state) {
  function maybeBackup (line 3520) | function maybeBackup(stream, pat, style) {
  function javascript (line 3526) | function javascript(stream, state) {
  function css (line 3536) | function css(stream, state) {

FILE: public/lib/UEditor/third-party/highcharts/adapters/standalone-framework.js
  function o (line 8) | function o(c){function a(a,b,d){a.removeEventListener(b,d,!1)}function d...

FILE: public/lib/UEditor/third-party/highcharts/adapters/standalone-framework.src.js
  function augment (line 29) | function augment(obj) {

FILE: public/lib/UEditor/third-party/highcharts/highcharts-more.js
  function J (line 8) | function J(a,b,c){this.init.call(this,a,b,c)}
  function K (line 8) | function K(a,b,c){a.call(this,b,c);if(this.chart.polar)this.closeSegment...
  function L (line 8) | function L(a,b){var c=this.chart,d=this.options.animation,g=this.group,f...

FILE: public/lib/UEditor/third-party/highcharts/highcharts-more.src.js
  function Pane (line 42) | function Pane(options, chart, firstAxis) {
  function initArea (line 2028) | function initArea(proceed, chart, options) {
  function polarAnimate (line 2199) | function polarAnimate(proceed, init) {

FILE: public/lib/UEditor/third-party/highcharts/highcharts.js
  function r (line 8) | function r(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return a}
  function x (line 8) | function x(){var a,b=arguments.length,c={},d=function(a,b){var c,h;typeo...
  function C (line 8) | function C(a,b){return parseInt(a,b||10)}
  function ea (line 8) | function ea(a){return typeof a==="string"}
  function T (line 8) | function T(a){return typeof a===
  function Ia (line 9) | function Ia(a){return Object.prototype.toString.call(a)==="[object Array]"}
  function sa (line 9) | function sa(a){return typeof a==="number"}
  function na (line 9) | function na(a){return R.log(a)/R.LN10}
  function fa (line 9) | function fa(a){return R.pow(10,a)}
  function ga (line 9) | function ga(a,b){for(var c=a.length;c--;)if(a[c]===b){a.splice(c,1);break}}
  function u (line 9) | function u(a){return a!==w&&a!==null}
  function v (line 9) | function v(a,b,c){var d,e;if(ea(b))u(c)?a.setAttribute(b,c):a&&a.getAttr...
  function ja (line 9) | function ja(a){return Ia(a)?
  function o (line 10) | function o(){var a=arguments,b,c,d=a.length;for(b=0;b<d;b++)if(c=a[b],ty...
  function K (line 10) | function K(a,b){if(ta&&b&&b.opacity!==w)b.filter="alpha(opacity="+b.opac...
  function U (line 10) | function U(a,b,c,d,e){a=y.createElement(a);b&&r(a,b);e&&K(a,{padding:0,b...
  function ha (line 10) | function ha(a,b){var c=function(){};c.prototype=new a;r(c.prototype,b);r...
  function Aa (line 10) | function Aa(a,b,c,d){var e=M.lang,a=+a||0,f=b===-1?(a.toString().split("...
  function Ba (line 11) | function Ba(a,b){return Array((b||2)+1-String(a).length).join(0)+a}
  function mb (line 11) | function mb(a,b,c){var d=a[b];a[b]=function(){var a=Array.prototype.slic...
  function Ca (line 11) | function Ca(a,b){for(var c="{",d=!1,
  function nb (line 12) | function nb(a){return R.pow(10,P(R.log(a)/R.LN10))}
  function ob (line 12) | function ob(a,b,c,d){var e,c=o(c,1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allo...
  function Cb (line 13) | function Cb(a,b){var c=b||[[Db,[1,2,5,10,20,25,50,100,200,500]],[pb,[1,2...
  function Eb (line 14) | function Eb(a,b,c,d){var e=[],f={},g=M.global.useUTC,h,i=new Date(b),j=a...
  function Jb (line 15) | function Jb(){this.symbol=this.color=0}
  function Kb (line 15) | function Kb(a,b){var c=a.length,d,e;for(e=0;e<c;e++)a[e].ss_i=e;a.sort(f...
  function Ja (line 16) | function Ja(a){for(var b=a.length,c=a[0];b--;)a[b]<c&&(c=a[b]);return c}
  function va (line 16) | function va(a){for(var b=a.length,c=a[0];b--;)a[b]>c&&(c=a[b]);return c}
  function Ka (line 16) | function Ka(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destr...
  function Ta (line 16) | function Ta(a){cb||(cb=U(Ea));a&&cb.appendChild(a);cb.innerHTML=""}
  function ka (line 16) | function ka(a,b){var c="Highcharts error #"+a+": www.highcharts.com/erro...
  function ia (line 16) | function ia(a){return parseFloat(a.toPrecision(14))}
  function La (line 17) | function La(a,b){Fa=o(a,b.animation)}
  function Lb (line 17) | function Lb(){var a=M.global.useUTC,b=a?"getUTC":"get",c=a?"setUTC":"set...
  function wa (line 17) | function wa(){}
  function Ma (line 17) | function Ma(a,b,c,d){this.axis=a;this.pos=b;this.type=c||"";this.isNew=!...
  function vb (line 17) | function vb(a,b){this.axis=a;if(b)this.options=
  function Mb (line 18) | function Mb(a,b,c,d,e,f){var g=a.chart.inverted;this.axis=a;this.isNegat...
  function db (line 18) | function db(){this.init.apply(this,arguments)}
  function wb (line 18) | function wb(){this.init.apply(this,arguments)}
  function xb (line 19) | function xb(a,b){this.init(a,b)}
  function eb (line 19) | function eb(a,b){this.init(a,b)}
  function yb (line 19) | function yb(){this.init.apply(this,arguments)}
  function j (line 72) | function j(){var a,b;a=o.element.style;L=(Oa===void 0||la===void 0||q.st...
  function k (line 73) | function k(){var a=q.styles,a=a&&a.textAlign,b=kb+da*(1-s),c;c=h?0:v;if(...
  function l (line 73) | function l(a,b){A?A.attr(a,b):lb[a]=b}
  function m (line 73) | function m(){o.add(q);q.attr({text:a,x:b,y:c});A&&u(e)&&q.attr({anchorX:...
  function a (line 93) | function a(){var a=b.length,d;for(d=0;d<a;d++)b[d]();b=[]}
  function a (line 193) | function a(a){var g=c.width||jb(d,"width"),h=c.height||jb(d,"height"),a=...
  function a (line 248) | function a(){var a={width:b.yAxis.len,height:b.xAxis.len};n(["group","ma...

FILE: public/lib/UEditor/third-party/highcharts/highcharts.src.js
  function extend (line 128) | function extend(a, b) {
  function merge (line 145) | function merge() {
  function hash (line 188) | function hash() {
  function pInt (line 204) | function pInt(s, mag) {
  function isString (line 212) | function isString(s) {
  function isObject (line 220) | function isObject(obj) {
  function isArray (line 228) | function isArray(obj) {
  function isNumber (line 236) | function isNumber(n) {
  function log2lin (line 240) | function log2lin(num) {
  function lin2log (line 243) | function lin2log(num) {
  function erase (line 252) | function erase(arr, item) {
  function defined (line 267) | function defined(obj) {
  function attr (line 279) | function attr(elem, prop, value) {
  function splat (line 308) | function splat(obj) {
  function pick (line 316) | function pick() {
  function css (line 334) | function css(el, styles) {
  function createElement (line 351) | function createElement(tag, attribs, styles, parent, nopad) {
  function extendClass (line 373) | function extendClass(parent, members) {
  function numberFormat (line 387) | function numberFormat(number, decimals, decPoint, thousandsSep) {
  function pad (line 409) | function pad(number, length) {
  function wrap (line 422) | function wrap(obj, method, func) {
  function formatSingle (line 501) | function formatSingle(format, val) {
  function format (line 525) | function format(str, ctx) {
  function getMagnitude (line 575) | function getMagnitude(num) {
  function normalizeTickInterval (line 586) | function normalizeTickInterval(interval, multiples, magnitude, options) {
  function normalizeTimeTickInterval (line 629) | function normalizeTimeTickInterval(tickInterval, unitsOption) {
  function getTimeTicks (line 710) | function getTimeTicks(normalizedInterval, min, max, startOfWeek) {
  function ChartCounters (line 822) | function ChartCounters() {
  function stableSort (line 852) | function stableSort(arr, sortFunction) {
  function arrayMin (line 878) | function arrayMin(data) {
  function arrayMax (line 895) | function arrayMax(data) {
  function destroyObjectProperties (line 914) | function destroyObjectProperties(obj, except) {
  function discardElement (line 933) | function discardElement(element) {
  function error (line 949) | function error(code, stop) {
  function correctFloat (line 962) | function correctFloat(num) {
  function setAnimation (line 974) | function setAnimation(animation, chart) {
  function setTimeMethods (line 1821) | function setTimeMethods() {
  function setOptions (line 1854) | function setOptions(options) {
  function getOptions (line 1874) | function getOptions() {
  function init (line 1891) | function init(input) {
  function get (line 1925) | function get(format) {
  function brighten (line 1954) | function brighten(alpha) {
  function setOpacity (line 1979) | function setOpacity(alpha) {
  function SVGElement (line 2000) | function SVGElement() {}
  function updateBoxSize (line 4272) | function updateBoxSize() {
  function updateTextPadding (line 4312) | function updateTextPadding() {
  function boxAttr (line 4344) | function boxAttr(key, value) {
  function getSizeAfterAdd (line 4352) | function getSizeAfterAdd() {
  function drawDeferred (line 5727) | function drawDeferred() {
  function Tick (line 5763) | function Tick(axis, pos, type, noLabel) {
  function PlotLineOrBand (line 6170) | function PlotLineOrBand(axis, options) {
  function StackItem (line 6345) | function StackItem(axis, options, isNegative, x, stackOption, stacking) {
  function Axis (line 6456) | function Axis() {
  function Tooltip (line 8560) | function Tooltip() {
  function Pointer (line 9010) | function Pointer(chart, options) {
  function Legend (line 9848) | function Legend(chart, options) {
  function Chart (line 10518) | function Chart() {
  function reflow (line 11514) | function reflow(e) {
  function setInvert (line 14818) | function setInvert() {

FILE: public/lib/UEditor/third-party/highcharts/modules/annotations.js
  function m (line 1) | function m(a){return typeof a==="number"}
  function n (line 1) | function n(a){return a!==D&&a!==null}

FILE: public/lib/UEditor/third-party/highcharts/modules/annotations.src.js
  function defaultOptions (line 26) | function defaultOptions(shapeType) {
  function isArray (line 64) | function isArray(obj) {
  function isNumber (line 68) | function isNumber(n) {
  function defined (line 72) | function defined(obj) {
  function translatePath (line 76) | function translatePath(d, xAxis, yAxis, xOffset, yOffset) {

FILE: public/lib/UEditor/third-party/highcharts/modules/canvas-tools.js
  function RGBColor (line 21) | function RGBColor(m){this.ok=!1;m.charAt(0)=="#"&&(m=m.substr(1,6));var ...
  function m (line 31) | function m(){var a={FRAMERATE:30,MAX_VIRTUAL_PIXELS:3E4};a.init=function...

FILE: public/lib/UEditor/third-party/highcharts/modules/canvas-tools.src.js
  function RGBColor (line 8) | function RGBColor(color_string)
  function build (line 382) | function build() {

FILE: public/lib/UEditor/third-party/highcharts/modules/drilldown.js
  function q (line 1) | function q(b,a,c){return"rgba("+[Math.round(b[0]+(a[0]-b[0])*c),Math.rou...

FILE: public/lib/UEditor/third-party/highcharts/modules/drilldown.src.js
  function tweenColors (line 28) | function tweenColors(startColor, endColor, pos) {

FILE: public/lib/UEditor/third-party/highcharts/modules/map.js
  function x (line 8) | function x(a,b,c){for(var d=4,e=[];d--;)e[d]=Math.round(b.rgba[d]+(a.rgb...

FILE: public/lib/UEditor/third-party/highcharts/modules/map.src.js
  function tweenColors (line 40) | function tweenColors(from, to, pos) {

FILE: public/lib/UEditor/third-party/highcharts/modules/no-data-to-display.js
  function f (line 10) | function f(){return!!this.points.length}
  function g (line 10) | function g(){this.hasData()?this.hideNoData():this.showNoData()}

FILE: public/lib/UEditor/third-party/highcharts/modules/no-data-to-display.src.js
  function hasDataPie (line 43) | function hasDataPie() {
  function handleNoData (line 111) | function handleNoData() {

FILE: public/lib/UEditor/third-party/jquery-1.10.2.js
  function isArraylike (line 983) | function isArraylike( obj ) {
  function Sizzle (line 1183) | function Sizzle( selector, context, results, seed ) {
  function createCache (line 1298) | function createCache() {
  function markFunction (line 1316) | function markFunction( fn ) {
  function assert (line 1325) | function assert( fn ) {
  function addHandle (line 1347) | function addHandle( attrs, handler ) {
  function siblingCheck (line 1362) | function siblingCheck( a, b ) {
  function createInputPseudo (line 1389) | function createInputPseudo( type ) {
  function createButtonPseudo (line 1400) | function createButtonPseudo( type ) {
  function createPositionalPseudo (line 1411) | function createPositionalPseudo( fn ) {
  function setFilters (line 2394) | function setFilters() {}
  function tokenize (line 2398) | function tokenize( selector, parseOnly ) {
  function toSelector (line 2465) | function toSelector( tokens ) {
  function addCombinator (line 2475) | function addCombinator( matcher, combinator, base ) {
  function elementMatcher (line 2525) | function elementMatcher( matchers ) {
  function condense (line 2539) | function condense( unmatched, map, filter, context, xml ) {
  function setMatcher (line 2560) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
  function matcherFromTokens (line 2653) | function matcherFromTokens( tokens ) {
  function matcherFromGroupMatchers (line 2708) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
  function multipleContexts (line 2836) | function multipleContexts( selector, contexts, results ) {
  function select (line 2845) | function select( selector, context, results, seed ) {
  function createOptions (line 2985) | function createOptions( options ) {
  function internalData (line 3568) | function internalData( elem, name, data, pvt /* Internal Use Only */ ){
  function internalRemoveData (line 3657) | function internalRemoveData( elem, name, pvt ) {
  function dataAttr (line 3854) | function dataAttr( elem, key, data ) {
  function isEmptyDataObject (line 3886) | function isEmptyDataObject( obj ) {
  function returnTrue (line 4712) | function returnTrue() {
  function returnFalse (line 4716) | function returnFalse() {
  function safeActiveElement (line 4720) | function safeActiveElement() {
  function sibling (line 5838) | function sibling( cur, dir ) {
  function winnow (line 5956) | function winnow( elements, qualifier, not ) {
  function createSafeFragment (line 5984) | function createSafeFragment( document ) {
  function manipulationTarget (line 6298) | function manipulationTarget( elem, content ) {
  function disableScript (line 6308) | function disableScript( elem ) {
  function restoreScript (line 6312) | function restoreScript( elem ) {
  function setGlobalEval (line 6323) | function setGlobalEval( elems, refElements ) {
  function cloneCopyEvent (line 6331) | function cloneCopyEvent( src, dest ) {
  function fixCloneNodeIssues (line 6359) | function fixCloneNodeIssues( src, dest ) {
  function getAll (line 6452) | function getAll( context, tag ) {
  function fixDefaultChecked (line 6475) | function fixDefaultChecked( elem ) {
  function vendorPropName (line 6817) | function vendorPropName( style, name ) {
  function isHidden (line 6839) | function isHidden( elem, el ) {
  function showHide (line 6846) | function showHide( elements, show ) {
  function setPositiveNumber (line 7175) | function setPositiveNumber( elem, value, subtract ) {
  function augmentWidthOrHeight (line 7183) | function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
  function getWidthOrHeight (line 7222) | function getWidthOrHeight( elem, name, extra ) {
  function css_defaultDisplay (line 7266) | function css_defaultDisplay( nodeName ) {
  function actualDisplay (line 7298) | function actualDisplay( name, doc ) {
  function buildParams (line 7527) | function buildParams( prefix, obj, traditional, add ) {
  function addToPrefiltersOrTransports (line 7642) | function addToPrefiltersOrTransports( structure ) {
  function inspectPrefiltersOrTransports (line 7674) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
  function ajaxExtend (line 7701) | function ajaxExtend( target, src ) {
  function done (line 8149) | function done( status, nativeStatusText, responses, headers ) {
  function ajaxHandleResponses (line 8296) | function ajaxHandleResponses( s, jqXHR, responses ) {
  function ajaxConvert (line 8351) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
  function createStandardXHR (line 8619) | function createStandardXHR() {
  function createActiveXHR (line 8625) | function createActiveXHR() {
  function createFxNow (line 8871) | function createFxNow() {
  function createTween (line 8878) | function createTween( value, prop, animation ) {
  function Animation (line 8892) | function Animation( elem, properties, options ) {
  function propFilter (line 8996) | function propFilter( props, specialEasing ) {
  function defaultPrefilter (line 9063) | function defaultPrefilter( elem, props, opts ) {
  function Tween (line 9188) | function Tween( elem, options, prop, end, easing ) {
  function genFx (line 9412) | function genFx( type, includeWidth ) {
  function getWindow (line 9708) | function getWindow( elem ) {

FILE: public/lib/UEditor/third-party/video-js/video.dev.js
  function returnTrue (line 410) | function returnTrue() { return true; }
  function returnFalse (line 411) | function returnFalse() { return false; }
  function F (line 656) | function F() {}
  function createMethod (line 5055) | function createMethod(methodName){
  function walk (line 6995) | function walk(holder, key) {

FILE: public/lib/UEditor/third-party/video-js/video.js
  function m (line 1) | function m(){return function(){}}
  function p (line 1) | function p(a){return function(){return this[a]}}
  function s (line 1) | function s(a){return function(){return a}}
  function u (line 1) | function u(a,c,d){if("string"===typeof a){0===a.indexOf("#")&&(a=a.slice...
  function c (line 6) | function c(){return f}
  function d (line 6) | function d(){return l}
  function e (line 8) | function e(){u.o(a,c,e);d.apply(this,arguments)}
  function c (line 9) | function c(){}
  function e (line 10) | function e(){return c.apply(a,arguments)}
  function D (line 25) | function D(a){a.u("vjs-lock-showing")}
  function E (line 26) | function E(a,c,d,e){if(d!==b)return a.a.style[c]=-1!==(""+d).indexOf("%"...
  function F (line 32) | function F(a,c){var d,e,g,j;d=a.a;e=u.ad(d);j=g=d.offsetWidth;d=a.handle...
  function ca (line 34) | function ca(a,c){a.Z(c);c.d("click",u.bind(a,function(){D(this)}))}
  function H (line 37) | function H(a){a.pa=f;a.wa.n("vjs-lock-showing");a.a.setAttribute("aria-p...
  function G (line 38) | function G(a){a.pa=l;D(a.wa);a.a.setAttribute("aria-pressed",l)}
  function da (line 42) | function da(a){var c={sources:[],tracks:[]};u.k.B(c,u.xb(a));if(a.hasChi...
  function I (line 45) | function I(a,c,d){a.h?(a.aa=l,a.h.D(),a.Eb&&(a.Eb=l,clearInterval(a.Ra))...
  function J (line 46) | function J(a){a.Fb=l;a.za();a.o("play",a.Cc);a.o("pause",a.za)}
  function L (line 48) | function L(a,c,d){if(a.h&&!a.h.aa)a.h.L(function(){this[c](d)});else try...
  function K (line 48) | function K(a,c){if(a.h&&a.h.aa)try{return a.h[c]()}catch(d){throw a.h[c]...
  function M (line 53) | function M(a){a.cd=l;u.o(document,"keydown",a.lc);document.documentEleme...
  function ea (line 86) | function ea(){var a=u.media.Va[i];return function(){throw Error('The "'+...
  function fa (line 99) | function fa(){var a=R[T],c=a.charAt(0).toUpperCase()+a.slice(1);Q["set"+...
  function U (line 99) | function U(a){Q[a]=function(){return this.a.vjs_getProperty(a)}}
  function V (line 105) | function V(a){a.Aa=a.Aa||[];return a.Aa}
  function W (line 105) | function W(a,c,d){for(var e=a.Aa,g=0,j=e.length,k,q;g<j;g++)k=e[g],k.id(...
  function X (line 108) | function X(a){0===a.ha&&a.load();0===a.ga&&(a.b.d("timeupdate",u.bind(a,...
  function Y (line 110) | function Y(a){var c=a.split(":");a=0;var d,e,g;3==c.length?(d=c[0],e=c[1...
  function d (line 121) | function d(a,e){var k,q,n=a[e];if(n&&"object"===typeof n)for(k in n)Obje...
  function $ (line 123) | function $(a,c){var d=a.split("."),e=ga;!(d[0]in e)&&e.execScript&&e.exe...

FILE: public/lib/UEditor/third-party/webuploader/webuploader.custom.js
  function uncurryThis (line 194) | function uncurryThis( fn ) {
  function bindFn (line 200) | function bindFn( fn, context ) {
  function createObject (line 206) | function createObject( proto ) {
  function findHandlers (line 495) | function findHandlers( arr, name, callback, context ) {
  function eachEvent (line 505) | function eachEvent( events, callback, iterator ) {
  function triggerHanders (line 512) | function triggerHanders( events, args ) {
  function Uploader (line 721) | function Uploader( opts ) {
  function Runtime (line 903) | function Runtime( options ) {
  function RuntimeClient (line 1036) | function RuntimeClient( component, standalone ) {
  function Blob (line 1139) | function Blob( ruid, source ) {
  function File (line 1183) | function File( ruid, file ) {
  function FilePicker (line 1223) | function FilePicker( opts ) {
  function isArrayLike (line 1358) | function isArrayLike( obj ) {
  function Widget (line 1375) | function Widget( uploader ) {
  function Image (line 1653) | function Image( opts ) {
  function gid (line 2022) | function gid() {
  function WUFile (line 2033) | function WUFile( source ) {
  function Queue (line 2210) | function Queue() {
  function Transport (line 2758) | function Transport( opts ) {
  function CuteFile (line 2971) | function CuteFile( file, chunkSize ) {
  function CompBase (line 3541) | function CompBase( owner, runtime ) {
  function Html5Runtime (line 3573) | function Html5Runtime() {
  function detectVerticalSquash (line 4559) | function detectVerticalSquash( img, iw, ih ) {
  function detectSubsampling (line 4611) | function detectSubsampling( img ) {
  function JPEGEncoder (line 4727) | function JPEGEncoder(quality) {

FILE: public/lib/UEditor/third-party/webuploader/webuploader.flashonly.js
  function uncurryThis (line 194) | function uncurryThis( fn ) {
  function bindFn (line 200) | function bindFn( fn, context ) {
  function createObject (line 206) | function createObject( proto ) {
  function findHandlers (line 495) | function findHandlers( arr, name, callback, context ) {
  function eachEvent (line 505) | function eachEvent( events, callback, iterator ) {
  function triggerHanders (line 512) | function triggerHanders( events, args ) {
  function Uploader (line 721) | function Uploader( opts ) {
  function Runtime (line 903) | function Runtime( options ) {
  function RuntimeClient (line 1036) | function RuntimeClient( component, standalone ) {
  function Blob (line 1139) | function Blob( ruid, source ) {
  function File (line 1183) | function File( ruid, file ) {
  function FilePicker (line 1223) | function FilePicker( opts ) {
  function isArrayLike (line 1358) | function isArrayLike( obj ) {
  function Widget (line 1375) | function Widget( uploader ) {
  function Image (line 1653) | function Image( opts ) {
  function gid (line 2022) | function gid() {
  function WUFile (line 2033) | function WUFile( source ) {
  function Queue (line 2210) | function Queue() {
  function Transport (line 2758) | function Transport( opts ) {
  function CuteFile (line 2971) | function CuteFile( file, chunkSize ) {
  function hashString (line 3715) | function hashString( str ) {
  function CompBase (line 3761) | function CompBase( owner, runtime ) {
  function getFlashVersion (line 3795) | function getFlashVersion() {
  function FlashRuntime (line 3813) | function FlashRuntime() {

FILE: public/lib/UEditor/third-party/webuploader/webuploader.html5only.js
  function uncurryThis (line 194) | function uncurryThis( fn ) {
  function bindFn (line 200) | function bindFn( fn, context ) {
  function createObject (line 206) | function createObject( proto ) {
  function findHandlers (line 495) | function findHandlers( arr, name, callback, context ) {
  function eachEvent (line 505) | function eachEvent( events, callback, iterator ) {
  function triggerHanders (line 512) | function triggerHanders( events, args ) {
  function Uploader (line 721) | function Uploader( opts ) {
  function Runtime (line 903) | function Runtime( options ) {
  function RuntimeClient (line 1036) | function RuntimeClient( component, standalone ) {
  function DragAndDrop (line 1142) | function DragAndDrop( opts ) {
  function isArrayLike (line 1193) | function isArrayLike( obj ) {
  function Widget (line 1210) | function Widget( uploader ) {
  function FilePaste (line 1419) | function FilePaste( opts ) {
  function Blob (line 1500) | function Blob( ruid, source ) {
  function File (line 1544) | function File( ruid, file ) {
  function FilePicker (line 1584) | function FilePicker( opts ) {
  function Image (line 1847) | function Image( opts ) {
  function gid (line 2216) | function gid() {
  function WUFile (line 2227) | function WUFile( source ) {
  function Queue (line 2404) | function Queue() {
  function Transport (line 2952) | function Transport( opts ) {
  function CuteFile (line 3165) | function CuteFile( file, chunkSize ) {
  function hashString (line 3909) | function hashString( str ) {
  function CompBase (line 3955) | function CompBase( owner, runtime ) {
  function Html5Runtime (line 3987) | function Html5Runtime() {
  function detectVerticalSquash (line 5233) | function detectVerticalSquash( img, iw, ih ) {
  function detectSubsampling (line 5285) | function detectSubsampling( img ) {

FILE: public/lib/UEditor/third-party/webuploader/webuploader.js
  function uncurryThis (line 194) | function uncurryThis( fn ) {
  function bindFn (line 200) | function bindFn( fn, context ) {
  function createObject (line 206) | function createObject( proto ) {
  function findHandlers (line 495) | function findHandlers( arr, name, callback, context ) {
  function eachEvent (line 505) | function eachEvent( events, callback, iterator ) {
  function triggerHanders (line 512) | function triggerHanders( events, args ) {
  function Uploader (line 721) | function Uploader( opts ) {
  function Runtime (line 903) | function Runtime( options ) {
  function RuntimeClient (line 1036) | function RuntimeClient( component, standalone ) {
  function DragAndDrop (line 1142) | function DragAndDrop( opts ) {
  function isArrayLike (line 1193) | function isArrayLike( obj ) {
  function Widget (line 1210) | function Widget( uploader ) {
  function FilePaste (line 1419) | function FilePaste( opts ) {
  function Blob (line 1500) | function Blob( ruid, source ) {
  function File (line 1544) | function File( ruid, file ) {
  function FilePicker (line 1584) | function FilePicker( opts ) {
  function Image (line 1847) | function Image( opts ) {
  function gid (line 2216) | function gid() {
  function WUFile (line 2227) | function WUFile( source ) {
  function Queue (line 2404) | function Queue() {
  function Transport (line 2952) | function Transport( opts ) {
  function CuteFile (line 3165) | function CuteFile( file, chunkSize ) {
  function hashString (line 3909) | function hashString( str ) {
  function CompBase (line 3955) | function CompBase( owner, runtime ) {
  function Html5Runtime (line 3987) | function Html5Runtime() {
  function JPEGEncoder (line 5008) | function JPEGEncoder(quality) {
  function detectVerticalSquash (line 6035) | function detectVerticalSquash( img, iw, ih ) {
  function detectSubsampling (line 6087) | function detectSubsampling( img ) {
  function getFlashVersion (line 6341) | function getFlashVersion() {
  function FlashRuntime (line 6359) | function FlashRuntime() {

FILE: public/lib/UEditor/third-party/webuploader/webuploader.withoutimage.js
  function uncurryThis (line 194) | function uncurryThis( fn ) {
  function bindFn (line 200) | function bindFn( fn, context ) {
  function createObject (line 206) | function createObject( proto ) {
  function findHandlers (line 495) | function findHandlers( arr, name, callback, context ) {
  function eachEvent (line 505) | function eachEvent( events, callback, iterator ) {
  function triggerHanders (line 512) | function triggerHanders( events, args ) {
  function Uploader (line 721) | function Uploader( opts ) {
  function Runtime (line 903) | function Runtime( options ) {
  function RuntimeClient (line 1036) | function RuntimeClient( component, standalone ) {
  function DragAndDrop (line 1142) | function DragAndDrop( opts ) {
  function isArrayLike (line 1193) | function isArrayLike( obj ) {
  function Widget (line 1210) | function Widget( uploader ) {
  function FilePaste (line 1419) | function FilePaste( opts ) {
  function Blob (line 1500) | function Blob( ruid, source ) {
  function File (line 1544) | function File( ruid, file ) {
  function FilePicker (line 1584) | function FilePicker( opts ) {
  function gid (line 1850) | function gid() {
  function WUFile (line 1861) | function WUFile( source ) {
  function Queue (line 2038) | function Queue() {
  function Transport (line 2586) | function Transport( opts ) {
  function CuteFile (line 2799) | function CuteFile( file, chunkSize ) {
  function hashString (line 3543) | function hashString( str ) {
  function CompBase (line 3589) | function CompBase( owner, runtime ) {
  function Html5Runtime (line 3621) | function Html5Runtime() {
  function getFlashVersion (line 4233) | function getFlashVersion() {
  function FlashRuntime (line 4251) | function FlashRuntime() {

FILE: public/lib/UEditor/third-party/zeroclipboard/ZeroClipboard.js
  function parseFlashVersion (line 521) | function parseFlashVersion(desc) {
  function isPepperFlash (line 526) | function isPepperFlash(flashPlayerFileName) {
  function inspectPlugin (line 529) | function inspectPlugin(plugin) {

FILE: public/lib/UEditor/ueditor.all.js
  function getItem (line 888) | function getItem(doc, obj) {
  function opt (line 1037) | function opt(obj, name) {
  function doReady (line 1148) | function doReady(doc) {
  function encodeString (line 1347) | function encodeString(source) {
  function encodeArray (line 1365) | function encodeArray(source) {
  function pad (line 1390) | function pad(source) {
  function encodeDate (line 1394) | function encodeDate(source){
  function getListener (line 1666) | function getListener(obj, type, force) {
  function _ (line 1685) | function _( s ) {
  function getDomNode (line 1870) | function getDomNode(node, start, ltr, startFromChild, fn, guard) {
  function clear (line 2470) | function clear(next, dir) {
  function remove (line 2965) | function remove(dir) {
  function merge (line 3156) | function merge(rtl, start, node) {
  function updateCollapse (line 4308) | function updateCollapse(range) {
  function selectOneNode (line 4315) | function selectOneNode(rng){
  function setEndPoint (line 4318) | function setEndPoint(toStart, node, offset, range) {
  function execContentsAction (line 4341) | function execContentsAction(range, action) {
  function removeFillData (line 4488) | function removeFillData(doc, excludeNode) {
  function mergeSibling (line 4514) | function mergeSibling(node, dir) {
  function check (line 5017) | function check(node){
  function adjust (line 5238) | function adjust(r, c) {
  function checkOffset (line 5739) | function checkOffset(rng){
  function getAddress (line 5893) | function getAddress(isStart){
  function getNode (line 5979) | function getNode(address,isStart){
  function getBoundaryInformation (line 6140) | function getBoundaryInformation( range, start ) {
  function transformIERangeToRange (line 6210) | function transformIERangeToRange( ieRange, range ) {
  function _getIERange (line 6229) | function _getIERange( sel ) {
  function optimze (line 6379) | function optimze( range ) {
  function setValue (line 6545) | function setValue(form, editor) {
  function loadPlugins (line 6573) | function loadPlugins(me){
  function checkCurLang (line 6580) | function checkCurLang(I18N){
  function langReadied (line 6586) | function langReadied(me){
  function isCdataDiv (line 7354) | function isCdataDiv(node){
  function clear (line 7818) | function clear() {
  function showErrorMsg (line 8118) | function showErrorMsg(msg) {
  function json2str (line 8182) | function json2str(json) {
  function doAjax (line 8202) | function doAjax(url, ajaxOptions) {
  function doJsonp (line 8259) | function doJsonp(url, opts) {
  function isWordDocument (line 8442) | function isWordDocument( str ) {
  function transUnit (line 8446) | function transUnit( v ) {
  function filterPasteWord (line 8453) | function filterPasteWord( str ) {
  function insertLine (line 8668) | function insertLine(arr, current, begin) {
  function insertIndent (line 8673) | function insertIndent(arr, current) {
  function nodeToHtml (line 8699) | function nodeToHtml(node, arr, formatter, current) {
  function isText (line 8723) | function isText(node, arr) {
  function isElement (line 8733) | function isElement(node, arr, formatter, current) {
  function isComment (line 8783) | function isComment(node, arr) {
  function getNodeById (line 8787) | function getNodeById(root, id) {
  function getNodesByTagName (line 8801) | function getNodesByTagName(node, tagName, arr) {
  function nodeTraversal (line 8811) | function nodeTraversal(root,fn){
  function exec (line 9319) | function exec(name, val) {
  function text (line 9435) | function text(parent, data) {
  function element (line 9448) | function element(parent, tagName, htmlattr) {
  function comment (line 9493) | function comment(parent, data) {
  function filterNode (line 9588) | function filterNode(node,rules){
  function getUserData (line 9866) | function getUserData() {
  function tdParent (line 9986) | function tdParent(node){
  function isLine (line 10523) | function isLine(node,notEmpty){
  function removeNotAttributeSpan (line 10541) | function removeNotAttributeSpan(node){
  function autotype (line 10549) | function autotype(type,html){
  function DBC2SB (line 10730) | function DBC2SB(str) {
  function ToDBC (line 10746) | function ToDBC(txtstring) {
  function readLocalOpts (line 10764) | function readLocalOpts() {
  function stringToObj (line 10837) | function stringToObj(str) {
  function setBackground (line 10847) | function setBackground(obj) {
  function unhtmlData (line 11132) | function unhtmlData(imgCi) {
  function mergeWithParent (line 11495) | function mergeWithParent(node){
  function mergeChild (line 11511) | function mergeChild(rng,cmdName,value){
  function mergesibling (line 11534) | function mergesibling(rng,cmdName,value) {
  function optimize (line 11899) | function optimize( range ) {
  function doLink (line 11927) | function doLink(range,opt,me){
  function deleteIframe (line 12039) | function deleteIframe(){
  function isRedundantSpan (line 12102) | function isRedundantSpan (node) {
  function doRemove (line 12121) | function doRemove( range ) {
  function getObj (line 12284) | function getObj(editor){
  function formatTime (line 13051) | function formatTime(date, format) {
  function formatDate (line 13058) | function formatDate(date, format) {
  function fillNode (line 13890) | function fillNode(node){
  function isHr (line 13907) | function isHr(node){
  function compareAddr (line 14194) | function compareAddr(indexA, indexB) {
  function compareRangeAddress (line 14204) | function compareRangeAddress(rngAddrA, rngAddrB) {
  function UndoManager (line 14214) | function UndoManager() {
  function saveScene (line 14342) | function saveScene() {
  function save (line 14411) | function save(cont){
  function initZeroClipboard (line 14461) | function initZeroClipboard() {
  function getClipboardData (line 14541) | function getClipboardData(callback) {
  function getPureHtml (line 14591) | function getPureHtml(html){
  function filter (line 14619) | function filter(div) {
  function transP (line 14848) | function transP(node){
  function removeNode (line 14852) | function removeNode(node){
  function listToArray (line 14988) | function listToArray(list){
  function getStyle (line 15091) | function getStyle(node){
  function checkListType (line 15210) | function checkListType(content,container){
  function appendLi (line 15237) | function appendLi(list,p,type){
  function adjustListStyle (line 15291) | function adjustListStyle(doc,ignore){
  function adjustList (line 15367) | function adjustList(list, tag, style,ignoreEmpty) {
  function setListStyle (line 15391) | function setListStyle(list,style){
  function clearEmptySibling (line 15399) | function clearEmptySibling(node) {
  function preventAndSave (line 15411) | function preventAndSave() {
  function findList (line 15416) | function findList(node,filterFn){
  function checkLevel (line 15720) | function checkLevel(li){
  function getLi (line 15808) | function getLi(start){
  function createSourceEditor (line 16280) | function createSourceEditor(holder){
  function Scale (line 16891) | function Scale() {
  function checkIsCludeLink (line 17311) | function checkIsCludeLink(node){
  function adjustHeight (line 17400) | function adjustHeight() {
  function checkHasUI (line 17522) | function checkHasUI(){
  function fixIE6FixedPos (line 17529) | function fixIE6FixedPos(){
  function setFloating (line 17539) | function setFloating(){
  function unsetFloating (line 17563) | function unsetFloating(){
  function updateFloating (line 17572) | function updateFloating(){
  function creatInsertStr (line 17652) | function creatInsertStr(url,width,height,id,align,classname,type){
  function switchImgAndVideo (line 17683) | function switchImgAndVideo(root,img2video){
  function checkRange (line 18282) | function checkRange(beginRowIndex, beginColIndex, endRowIndex, endColInd...
  function replaceTdToTh (line 18569) | function replaceTdToTh(colIndex, cell, tableRow) {
  function replaceTdToTh (line 18687) | function replaceTdToTh(rowIndex, cell, tableRow) {
  function showError (line 18935) | function showError(e) {
  function createTable (line 18969) | function createTable(opt, tdWidth) {
  function getAverageWidth (line 19555) | function getAverageWidth() {
  function setAverageWidth (line 19578) | function setAverageWidth(averageWidth) {
  function getAverageHeight (line 19608) | function getAverageHeight() {
  function setAverageHeight (line 19648) | function setAverageHeight(averageHeight) {
  function resetTdWidth (line 19844) | function resetTdWidth(table, editor) {
  function getTableWidth (line 19861) | function getTableWidth(editor, needIEHack, defaultValue) {
  function getSelectedArr (line 19866) | function getSelectedArr(editor) {
  function showError (line 19919) | function showError(e) {
  function removeStyleSize (line 20598) | function removeStyleSize(obj, replaceToProperty) {
  function removeStyle (line 20603) | function removeStyle(obj, styleName, replaceToProperty) {
  function getParentTdOrTh (line 20610) | function getParentTdOrTh(ele) {
  function isEmptyBlock (line 20617) | function isEmptyBlock(node) {
  function mouseCoords (line 20631) | function mouseCoords(evt) {
  function mouseMoveEvent (line 20641) | function mouseMoveEvent(evt) {
  function toggleDragButton (line 20718) | function toggleDragButton(show, table, editor) {
  function createDragButton (line 20729) | function createDragButton(table, editor) {
  function inTableSide (line 20788) | function inTableSide(table, cell, evt, top) {
  function getPermissionX (line 20806) | function getPermissionX(dragTd, evt) {
  function getPermissionY (line 20825) | function getPermissionY(dragTd, evt) {
  function toggleDraggableState (line 20838) | function toggleDraggableState(editor, draggable, dir, mousePos, cell) {
  function getResizeLineByUETable (line 20859) | function getResizeLineByUETable() {
  function updateResizeLine (line 20897) | function updateResizeLine( cell, uetable ) {
  function showResizeLine (line 20915) | function showResizeLine( cell ) {
  function getRelation (line 20928) | function getRelation(ele, mousePos) {
  function mouseDownEvent (line 20950) | function mouseDownEvent(type, evt) {
  function clearTableTimer (line 20991) | function clearTableTimer() {
  function tableDbclickHandler (line 20997) | function tableDbclickHandler(evt) {
  function tableClickHander (line 21085) | function tableClickHander( evt ) {
  function borderActionHandler (line 21113) | function borderActionHandler( evt ) {
  function extractArray (line 21130) | function extractArray( originArr, key ) {
  function clearTableDragTimer (line 21149) | function clearTableDragTimer() {
  function reconstruct (line 21154) | function reconstruct( obj ) {
  function tableBorderDrag (line 21173) | function tableBorderDrag( evt ) {
  function mouseUpEvent (line 21194) | function mouseUpEvent(type, evt) {
  function mouseOverEvent (line 21312) | function mouseOverEvent(type, evt) {
  function setCellHeight (line 21340) | function setCellHeight(cell, height, backHeight) {
  function getWidth (line 21348) | function getWidth(cell) {
  function changeColWidth (line 21353) | function changeColWidth(cell, changeValue) {
  function isEditorDisabled (line 21390) | function isEditorDisabled() {
  function changeRowHeight (line 21394) | function changeRowHeight(td, changeValue) {
  function getCellsByMoveBorder (line 21412) | function getCellsByMoveBorder( cell, table, isContainMergeCell ) {
  function getMinWidthByTableCells (line 21483) | function getMinWidthByTableCells( cells ) {
  function correctChangeValue (line 21497) | function correctChangeValue( changeValue, relatedCell, cells ) {
  function getTableCellWidth (line 21534) | function getTableCellWidth( cell ) {
  function getTableCellOffset (line 21562) | function getTableCellOffset( cell ) {
  function getTabcellSpace (line 21585) | function getTabcellSpace() {
  function getDragLine (line 21631) | function getDragLine(editor, doc) {
  function hideDragLine (line 21646) | function hideDragLine(editor) {
  function showDragLineAt (line 21659) | function showDragLineAt(state, cell) {
  function switchBorderColor (line 21686) | function switchBorderColor(editor, flag) {
  function getTableWidth (line 21703) | function getTableWidth(editor, needIEHack, defaultValue) {
  function getTargetTd (line 21711) | function getTargetTd(editor, evt) {
  function getLabel (line 22330) | function getLabel(){
  function addList (line 22733) | function addList(type,evt){
  function findTextInString (line 22858) | function findTextInString(textContent,opt,currentIndex){
  function findTextBlockElm (line 22875) | function findTextBlockElm(node,currentIndex,opt){
  function findNTextInBlockElm (line 22901) | function findNTextInBlockElm(node,index,str){
  function searchReplace (line 22931) | function searchReplace(me,opt){
  function replaceText (line 22980) | function replaceText(rng,str){
  function catchremoteimage (line 23275) | function catchremoteimage(imgs, callbacks) {
  function getLocation (line 23304) | function getLocation(url){
  function onSuccess (line 23357) | function onSuccess(rs){
  function createInsertStr (line 23520) | function createInsertStr(obj,toEmbed){
  function creatInsertStr (line 23662) | function creatInsertStr(url,width,height,align,cssfloat,toEmbed){
  function sendAndInsertFile (line 23746) | function sendAndInsertFile(file, editor) {
  function getPasteImage (line 23849) | function getPasteImage(e){
  function getDropImage (line 23852) | function getDropImage(e){
  function save (line 23928) | function save ( editor ) {
  function validData (line 24137) | function validData ( table ) {
  function Section (line 24205) | function Section(option){
  function getSection (line 24216) | function getSection(option) {
  function getNodeFromAddress (line 24220) | function getNodeFromAddress(startAddress, root) {
  function getSectionLevel (line 24284) | function getSectionLevel(node) {
  function traversal (line 24295) | function traversal(node, Directory) {
  function isContainsAddress (line 24376) | function isContainsAddress(startAddress, endAddress, addressTarget){
  function getNodeFromAddress (line 24407) | function getNodeFromAddress(startAddress) {
  function initUploadBtn (line 24480) | function initUploadBtn(){
  function getFileIcon (line 24761) | function getFileIcon(url){
  function filter (line 24837) | function filter(node) {
  function handleMouseMove (line 25073) | function handleMouseMove(evt){
  function handleMouseUp (line 25084) | function handleMouseUp(evt){
  function releaseCaptrue (line 25098) | function releaseCaptrue(){
  function updateFixedOffset (line 25153) | function updateFixedOffset(){
  function bindFixedLayer (line 25165) | function bindFixedLayer(adjOffset){
  function closeAllPopup (line 25350) | function closeAllPopup( evt,el ){
  function genColorPicker (line 25644) | function genColorPicker(noColorText,editor){
  function getPara (line 26219) | function getPara(me){
  function setPos (line 27572) | function setPos (offset) {
  function setPosByCxtMenu (line 27582) | function setPosByCxtMenu (menu) {
  function hideAllMenu (line 27656) | function hideAllMenu (e) {
  function EditorUI (line 28651) | function EditorUI(options) {
  function countFn (line 28684) | function countFn() {
  function setCount (line 28775) | function setCount(editor,ui) {
  function down (line 29206) | function down() {
  function move (line 29237) | function move(event) {
  function up (line 29255) | function up() {
  function clearSelection (line 29272) | function clearSelection() {
  function renderUI (line 29364) | function renderUI() {
  function updateHolderPos (line 29550) | function updateHolderPos(){

FILE: public/lib/UEditor/ueditor.config.js
  function getUEBasePath (line 432) | function getUEBasePath(docUrl, confUrl) {
  function getConfigFilePath (line 438) | function getConfigFilePath() {
  function getBasePath (line 446) | function getBasePath(docUrl, confUrl) {
  function optimizationPath (line 467) | function optimizationPath(path) {

FILE: public/lib/UEditor/ueditor.parse.js
  function getItem (line 232) | function getItem(doc,obj){
  function findParentByTagName (line 433) | function findParentByTagName(target, tagNames) {
  function sortTable (line 445) | function sortTable(table, sortByCellIndex, compareFn) {
  function sort (line 515) | function sort(array, compareFn){
  function updateTable (line 529) | function updateTable(table) {
  function parseSources (line 559) | function parseSources () {
  function extractChartData (line 572) | function extractChartData ( rootNode ) {
  function formatData (line 591) | function formatData ( tableNode ) {
  function loadResources (line 632) | function loadResources () {
  function loadJQuery (line 638) | function loadJQuery () {
  function loadHighcharts (line 662) | function loadHighcharts () {
  function loadTypeConfig (line 687) | function loadTypeConfig () {
  function render (line 703) | function render () {
  function renderChart (line 730) | function renderChart ( container, typeConfig, config ) {
  function createContainer (line 785) | function createContainer ( tableNode ) {
  function analysisConfig (line 797) | function analysisConfig ( config ) {
  function applyStyle (line 932) | function applyStyle(nodes){

FILE: src/api/_service.js
  function handleError (line 13) | function handleError (error) {
  function createService (line 38) | function createService () {
  function stringify (line 115) | function stringify (data) {
  function createRequest (line 123) | function createRequest (service) {

FILE: src/api/_tools.js
  function parse (line 6) | function parse (jsonString = '{}', defaultValue = {}) {
  function response (line 22) | function response (data = {}, msg = '', code = 0) {
  function responseSuccess (line 34) | function responseSuccess (data = {}, msg = '成功') {
  function responseError (line 44) | function responseError (data = {}, msg = '请求失败', code = 500) {

FILE: src/api/demo.js
  function DEMO_MOCK_LIST (line 16) | function DEMO_MOCK_LIST () {
  function DEMO_MOCK_DETAIL (line 32) | function DEMO_MOCK_DETAIL (id) {
  function DEMO_MOCK_LIST2 (line 50) | function DEMO_MOCK_LIST2 (params = {}) {
  function DEMO_LOG_AJAX (line 80) | function DEMO_LOG_AJAX () {

FILE: src/api/sys.user.js
  function SYS_USER_LOGIN (line 16) | function SYS_USER_LOGIN (data = {}) {

FILE: src/components/d2-container/components/mixins/bs.js
  method data (line 13) | data () {
  method mounted (line 18) | mounted () {
  method beforeDestroy (line 21) | beforeDestroy () {
  method scrollInit (line 25) | scrollInit () {
  method scrollDestroy (line 41) | scrollDestroy () {
  method scrollToTop (line 51) | scrollToTop () {
  method scroll (line 55) | scroll () {

FILE: src/components/d2-container/components/mixins/normal.js
  function handleMaker (line 7) | function handleMaker (wait) {
  method data (line 25) | data () {
  method scrollDelay (line 31) | scrollDelay (val) {
  method addScrollListener (line 42) | addScrollListener () {
  method removeScrollListener (line 51) | removeScrollListener () {
  method scrollToTop (line 55) | scrollToTop () {

FILE: src/components/d2-container/index.js
  method component (line 30) | component () {
  method render (line 34) | render (h) {
  method scrollToTop (line 54) | scrollToTop () {
  method scrollBy (line 61) | scrollBy (x = 0, y = 0, time = 300) {
  method scrollTo (line 74) | scrollTo (x = 0, y = 0, time = 300) {
  method scrollTop (line 87) | scrollTop (top = 0, time = 300) {

FILE: src/components/d2-highlight/libs/htmlFormat.js
  function style_html (line 7) | function style_html(html_source, indent_size, indent_character, max_char) {

FILE: src/i18n.js
  function loadLocaleMessages (line 7) | function loadLocaleMessages () {

FILE: src/layout/header-aside/components/libs/util.menu.js
  function elMenuItem (line 6) | function elMenuItem (h, menu) {
  function elSubmenu (line 24) | function elSubmenu (h, menu) {
  function createMenu (line 43) | function createMenu (h, menu) {

FILE: src/layout/header-aside/components/menu-header/index.js
  method render (line 11) | render (h) {
  method data (line 61) | data () {
  method handler (line 73) | handler (val) {
  method scroll (line 80) | scroll (direction) {
  method checkScroll (line 93) | checkScroll () {
  method mounted (line 128) | mounted () {
  method beforeDestroy (line 136) | beforeDestroy () {

FILE: src/layout/header-aside/components/menu-side/index.js
  method render (line 10) | render (h) {

FILE: src/layout/header-aside/components/mixin/menu.js
  method handleMenuSelect (line 5) | handleMenuSelect (index, indexPath) {

FILE: src/layout/header-aside/mixins/search.js
  method mounted (line 9) | mounted () {
  method beforeDestroy (line 21) | beforeDestroy () {
  method handleSearchClick (line 39) | handleSearchClick () {
  method searchPanelOpen (line 49) | searchPanelOpen () {
  method searchPanelClose (line 60) | searchPanelClose () {

FILE: src/libs/util.db.js
  function pathInit (line 27) | function pathInit ({
  function dbSet (line 53) | function dbSet ({
  function dbGet (line 74) | function dbGet ({
  function database (line 92) | function database ({

FILE: src/libs/util.log.js
  function typeColor (line 7) | function typeColor (type = 'default') {

FILE: src/locales/mixin.js
  method onChangeLocale (line 3) | onChangeLocale (command) {

FILE: src/main.js
  method created (line 23) | created () {
  method mounted (line 31) | mounted () {
  method handler (line 44) | handler (matched) {

FILE: src/menu/index.js
  function supplementPath (line 15) | function supplementPath (menu) {

FILE: src/plugin/d2admin/index.js
  method install (line 19) | async install (Vue, options) {

FILE: src/plugin/error/index.js
  method install (line 6) | install (Vue, options) {

FILE: src/plugin/log/index.js
  method install (line 5) | install (Vue, options) {

FILE: src/plugin/open/index.js
  method install (line 4) | install (Vue, options) {

FILE: src/store/modules/d2admin/modules/account.js
  method login (line 16) | async login ({ dispatch }, {
  method logout (line 38) | logout ({ commit, dispatch }, { confirm = false } = {}) {
  method load (line 71) | async load ({ dispatch }) {

FILE: src/store/modules/d2admin/modules/color.js
  method set (line 17) | async set ({ state, dispatch, commit }, color) {
  method load (line 39) | async load ({ state, dispatch, commit }) {
  method apply (line 63) | apply (state, { oldColor, newColor }) {

FILE: src/store/modules/d2admin/modules/db.js
  method set (line 17) | set (context, {
  method get (line 34) | get (context, {
  method database (line 47) | database (context, {
  method databaseClear (line 60) | databaseClear (context, {
  method databasePage (line 75) | databasePage (context, {
  method databasePageClear (line 91) | databasePageClear (context, {
  method pageSet (line 109) | pageSet (context, {
  method pageGet (line 128) | pageGet (context, {
  method pageClear (line 145) | pageClear (context, {

FILE: src/store/modules/d2admin/modules/fullscreen.js
  method listen (line 14) | listen ({ commit }) {
  method toggle (line 25) | toggle ({ commit }) {
  method set (line 41) | set (state, active) {

FILE: src/store/modules/d2admin/modules/gray.js
  method toggle (line 12) | toggle (state) {
  method set (line 20) | set (state, active) {

FILE: src/store/modules/d2admin/modules/log.js
  method length (line 21) | length (state) {
  method lengthError (line 28) | lengthError (state) {
  method push (line 40) | push ({ rootState, commit }, { message, type = 'info', meta }) {
  method push (line 66) | push (state, log) {
  method clean (line 73) | clean (state) {

FILE: src/store/modules/d2admin/modules/menu.js
  method asideCollapseSet (line 22) | async asideCollapseSet ({ state, dispatch }, collapse) {
  method asideCollapseToggle (line 37) | async asideCollapseToggle ({ state, dispatch }) {
  method asideTransitionSet (line 53) | async asideTransitionSet ({ state, dispatch }, transition) {
  method asideTransitionToggle (line 68) | async asideTransitionToggle ({ state, dispatch }) {
  method asideLoad (line 83) | async asideLoad ({ state, dispatch }) {
  method headerSet (line 101) | headerSet (state, menu) {
  method asideSet (line 110) | asideSet (state, menu) {

FILE: src/store/modules/d2admin/modules/page.js
  method isLoaded (line 27) | isLoaded ({ state }) {
  method openedLoad (line 40) | async openedLoad ({ state, commit, dispatch }) {
  method opened2db (line 79) | async opened2db ({ state, dispatch }) {
  method openedUpdate (line 94) | async openedUpdate ({ state, commit, dispatch }, { index, params, query,...
  method openedSort (line 110) | async openedSort ({ state, commit, dispatch }, { oldIndex, newIndex }) {
  method add (line 124) | async add ({ state, commit, dispatch }, { tag, params, query, fullPath }) {
  method open (line 143) | async open ({ state, commit, dispatch }, { name, params, query, fullPath...
  method close (line 185) | async close ({ state, commit, dispatch }, { tagName }) {
  method update (line 223) | update ({ state }, { tagName, title }) {
  method closeLeft (line 236) | async closeLeft ({ state, commit, dispatch }, { pageSelect } = {}) {
  method closeRight (line 262) | async closeRight ({ state, commit, dispatch }, { pageSelect } = {}) {
  method closeOther (line 286) | async closeOther ({ state, commit, dispatch }, { pageSelect } = {}) {
  method closeAll (line 309) | async closeAll ({ state, commit, dispatch }) {
  method keepAliveRefresh (line 330) | keepAliveRefresh (state) {
  method keepAliveRemove (line 338) | keepAliveRemove (state, name) {
  method keepAlivePush (line 351) | keepAlivePush (state, name) {
  method keepAliveClean (line 360) | keepAliveClean (state) {
  method currentSet (line 369) | currentSet (state, fullPath) {
  method init (line 378) | init (state, routes) {

FILE: src/store/modules/d2admin/modules/releases.js
  method versionShow (line 10) | versionShow () {

FILE: src/store/modules/d2admin/modules/search.js
  method toggle (line 21) | toggle (state) {
  method set (line 29) | set (state, active) {
  method init (line 37) | init (state, menu) {

FILE: src/store/modules/d2admin/modules/size.js
  method apply (line 16) | apply ({ state, commit }, refresh) {
  method isLoaded (line 27) | isLoaded ({ state }) {
  method set (line 40) | async set ({ state, dispatch }, size) {
  method load (line 57) | async load ({ state, dispatch }) {

FILE: src/store/modules/d2admin/modules/theme.js
  method activeSetting (line 17) | activeSetting (state) {
  method set (line 26) | async set ({ state, commit, dispatch }, themeName) {
  method load (line 42) | async load ({ state, commit, dispatch }) {
  method dom (line 72) | dom (state) {

FILE: src/store/modules/d2admin/modules/transition.js
  method set (line 16) | async set ({ state, dispatch }, active) {
  method load (line 31) | async load ({ state, dispatch }) {

FILE: src/store/modules/d2admin/modules/ua.js
  method get (line 14) | get (state) {

FILE: src/store/modules/d2admin/modules/user.js
  method set (line 13) | async set ({ state, dispatch }, info) {
  method load (line 28) | async load ({ state, dispatch }) {

FILE: src/views/system/function/redirect/index.js
  method beforeRouteEnter (line 2) | beforeRouteEnter (to, from, next) {

FILE: src/views/system/function/refresh/index.js
  method beforeRouteEnter (line 2) | beforeRouteEnter (to, from, next) {
Condensed preview — 392 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,316K chars).
[
  {
    "path": ".browserslistrc",
    "chars": 21,
    "preview": "> 1%\nlast 2 versions\n"
  },
  {
    "path": ".editorconfig",
    "chars": 121,
    "preview": "[*.{js,jsx,ts,tsx,vue}]\nindent_style = space\nindent_size = 2\ntrim_trailing_whitespace = true\ninsert_final_newline = true"
  },
  {
    "path": ".eslintignore",
    "chars": 91,
    "preview": "# 忽略目录\nbuild/\ntests/\nnode_modules/\n\n# node 覆盖率文件\ncoverage/\n\n# 忽略文件\n**/*-min.js\n**/*.min.js\n"
  },
  {
    "path": ".eslintrc.js",
    "chars": 526,
    "preview": "module.exports = {\n  root: true,\n  env: {\n    node: true\n  },\n  'extends': [\n    'plugin:vue/essential',\n    '@vue/stand"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug.md",
    "chars": 106,
    "preview": "---\nname: \"👾 BUG\"\nabout: 代码错误\n---\n\n```\n为了统一格式,请将下面一行复制到 `Title` 栏,然后删除这部分\n👾 BUG | 你的标题\n```\n\n如果需要,在这里描述具体内容"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/demo.md",
    "chars": 112,
    "preview": "---\nname: \"🎮 示例相关\"\nabout: 增加或者完善示例\n---\n\n```\n为了统一格式,请将下面一行复制到 `Title` 栏,然后删除这部分\n🎮 示例相关 | 你的标题\n```\n\n如果需要,在这里描述具体内容"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/display.md",
    "chars": 110,
    "preview": "---\nname: \"🌈 显示优化\"\nabout: 显示方面调整\n---\n\n```\n为了统一格式,请将下面一行复制到 `Title` 栏,然后删除这部分\n🌈 显示优化 | 你的标题\n```\n\n如果需要,在这里描述具体内容"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/doc.md",
    "chars": 114,
    "preview": "---\nname: \"📔 文档相关\"\nabout: 更新或者新增文档内容\n---\n\n```\n为了统一格式,请将下面一行复制到 `Title` 栏,然后删除这部分\n📔 文档相关 | 你的标题\n```\n\n如果需要,在这里描述具体内容"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature.md",
    "chars": 110,
    "preview": "---\nname: \"🔩 功能开发\"\nabout: 开发新的功能\n---\n\n```\n为了统一格式,请将下面一行复制到 `Title` 栏,然后删除这部分\n🔩 功能开发 | 你的标题\n```\n\n如果需要,在这里描述具体内容"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/other.md",
    "chars": 122,
    "preview": "---\nname: \"🖐 其它问题\"\nabout: 其它类型的 issue 请使用该模板\n---\n\n```\n为了统一格式,请将下面一行复制到 `Title` 栏,然后删除这部分\n🖐 其它问题 | 你的标题\n```\n\n如果需要,在这里描述具体"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/question.md",
    "chars": 109,
    "preview": "---\nname: \"🤔 提问\"\nabout: 提出使用方面的问题\n---\n\n```\n为了统一格式,请将下面一行复制到 `Title` 栏,然后删除这部分\n🤔 提问 | 你的标题\n```\n\n如果需要,在这里描述具体内容"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/update.md",
    "chars": 110,
    "preview": "---\nname: \"⚙ 功能升级\"\nabout: 升级某个功能\n---\n\n```\n为了统一格式,请将下面一行复制到 `Title` 栏,然后删除这部分\n⚙ 功能升级 | 你的标题\n```\n\n如果需要,在这里描述具体内容"
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 731,
    "preview": "name: Release pipeline\n\non:\n  push:\n    branches:\n      - master\n\njobs:\n  publish:\n    if: ${{ !contains(github.event.he"
  },
  {
    "path": ".github/workflows/star.yml",
    "chars": 302,
    "preview": "name: Star notice\n\non:\n  watch:\n    types: [started]\n\njobs:\n  bark:\n\n    runs-on: ubuntu-latest\n\n    steps:\n    - name: "
  },
  {
    "path": ".gitignore",
    "chars": 214,
    "preview": ".DS_Store\nnode_modules\n/dist\n\n# local env files\n.env.local\n.env.*.local\n\n# Log files\nnpm-debug.log*\nyarn-debug.log*\nyarn"
  },
  {
    "path": ".postcssrc.js",
    "chars": 59,
    "preview": "module.exports = {\n  plugins: {\n    autoprefixer: {}\n  }\n}\n"
  },
  {
    "path": ".releaserc.js",
    "chars": 629,
    "preview": "module.exports = {\n  branch: 'master',\n  plugins: [\n    '@semantic-release/commit-analyzer',\n    '@semantic-release/rele"
  },
  {
    "path": "LICENSE",
    "chars": 1059,
    "preview": "MIT License\n\nCopyright (c) 2018 李杨\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this"
  },
  {
    "path": "README.md",
    "chars": 10759,
    "preview": "![banner](https://raw.githubusercontent.com/d2-projects/d2-admin/master/docs/image/banner.png)\n\n<p align=\"center\">\n\t<a h"
  },
  {
    "path": "README.zh.md",
    "chars": 8538,
    "preview": "![banner](https://raw.githubusercontent.com/FairyEver/d2-admin/master/docs/image/banner.png)\n\n<p align=\"center\">\n\t<a hre"
  },
  {
    "path": "babel.config.js",
    "chars": 306,
    "preview": "module.exports = {\n  presets: [\n    '@vue/cli-plugin-babel/preset'\n  ],\n  plugins: [\n    [\n      'import',\n      {\n     "
  },
  {
    "path": "d2-admin.babel",
    "chars": 6971,
    "preview": "<babeledit_project version=\"1.2\">\n    <!--\n\n    BabelEdit project file\n    https://www.codeandweb.com/babeledit\n\n    Thi"
  },
  {
    "path": "docs/CHANGELOG.md",
    "chars": 15861,
    "preview": "# Changelog\n\nAll notable changes to this project will be documented in this file.\n\n# [1.27.0](https://github.com/d2-proj"
  },
  {
    "path": "jest.config.js",
    "chars": 59,
    "preview": "module.exports = {\n  preset: '@vue/cli-plugin-unit-jest'\n}\n"
  },
  {
    "path": "jsconfig.json",
    "chars": 202,
    "preview": "{\n  \"compilerOptions\": {\n    \"target\": \"es2017\",\n    \"allowSyntheticDefaultImports\": false,\n    \"baseUrl\": \"./\",\n    \"pa"
  },
  {
    "path": "package.json",
    "chars": 2788,
    "preview": "{\n  \"name\": \"d2-admin\",\n  \"version\": \"1.27.0\",\n  \"scripts\": {\n    \"serve\": \"vue-cli-service serve --open\",\n    \"start\": "
  },
  {
    "path": "public/html/demo.html",
    "chars": 2326,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, in"
  },
  {
    "path": "public/index.html",
    "chars": 2403,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n   "
  },
  {
    "path": "public/lib/UEditor/dialogs/anchor/anchor.html",
    "chars": 1627,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\r\n    \"http://www.w3.org/TR/html4/loose.dtd\">\r\n<html>\r\n   "
  },
  {
    "path": "public/lib/UEditor/dialogs/attachment/attachment.css",
    "chars": 15007,
    "preview": "@charset \"utf-8\";\r\n/* dialog样式 */\r\n.wrapper {\r\n    zoom: 1;\r\n    width: 630px;\r\n    *width: 626px;\r\n    height: 380px;\r\n"
  },
  {
    "path": "public/lib/UEditor/dialogs/attachment/attachment.html",
    "chars": 2344,
    "preview": "<!doctype html>\r\n<html>\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <title>ueditor图片对话框</title>\r\n    <script type=\"text/jav"
  },
  {
    "path": "public/lib/UEditor/dialogs/attachment/attachment.js",
    "chars": 29746,
    "preview": "/**\n * User: Jinqn\n * Date: 14-04-08\n * Time: 下午16:34\n * 上传图片对话框逻辑代码,包括tab: 远程图片/上传图片/在线图片/搜索图片\n */\n\n(function () {\n\n   "
  },
  {
    "path": "public/lib/UEditor/dialogs/background/background.css",
    "chars": 2479,
    "preview": ".wrapper{ width: 424px;margin: 10px auto; zoom:1;position: relative}\r\n.tabbody{height:225px;}\r\n.tabbody .panel { positio"
  },
  {
    "path": "public/lib/UEditor/dialogs/background/background.html",
    "chars": 2954,
    "preview": "<!DOCTYPE HTML>\r\n<html>\r\n<head>\r\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\r\n    <script ty"
  },
  {
    "path": "public/lib/UEditor/dialogs/background/background.js",
    "chars": 14449,
    "preview": "(function () {\r\n\r\n    var onlineImage,\r\n        backupStyle = editor.queryCommandValue('background');\r\n\r\n    window.onlo"
  },
  {
    "path": "public/lib/UEditor/dialogs/charts/chart.config.js",
    "chars": 1388,
    "preview": "/*\n * 图表配置文件\n * */\n\n\n//不同类型的配置\nvar typeConfig = [\n    {\n        chart: {\n            type: 'line'\n        },\n        plo"
  },
  {
    "path": "public/lib/UEditor/dialogs/charts/charts.css",
    "chars": 2593,
    "preview": "html, body {\n    width: 100%;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n    overflow-x: hidden;\n}\n\n.main {\n    wi"
  },
  {
    "path": "public/lib/UEditor/dialogs/charts/charts.html",
    "chars": 4886,
    "preview": "<!DOCTYPE html>\r\n<html>\r\n    <head>\r\n        <title>chart</title>\r\n        <meta chartset=\"utf-8\">\r\n        <link rel=\"s"
  },
  {
    "path": "public/lib/UEditor/dialogs/charts/charts.js",
    "chars": 10643,
    "preview": "/*\n * 图片转换对话框脚本\n **/\n\nvar tableData = [],\n    //编辑器页面table\n    editorTable = null,\n    chartsConfig = window.typeConfig,"
  },
  {
    "path": "public/lib/UEditor/dialogs/emotion/emotion.css",
    "chars": 1842,
    "preview": ".jd img{\r\n    background:transparent url(images/jxface2.gif?v=1.1) no-repeat scroll left top;\r\n    cursor:pointer;width:"
  },
  {
    "path": "public/lib/UEditor/dialogs/emotion/emotion.html",
    "chars": 4313,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" >\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n<head>\r\n  "
  },
  {
    "path": "public/lib/UEditor/dialogs/emotion/emotion.js",
    "chars": 6340,
    "preview": "window.onload = function () {\r\n    editor.setOpt({\r\n        emotionLocalization:false\r\n    });\r\n\r\n    emotion.SmileyPath"
  },
  {
    "path": "public/lib/UEditor/dialogs/gmap/gmap.html",
    "chars": 4134,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\r\n        \"http://www.w3.org/TR/html4/loose.dtd\">\r\n<html>\r"
  },
  {
    "path": "public/lib/UEditor/dialogs/help/help.css",
    "chars": 395,
    "preview": ".wrapper{width: 370px;margin: 10px auto;zoom: 1;}\r\n.tabbody{height: 360px;}\r\n.tabbody .panel{width:100%;height: 360px;po"
  },
  {
    "path": "public/lib/UEditor/dialogs/help/help.html",
    "chars": 2917,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\r\n        \"http://www.w3.org/TR/html4/loose.dtd\">\r\n<html>\r"
  },
  {
    "path": "public/lib/UEditor/dialogs/help/help.js",
    "chars": 1507,
    "preview": "/**\r\n * Created with JetBrains PhpStorm.\r\n * User: xuheng\r\n * Date: 12-9-26\r\n * Time: 下午1:06\r\n * To change this template"
  },
  {
    "path": "public/lib/UEditor/dialogs/image/image.css",
    "chars": 18956,
    "preview": "@charset \"utf-8\";\r\n/* dialog样式 */\r\n.wrapper {\r\n    zoom: 1;\r\n    width: 630px;\r\n    *width: 626px;\r\n    height: 380px;\r\n"
  },
  {
    "path": "public/lib/UEditor/dialogs/image/image.html",
    "chars": 5685,
    "preview": "<!doctype html>\r\n<html>\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <title>ueditor图片对话框</title>\r\n    <script type=\"text/jav"
  },
  {
    "path": "public/lib/UEditor/dialogs/image/image.js",
    "chars": 128371,
    "preview": "/**\r\n * User: Jinqn\r\n * Date: 14-04-08\r\n * Time: 下午16:34\r\n * 上传图片对话框逻辑代码,包括tab: 远程图片/上传图片/在线图片/搜索图片\r\n */\r\n\r\n(function ()"
  },
  {
    "path": "public/lib/UEditor/dialogs/insertframe/insertframe.html",
    "chars": 4381,
    "preview": "<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\r\n    <title></"
  },
  {
    "path": "public/lib/UEditor/dialogs/internal.js",
    "chars": 2642,
    "preview": "(function () {\r\n    var parent = window.parent;\r\n    //dialog对象\r\n    dialog = parent.$EDITORUI[window.frameElement.id.re"
  },
  {
    "path": "public/lib/UEditor/dialogs/link/link.html",
    "chars": 4448,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\r\n        \"http://www.w3.org/TR/html4/loose.dtd\">\r\n<html>\r"
  },
  {
    "path": "public/lib/UEditor/dialogs/map/map.html",
    "chars": 6096,
    "preview": "<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\r\n    <title><"
  },
  {
    "path": "public/lib/UEditor/dialogs/map/show.html",
    "chars": 4361,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n        \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio"
  },
  {
    "path": "public/lib/UEditor/dialogs/music/music.css",
    "chars": 1706,
    "preview": ".wrapper{margin: 5px 10px;}\r\n\r\n.searchBar{height:30px;padding:7px 0 3px;text-align:center;}\r\n.searchBtn{font-size:13px;h"
  },
  {
    "path": "public/lib/UEditor/dialogs/music/music.html",
    "chars": 973,
    "preview": "<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\r\n    <title>插入音"
  },
  {
    "path": "public/lib/UEditor/dialogs/music/music.js",
    "chars": 8011,
    "preview": "function Music() {\r\n    this.init();\r\n}\r\n(function () {\r\n    var pages = [],\r\n        panels = [],\r\n        selectedItem"
  },
  {
    "path": "public/lib/UEditor/dialogs/preview/preview.html",
    "chars": 1180,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n    <h"
  },
  {
    "path": "public/lib/UEditor/dialogs/scrawl/scrawl.css",
    "chars": 3881,
    "preview": "/*common\r\n*/\r\nbody{margin: 0;}\r\ntable{width:100%;}\r\ntable td{padding:2px 4px;vertical-align: middle;}\r\na{text-decoration"
  },
  {
    "path": "public/lib/UEditor/dialogs/scrawl/scrawl.html",
    "chars": 3983,
    "preview": "<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <title></title>\r\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=ut"
  },
  {
    "path": "public/lib/UEditor/dialogs/scrawl/scrawl.js",
    "chars": 27396,
    "preview": "/**\r\n * Created with JetBrains PhpStorm.\r\n * User: xuheng\r\n * Date: 12-5-22\r\n * Time: 上午11:38\r\n * To change this templat"
  },
  {
    "path": "public/lib/UEditor/dialogs/searchreplace/searchreplace.html",
    "chars": 4283,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\r\n        \"http://www.w3.org/TR/html4/loose.dtd\">\r\n<html>\r"
  },
  {
    "path": "public/lib/UEditor/dialogs/searchreplace/searchreplace.js",
    "chars": 4448,
    "preview": "/**\r\n * Created with JetBrains PhpStorm.\r\n * User: xuheng\r\n * Date: 12-9-26\r\n * Time: 下午12:29\r\n * To change this templat"
  },
  {
    "path": "public/lib/UEditor/dialogs/snapscreen/snapscreen.html",
    "chars": 1978,
    "preview": "<!DOCTYPE HTML>\r\n<html>\r\n    <head>\r\n        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\r\n     "
  },
  {
    "path": "public/lib/UEditor/dialogs/spechars/spechars.html",
    "chars": 849,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\r\n        \"http://www.w3.org/TR/html4/loose.dtd\">\r\n<html>\r"
  },
  {
    "path": "public/lib/UEditor/dialogs/spechars/spechars.js",
    "chars": 3596,
    "preview": "/**\r\n * Created with JetBrains PhpStorm.\r\n * User: xuheng\r\n * Date: 12-9-26\r\n * Time: 下午1:09\r\n * To change this template"
  },
  {
    "path": "public/lib/UEditor/dialogs/table/edittable.css",
    "chars": 1192,
    "preview": "body{\n    overflow: hidden;\n    width: 540px;\n}\n.wrapper {\n    margin: 10px auto 0;\n    font-size: 12px;\n    overflow: h"
  },
  {
    "path": "public/lib/UEditor/dialogs/table/edittable.html",
    "chars": 2394,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    "
  },
  {
    "path": "public/lib/UEditor/dialogs/table/edittable.js",
    "chars": 8930,
    "preview": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-12-19\n * Time: 下午4:55\n * To change this template use"
  },
  {
    "path": "public/lib/UEditor/dialogs/table/edittd.html",
    "chars": 1556,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    "
  },
  {
    "path": "public/lib/UEditor/dialogs/table/edittip.html",
    "chars": 851,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n    <title>表格删除提示</title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script"
  },
  {
    "path": "public/lib/UEditor/dialogs/template/config.js",
    "chars": 10014,
    "preview": "/**\r\n * Created with JetBrains PhpStorm.\r\n * User: xuheng\r\n * Date: 12-8-8\r\n * Time: 下午2:00\r\n * To change this template "
  },
  {
    "path": "public/lib/UEditor/dialogs/template/template.css",
    "chars": 1047,
    "preview": ".wrap{ padding: 5px;font-size: 14px;}\r\n.left{width:425px;float: left;}\r\n.right{width:160px;border: 1px solid #ccc;float:"
  },
  {
    "path": "public/lib/UEditor/dialogs/template/template.html",
    "chars": 946,
    "preview": "<!DOCTYPE HTML>\r\n<html>\r\n<head>\r\n    <title></title>\r\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf"
  },
  {
    "path": "public/lib/UEditor/dialogs/template/template.js",
    "chars": 1640,
    "preview": "/**\r\n * Created with JetBrains PhpStorm.\r\n * User: xuheng\r\n * Date: 12-8-8\r\n * Time: 下午2:09\r\n * To change this template "
  },
  {
    "path": "public/lib/UEditor/dialogs/video/video.css",
    "chars": 15521,
    "preview": "@charset \"utf-8\";\r\n.wrapper{ width: 570px;_width:575px;margin: 10px auto; zoom:1;position: relative}\r\n.tabbody{height: 3"
  },
  {
    "path": "public/lib/UEditor/dialogs/video/video.html",
    "chars": 4277,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\r\n        \"http://www.w3.org/TR/html4/loose.dtd\">\r\n<html>\r"
  },
  {
    "path": "public/lib/UEditor/dialogs/video/video.js",
    "chars": 30556,
    "preview": "/**\r\n * Created by JetBrains PhpStorm.\r\n * User: taoqili\r\n * Date: 12-2-20\r\n * Time: 上午11:19\r\n * To change this template"
  },
  {
    "path": "public/lib/UEditor/dialogs/webapp/webapp.html",
    "chars": 2281,
    "preview": "<!DOCTYPE>\r\n<html>\r\n<head>\r\n    <title></title>\r\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>"
  },
  {
    "path": "public/lib/UEditor/dialogs/wordimage/tangram.js",
    "chars": 41868,
    "preview": "// Copyright (c) 2009, Baidu Inc. All rights reserved.\n// \n// Licensed under the BSD License\n// you may not use this fil"
  },
  {
    "path": "public/lib/UEditor/dialogs/wordimage/wordimage.html",
    "chars": 5724,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\r\n        \"http://www.w3.org/TR/html4/loose.dtd\">\r\n<html>\r"
  },
  {
    "path": "public/lib/UEditor/dialogs/wordimage/wordimage.js",
    "chars": 4115,
    "preview": "/**\r\n * Created by JetBrains PhpStorm.\r\n * User: taoqili\r\n * Date: 12-1-30\r\n * Time: 下午12:50\r\n * To change this template"
  },
  {
    "path": "public/lib/UEditor/index.html",
    "chars": 5873,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\r\n        \"http://www.w3.org/TR/html4/loose.dtd\">\r\n<html>\r"
  },
  {
    "path": "public/lib/UEditor/jsp/config.json",
    "chars": 4799,
    "preview": "/* 前后端通信相关的配置,注释只允许使用多行方式 */\n{\n    /* 上传图片配置项 */\n    \"imageActionName\": \"uploadimage\", /* 执行上传图片的action名称 */\n    \"imageF"
  },
  {
    "path": "public/lib/UEditor/jsp/controller.jsp",
    "chars": 393,
    "preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\"\n\timport=\"com.baidu.ueditor.ActionEnter\"\n    pageEncoding"
  },
  {
    "path": "public/lib/UEditor/lang/en/en.js",
    "chars": 29858,
    "preview": "/**\r\n * Created with JetBrains PhpStorm.\r\n * User: taoqili\r\n * Date: 12-6-12\r\n * Time: 下午6:57\r\n * To change this templat"
  },
  {
    "path": "public/lib/UEditor/lang/zh-cn/zh-cn.js",
    "chars": 23184,
    "preview": "/**\r\n * Created with JetBrains PhpStorm.\r\n * User: taoqili\r\n * Date: 12-6-12\r\n * Time: 下午5:02\r\n * To change this templat"
  },
  {
    "path": "public/lib/UEditor/themes/default/css/ueditor.css",
    "chars": 45108,
    "preview": "/*基础UI构建\r\n*/\r\n/* common layer */\r\n.edui-default .edui-box {\r\n    border: none;\r\n    padding: 0;\r\n    margin: 0;\r\n    ove"
  },
  {
    "path": "public/lib/UEditor/themes/default/dialogbase.css",
    "chars": 1758,
    "preview": "/*弹出对话框页面样式组件\r\n*/\r\n\r\n/*reset\r\n*/\r\nhtml, body, div, span, applet, object, iframe,\r\nh1, h2, h3, h4, h5, h6, p, blockquote,"
  },
  {
    "path": "public/lib/UEditor/themes/iframe.css",
    "chars": 20,
    "preview": "/*可以在这里添加你自己的css*/\r\n"
  },
  {
    "path": "public/lib/UEditor/third-party/SyntaxHighlighter/shCore.js",
    "chars": 159481,
    "preview": "// XRegExp 1.5.1\n// (c) 2007-2012 Steven Levithan\n// MIT License\n// <http://xregexp.com>\n// Provides an augmented, exten"
  },
  {
    "path": "public/lib/UEditor/third-party/SyntaxHighlighter/shCoreDefault.css",
    "chars": 7117,
    "preview": ".syntaxhighlighter a,.syntaxhighlighter div,.syntaxhighlighter code,.syntaxhighlighter,.syntaxhighlighter td,.syntaxhigh"
  },
  {
    "path": "public/lib/UEditor/third-party/codemirror/codemirror.css",
    "chars": 2888,
    "preview": ".CodeMirror {\n    line-height: 1em;\n    font-family: monospace;\n}\n\n.CodeMirror-scroll {\n    overflow: auto;\n    height: "
  },
  {
    "path": "public/lib/UEditor/third-party/codemirror/codemirror.js",
    "chars": 162186,
    "preview": "// CodeMirror version 2.2\r\n//\r\n// All functions that need access to the editor's state live inside\r\n// the CodeMirror fu"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/adapters/mootools-adapter.js",
    "chars": 2263,
    "preview": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n MooTools adapter\n\n (c) 2010-2013 Torstein Hønsi\n\n License: www.highcharts.com/lic"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/adapters/mootools-adapter.src.js",
    "chars": 7789,
    "preview": "/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n * MooTools adapter\n *\n * (c) 2010-2013 Torstein Hønsi\n *\n * License: "
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/adapters/prototype-adapter.js",
    "chars": 3309,
    "preview": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n Prototype adapter\n\n @author Michael Nelson, Torstein Hønsi.\n\n Feel free to use an"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/adapters/prototype-adapter.src.js",
    "chars": 8933,
    "preview": "/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n * Prototype adapter\n *\n * @author Michael Nelson, Torstein Hønsi.\n *\n"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/adapters/standalone-framework.js",
    "chars": 5067,
    "preview": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n\n Standalone Highcharts Framework\n\n License: MIT License\n*/\nvar HighchartsAdapter="
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/adapters/standalone-framework.src.js",
    "chars": 11658,
    "preview": "/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n *\n * Standalone Highcharts Framework\n *\n * License: MIT License\n */\n\n"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/highcharts-more.js",
    "chars": 21813,
    "preview": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n\n (c) 2009-2013 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function("
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/highcharts-more.src.js",
    "chars": 60179,
    "preview": "// ==ClosureCompiler==\n// @compilation_level SIMPLE_OPTIMIZATIONS\n\n/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n *\n"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/highcharts.js",
    "chars": 140854,
    "preview": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n\n (c) 2009-2013 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function("
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/highcharts.src.js",
    "chars": 444364,
    "preview": "// ==ClosureCompiler==\n// @compilation_level SIMPLE_OPTIMIZATIONS\n\n/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n *\n"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/modules/annotations.js",
    "chars": 3398,
    "preview": "(function(i,C){function m(a){return typeof a===\"number\"}function n(a){return a!==D&&a!==null}var D,p,r,s=i.Chart,t=i.ext"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/modules/annotations.src.js",
    "chars": 8377,
    "preview": "(function (Highcharts, HighchartsAdapter) {\n\nvar UNDEFINED,\n\tALIGN_FACTOR,\n\tALLOWED_SHAPES,\n\tChart = Highcharts.Chart,\n\t"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/modules/canvas-tools.js",
    "chars": 57873,
    "preview": "/*\n A class to parse color values\n @author Stoyan Stefanov <sstoo@gmail.com>\n @link   http://www.phpied.com/rgb-color-pa"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/modules/canvas-tools.src.js",
    "chars": 100677,
    "preview": "/**\n * @license A class to parse color values\n * @author Stoyan Stefanov <sstoo@gmail.com>\n * @link   http://www.phpied."
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/modules/data.js",
    "chars": 4435,
    "preview": "/*\n Data plugin for Highcharts\n\n (c) 2012-2013 Torstein Hønsi\n Last revision 2013-06-07\n\n License: www.highcharts.com/li"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/modules/data.src.js",
    "chars": 15505,
    "preview": "/**\n * @license Data plugin for Highcharts\n *\n * (c) 2012-2013 Torstein Hønsi\n * Last revision 2013-06-07\n *\n * License:"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/modules/drilldown.js",
    "chars": 5550,
    "preview": "(function(e){function q(b,a,c){return\"rgba(\"+[Math.round(b[0]+(a[0]-b[0])*c),Math.round(b[1]+(a[1]-b[1])*c),Math.round(b"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/modules/drilldown.src.js",
    "chars": 10947,
    "preview": "/**\n * Highcharts Drilldown plugin\n * \n * Author: Torstein Honsi\n * Last revision: 2013-02-18\n * License: MIT License\n *"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/modules/exporting.js",
    "chars": 7243,
    "preview": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n Exporting module\n\n (c) 2010-2013 Torstein Hønsi\n\n License: www.highcharts.com/lic"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/modules/exporting.src.js",
    "chars": 17267,
    "preview": "/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n * Exporting module\n *\n * (c) 2010-2013 Torstein Hønsi\n *\n * License: "
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/modules/funnel.js",
    "chars": 1973,
    "preview": "/*\n \n Highcharts funnel module, Beta\n\n (c) 2010-2012 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function(d"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/modules/funnel.src.js",
    "chars": 6534,
    "preview": "/**\n * @license \n * Highcharts funnel module, Beta\n *\n * (c) 2010-2012 Torstein Hønsi\n *\n * License: www.highcharts.com/"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/modules/heatmap.js",
    "chars": 535,
    "preview": "(function(b){var k=b.seriesTypes,l=b.each;k.heatmap=b.extendClass(k.map,{colorKey:\"z\",useMapGeometry:!1,pointArrayMap:[\""
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/modules/heatmap.src.js",
    "chars": 1130,
    "preview": "(function (Highcharts) {\n\tvar seriesTypes = Highcharts.seriesTypes,\n\t\teach = Highcharts.each;\n\t\n\tseriesTypes.heatmap = H"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/modules/map.js",
    "chars": 10116,
    "preview": "/*\n Map plugin v0.1 for Highcharts\n\n (c) 2011-2013 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function(g){"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/modules/map.src.js",
    "chars": 25762,
    "preview": "/**\n * @license Map plugin v0.1 for Highcharts\n *\n * (c) 2011-2013 Torstein Hønsi\n *\n * License: www.highcharts.com/lice"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/modules/no-data-to-display.js",
    "chars": 1358,
    "preview": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n Plugin for displaying a message when there is no data visible in chart.\n\n (c) 201"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/modules/no-data-to-display.src.js",
    "chars": 2860,
    "preview": "/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n * Plugin for displaying a message when there is no data visible in ch"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/themes/dark-blue.js",
    "chars": 4351,
    "preview": "/**\n * Dark blue theme for Highcharts JS\n * @author Torstein Hønsi\n */\n\nHighcharts.theme = {\n\tcolors: [\"#DDDF0D\", \"#55BF"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/themes/dark-green.js",
    "chars": 4338,
    "preview": "/**\n * Dark blue theme for Highcharts JS\n * @author Torstein Hønsi\n */\n\nHighcharts.theme = {\n\tcolors: [\"#DDDF0D\", \"#55BF"
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/themes/gray.js",
    "chars": 4487,
    "preview": "/**\n * Gray theme for Highcharts JS\n * @author Torstein Hønsi\n */\n\nHighcharts.theme = {\n\tcolors: [\"#DDDF0D\", \"#7798BF\", "
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/themes/grid.js",
    "chars": 1794,
    "preview": "/**\n * Grid theme for Highcharts JS\n * @author Torstein Hønsi\n */\n\nHighcharts.theme = {\n\tcolors: ['#058DC7', '#50B432', "
  },
  {
    "path": "public/lib/UEditor/third-party/highcharts/themes/skies.js",
    "chars": 1764,
    "preview": "/**\n * Skies theme for Highcharts JS\n * @author Torstein Hønsi\n */\n\nHighcharts.theme = {\n\tcolors: [\"#514F78\", \"#42A07B\","
  },
  {
    "path": "public/lib/UEditor/third-party/jquery-1.10.2.js",
    "chars": 273199,
    "preview": "/*!\n * jQuery JavaScript Library v1.10.2\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Co"
  },
  {
    "path": "public/lib/UEditor/third-party/video-js/video-js.css",
    "chars": 21318,
    "preview": "/*!\nVideo.js Default Styles (http://videojs.com)\nVersion 4.3.0\nCreate your own skin at http://designer.videojs.com\n*/\n/*"
  },
  {
    "path": "public/lib/UEditor/third-party/video-js/video.dev.js",
    "chars": 214821,
    "preview": "/**\n * @fileoverview Main function src.\n */\n\n// HTML5 Shiv. Must be in <head> to support older browsers.\ndocument.create"
  },
  {
    "path": "public/lib/UEditor/third-party/video-js/video.js",
    "chars": 55392,
    "preview": "/*! Video.js v4.3.0 Copyright 2013 Brightcove, Inc. https://github.com/videojs/video.js/blob/master/LICENSE */ (function"
  },
  {
    "path": "public/lib/UEditor/third-party/webuploader/webuploader.css",
    "chars": 515,
    "preview": ".webuploader-container {\n\tposition: relative;\n}\n.webuploader-element-invisible {\n\tposition: absolute !important;\n\tclip: "
  },
  {
    "path": "public/lib/UEditor/third-party/webuploader/webuploader.custom.js",
    "chars": 187323,
    "preview": "/*! WebUploader 0.1.2 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起"
  },
  {
    "path": "public/lib/UEditor/third-party/webuploader/webuploader.flashonly.js",
    "chars": 128330,
    "preview": "/*! WebUploader 0.1.2 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起"
  },
  {
    "path": "public/lib/UEditor/third-party/webuploader/webuploader.html5only.js",
    "chars": 174993,
    "preview": "/*! WebUploader 0.1.2 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起"
  },
  {
    "path": "public/lib/UEditor/third-party/webuploader/webuploader.js",
    "chars": 219973,
    "preview": "/*! WebUploader 0.1.2 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起"
  },
  {
    "path": "public/lib/UEditor/third-party/webuploader/webuploader.withoutimage.js",
    "chars": 141769,
    "preview": "/*! WebUploader 0.1.2 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起"
  },
  {
    "path": "public/lib/UEditor/third-party/zeroclipboard/ZeroClipboard.js",
    "chars": 43216,
    "preview": "/*!\n* ZeroClipboard\n* The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Ad"
  },
  {
    "path": "public/lib/UEditor/ueditor.all.js",
    "chars": 1080484,
    "preview": "/*!\n * UEditor\n * version: ueditor\n * build: Fri Sep 28 2018 15:50:42 GMT+0800 (China Standard Time)\n */\n\n(function(){\n\n"
  },
  {
    "path": "public/lib/UEditor/ueditor.config.js",
    "chars": 17793,
    "preview": "/**\n * ueditor完整配置项\n * 可以在这里配置整个编辑器的特性\n */\n/**************************提示********************************\n * 所有被注释的配置项均为U"
  },
  {
    "path": "public/lib/UEditor/ueditor.parse.js",
    "chars": 36293,
    "preview": "/*!\n * UEditor\n * version: ueditor\n * build: Fri Sep 28 2018 15:50:42 GMT+0800 (China Standard Time)\n */\n\n(function(){\n\n"
  },
  {
    "path": "public/markdown/demo.md",
    "chars": 385,
    "preview": "# 一级标题\n\n| ID | Name | Email |\n| --- | --- | --- |\n| 0001 | FairyEver | 1711467488@qq.com |\n\n```\nalert('Hello World')\n```"
  },
  {
    "path": "public/mobile.html",
    "chars": 1124,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, in"
  },
  {
    "path": "src/App.vue",
    "chars": 489,
    "preview": "<template>\n  <div id=\"app\">\n    <router-view/>\n  </div>\n</template>\n\n<script>\nimport util from '@/libs/util'\nexport defa"
  },
  {
    "path": "src/api/_service.js",
    "chars": 3999,
    "preview": "import { Message } from 'element-ui'\nimport axios from 'axios'\nimport Adapter from 'axios-mock-adapter'\nimport { get, is"
  },
  {
    "path": "src/api/_tools.js",
    "chars": 946,
    "preview": "/**\n * @description 安全地解析 json 字符串\n * @param {String} jsonString 需要解析的 json 字符串\n * @param {String} defaultValue 默认值\n */\n"
  },
  {
    "path": "src/api/demo.js",
    "chars": 2011,
    "preview": "import { find, map, random } from 'lodash'\nimport faker from 'faker/locale/zh_CN'\nimport { requestForMock, mock } from '"
  },
  {
    "path": "src/api/sys.user.js",
    "chars": 901,
    "preview": "import { find, assign } from 'lodash'\nimport faker from 'faker/locale/zh_CN'\nimport { requestForMock, mock } from '@/api"
  },
  {
    "path": "src/assets/style/animate/vue-transition.scss",
    "chars": 466,
    "preview": "// 过渡动画 横向渐变\n.fade-transverse-leave-active,\n.fade-transverse-enter-active {\n  transition: all .5s;\n}\n.fade-transverse-en"
  },
  {
    "path": "src/assets/style/fixed/base.scss",
    "chars": 253,
    "preview": "// 优化显示\nhtml, body {\n  margin: 0px;\n  height: 100%;\n  font-family: \"Helvetica Neue\", Helvetica, \"PingFang SC\", \"Hiragino"
  },
  {
    "path": "src/assets/style/fixed/element.scss",
    "chars": 602,
    "preview": "// element 样式补丁\n.el-card {\n  &.is-always-shadow {\n    box-shadow: 0 0 8px 0 rgba(232,237,250,.6), 0 2px 4px 0 rgba(232,2"
  },
  {
    "path": "src/assets/style/fixed/markdown.scss",
    "chars": 108,
    "preview": "// markdown 样式补丁\n.markdown-body {\n  ul {\n    list-style: disc;\n  }\n  h1, h2 {\n    border-bottom: none;\n  }\n}"
  },
  {
    "path": "src/assets/style/fixed/n-progress.scss",
    "chars": 159,
    "preview": "#nprogress {\n  .bar {\n    background: $color-primary !important;\n  }\n  .peg {\n    box-shadow: 0 0 10px $color-primary, 0"
  },
  {
    "path": "src/assets/style/fixed/tree-view.scss",
    "chars": 83,
    "preview": ".tree-view-wrapper.tree-view-small {\n  .tree-view-item {\n    font-size: 10px;\n  }\n}"
  },
  {
    "path": "src/assets/style/fixed/vue-grid-layout.scss",
    "chars": 188,
    "preview": "// vue-splitpane 样式补丁\n.vue-grid-item {\n  &.vue-grid-placeholder {\n    border: 1px solid $color-border-1;\n    background-"
  },
  {
    "path": "src/assets/style/fixed/vue-splitpane.scss",
    "chars": 121,
    "preview": "// vue-splitpane 样式补丁\n.splitter-pane-resizer {\n  background-color: $color-border-1 !important;\n  opacity: 1 !important;\n"
  },
  {
    "path": "src/assets/style/public-class.scss",
    "chars": 2240,
    "preview": "@import 'public';\n\n// 补丁 base\n@import '~@/assets/style/fixed/base.scss';\n// 补丁 element\n@import '~@/assets/style/fixed/el"
  },
  {
    "path": "src/assets/style/public.scss",
    "chars": 684,
    "preview": "@import '~@/assets/style/unit/color.scss';\n\n// 工具类名统一前缀\n$prefix: d2;\n\n// 禁止用户选中 鼠标变为手形\n%unable-select {\n  user-select: n"
  },
  {
    "path": "src/assets/style/theme/chester/index.scss",
    "chars": 51,
    "preview": "@import './setting.scss';\n@import '../theme.scss';\n"
  },
  {
    "path": "src/assets/style/theme/chester/setting.scss",
    "chars": 2213,
    "preview": "// 主题名称\n$theme-name: 'chester';\n// 主题背景颜色\n$theme-bg-color: #2C3643;\n// 主题背景图片遮罩\n$theme-bg-mask: rgba(#000, 0);\n\n// 消息提示\n"
  },
  {
    "path": "src/assets/style/theme/d2/index.scss",
    "chars": 51,
    "preview": "@import './setting.scss';\n@import '../theme.scss';\n"
  },
  {
    "path": "src/assets/style/theme/d2/setting.scss",
    "chars": 2362,
    "preview": "// 主题名称\n$theme-name: 'd2';\n// 主题背景颜色\n$theme-bg-color: #ebf1f6;\n// 主题背景图片遮罩\n$theme-bg-mask: rgba(#000, 0);\n\n// 消息提示\n$them"
  },
  {
    "path": "src/assets/style/theme/element/index.scss",
    "chars": 51,
    "preview": "@import './setting.scss';\n@import '../theme.scss';\n"
  },
  {
    "path": "src/assets/style/theme/element/setting.scss",
    "chars": 2213,
    "preview": "// 主题名称\n$theme-name: 'element';\n// 主题背景颜色\n$theme-bg-color: #314255;\n// 主题背景图片遮罩\n$theme-bg-mask: rgba(#000, 0);\n\n// 消息提示\n"
  },
  {
    "path": "src/assets/style/theme/line/index.scss",
    "chars": 51,
    "preview": "@import './setting.scss';\n@import '../theme.scss';\n"
  },
  {
    "path": "src/assets/style/theme/line/setting.scss",
    "chars": 2422,
    "preview": "// 主题名称\n$theme-name: 'line';\n// 主题背景颜色\n$theme-bg-color: #f8f8f9;\n// 主题背景图片遮罩\n$theme-bg-mask: rgba(#000, 0);\n\n// 消息提示\n$th"
  },
  {
    "path": "src/assets/style/theme/register.scss",
    "chars": 413,
    "preview": "@import '~@/assets/style/theme/theme-base.scss';\n\n@import '~@/assets/style/theme/d2/index.scss';\n@import '~@/assets/styl"
  },
  {
    "path": "src/assets/style/theme/star/index.scss",
    "chars": 51,
    "preview": "@import './setting.scss';\n@import '../theme.scss';\n"
  },
  {
    "path": "src/assets/style/theme/star/setting.scss",
    "chars": 2264,
    "preview": "// 主题名称\n$theme-name: 'star';\n// 主题背景颜色\n$theme-bg-color: #EFF4F8;\n// 主题背景图片遮罩\n$theme-bg-mask: rgba(#000, .3);\n\n// 消息提示\n$t"
  },
  {
    "path": "src/assets/style/theme/theme-base.scss",
    "chars": 12354,
    "preview": "// 减小弹出菜单的项目高度\n.el-menu--popup {\n  .el-menu-item {\n    height: 36px;\n    line-height: 36px;\n  }\n  .el-submenu__title {\n "
  },
  {
    "path": "src/assets/style/theme/theme.scss",
    "chars": 13711,
    "preview": "// 每个主题特有的设置\n.theme-#{$theme-name} {\n\n  .el-message {\n    &.el-message--info {\n      background-color: $theme-message-in"
  },
  {
    "path": "src/assets/style/theme/tomorrow-night-blue/index.scss",
    "chars": 51,
    "preview": "@import './setting.scss';\n@import '../theme.scss';\n"
  },
  {
    "path": "src/assets/style/theme/tomorrow-night-blue/setting.scss",
    "chars": 2319,
    "preview": "// 主题名称\n$theme-name: 'tomorrow-night-blue';\n// 主题背景颜色\n$theme-bg-color: #002253;\n// 主题背景图片遮罩\n$theme-bg-mask: rgba(#000, 0"
  },
  {
    "path": "src/assets/style/theme/violet/index.scss",
    "chars": 207,
    "preview": "@import './setting.scss';\n@import '../theme.scss';\n\n.theme-#{$theme-name} {\n  .d2-layout-header-aside-group {\n    backgr"
  },
  {
    "path": "src/assets/style/theme/violet/setting.scss",
    "chars": 2643,
    "preview": "// 主题名称\n$theme-name: 'violet';\n// 主题背景颜色\n$theme-bg-color: #000;\n// 主题背景图片遮罩\n$theme-bg-mask: rgba(#000, 0);\n\n// 消息提示\n$the"
  },
  {
    "path": "src/assets/style/unit/color.scss",
    "chars": 394,
    "preview": "// 主色\n$color-primary: #409EFF;\n\n// 辅助色\n$color-info: #909399;\n$color-success: #67C23A;\n$color-warning: #E6A23C;\n$color-da"
  },
  {
    "path": "src/assets/svg-icons/index.js",
    "chars": 256,
    "preview": "import Vue from 'vue'\n\nconst requireAll = requireContext => requireContext.keys().map(requireContext)\nconst req = requir"
  },
  {
    "path": "src/components/d2-container/components/d2-container-card-bs.vue",
    "chars": 663,
    "preview": "<template>\n  <div class=\"d2-container-card-bs\">\n    <div v-if=\"$slots.header\" class=\"d2-container-card-bs__header\" ref=\""
  },
  {
    "path": "src/components/d2-container/components/d2-container-card.vue",
    "chars": 713,
    "preview": "<template>\n  <div class=\"d2-container-card\">\n    <div v-if=\"$slots.header\" class=\"d2-container-card__header\" ref=\"header"
  },
  {
    "path": "src/components/d2-container/components/d2-container-full-bs.vue",
    "chars": 592,
    "preview": "<template>\n  <div class=\"d2-container-full-bs\">\n    <div v-if=\"$slots.header\" class=\"d2-container-full-bs__header\" ref=\""
  },
  {
    "path": "src/components/d2-container/components/d2-container-full.vue",
    "chars": 649,
    "preview": "<template>\n  <div class=\"d2-container-full\">\n    <div v-if=\"$slots.header\" class=\"d2-container-full__header\" ref=\"header"
  },
  {
    "path": "src/components/d2-container/components/d2-container-ghost-bs.vue",
    "chars": 613,
    "preview": "<template>\n  <div class=\"d2-container-ghost-bs\">\n    <div v-if=\"$slots.header\" class=\"d2-container-ghost-bs__header\" ref"
  },
  {
    "path": "src/components/d2-container/components/d2-container-ghost.vue",
    "chars": 654,
    "preview": "<template>\n  <div class=\"d2-container-ghost\">\n    <div v-if=\"$slots.header\" class=\"d2-container-ghost__header\" ref=\"head"
  },
  {
    "path": "src/components/d2-container/components/d2-source.vue",
    "chars": 1553,
    "preview": "<template>\n  <div\n    v-if=\"show\"\n    class=\"d2-source\"\n    :class=\"{ 'd2-source--active': isActive }\"\n    @click=\"handl"
  },
  {
    "path": "src/components/d2-container/components/mixins/bs.js",
    "chars": 1231,
    "preview": "import { merge } from 'lodash'\nimport BScroll from 'better-scroll'\n\nexport default {\n  props: {\n    // 滚动优化的选项\n    bette"
  },
  {
    "path": "src/components/d2-container/components/mixins/normal.js",
    "chars": 1459,
    "preview": "// 提供滚动方面的功能\n// 非滚动优化模式通用\n\nimport { throttle } from 'lodash'\n\n// 生成滚动事件的 handler\nfunction handleMaker (wait) {\n  return "
  },
  {
    "path": "src/components/d2-container/index.js",
    "chars": 2699,
    "preview": "import d2Source from './components/d2-source.vue'\n\nconst containers = {\n  full: () => import('./components/d2-container-"
  },
  {
    "path": "src/components/d2-container-frame/index.vue",
    "chars": 488,
    "preview": "<template>\n  <d2-container v-bind=\"$attrs\">\n    <iframe\n      class=\"d2-container-frame\"\n      :src=\"src\"\n      framebor"
  },
  {
    "path": "src/components/d2-count-up/index.vue",
    "chars": 1094,
    "preview": "<template>\n  <span></span>\n</template>\n\n<script>\n// https://github.com/inorganik/CountUp.js\nimport { CountUp } from 'cou"
  },
  {
    "path": "src/components/d2-highlight/index.vue",
    "chars": 1201,
    "preview": "<template>\n  <pre class=\"d2-highlight hljs\" v-html=\"highlightHTML\"></pre>\n</template>\n\n<script>\n// 相关文档\n// https://highl"
  },
  {
    "path": "src/components/d2-highlight/libs/htmlFormat.js",
    "chars": 12642,
    "preview": "/* eslint-disable */\n\n// 功能\n// 将HTML字符串格式化\n\nconst format = (function() {\n  function style_html(html_source, indent_size,"
  },
  {
    "path": "src/components/d2-highlight/libs/style.github.css",
    "chars": 1148,
    "preview": "/*\n\ngithub.com style (c) Vasily Polovnyov <vast@whiteants.net>\n\n*/\n\n.hljs {\n  display: block;\n  overflow-x: auto;\n  padd"
  },
  {
    "path": "src/components/d2-icon/index.vue",
    "chars": 304,
    "preview": "<template>\n  <i class=\"fa\" :class=\"`fa-${name}`\" aria-hidden=\"true\"></i>\n</template>\n\n<script>\nimport './font-awesome-4."
  },
  {
    "path": "src/components/d2-icon-select/data/index.js",
    "chars": 18532,
    "preview": "// 4.7.0\n\nexport default [\n  {\n    title: '网页',\n    icon: [\n      'address-book',\n      'address-book-o',\n      'address"
  },
  {
    "path": "src/components/d2-icon-select/index.vue",
    "chars": 4922,
    "preview": "<template>\n  <span>\n    <el-popover\n      ref=\"pop\"\n      v-model=\"pop\"\n      :placement=\"placement\"\n      width=\"300\"\n "
  },
  {
    "path": "src/components/d2-icon-svg/index.vue",
    "chars": 301,
    "preview": "<template>\n  <svg aria-hidden=\"true\">\n    <use :xlink:href=\"icon\"></use>\n  </svg>\n</template>\n\n<script>\nexport default {"
  },
  {
    "path": "src/components/d2-icon-svg-select/index.vue",
    "chars": 3719,
    "preview": "<template>\n  <span>\n    <el-popover\n      ref=\"pop\"\n      v-model=\"pop\"\n      :placement=\"placement\"\n      width=\"300\"\n "
  },
  {
    "path": "src/components/d2-link-btn/index.vue",
    "chars": 609,
    "preview": "<template>\n  <el-button-group>\n    <el-button v-if=\"title\" size=\"mini\" @click=\"$open(link)\">{{title}}</el-button>\n    <e"
  },
  {
    "path": "src/components/d2-markdown/index.vue",
    "chars": 3207,
    "preview": "<template>\n  <div class=\"component-markdown\">\n    <div class=\"spin-group\" v-if=\"!markedHTML\">\n      <div>正在加载</div>\n    "
  },
  {
    "path": "src/components/d2-markdown/plugin/baidupan.js",
    "chars": 1216,
    "preview": "export default (quote, assetsPublicPath) => {\n  const _quote = quote.replace(/<[^<>]+>/g, '').trim()\n  const bdPanUrl = "
  }
]

// ... and 192 more files (download for full content)

About this extraction

This page contains the full source code of the d2-projects/d2-admin GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 392 files (4.7 MB), approximately 1.3M tokens, and a symbol index with 1032 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!