Browse Source

new project commit

csx 4 years ago
parent
commit
58d1c67d13
100 changed files with 7238 additions and 108 deletions
  1. 17 0
      .babelrc
  2. 14 0
      .editorconfig
  3. 3 0
      .eslintignore
  4. 199 0
      .eslintrc.js
  5. 5 0
      .travis.yml
  6. 21 0
      LICENSE
  7. 185 0
      README.md
  8. 195 0
      README.zh-CN.md
  9. BIN
      favicon.ico
  10. 2 2
      src/xt_pages/dialysis/bloodPresssWatch.1.vue
  11. 2 2
      src/xt_pages/dialysis/bloodPresssWatch.vue
  12. 2 2
      src/xt_pages/dialysis/details/assessmentAfter.vue
  13. 2 2
      src/xt_pages/dialysis/details/assessmentBefore.vue
  14. 2 2
      src/xt_pages/dialysis/details/dialog/AssessmentAfterDislysis.vue
  15. 3 3
      src/xt_pages/dialysis/details/dialog/MsgTip.vue
  16. 1 1
      src/xt_pages/dialysis/details/dialog/assessmentBeforeDislysisDialog.vue
  17. 3 3
      src/xt_pages/dialysis/details/dialog/dialysisPrescriptionDialog.vue
  18. 6 6
      src/xt_pages/dialysis/details/pastData.vue
  19. 3 3
      src/xt_pages/dialysis/dialysisPage.vue
  20. 34 34
      src/xt_pages/dialysis/dialysisPrintOrder.1.html
  21. 8 8
      src/xt_pages/dialysis/order.html
  22. 16 16
      src/xt_pages/qcd/patientAnalysis/person/oralMedicine.vue
  23. 12 12
      src/xt_pages/qcd/patientAnalysis/person/weight.vue
  24. 7 7
      src/xt_pages/qcd/patientAnalysis/weight.vue
  25. 1 1
      src/xt_pages/sign/index.vue
  26. 4 4
      src/xt_pages/user/dialysisRecord.vue
  27. 168 0
      static/neditor/README.md
  28. 40 0
      static/neditor/dialogs/anchor/anchor.html
  29. 682 0
      static/neditor/dialogs/attachment/attachment.css
  30. 60 0
      static/neditor/dialogs/attachment/attachment.html
  31. 775 0
      static/neditor/dialogs/attachment/attachment.js
  32. BIN
      static/neditor/dialogs/attachment/fileTypeImages/icon_chm.gif
  33. BIN
      static/neditor/dialogs/attachment/fileTypeImages/icon_default.png
  34. BIN
      static/neditor/dialogs/attachment/fileTypeImages/icon_doc.gif
  35. BIN
      static/neditor/dialogs/attachment/fileTypeImages/icon_exe.gif
  36. BIN
      static/neditor/dialogs/attachment/fileTypeImages/icon_jpg.gif
  37. BIN
      static/neditor/dialogs/attachment/fileTypeImages/icon_mp3.gif
  38. BIN
      static/neditor/dialogs/attachment/fileTypeImages/icon_mv.gif
  39. BIN
      static/neditor/dialogs/attachment/fileTypeImages/icon_pdf.gif
  40. BIN
      static/neditor/dialogs/attachment/fileTypeImages/icon_ppt.gif
  41. BIN
      static/neditor/dialogs/attachment/fileTypeImages/icon_psd.gif
  42. BIN
      static/neditor/dialogs/attachment/fileTypeImages/icon_rar.gif
  43. BIN
      static/neditor/dialogs/attachment/fileTypeImages/icon_txt.gif
  44. BIN
      static/neditor/dialogs/attachment/fileTypeImages/icon_xls.gif
  45. BIN
      static/neditor/dialogs/attachment/images/alignicon.gif
  46. BIN
      static/neditor/dialogs/attachment/images/alignicon.png
  47. BIN
      static/neditor/dialogs/attachment/images/bg.png
  48. BIN
      static/neditor/dialogs/attachment/images/file-icons.gif
  49. BIN
      static/neditor/dialogs/attachment/images/file-icons.png
  50. BIN
      static/neditor/dialogs/attachment/images/icons.gif
  51. BIN
      static/neditor/dialogs/attachment/images/icons.png
  52. BIN
      static/neditor/dialogs/attachment/images/image.png
  53. BIN
      static/neditor/dialogs/attachment/images/progress.png
  54. BIN
      static/neditor/dialogs/attachment/images/success.gif
  55. BIN
      static/neditor/dialogs/attachment/images/success.png
  56. 97 0
      static/neditor/dialogs/background/background.css
  57. 56 0
      static/neditor/dialogs/background/background.html
  58. 376 0
      static/neditor/dialogs/background/background.js
  59. BIN
      static/neditor/dialogs/background/images/bg.png
  60. BIN
      static/neditor/dialogs/background/images/success.png
  61. 65 0
      static/neditor/dialogs/charts/chart.config.js
  62. 165 0
      static/neditor/dialogs/charts/charts.css
  63. 89 0
      static/neditor/dialogs/charts/charts.html
  64. 519 0
      static/neditor/dialogs/charts/charts.js
  65. BIN
      static/neditor/dialogs/charts/images/charts0.png
  66. BIN
      static/neditor/dialogs/charts/images/charts1.png
  67. BIN
      static/neditor/dialogs/charts/images/charts2.png
  68. BIN
      static/neditor/dialogs/charts/images/charts3.png
  69. BIN
      static/neditor/dialogs/charts/images/charts4.png
  70. BIN
      static/neditor/dialogs/charts/images/charts5.png
  71. 43 0
      static/neditor/dialogs/emotion/emotion.css
  72. 54 0
      static/neditor/dialogs/emotion/emotion.html
  73. 186 0
      static/neditor/dialogs/emotion/emotion.js
  74. BIN
      static/neditor/dialogs/emotion/images/0.gif
  75. BIN
      static/neditor/dialogs/emotion/images/bface.gif
  76. BIN
      static/neditor/dialogs/emotion/images/cface.gif
  77. BIN
      static/neditor/dialogs/emotion/images/fface.gif
  78. BIN
      static/neditor/dialogs/emotion/images/jxface2.gif
  79. BIN
      static/neditor/dialogs/emotion/images/neweditor-tab-bg.png
  80. BIN
      static/neditor/dialogs/emotion/images/tface.gif
  81. BIN
      static/neditor/dialogs/emotion/images/wface.gif
  82. BIN
      static/neditor/dialogs/emotion/images/yface.gif
  83. 272 0
      static/neditor/dialogs/fonts/buttoniconex.css
  84. BIN
      static/neditor/dialogs/fonts/iconfont.eot
  85. 398 0
      static/neditor/dialogs/fonts/iconfont.svg
  86. BIN
      static/neditor/dialogs/fonts/iconfont.ttf
  87. BIN
      static/neditor/dialogs/fonts/iconfont.woff
  88. 1 0
      static/neditor/dialogs/fonts/images/addfile.svg
  89. 1 0
      static/neditor/dialogs/fonts/images/selected.svg
  90. 106 0
      static/neditor/dialogs/gmap/gmap.html
  91. 7 0
      static/neditor/dialogs/help/help.css
  92. 82 0
      static/neditor/dialogs/help/help.html
  93. 56 0
      static/neditor/dialogs/help/help.js
  94. 936 0
      static/neditor/dialogs/image/image.css
  95. 127 0
      static/neditor/dialogs/image/image.html
  96. 1130 0
      static/neditor/dialogs/image/image.js
  97. BIN
      static/neditor/dialogs/image/images/alignicon.jpg
  98. BIN
      static/neditor/dialogs/image/images/bg.png
  99. BIN
      static/neditor/dialogs/image/images/icons.gif
  100. 0 0
      static/neditor/dialogs/image/images/icons.png

+ 17 - 0
.babelrc View File

@@ -0,0 +1,17 @@
1
+{
2
+  "presets": [
3
+    ["env", {
4
+      "modules": false,
5
+      "targets": {
6
+        "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
7
+      }
8
+    }],
9
+    "stage-2"
10
+  ],
11
+  "plugins": ["transform-vue-jsx", "transform-runtime"],
12
+  "env": {
13
+    "development":{
14
+      "plugins": ["dynamic-import-node"]
15
+    }
16
+  }
17
+}

+ 14 - 0
.editorconfig View File

@@ -0,0 +1,14 @@
1
+# http://editorconfig.org
2
+root = true
3
+
4
+[*]
5
+charset = utf-8
6
+indent_style = space
7
+indent_size = 2
8
+end_of_line = lf
9
+insert_final_newline = true
10
+trim_trailing_whitespace = true
11
+
12
+[*.md]
13
+insert_final_newline = false
14
+trim_trailing_whitespace = false

+ 3 - 0
.eslintignore View File

@@ -0,0 +1,3 @@
1
+build/*.js
2
+config/*.js
3
+src/assets

+ 199 - 0
.eslintrc.js View File

@@ -0,0 +1,199 @@
1
+module.exports = {
2
+  root: true,
3
+  parser: 'babel-eslint',
4
+  parserOptions: {
5
+    sourceType: 'module'
6
+  },
7
+  env: {
8
+    browser: true,
9
+    node: true,
10
+    es6: true,
11
+  },
12
+  extends: 'eslint:recommended',
13
+  // required to lint *.vue files
14
+  plugins: [
15
+    'html'
16
+  ],
17
+  // check if imports actually resolve
18
+  'settings': {
19
+    'import/resolver': {
20
+      'webpack': {
21
+        'config': 'build/webpack.base.conf.js'
22
+      }
23
+    }
24
+  },
25
+  // add your custom rules here
26
+  //it is base on https://github.com/vuejs/eslint-config-vue
27
+  'rules': {
28
+    'accessor-pairs': 2,
29
+    'arrow-spacing': [2, {
30
+      'before': true,
31
+      'after': true
32
+    }],
33
+    'block-spacing': [2, 'always'],
34
+    'brace-style': [2, '1tbs', {
35
+      'allowSingleLine': true
36
+    }],
37
+    'camelcase': [0, {
38
+      'properties': 'always'
39
+    }],
40
+    'comma-dangle': [2, 'never'],
41
+    'comma-spacing': [2, {
42
+      'before': false,
43
+      'after': true
44
+    }],
45
+    'comma-style': [2, 'last'],
46
+    'constructor-super': 2,
47
+    'curly': [2, 'multi-line'],
48
+    'dot-location': [2, 'property'],
49
+    'eol-last': 2,
50
+    'eqeqeq': [2, 'allow-null'],
51
+    'generator-star-spacing': [2, {
52
+      'before': true,
53
+      'after': true
54
+    }],
55
+    'handle-callback-err': [2, '^(err|error)$'],
56
+    'indent': [2, 2, {
57
+      'SwitchCase': 1
58
+    }],
59
+    'jsx-quotes': [2, 'prefer-single'],
60
+    'key-spacing': [2, {
61
+      'beforeColon': false,
62
+      'afterColon': true
63
+    }],
64
+    'keyword-spacing': [2, {
65
+      'before': true,
66
+      'after': true
67
+    }],
68
+    'new-cap': [2, {
69
+      'newIsCap': true,
70
+      'capIsNew': false
71
+    }],
72
+    'new-parens': 2,
73
+    'no-array-constructor': 2,
74
+    'no-caller': 2,
75
+    'no-console': 'off',
76
+    'no-class-assign': 2,
77
+    'no-cond-assign': 2,
78
+    'no-const-assign': 2,
79
+    'no-control-regex': 0,
80
+    'no-delete-var': 2,
81
+    'no-dupe-args': 2,
82
+    'no-dupe-class-members': 2,
83
+    'no-dupe-keys': 2,
84
+    'no-duplicate-case': 2,
85
+    'no-empty-character-class': 2,
86
+    'no-empty-pattern': 2,
87
+    'no-eval': 2,
88
+    'no-ex-assign': 2,
89
+    'no-extend-native': 2,
90
+    'no-extra-bind': 2,
91
+    'no-extra-boolean-cast': 2,
92
+    'no-extra-parens': [2, 'functions'],
93
+    'no-fallthrough': 2,
94
+    'no-floating-decimal': 2,
95
+    'no-func-assign': 2,
96
+    'no-implied-eval': 2,
97
+    'no-inner-declarations': [2, 'functions'],
98
+    'no-invalid-regexp': 2,
99
+    'no-irregular-whitespace': 2,
100
+    'no-iterator': 2,
101
+    'no-label-var': 2,
102
+    'no-labels': [2, {
103
+      'allowLoop': false,
104
+      'allowSwitch': false
105
+    }],
106
+    'no-lone-blocks': 2,
107
+    'no-mixed-spaces-and-tabs': 2,
108
+    'no-multi-spaces': 2,
109
+    'no-multi-str': 2,
110
+    'no-multiple-empty-lines': [2, {
111
+      'max': 1
112
+    }],
113
+    'no-native-reassign': 2,
114
+    'no-negated-in-lhs': 2,
115
+    'no-new-object': 2,
116
+    'no-new-require': 2,
117
+    'no-new-symbol': 2,
118
+    'no-new-wrappers': 2,
119
+    'no-obj-calls': 2,
120
+    'no-octal': 2,
121
+    'no-octal-escape': 2,
122
+    'no-path-concat': 2,
123
+    'no-proto': 2,
124
+    'no-redeclare': 2,
125
+    'no-regex-spaces': 2,
126
+    'no-return-assign': [2, 'except-parens'],
127
+    'no-self-assign': 2,
128
+    'no-self-compare': 2,
129
+    'no-sequences': 2,
130
+    'no-shadow-restricted-names': 2,
131
+    'no-spaced-func': 2,
132
+    'no-sparse-arrays': 2,
133
+    'no-this-before-super': 2,
134
+    'no-throw-literal': 2,
135
+    'no-trailing-spaces': 2,
136
+    'no-undef': 2,
137
+    'no-undef-init': 2,
138
+    'no-unexpected-multiline': 2,
139
+    'no-unmodified-loop-condition': 2,
140
+    'no-unneeded-ternary': [2, {
141
+      'defaultAssignment': false
142
+    }],
143
+    'no-unreachable': 2,
144
+    'no-unsafe-finally': 2,
145
+    'no-unused-vars': [2, {
146
+      'vars': 'all',
147
+      'args': 'none'
148
+    }],
149
+    'no-useless-call': 2,
150
+    'no-useless-computed-key': 2,
151
+    'no-useless-constructor': 2,
152
+    'no-useless-escape': 0,
153
+    'no-whitespace-before-property': 2,
154
+    'no-with': 2,
155
+    'one-var': [2, {
156
+      'initialized': 'never'
157
+    }],
158
+    'operator-linebreak': [2, 'after', {
159
+      'overrides': {
160
+        '?': 'before',
161
+        ':': 'before'
162
+      }
163
+    }],
164
+    'padded-blocks': [2, 'never'],
165
+    'quotes': [2, 'single', {
166
+      'avoidEscape': true,
167
+      'allowTemplateLiterals': true
168
+    }],
169
+    'semi': [2, 'never'],
170
+    'semi-spacing': [2, {
171
+      'before': false,
172
+      'after': true
173
+    }],
174
+    'space-before-blocks': [2, 'always'],
175
+    'space-before-function-paren': [2, 'never'],
176
+    'space-in-parens': [2, 'never'],
177
+    'space-infix-ops': 2,
178
+    'space-unary-ops': [2, {
179
+      'words': true,
180
+      'nonwords': false
181
+    }],
182
+    'spaced-comment': [2, 'always', {
183
+      'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
184
+    }],
185
+    'template-curly-spacing': [2, 'never'],
186
+    'use-isnan': 2,
187
+    'valid-typeof': 2,
188
+    'wrap-iife': [2, 'any'],
189
+    'yield-star-spacing': [2, 'both'],
190
+    'yoda': [2, 'never'],
191
+    'prefer-const': 2,
192
+    'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
193
+    'object-curly-spacing': [2, 'always', {
194
+      objectsInObjects: false
195
+    }],
196
+    'array-bracket-spacing': [2, 'never']
197
+  }
198
+}
199
+

+ 5 - 0
.travis.yml View File

@@ -0,0 +1,5 @@
1
+language: node_js
2
+node_js: stable
3
+script: npm run test
4
+notifications:
5
+  email: false

+ 21 - 0
LICENSE View File

@@ -0,0 +1,21 @@
1
+MIT License
2
+
3
+Copyright (c) 2017-present PanJiaChen
4
+
5
+Permission is hereby granted, free of charge, to any person obtaining a copy
6
+of this software and associated documentation files (the "Software"), to deal
7
+in the Software without restriction, including without limitation the rights
8
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+copies of the Software, and to permit persons to whom the Software is
10
+furnished to do so, subject to the following conditions:
11
+
12
+The above copyright notice and this permission notice shall be included in all
13
+copies or substantial portions of the Software.
14
+
15
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+SOFTWARE.

+ 185 - 0
README.md View File

@@ -0,0 +1,185 @@
1
+<p align="center">
2
+  <img width="320" src="https://wpimg.wallstcn.com/ecc53a42-d79b-42e2-8852-5126b810a4c8.svg">
3
+</p>
4
+
5
+<p align="center">
6
+  <a href="https://github.com/vuejs/vue">
7
+    <img src="https://img.shields.io/badge/vue-2.5.10-brightgreen.svg" alt="vue">
8
+  </a>
9
+  <a href="https://github.com/ElemeFE/element">
10
+    <img src="https://img.shields.io/badge/element--ui-2.3.2-brightgreen.svg" alt="element-ui">
11
+  </a>
12
+  <a href="https://travis-ci.org/PanJiaChen/vue-element-admin" rel="nofollow">
13
+    <img src="https://travis-ci.org/PanJiaChen/vue-element-admin.svg?branch=master" alt="Build Status">
14
+  </a>
15
+  <a href="https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE">
16
+    <img src="https://img.shields.io/github/license/mashape/apistatus.svg" alt="license">
17
+  </a>
18
+  <a href="https://github.com/PanJiaChen/vue-element-admin/releases">
19
+    <img src="https://img.shields.io/github/release/PanJiaChen/vue-element-admin.svg" alt="GitHub release">
20
+  </a>
21
+</p>
22
+
23
+English | [简体中文](./README.zh-CN.md)
24
+
25
+## Introduction
26
+
27
+[vue-element-admin](http://panjiachen.github.io/vue-element-admin) is a front-end management background integration solution. It based on [vue](https://github.com/vuejs/vue) and use the UI Toolkit [element](https://github.com/ElemeFE/element).
28
+
29
+It is a magical vue admin based on the newest development stack of vue, built-in i18n solution, typical templates for enterprise applications, lots of awesome features. It helps you build a large complex Single-Page Applications. I believe whatever your needs are, this project will help you.
30
+
31
+- [Preview](http://panjiachen.github.io/vue-element-admin)
32
+
33
+- [Documentation](https://panjiachen.github.io/vue-element-admin-site/)
34
+
35
+- [Gitter](https://gitter.im/vue-element-admin/discuss)
36
+
37
+- [Wiki](https://github.com/PanJiaChen/vue-element-admin/wiki)
38
+
39
+- [Donate](https://panjiachen.github.io/vue-element-admin-site/donate/)
40
+
41
+- [Gitee](https://panjiachen.gitee.io/vue-element-admin/) 国内用户可访问该地址在线预览
42
+
43
+**This project is positioned as a background integration solution and is not suitable for secondary development as a basic template.**
44
+
45
+ - Base template recommends using: [vueAdmin-template](https://github.com/PanJiaChen/vueAdmin-template)  
46
+ - Desktop: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)
47
+
48
+## Preparation
49
+
50
+You need to install [node](http://nodejs.org/) and [git](https://git-scm.com/) locally. The project is based on [ES2015+](http://es6.ruanyifeng.com/), [vue](https://cn.vuejs.org/index.html), [vuex](https://vuex.vuejs.org/zh-cn/), [vue-router](https://router.vuejs.org/zh-cn/), [axios](https://github.com/axios/axios) and [element-ui](https://github.com/ElemeFE/element), all request data is simulated using [Mock.js](https://github.com/nuysoft/Mock).
51
+ Understanding and learning this knowledge in advance will greatly help the use of this project.
52
+
53
+ **This project does not support low version browsers (e.g. IE). Please add polyfill yourself if you need them.**
54
+
55
+ **Note: This project uses element-ui@2.3.0+ version, so the minimum compatible vue@2.5.0+**
56
+
57
+ <p align="center">
58
+  <img width="900" src="https://wpimg.wallstcn.com/a5894c1b-f6af-456e-82df-1151da0839bf.png">
59
+</p>
60
+
61
+## Features
62
+```
63
+- Login / Logout
64
+
65
+- Permission Authentication
66
+  - Page permission
67
+  - Directive permission
68
+  - Two-step login
69
+
70
+- Multi-environment build
71
+  - dev sit stage prod
72
+
73
+- Global Features
74
+  - I18n
75
+  - Multiple dynamic themes
76
+  - Dynamic sidebar (supports multi-level routing)
77
+  - Dynamic breadcrumb
78
+  - Tags-view(Tab page Support right-click operation)
79
+  - Svg Sprite
80
+  - Mock data
81
+  - Screenfull
82
+  - Responsive Sidebar
83
+
84
+- Editor
85
+  - Rich Text Editor
86
+  - Markdown Editor
87
+  - JSON Editor
88
+
89
+- Excel
90
+  - Export Excel
91
+  - Export zip
92
+  - Upload Excel
93
+  - Visualization Excel
94
+
95
+- Table
96
+  - Dynamic Table
97
+  - Drag And Drop Table
98
+  - Tree Table
99
+  - Inline Edit Table
100
+
101
+- Error Page
102
+  - 401
103
+  - 404
104
+
105
+- Components
106
+  - Avatar Upload
107
+  - Back To Top
108
+  - Drag Dialog
109
+  - Drag Kanban
110
+  - Drag List
111
+  - SplitPane
112
+  - Dropzone
113
+  - Sticky
114
+  - CountTo
115
+
116
+- Advanced Example
117
+- Error Log
118
+- Dashboard
119
+- Guide Page
120
+- Echarts
121
+- Clipboard
122
+- Markdown to html
123
+```
124
+
125
+## Getting started
126
+
127
+```bash
128
+# clone the project
129
+git clone https://github.com/PanJiaChen/vue-element-admin.git
130
+
131
+# install dependency
132
+npm install
133
+
134
+# develop
135
+npm run dev
136
+```
137
+
138
+This will automatically open http://localhost:9527.
139
+
140
+## Build
141
+```bash
142
+# build for test environment
143
+npm run build:sit
144
+
145
+# build for production environment
146
+npm run build:prod
147
+```
148
+
149
+## Advanced
150
+```bash
151
+# --report to build with bundle size analytics
152
+npm run build:prod --report
153
+
154
+# --preview to start a server in local to preview
155
+npm run build:prod --preview
156
+
157
+# lint code
158
+npm run lint
159
+
160
+# auto fix
161
+npm run lint -- --fix
162
+```
163
+
164
+Refer to [Documentation](https://panjiachen.github.io/vue-element-admin-site/guide/essentials/deploy.html) for more information
165
+
166
+## Changelog
167
+Detailed changes for each release are documented in the [release notes](https://github.com/PanJiaChen/vue-element-admin/releases).
168
+
169
+## Online Demo
170
+[Preview](http://panjiachen.github.io/vue-element-admin)
171
+
172
+## Donate
173
+If you find this project useful, you can buy author a glass of juice :tropical_drink:
174
+
175
+![donate](https://wpimg.wallstcn.com/bd273f0d-83a0-4ef2-92e1-9ac8ed3746b9.png)
176
+
177
+[Paypal Me](https://www.paypal.me/panfree23)
178
+
179
+[Buy me a coffee](https://www.buymeacoffee.com/Pan)
180
+
181
+## License
182
+
183
+[MIT](https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE)
184
+
185
+Copyright (c) 2017-present PanJiaChen

+ 195 - 0
README.zh-CN.md View File

@@ -0,0 +1,195 @@
1
+<p align="center">
2
+  <img width="320" src="https://wpimg.wallstcn.com/ecc53a42-d79b-42e2-8852-5126b810a4c8.svg">
3
+</p>
4
+
5
+<p align="center">
6
+  <a href="https://github.com/vuejs/vue">
7
+    <img src="https://img.shields.io/badge/vue-2.5.10-brightgreen.svg" alt="vue">
8
+  </a>
9
+  <a href="https://github.com/ElemeFE/element">
10
+    <img src="https://img.shields.io/badge/element--ui-2.3.2-brightgreen.svg" alt="element-ui">
11
+  </a>
12
+  <a href="https://travis-ci.org/PanJiaChen/vue-element-admin" rel="nofollow">
13
+    <img src="https://travis-ci.org/PanJiaChen/vue-element-admin.svg?branch=master" alt="Build Status">
14
+  </a>
15
+  <a href="https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE">
16
+    <img src="https://img.shields.io/github/license/mashape/apistatus.svg" alt="license">
17
+  </a>
18
+  <a href="https://github.com/PanJiaChen/vue-element-admin/releases">
19
+    <img src="https://img.shields.io/github/release/PanJiaChen/vue-element-admin.svg" alt="GitHub release">
20
+  </a>
21
+</p>
22
+
23
+简体中文 | [English](./README.md)
24
+
25
+## 简介
26
+
27
+[vue-element-admin](http://panjiachen.github.io/vue-element-admin) 是一个后台集成解决方案,它基于 [vue](https://github.com/vuejs/vue) 和 [element](https://github.com/ElemeFE/element)。它使用了最新的前端技术栈,内置了i18国际化解决方案,动态路由,权限验证,提炼了典型的业务模型,提供了丰富的功能组件,它可以帮助你快速搭建企业级中后台产品原型。相信不管你的需求是什么,本项目都能帮助到你。
28
+
29
+- [在线访问](http://panjiachen.github.io/vue-element-admin)
30
+
31
+- [使用文档](https://panjiachen.github.io/vue-element-admin-site/zh/)
32
+
33
+- [Gitter讨论组](https://gitter.im/vue-element-admin/discuss)
34
+
35
+- [Wiki](https://github.com/PanJiaChen/vue-element-admin/wiki)
36
+
37
+- [Donate](https://panjiachen.github.io/vue-element-admin-site/zh/donate/)
38
+
39
+- [Gitee](https://panjiachen.gitee.io/vue-element-admin/) 国内用户可访问该地址在线预览
40
+
41
+**本项目的定位是后台集成方案,不适合当基础模板来开发。**
42
+ - 模板建议使用: [vueAdmin-template](https://github.com/PanJiaChen/vueAdmin-template)  
43
+ - 桌面端: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)
44
+
45
+## 前序准备
46
+
47
+你需要在本地安装 [node](http://nodejs.org/) 和 [git](https://git-scm.com/)。本项目技术栈基于 [ES2015+](http://es6.ruanyifeng.com/)、[vue](https://cn.vuejs.org/index.html)、[vuex](https://vuex.vuejs.org/zh-cn/)、[vue-router](https://router.vuejs.org/zh-cn/) 、[axios](https://github.com/axios/axios) 和 [element-ui](https://github.com/ElemeFE/element),所有的请求数据都使用[Mock.js](https://github.com/nuysoft/Mock)模拟,提前了解和学习这些知识会对使用本项目有很大的帮助。
48
+
49
+同时配套一个系列的教程文章,如何从零构建后一个完整的后台项目,建议大家先看完这些文章再来实践本项目
50
+ - [手摸手,带你用 vue 撸后台 系列一(基础篇)](https://juejin.im/post/59097cd7a22b9d0065fb61d2)
51
+ - [手摸手,带你用 vue 撸后台 系列二(登录权限篇)](https://juejin.im/post/591aa14f570c35006961acac)
52
+ - [手摸手,带你用 vue 撸后台 系列三 (实战篇)](https://juejin.im/post/593121aa0ce4630057f70d35)
53
+ - [手摸手,带你用 vue 撸后台 系列四(vueAdmin 一个极简的后台基础模板)](https://juejin.im/post/595b4d776fb9a06bbe7dba56)
54
+ - [手摸手,带你封装一个 vue component](https://segmentfault.com/a/1190000009090836)
55
+ - [手摸手,带你优雅的使用 icon](https://juejin.im/post/59bb864b5188257e7a427c09)
56
+ - [手摸手,带你用合理的姿势使用webpack4(上)](https://juejin.im/post/5b56909a518825195f499806)
57
+ - [手摸手,带你用合理的姿势使用webpack4(下)](https://juejin.im/post/5b5d6d6f6fb9a04fea58aabc)
58
+
59
+ 或者加入该群主 **[圈子](https://jianshiapp.com/circles/1209)** 楼主会经常分享一些技术相关的东西
60
+
61
+ **如有问题请先看上述使用文档和文章,若不能满足,欢迎 issue 和 pr**
62
+
63
+ **本项目并不是一个脚手架,更倾向于是一个集成解决方案**
64
+
65
+ **注意:该项目使用 element-ui@2.3.0+ 版本,所以最低兼容 vue@2.5.0+**
66
+
67
+ **该项目不支持低版本浏览器(如ie),有需求请自行添加polyfill [详情](https://github.com/PanJiaChen/vue-element-admin/wiki#babel-polyfill)**
68
+
69
+ <p align="center">
70
+  <img width="900" src="https://wpimg.wallstcn.com/a5894c1b-f6af-456e-82df-1151da0839bf.png">
71
+</p>
72
+
73
+## 功能
74
+```
75
+- 登录 / 注销
76
+
77
+- 权限验证
78
+  - 页面权限
79
+  - 指令权限
80
+  - 二步登录
81
+
82
+- 多环境发布
83
+  - dev sit stage prod
84
+
85
+- 全局功能
86
+  - 国际化多语言
87
+  - 多种动态换肤
88
+  - 动态侧边栏(支持多级路由嵌套)
89
+  - 动态面包屑
90
+  - 快捷导航(标签页)
91
+  - Svg Sprite 图标
92
+  - 本地mock数据
93
+  - Screenfull全屏
94
+  - 自适应收缩侧边栏
95
+
96
+- 编辑器
97
+  - 富文本
98
+  - Markdown
99
+  - JSON 等多格式
100
+
101
+- Excel
102
+  - 导出excel
103
+  - 导出zip
104
+  - 导入excel
105
+  - 前端可视化excel
106
+
107
+- 表格
108
+  - 动态表格
109
+  - 拖拽表格
110
+  - 树形表格
111
+  - 内联编辑
112
+
113
+- 错误页面
114
+  - 401
115
+  - 404
116
+
117
+- 組件
118
+  - 头像上传
119
+  - 返回顶部
120
+  - 拖拽Dialog
121
+  - 拖拽看板
122
+  - 列表拖拽
123
+  - SplitPane
124
+  - Dropzone
125
+  - Sticky
126
+  - CountTo
127
+
128
+- 综合实例
129
+- 错误日志
130
+- Dashboard
131
+- 引导页
132
+- Echarts 图表
133
+- Clipboard(剪贴复制)
134
+- Markdown2html
135
+```
136
+
137
+## 开发
138
+```bash
139
+# 克隆项目
140
+git clone https://github.com/PanJiaChen/vue-element-admin.git
141
+
142
+# 安装依赖
143
+npm install
144
+   
145
+# 建议不要用cnpm安装 会有各种诡异的bug 可以通过如下操作解决 npm 下载速度慢的问题
146
+npm install --registry=https://registry.npm.taobao.org
147
+
148
+# 启动服务
149
+npm run dev
150
+```
151
+浏览器访问 http://localhost:9527
152
+
153
+## 发布
154
+```bash
155
+# 构建测试环境
156
+npm run build:sit
157
+
158
+# 构建生产环境
159
+npm run build:prod
160
+```
161
+
162
+## 其它
163
+```bash
164
+# --report to build with bundle size analytics
165
+npm run build:prod --report
166
+
167
+# --preview to start a server in local to preview
168
+npm run build:prod --preview
169
+
170
+# lint code
171
+npm run lint
172
+
173
+# auto fix
174
+npm run lint -- --fix
175
+```
176
+
177
+更多信息请参考 [使用文档](https://panjiachen.github.io/vue-element-admin-site/zh/)
178
+
179
+## Changelog
180
+Detailed changes for each release are documented in the [release notes](https://github.com/PanJiaChen/vue-element-admin/releases).
181
+
182
+## Online Demo
183
+[在线 Demo](http://panjiachen.github.io/vue-element-admin)
184
+
185
+## Donate
186
+如果你觉得这个项目帮助到了你,你可以帮作者买一杯果汁表示鼓励 :tropical_drink:
187
+![donate](https://panjiachen.github.io/donate/donation.png)
188
+
189
+[Paypal Me](https://www.paypal.me/panfree23)
190
+
191
+## License
192
+
193
+[MIT](https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE)
194
+
195
+Copyright (c) 2017-present PanJiaChen

BIN
favicon.ico View File


+ 2 - 2
src/xt_pages/dialysis/bloodPresssWatch.1.vue View File

@@ -128,12 +128,12 @@
128 128
 
129 129
         <el-table-column
130 130
           prop="dialysis_before_weight"
131
-          label="透前重 (kg)"
131
+          label="透前重 (kg)"
132 132
           align="center"
133 133
         ></el-table-column>
134 134
         <el-table-column
135 135
           prop="dialysis_after_weight"
136
-          label="透后重 (kg)"
136
+          label="透后重 (kg)"
137 137
           align="center"
138 138
         ></el-table-column>
139 139
         <el-table-column label="透中血压">

+ 2 - 2
src/xt_pages/dialysis/bloodPresssWatch.vue View File

@@ -245,13 +245,13 @@
245 245
 
246 246
         <el-table-column
247 247
           prop="dialysis_before_weight"
248
-          label="透前重(kg)"
248
+          label="透前重(kg)"
249 249
           align="center"
250 250
           width="120"
251 251
         ></el-table-column>
252 252
         <el-table-column
253 253
           prop="dialysis_after_weight"
254
-          label="透后重(kg)"
254
+          label="透后重(kg)"
255 255
           align="center"
256 256
           width="120"
257 257
         ></el-table-column>

+ 2 - 2
src/xt_pages/dialysis/details/assessmentAfter.vue View File

@@ -160,8 +160,8 @@
160 160
 
161 161
       </ul>
162 162
       <ul>
163
-        <li v-if="isShow('透后重')">
164
-          <label>透后重 : </label>
163
+        <li v-if="isShow('透后重')">
164
+          <label>透后重 : </label>
165 165
           <span class="content" v-if="weight_after!='0'">{{ weight_after }}</span>
166 166
           <span class="unit" v-if="weight_after!='0'">kg</span>
167 167
         </li>

+ 2 - 2
src/xt_pages/dialysis/details/assessmentBefore.vue View File

@@ -3,8 +3,8 @@
3 3
     <h2 class="DetailsTit"><span>{{title}}</span></h2>
4 4
     <div class="plate " >
5 5
       <ul>
6
-        <li v-if="isShow('透前重')">
7
-          <label>透前重 : </label>
6
+        <li v-if="isShow('透前重')">
7
+          <label>透前重 : </label>
8 8
           <span class="content" v-if="weight_before!='0'">{{ weight_before }}</span>
9 9
           <span class="unit" v-if="weight_before!='0'">kg</span>
10 10
         </li>

+ 2 - 2
src/xt_pages/dialysis/details/dialog/AssessmentAfterDislysis.vue View File

@@ -41,8 +41,8 @@
41 41
           </el-col>
42 42
 
43 43
 
44
-          <el-col :span="8" v-if="isShow('透后重')">
45
-            <el-form-item label="透后重(kg): " >
44
+          <el-col :span="8" v-if="isShow('透后重')">
45
+            <el-form-item label="透后重(kg): " >
46 46
               <el-input v-model="form.weight_after"></el-input>
47 47
             </el-form-item>
48 48
           </el-col>

+ 3 - 3
src/xt_pages/dialysis/details/dialog/MsgTip.vue View File

@@ -26,7 +26,7 @@
26 26
           </div>
27 27
         </div>
28 28
         <div class="item">
29
-          <label class="name" for="txms">透前重(kg)</label>
29
+          <label class="name" for="txms">透前重(kg)</label>
30 30
           <div class="content">
31 31
             <span class="text" id="txms">{{ predialysis.weight_before }}</span>
32 32
           </div>
@@ -54,7 +54,7 @@
54 54
           </div>
55 55
         </div>
56 56
         <div class="item">
57
-          <label class="name" for="txms">透后重(kg)</label>
57
+          <label class="name" for="txms">透后重(kg)</label>
58 58
           <div class="content">
59 59
             <span class="text" id="txms">{{ record.weight_after }}</span>
60 60
           </div>
@@ -66,7 +66,7 @@
66 66
           </div>
67 67
         </div>
68 68
         <div class="item">
69
-          <label class="name" for="txms">上次透后重(kg)</label>
69
+          <label class="name" for="txms">上次透后重(kg)</label>
70 70
           <div class="content">
71 71
             <span class="text" id="txms">{{ last_record.weight_after }}</span>
72 72
           </div>

+ 1 - 1
src/xt_pages/dialysis/details/dialog/assessmentBeforeDislysisDialog.vue View File

@@ -23,7 +23,7 @@
23 23
       <el-form ref="assessmentBeforeDislysis" :model="assessmentBeforeDislysis" label-width="125px">
24 24
         <el-row :gutter="24">
25 25
           <el-col :span="8">
26
-            <el-form-item label="透前体重(kg): " v-if="isShow('透前体重')">
26
+            <el-form-item label="透前称重(kg): " v-if="isShow('透前称重')">
27 27
               <el-input type="number" v-model="assessmentBeforeDislysis.weight_before"></el-input>
28 28
             </el-form-item>
29 29
           </el-col>

+ 3 - 3
src/xt_pages/dialysis/details/dialog/dialysisPrescriptionDialog.vue View File

@@ -502,7 +502,7 @@
502 502
         <span>{{dialysis_date}}</span>
503 503
       </div>
504 504
       <div class="newLine">
505
-        <span>透前重(kg)</span>
505
+        <span>透前重(kg)</span>
506 506
         <span>{{ getBeforeWeight(predialysis)}}</span>
507 507
       </div>
508 508
       <div class="newLine">
@@ -520,7 +520,7 @@
520 520
         <span>{{ add_weight }}</span>
521 521
       </div>
522 522
       <div class="newLine">
523
-        <span>透后重(kg)</span>
523
+        <span>透后重(kg)</span>
524 524
         <span>{{ getAfterWeight(record) }}</span>
525 525
       </div>
526 526
       <div class="newLine">
@@ -528,7 +528,7 @@
528 528
         <span>{{ record.weight_loss }}</span>
529 529
       </div>
530 530
       <div class="newLine">
531
-        <span>上次透后重(kg)</span>
531
+        <span>上次透后重(kg)</span>
532 532
         <span>{{getLastAfterWeight(last_record)}}</span>
533 533
       </div>
534 534
 

+ 6 - 6
src/xt_pages/dialysis/details/pastData.vue View File

@@ -1,12 +1,12 @@
1 1
 <template>
2 2
    <div class="plate-box">
3 3
     <h2 class="DetailsTit"><span>{{title}}</span></h2>
4
-    <div class="tableTit " >   
4
+    <div class="tableTit " >
5 5
         <ul>
6 6
              <li v-for="(item,index) in tableTit" :key="index" :value="item.value" >{{item}}</li>
7 7
         </ul>
8 8
     </div>
9
-    <div class="tableDate" >   
9
+    <div class="tableDate" >
10 10
         <ul>
11 11
              <li v-for="(item,index) in tableDate" :key="index" :value="item.value" >
12 12
                <span>{{item.data}}</span>
@@ -18,8 +18,8 @@
18 18
              </li>
19 19
         </ul>
20 20
     </div>
21
-    <div class="middleLine"></div>    
22
-  </div>    
21
+    <div class="middleLine"></div>
22
+  </div>
23 23
 </template>
24 24
 
25 25
 <script>
@@ -31,8 +31,8 @@ export default {
31 31
       tableTit: [
32 32
         "日期",
33 33
         "透析模式",
34
-        "透前重(kg)",
35
-        "透后重(kg)",
34
+        "透前重(kg)",
35
+        "透后重(kg)",
36 36
         "设定脱水(L)",
37 37
         "实际脱水(L)"
38 38
       ],

+ 3 - 3
src/xt_pages/dialysis/dialysisPage.vue View File

@@ -715,7 +715,7 @@
715 715
                   <table class="dan-table" style="margin-top: 0px;">
716 716
                     <tbody>
717 717
                     <tr>
718
-                      <td class="dan-td-col-4">透前重</td>
718
+                      <td class="dan-td-col-4">透前重</td>
719 719
                       <td class="dan-td">
720 720
                         <div class="dan-value"><b class="print-b">{{danPrintData.weight_before}}</b></div>
721 721
                       </td>
@@ -1072,7 +1072,7 @@
1072 1072
                   </el-form-item>
1073 1073
                 </el-col>
1074 1074
                 <el-col :span="size">
1075
-                  <el-form-item label="透前重(kg):">
1075
+                  <el-form-item label="透前重(kg):">
1076 1076
                     <el-input v-model="dialysisBeforeAsses.dialysisbeforeWeight"></el-input>
1077 1077
                   </el-form-item>
1078 1078
                 </el-col>
@@ -1482,7 +1482,7 @@
1482 1482
 
1483 1483
 
1484 1484
                 <el-col :span="size">
1485
-                  <el-form-item label="透后重(kg):">
1485
+                  <el-form-item label="透后重(kg):">
1486 1486
                     <el-input v-model="dialysisAfterAsses.weightAfterDialysi"></el-input>
1487 1487
                   </el-form-item>
1488 1488
                 </el-col>

+ 34 - 34
src/xt_pages/dialysis/dialysisPrintOrder.1.html View File

@@ -1,7 +1,7 @@
1 1
 <template>
2 2
     <div class="app-container ">
3
-        <div class="order-print-btn" 
4
-            v-loading="loading" 
3
+        <div class="order-print-btn"
4
+            v-loading="loading"
5 5
             element-loading-text="加载中"
6 6
             element-loading-spinner="el-icon-loading"
7 7
             element-loading-background="rgba(0, 0, 0, 0.8)"
@@ -30,7 +30,7 @@
30 30
                                         <span> 男</span>
31 31
                                     </label>
32 32
                                     &nbsp;
33
-                                    <label for="gender_2" class="radio-lebel-box"> 
33
+                                    <label for="gender_2" class="radio-lebel-box">
34 34
                                         <span class="radio-inner">
35 35
                                             <span class="radio-fang" :class="{'is-checked-radio':patientInfo_gender_2}"></span>
36 36
                                             <input v-model="patientInfo.gender" id="gender_2" :checked="patientInfo.gender==2?true:false" name="gender" type="radio" class="radio-no" value="2">
@@ -45,7 +45,7 @@
45 45
                             </td>
46 46
                             <td>岁</td>
47 47
                             <td width="10">&nbsp;</td>
48
-                            
48
+
49 49
                             <td width="50">科 室: </td>
50 50
                             <td width="150">
51 51
                                 <div>
@@ -57,7 +57,7 @@
57 57
                                         <span> 门 诊 透 析</span>
58 58
                                     </label>
59 59
                                     &nbsp;
60
-                                    <label for="source_2" class="radio-lebel-box"> 
60
+                                    <label for="source_2" class="radio-lebel-box">
61 61
                                         <span class="radio-inner">
62 62
                                             <span class="radio-fang" :class="{'is-checked-radio':patientInfo_source_2}"></span>
63 63
                                             <input v-model="patientInfo.source" id="source_2" :checked="patientInfo.source==2?true:false" name="source" type="radio" class="radio-no" value="2">
@@ -74,7 +74,7 @@
74 74
                                <div class="under-line">&nbsp;{{patientInfo.DialysisSchedule.DeviceNumber.number}}</div>
75 75
                             </td>
76 76
                             <td>床</td>
77
-                            
77
+
78 78
                         </tr>
79 79
                     </tbody>
80 80
                 </table>
@@ -95,7 +95,7 @@
95 95
                             <td width="120">
96 96
                                 <div class="under-line">&nbsp;<span>{{queryParams.xtdate}}</span></div>
97 97
                             </td>
98
-                           
98
+
99 99
                         </tr>
100 100
                     </tbody>
101 101
                 </table>
@@ -118,7 +118,7 @@
118 118
                                                         <span> 步行</span>
119 119
                                                     </label>
120 120
                                                     &nbsp;
121
-                                                    <label for="receiverTreatmentAccess_way_2" class="radio-lebel-box"> 
121
+                                                    <label for="receiverTreatmentAccess_way_2" class="radio-lebel-box">
122 122
                                                         <span class="radio-inner">
123 123
                                                             <span class="radio-fang" :class="{'is-checked-radio':receiverTreatmentAccess.way==2?true:false}"></span>
124 124
                                                             <input v-model="receiverTreatmentAccess.way" id="receiverTreatmentAccess_way_2" name="receiverTreatmentAccess_way" type="radio" class="radio-no" value="2">
@@ -126,7 +126,7 @@
126 126
                                                         <span> 扶行</span>
127 127
                                                     </label>
128 128
                                                     &nbsp;
129
-                                                    <label for="receiverTreatmentAccess_way_3" class="radio-lebel-box"> 
129
+                                                    <label for="receiverTreatmentAccess_way_3" class="radio-lebel-box">
130 130
                                                         <span class="radio-inner">
131 131
                                                             <span class="radio-fang" :class="{'is-checked-radio':receiverTreatmentAccess.way==3?true:false}"></span>
132 132
                                                             <input v-model="receiverTreatmentAccess.way" id="receiverTreatmentAccess_way_3" name="receiverTreatmentAccess_way" type="radio" class="radio-no" value="3">
@@ -134,7 +134,7 @@
134 134
                                                         <span> 轮椅</span>
135 135
                                                     </label>
136 136
                                                     &nbsp;
137
-                                                    <label for="receiverTreatmentAccess_way_4" class="radio-lebel-box"> 
137
+                                                    <label for="receiverTreatmentAccess_way_4" class="radio-lebel-box">
138 138
                                                         <span class="radio-inner">
139 139
                                                             <span class="radio-fang" :class="{'is-checked-radio':receiverTreatmentAccess.way==4?true:false}"></span>
140 140
                                                             <input v-model="receiverTreatmentAccess.way" id="receiverTreatmentAccess_way_4" name="receiverTreatmentAccess_way" type="radio" class="radio-no" value="4">
@@ -143,7 +143,7 @@
143 143
                                                     </label>
144 144
                                                 </div>
145 145
                                             </td>
146
-                                            
146
+
147 147
                                             <td ></td>
148 148
                                             <td width="50">意识: </td>
149 149
                                             <td width="180">
@@ -156,7 +156,7 @@
156 156
                                                         <span> 清醒</span>
157 157
                                                     </label>
158 158
                                                     &nbsp;
159
-                                                    <label for="receiverTreatmentAccess_consciousness_2" class="radio-lebel-box"> 
159
+                                                    <label for="receiverTreatmentAccess_consciousness_2" class="radio-lebel-box">
160 160
                                                         <span class="radio-inner">
161 161
                                                             <span class="radio-fang" :class="{'is-checked-radio':receiverTreatmentAccess.consciousness==2?true:false}"></span>
162 162
                                                             <input v-model="receiverTreatmentAccess.consciousness" id="receiverTreatmentAccess_consciousness_2" name="receiverTreatmentAccess_consciousness" type="radio" class="radio-no" value="2">
@@ -164,7 +164,7 @@
164 164
                                                         <span> 嗜睡</span>
165 165
                                                     </label>
166 166
                                                     &nbsp;
167
-                                                    <label for="receiverTreatmentAccess_consciousness_3" class="radio-lebel-box"> 
167
+                                                    <label for="receiverTreatmentAccess_consciousness_3" class="radio-lebel-box">
168 168
                                                         <span class="radio-inner">
169 169
                                                             <span class="radio-fang" :class="{'is-checked-radio':receiverTreatmentAccess.consciousness==3?true:false}"></span>
170 170
                                                             <input v-model="receiverTreatmentAccess.consciousness" id="receiverTreatmentAccess_consciousness_3" name="receiverTreatmentAccess_consciousness" type="radio" class="radio-no" value="3">
@@ -182,7 +182,7 @@
182 182
                                         </tr>
183 183
                                     </tbody>
184 184
                                 </table>
185
-                                
185
+
186 186
                                 <table class="table-box">
187 187
                                     <tbody>
188 188
                                         <tr>
@@ -229,10 +229,10 @@
229 229
                                                         <span> 躁动不安</span>
230 230
                                                     </label>
231 231
                                                     &nbsp;
232
-                                                    
232
+
233 233
                                                 </div>
234 234
                                             </td>
235
-                                            
235
+
236 236
                                             <td ></td>
237 237
                                         </tr>
238 238
                                     </tbody>
@@ -326,7 +326,7 @@
326 326
                                                 <table class="table-box">
327 327
                                                     <tbody>
328 328
                                                         <tr>
329
-                                                            <td width="90">透前重:</td>
329
+                                                            <td width="90">透前重:</td>
330 330
                                                             <td width="">
331 331
                                                                 <div class="under-line">&nbsp;{{predialysis.weight_before}}</div>
332 332
                                                             </td>
@@ -446,7 +446,7 @@
446 446
                                             </td>
447 447
                                         </tr>
448 448
                                         <tr>
449
-                                            
449
+
450 450
                                             <td>
451 451
                                                 <table class="table-box">
452 452
                                                     <tbody>
@@ -642,7 +642,7 @@
642 642
                                                 <div class="under-line">&nbsp;{{prescription.bicarbonate}}</div>
643 643
                                             </td>
644 644
                                             <td width="75">mmol/L</td>
645
-                                            
645
+
646 646
                                         </tr>
647 647
                                     </tbody>
648 648
                                 </table>
@@ -670,7 +670,7 @@
670 670
                         </tr>
671 671
                         <tr v-for="advice in advices" :key="advice.id">
672 672
                             <td> {{advice.start_time | parseTime('{y}-{m}-{d} {h}:{i}')}}</td>
673
-                            <td> 
673
+                            <td>
674 674
                                 <span v-if="advice.parent_id>0">└</span>
675 675
                                 <span >{{advice.advice_name }}</span>
676 676
                                 <span >{{advice.advice_desc}}</span>
@@ -709,7 +709,7 @@
709 709
                             <td >透析液温度<font size="2"> (℃)</font></td>
710 710
                             <td >置换率<font size="2"> (ml/min)</font></td>
711 711
                             <td >置换量<font size="2"> (L)</font></td>
712
-                            
712
+
713 713
                             <td width="" style="min-width:45px;">病情变化</td>
714 714
                             <td width="" style="min-width:120px;">处理</td>
715 715
                             <td width="" style="min-width:45px;">结果</td>
@@ -733,7 +733,7 @@
733 733
                         </tr>
734 734
                     </tbody>
735 735
                 </table>
736
-                
736
+
737 737
                 <table class="print-table" border="1">
738 738
                     <tbody>
739 739
                         <tr>
@@ -850,7 +850,7 @@ export default {
850 850
             summary:{},
851 851
             receiverTreatmentAccess:{},
852 852
 
853
-            
853
+
854 854
             AlPanel:{id:0, name:"", type:1, shouji:2, weichi:2, zongliang:2, gaimingcheng:-1, gaijiliang:-1, shouji_unit:"mg", weichi_unit:"mg/h", zongliang_unit:"mg", gaimingcheng_unit:"", gaijiliang_unit:""},
855 855
 
856 856
         }
@@ -869,7 +869,7 @@ export default {
869 869
             scanStyles: false
870 870
           });
871 871
         },
872
-        
872
+
873 873
     getXuserName(id){
874 874
         if (id<=0) {
875 875
             return "";
@@ -921,7 +921,7 @@ export default {
921 921
                         }
922 922
                     }
923 923
 
924
-                    
924
+
925 925
                     var paLen = this.perfusionApparatus.length;
926 926
                     this.prescription.perfusion_apparatus_name = "";
927 927
                     for (let index = 0; index < paLen; index++) {
@@ -943,7 +943,7 @@ export default {
943 943
                     this.advices = response.data.data.advices;
944 944
                     this.monitors = response.data.data.monitors;
945 945
                     this.summary = response.data.data.summary;
946
-                    
946
+
947 947
 
948 948
                 }else {
949 949
                     this.$message.error("请求数据失败");
@@ -955,7 +955,7 @@ export default {
955 955
     },
956 956
     watch:{
957 957
         "patientInfo.gender":function () {
958
-            
958
+
959 959
             if (this.patientInfo.gender == 1) {
960 960
                     this.patientInfo_gender_1 = true;
961 961
                     this.patientInfo_gender_2 = false;
@@ -968,7 +968,7 @@ export default {
968 968
             }
969 969
         },
970 970
         "patientInfo.source":function () {
971
-            
971
+
972 972
             if (this.patientInfo.source == 1) {
973 973
                     this.patientInfo_source_1 = true;
974 974
                     this.patientInfo_source_2 = false;
@@ -976,13 +976,13 @@ export default {
976 976
                     this.patientInfo_source_2 = true;
977 977
                     this.patientInfo_source_1 = false;
978 978
             }else {
979
-                
979
+
980 980
                     this.patientInfo_source_2 = false;
981 981
                     this.patientInfo_source_1 = false;
982 982
             }
983 983
         }
984 984
 
985
-        
985
+
986 986
     },
987 987
     created(){
988 988
         var xtuser = this.$store.getters.xt_user;
@@ -992,7 +992,7 @@ export default {
992 992
         this.replacementWays = this.$store.getters.replacement_ways;
993 993
         this.perfusionApparatus = this.$store.getters.perfusion_apparatus;
994 994
         this.anticoagulantsConfit = this.$store.getters.anticoagulants_confit;
995
-        
995
+
996 996
         const xtdate = this.$route.query && this.$route.query.xtdate;
997 997
         const xtno = this.$route.query && this.$route.query.xtno;
998 998
         if (typeof(xtdate)=="string" && xtdate.length>0 && typeof(xtno)=="string" && xtno.length>0){
@@ -1011,7 +1011,7 @@ export default {
1011 1011
 <style >
1012 1012
 .dialysis-print-order{
1013 1013
     width:960px; margin:0 auto
1014
-} 
1014
+}
1015 1015
 
1016 1016
 .dialysis-print-order .order-yy-name{
1017 1017
     margin: auto;
@@ -1027,7 +1027,7 @@ export default {
1027 1027
     padding: 10px 20px 20px 20px;
1028 1028
 }
1029 1029
 .dialysis-print-order .table-box {
1030
-    
1030
+
1031 1031
     width: 100%;
1032 1032
     line-height: 20px;
1033 1033
     font-size: 14px;
@@ -1062,7 +1062,7 @@ export default {
1062 1062
 }
1063 1063
 .dialysis-print-order .radio-no {
1064 1064
     opacity: 0;
1065
-    outline: none; 
1065
+    outline: none;
1066 1066
     position: absolute;
1067 1067
     margin: 0;
1068 1068
     width: 0;

+ 8 - 8
src/xt_pages/dialysis/order.html View File

@@ -1,7 +1,7 @@
1 1
 <style>
2 2
     .dialysis-print-order{
3 3
     width:960px; margin:0 auto
4
-} 
4
+}
5 5
 
6 6
 .dialysis-print-order .order-yy-name{
7 7
     margin: auto;
@@ -238,7 +238,7 @@
238 238
                                         <table class="table-box">
239 239
                                             <tbody>
240 240
                                                 <tr>
241
-                                                    <td width="90">透前重:</td>
241
+                                                    <td width="90">透前重:</td>
242 242
                                                     <td width="">
243 243
                                                         <div class="under-line">&nbsp;{{predialysis.weight_before}}</div>
244 244
                                                     </td>
@@ -358,7 +358,7 @@
358 358
                                     </td>
359 359
                                 </tr>
360 360
                                 <tr>
361
-                                    
361
+
362 362
                                     <td>
363 363
                                         <table class="table-box">
364 364
                                             <tbody>
@@ -554,7 +554,7 @@
554 554
                                         <div class="under-line">&nbsp;{{prescription.bicarbonate}}</div>
555 555
                                     </td>
556 556
                                     <td width="75">mmol/L</td>
557
-                                    
557
+
558 558
                                 </tr>
559 559
                             </tbody>
560 560
                         </table>
@@ -582,7 +582,7 @@
582 582
                 </tr>
583 583
                 <tr v-for="advice in advices" :key="advice.id">
584 584
                     <td> {{advice.start_time | parseTime('{y}-{m}-{d} {h}:{i}')}}</td>
585
-                    <td> 
585
+                    <td>
586 586
                         <span v-if="advice.parent_id>0">└</span>
587 587
                         <span >{{advice.advice_name }}</span>
588 588
                         <span >{{advice.advice_desc}}</span>
@@ -621,7 +621,7 @@
621 621
                     <td >透析液温度<font size="2"> (℃)</font></td>
622 622
                     <td >置换率<font size="2"> (ml/min)</font></td>
623 623
                     <td >置换量<font size="2"> (L)</font></td>
624
-                    
624
+
625 625
                     <td width="" style="min-width:45px;">病情变化</td>
626 626
                     <td width="" style="min-width:120px;">处理</td>
627 627
                     <td width="" style="min-width:45px;">结果</td>
@@ -645,7 +645,7 @@
645 645
                 </tr>
646 646
             </tbody>
647 647
         </table>
648
-        
648
+
649 649
         <table class="print-table" border="1">
650 650
             <tbody>
651 651
                 <tr>
@@ -711,4 +711,4 @@
711 711
             </tbody>
712 712
         </table>
713 713
     </div>
714
-</div>
714
+</div>

+ 16 - 16
src/xt_pages/qcd/patientAnalysis/person/oralMedicine.vue View File

@@ -7,7 +7,7 @@
7 7
       <person-info :patient="patientInfo"></person-info>
8 8
       <person-nav activeName="oralmedicine" :patientID="patientID"></person-nav>
9 9
 
10
-      
10
+
11 11
       <div class="cell clearfix">
12 12
         <label class="title">
13 13
           <span class="name">日期查询</span> :
@@ -38,7 +38,7 @@
38 38
           value-format="yyyy-MM-dd"
39 39
         ></el-date-picker>
40 40
       </div>
41
-      
41
+
42 42
       <div class="cell clearfix">
43 43
         <label class="title">
44 44
           <span class="name">医嘱类型</span> :
@@ -67,7 +67,7 @@
67 67
           </el-option>
68 68
         </el-select>
69 69
       </div> -->
70
-      
70
+
71 71
       <!-- <div class="cqd-dataTitle">统计图</div>
72 72
       <el-row :gutter="32">
73 73
         <el-col :xs="24" :sm="24" :lg="24">
@@ -88,7 +88,7 @@
88 88
         :cell-style="cellstyle"
89 89
         style="width: 100%;margin-top: 10px;"
90 90
         id="qcd-person-oral-medical"
91
-        :span-method="mergeSpan" 
91
+        :span-method="mergeSpan"
92 92
         :header-cell-style="{ backgroundColor: 'rgb(245, 247, 250)'}"
93 93
       >
94 94
         <el-table-column  label="医嘱类型" width="80" property="advice_type" align="center" >
@@ -98,13 +98,13 @@
98 98
                 <span v-else></span>
99 99
             </template>
100 100
         </el-table-column>
101
-        
101
+
102 102
         <el-table-column  label="医嘱内容" property="advice_name" min-width="180" align="center" >
103 103
             <template slot-scope="scope">
104 104
                {{scope.row.parent_id>0?'&nbsp;&nbsp;':''}} {{scope.row.advice_name }}
105 105
             </template>
106 106
         </el-table-column>
107
-        
107
+
108 108
         <el-table-column  label="开始时间" width="180" property="start_time" align="center">
109 109
             <template slot-scope="scope">
110 110
                 {{scope.row.start_time | parseTime("{y}-{m}-{d} {h}:{i}")}}
@@ -116,19 +116,19 @@
116 116
                 <span v-if="scope.row.advice_type==1&&scope.row.stop_state==1"> {{scope.row.stop_time | parseTime("{y}-{m}-{d} {h}:{i}")}}</span>
117 117
             </template>
118 118
         </el-table-column>
119
-        
119
+
120 120
         <el-table-column label="开嘱医生" width="180"  property="advice_doctor" align="center">
121 121
             <template slot-scope="scope">
122 122
                 {{getXuserName(scope.row.advice_doctor)}}
123 123
             </template>
124 124
         </el-table-column>
125
-        
125
+
126 126
         <el-table-column  label="执行护士" width="180"  property="execution_staff" align="center">
127 127
             <template slot-scope="scope">
128 128
                 <span v-if="scope.row.parent_id==0">{{getXuserName(scope.row.execution_staff)}}</span>
129 129
             </template>
130 130
         </el-table-column>
131
-        
131
+
132 132
       </el-table>
133 133
 
134 134
       <!-- <pagi-nation title="分页"></pagi-nation> -->
@@ -225,7 +225,7 @@ export default {
225 225
       (nowMonth < 10 ? "0" + nowMonth : nowMonth) +
226 226
       "-" +
227 227
       (nowDay < 10 ? "0" + nowDay : nowDay);
228
-    
228
+
229 229
     this.getList();
230 230
   },
231 231
   methods: {
@@ -259,7 +259,7 @@ export default {
259 259
       }
260 260
       return '';
261 261
     },
262
-    
262
+
263 263
     handleTableRow() {
264 264
       this.tableRow = [];
265 265
       var pos = 0;
@@ -311,7 +311,7 @@ export default {
311 311
         }
312 312
         return ""
313 313
     },
314
-    
314
+
315 315
     getXuserName(id) {
316 316
       if (id <= 0) {
317 317
         return "";
@@ -387,10 +387,10 @@ export default {
387 387
       }
388 388
 
389 389
       if (this.diagramType == 1) {
390
-        this.CompletionOptions.legend = ['透前体重', '透后体重', '干体重'];
390
+        this.CompletionOptions.legend = ['透前称重', '透后称重', '干体重'];
391 391
         this.CompletionOptions.series = [
392
-          { name:'透前重', type:'line', data:[] },
393
-          { name:'透后重', type:'line', data:[] },
392
+          { name:'透前重', type:'line', data:[] },
393
+          { name:'透后重', type:'line', data:[] },
394 394
           { name:'干体重', type:'line', data:[] },
395 395
         ];
396 396
       }else {
@@ -531,4 +531,4 @@ export default {
531 531
     }
532 532
   }
533 533
 }
534
-</style>
534
+</style>

+ 12 - 12
src/xt_pages/qcd/patientAnalysis/person/weight.vue View File

@@ -7,7 +7,7 @@
7 7
       <person-info :patient="patientInfo"></person-info>
8 8
       <person-nav activeName="weight" :patientID="patientID"></person-nav>
9 9
 
10
-      
10
+
11 11
       <div class="cell clearfix">
12 12
         <label class="title">
13 13
           <span class="name">日期查询</span> :
@@ -38,7 +38,7 @@
38 38
           value-format="yyyy-MM-dd"
39 39
         ></el-date-picker>
40 40
       </div>
41
-      
41
+
42 42
       <div class="cell clearfix">
43 43
         <label class="title">
44 44
           <span class="name">曲线图</span> :
@@ -54,7 +54,7 @@
54 54
           </ul>
55 55
         </div>
56 56
       </div>
57
-      
57
+
58 58
       <div class="cqd-dataTitle">统计图</div>
59 59
       <el-row :gutter="32">
60 60
         <el-col :xs="24" :sm="24" :lg="24">
@@ -75,23 +75,23 @@
75 75
         style="width: 100%;margin-top: 10px;"
76 76
         :header-cell-style="{ backgroundColor: 'rgb(245, 247, 250)'}"
77 77
       >
78
-        
78
+
79 79
         <el-table-column  label="透析日期" min-width="80" property="schedule_date" align="center">
80 80
           <template slot-scope="scope"><span>{{getTime(scope.row.schedule_date, '{y}{m}{d}')}}</span></template>
81 81
         </el-table-column>
82 82
         <el-table-column  label="干体重" min-width="80" property="assessment_before_dislysis" align="center">
83 83
           <template slot-scope="scope"><span>{{scope.row.assessment_before_dislysis?scope.row.assessment_before_dislysis.dry_weight + 'Kg':'--'}}</span></template>
84 84
         </el-table-column>
85
-        <el-table-column  label="透前重" min-width="80" property="assessment_before_dislysis" align="center">
85
+        <el-table-column  label="透前重" min-width="80" property="assessment_before_dislysis" align="center">
86 86
           <template slot-scope="scope"><span>{{scope.row.assessment_before_dislysis?scope.row.assessment_before_dislysis.weight_before + 'Kg':'--'}}</span></template>
87 87
         </el-table-column>
88 88
         <el-table-column  label="体重增加" min-width="80" property="assessment_before_dislysis" align="center">
89 89
           <template slot-scope="scope"><span>{{scope.row.assessment_before_dislysis?scope.row.assessment_before_dislysis.weight_before - scope.row.assessment_before_dislysis.dry_weight + 'Kg':'--'}}</span></template>
90 90
         </el-table-column>
91
-        <el-table-column  label="透后重" min-width="80" property="assessment_after_dislysis" align="center">
91
+        <el-table-column  label="透后重" min-width="80" property="assessment_after_dislysis" align="center">
92 92
           <template slot-scope="scope"><span>{{scope.row.assessment_after_dislysis?scope.row.assessment_after_dislysis.weight_after+ 'Kg':'--'}}</span></template>
93 93
         </el-table-column>
94
-        
94
+
95 95
       </el-table>
96 96
 
97 97
       <!-- <pagi-nation title="分页"></pagi-nation> -->
@@ -184,7 +184,7 @@ export default {
184 184
       (nowMonth < 10 ? "0" + nowMonth : nowMonth) +
185 185
       "-" +
186 186
       (nowDay < 10 ? "0" + nowDay : nowDay);
187
-    
187
+
188 188
     this.getList();
189 189
   },
190 190
   methods: {
@@ -297,10 +297,10 @@ export default {
297 297
       }
298 298
 
299 299
       if (this.diagramType == 1) {
300
-        this.CompletionOptions.legend = ['透前体重', '透后体重', '干体重'];
300
+        this.CompletionOptions.legend = ['透前称重', '透后称重', '干体重'];
301 301
         this.CompletionOptions.series = [
302
-          { name:'透前重', type:'line', data:[] },
303
-          { name:'透后重', type:'line', data:[] },
302
+          { name:'透前重', type:'line', data:[] },
303
+          { name:'透后重', type:'line', data:[] },
304 304
           { name:'干体重', type:'line', data:[] },
305 305
         ];
306 306
       }else {
@@ -438,4 +438,4 @@ export default {
438 438
     }
439 439
   }
440 440
 }
441
-</style>
441
+</style>

+ 7 - 7
src/xt_pages/qcd/patientAnalysis/weight.vue View File

@@ -82,7 +82,7 @@
82 82
         </el-col>
83 83
         <el-col :xs="24" :sm="24" :lg="8">
84 84
           <div class="chart-wrapper">
85
-              <pie-chart title="透后重(人次)" :options="WeightAfterOptions"/>
85
+              <pie-chart title="透后重(人次)" :options="WeightAfterOptions"/>
86 86
           </div>
87 87
         </el-col>
88 88
       </el-row>
@@ -98,7 +98,7 @@
98 98
         style="width: 100%;margin-top: 10px;"
99 99
         :header-cell-style="{ backgroundColor: 'rgb(245, 247, 250)'}"
100 100
       >
101
-      
101
+
102 102
         <el-table-column  label="透析日期" min-width="80" property="schedule_date" align="center">
103 103
           <template slot-scope="scope"><span>{{getTime(scope.row.schedule_date, '{y}{m}{d}')}}</span></template>
104 104
         </el-table-column>
@@ -126,10 +126,10 @@
126 126
         <el-table-column  label="体重增加" min-width="80" property="assessment_before_dislysis" align="center">
127 127
           <template slot-scope="scope"><span>{{scope.row.assessment_before_dislysis?scope.row.assessment_before_dislysis.weight_before - scope.row.assessment_before_dislysis.dry_weight + 'Kg':'--'}}</span></template>
128 128
         </el-table-column>
129
-        <el-table-column  label="透后重" min-width="80" property="assessment_after_dislysis" align="center">
129
+        <el-table-column  label="透后重" min-width="80" property="assessment_after_dislysis" align="center">
130 130
           <template slot-scope="scope"><span>{{scope.row.assessment_after_dislysis?scope.row.assessment_after_dislysis.weight_after+ 'Kg':'--'}}</span></template>
131 131
         </el-table-column>
132
-        
132
+
133 133
         <el-table-column  label="统计" min-width="80" property="patient" align="center">
134 134
           <template slot-scope="scope">
135 135
             <el-tooltip class="item" effect="dark" content="统计" placement="top">
@@ -362,7 +362,7 @@ export default {
362 362
               });
363 363
             }
364 364
 
365
-            
365
+
366 366
         }
367 367
       });
368 368
     },
@@ -390,7 +390,7 @@ export default {
390 390
       this.listQuery.age = age;
391 391
       this.getList();
392 392
     },
393
-    
393
+
394 394
     getTime(value, temp) {
395 395
         if (value != undefined) {
396 396
           return uParseTime(value, temp)
@@ -526,4 +526,4 @@ export default {
526 526
     }
527 527
   }
528 528
 }
529
-</style>
529
+</style>

+ 1 - 1
src/xt_pages/sign/index.vue View File

@@ -64,7 +64,7 @@
64 64
                    </div>
65 65
                     <div class="border"></div>
66 66
                     <div style="margin-bottom:20px;color:rgb(96,96,96);font-size:14px">
67
-                    透前重(kg):&nbsp;<el-input v-model="weigh_list.weight_before" :disabled="disa" style="width:200px"></el-input> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
67
+                    透前重(kg):&nbsp;<el-input v-model="weigh_list.weight_before" :disabled="disa" style="width:200px"></el-input> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
68 68
                     干体重(kg):&nbsp;<el-input v-model="weigh_list.dry_weight" :disabled="true" style="width:200px"></el-input><br>
69 69
                     </div>
70 70
                     <div style="margin-bottom:12px;color:rgb(96,96,96);font-size:14px">

+ 4 - 4
src/xt_pages/user/dialysisRecord.vue View File

@@ -153,14 +153,14 @@
153 153
             prop="predialysis_evaluation.weight_before"
154 154
             width="110"
155 155
             align="center"
156
-            label="透前重(kg)"
156
+            label="透前重(kg)"
157 157
           >
158 158
           </el-table-column>
159 159
           <el-table-column
160 160
             prop="assessment_after_dislysis.weight_after"
161 161
             width="110"
162 162
             align="center"
163
-            label="透后重(kg)"
163
+            label="透后重(kg)"
164 164
           >
165 165
           </el-table-column>
166 166
           <el-table-column
@@ -299,8 +299,8 @@
299 299
               <th>透析模式</th>
300 300
               <th>透析时长(h)</th>
301 301
               <th>干体重(kg)</th>
302
-              <th>透前重(kg)</th>
303
-              <th>透后重(kg)</th>
302
+              <th>透前重(kg)</th>
303
+              <th>透后重(kg)</th>
304 304
               <th>透前血压(mmhg)</th>
305 305
               <th>透后血压(mmhg)</th>
306 306
               <th>超滤总量(L)</th>

+ 168 - 0
static/neditor/README.md View File

@@ -0,0 +1,168 @@
1
+
2
+<p align="center">
3
+<a href="https://jq.qq.com/?_wv=1027&k=5qVzRh4" title="Notadd 官方技术交流群"><img src="https://img.shields.io/badge/QQ%20Group-321735506-6782d6.svg?style=flat-square"></a>
4
+<a href="https://travis-ci.org/notadd/neditor" title="Build Status"><img src="https://img.shields.io/travis/notadd/neditor/master.svg?style=flat-square"></a>
5
+</p>
6
+
7
+## 新版发布
8
+
9
+2.1 发布,此次版本移除了后端相关代码,纯 ajax 提交,请配置 `neditor.config.js` `neditor.service.js`,支持各种后端或者云存储。
10
+
11
+## 捐赠
12
+
13
+该项目需要您的支持, [捐赠](https://gitee.com/notadd/neditor?donate=true)  以支持此项目的发展。
14
+
15
+
16
+## 第一步:下载编辑器
17
+
18
+**方式一:完整安装包 (推荐)**
19
+
20
+* [Neditor.tar.xz](https://www.notadd.com/download/neditor/Neditor-next-master.tar.xz)
21
+
22
+**方式二: npm安装**
23
+
24
+`npm i @notadd/neditor -S`
25
+
26
+**方式三:编译安装**
27
+
28
+```shell
29
+git clone https://github.com/notadd/neditor.git
30
+npm install
31
+npm run build
32
+```
33
+
34
+### 第二步:在浏览器打开 index.html ###
35
+
36
+进入到目录 `dist` , 使用浏览器打开文件 `index.html` 。
37
+
38
+如果看到了下面这样的编辑器,恭喜你,初次部署成功!
39
+
40
+![部署成功](https://www.notadd.com/src/neditor-demo.webp)
41
+
42
+## 相关版本
43
+
44
+[Angular 版 Neditor](https://github.com/notadd/ngx-neditor)    
45
+
46
+[Vue 版 Neditor](https://github.com/caiya/vue-neditor-wrap)   【第三方维护】
47
+
48
+## 技术支持
49
+
50
+该项目基于 MIT 协议开源,任何组织/企业以及个人都可以免费使用(保留版权)。    
51
+如果您需要额外商业技术支持或者定制编辑器,请联系 QQ:1256985886
52
+
53
+
54
+
55
+其他版本待添加
56
+
57
+### 自定义的参数
58
+
59
+编辑器有很多可自定义的参数项,在实例化的时候可以传入给编辑器:
60
+
61
+```javascript
62
+var ue = UE.getEditor('container', {
63
+    autoHeight: false
64
+});
65
+```
66
+
67
+配置项也可以通过 `neditor.config.js` 文件修改,具体的配置方法请看 [前端配置项说明](http://fex.baidu.com/ueditor/#start-config1.4 前端配置项说明.md)、[后端配置项说明](http://fex.baidu.com/ueditor/#server-config)
68
+
69
+### 编辑器图片、视频、涂鸦、附件上传service
70
+
71
+编辑器上传逻辑单独在 `neditor.service.js` 文件配置,具体的配置方法见注释
72
+
73
+### 设置和读取编辑器的内容
74
+
75
+通 getContent 和 setContent 方法可以设置和读取编辑器的内容
76
+
77
+```javascript
78
+var ue = UE.getContent();
79
+ue.ready(function(){
80
+    //设置编辑器的内容
81
+    ue.setContent('hello');
82
+    //获取html内容,返回: <p>hello</p>
83
+    var html = ue.getContent();
84
+    //获取纯文本内容,返回: hello
85
+    var txt = ue.getContentTxt();
86
+});
87
+```
88
+
89
+Ueditor 的更多API请看[API 文档](http://ueditor.baidu.com/doc "ueditor API 文档")
90
+
91
+##  下载地址
92
+
93
+Neditor 码云: [http://gitee.com/notadd/neditor](http://gitee.com/notadd/neditor "Neditor github 地址")
94
+
95
+Neditor github 地址:[http://github.com/notadd/neditor](http://github.com/notadd/neditor "Neditor github 地址")
96
+
97
+## 相关链接
98
+
99
+Ueditor 官网:[http://ueditor.baidu.com](http://ueditor.baidu.com "ueditor 官网")
100
+
101
+Ueditor API 文档:[http://ueditor.baidu.com/doc](http://ueditor.baidu.com/doc "ueditor API 文档")
102
+
103
+## 详细文档
104
+
105
+Ueditor 文档:[http://fex.baidu.com/ueditor/](http://fex.baidu.com/ueditor/)
106
+
107
+注: 对IE8以下版本不再承诺兼容
108
+
109
+
110
+### 关于 HTTPS
111
+
112
+使用了 [又拍云CDN](https://console.upyun.com/register/?invite=r17EYO3BW) 服务,支持跨域 和 https。
113
+
114
+如果有需要,也可将下面域名改成自己的。
115
+```
116
+imgbaidu.b0.upaiyun.com
117
+tingapi.b0.upaiyun.com
118
+```
119
+
120
+## 联系我们 ##
121
+
122
+Neditor官方交流群:257753500
123
+
124
+QQ 群: 321735506
125
+
126
+[issue](http://github.com/notadd/neditor/issues)
127
+
128
+
129
+
130
+## Todo
131
+
132
+### 2.1
133
+
134
+- [x] 将上传封装为 service ,支持非 GraphQL 接口。
135
+- [x] 细节样式修改(美化)
136
+
137
+### 2.2
138
+
139
+- [ ] word 内图片自动上传
140
+- [x] 粘贴图片转为本地图片(图片本地化)
141
+
142
+### 2.3
143
+
144
+- [ ] 上传文件/图片无需后端
145
+
146
+### 3.0
147
+
148
+- [ ] 使用 Typescript 重构
149
+- [ ] 草稿箱功能与离线保存
150
+- [ ] service worker 特性
151
+- [ ] 实现 2.0 的大部分功能
152
+
153
+## 其他项目:Notadd
154
+
155
+https://github.com/notadd/notadd
156
+
157
+
158
+ ## 感谢提供赞助:
159
+ 
160
+ 
161
+ <a href="https://www.ucloud.cn/site/active/gift.html?ytag=notadd"><img src="https://www.notadd.com/src/ucloud_logo.svg" width="150" /></a> &nbsp;
162
+
163
+**UCloud 云服务器限时优惠 — Notadd 项目用户福利**
164
+
165
+[【基础型】1核2G 1M带宽 50GB SSD数据盘 低至250元/年](https://www.ucloud.cn/site/active/gift.html?ytag=notadd )    
166
+
167
+[【标准型】2核4G 1M带宽 50GB SSD数据盘 低至550元/年](https://www.ucloud.cn/site/active/gift.html?ytag=notadd )
168
+

+ 40 - 0
static/neditor/dialogs/anchor/anchor.html View File

@@ -0,0 +1,40 @@
1
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2
+    "http://www.w3.org/TR/html4/loose.dtd">
3
+<html>
4
+    <head>
5
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
6
+        <title></title>
7
+        <style type="text/css">
8
+            *{color: #838383;margin: 0;padding: 0}
9
+            html,body {font-size: 12px;overflow: hidden; }
10
+            .content{padding:15px 0 0 15px;}
11
+            input{width:210px;height:28px;line-height:28px;margin-left: 4px;border-radius: 5px;border: 1px solid #ccc;}
12
+        </style>
13
+    </head>
14
+    <body>
15
+        <div class="content">
16
+            <span><var id="lang_input_anchorName"></var></span><input id="anchorName"  value="" />
17
+        </div>
18
+        <script type="text/javascript" src="../internal.js"></script>
19
+        <script type="text/javascript">
20
+            var anchorInput = $G('anchorName'),
21
+                node = editor.selection.getRange().getClosedNode();
22
+            if(node && node.tagName == 'IMG' && (node = node.getAttribute('anchorname'))){
23
+                anchorInput.value = node;
24
+            }
25
+            anchorInput.onkeydown = function(evt){
26
+                evt = evt || window.event;
27
+                if(evt.keyCode == 13){
28
+                    editor.execCommand('anchor', anchorInput.value);
29
+                    dialog.close();
30
+                    domUtils.preventDefault(evt)
31
+                }
32
+            };
33
+            dialog.onok = function (){
34
+                editor.execCommand('anchor', anchorInput.value);
35
+                dialog.close();
36
+            };
37
+            $focus(anchorInput);
38
+        </script>
39
+    </body>
40
+</html>

+ 682 - 0
static/neditor/dialogs/attachment/attachment.css View File

@@ -0,0 +1,682 @@
1
+@charset "utf-8";
2
+/* dialog样式 */
3
+.wrapper {
4
+    zoom: 1;
5
+    width: 630px;
6
+    *width: 626px;
7
+    height: 380px;
8
+    margin: 0 auto;
9
+    padding: 10px;
10
+    position: relative;
11
+    font-family: sans-serif;
12
+}
13
+
14
+/*tab样式框大小*/
15
+.tabhead {
16
+    float:left;
17
+}
18
+.tabbody {
19
+    width: 100%;
20
+    height: 346px;
21
+    position: relative;
22
+    clear: both;
23
+}
24
+
25
+.tabbody .panel {
26
+    position: absolute;
27
+    width: 0;
28
+    height: 0;
29
+    background: #fff;
30
+    overflow: hidden;
31
+    display: none;
32
+}
33
+
34
+.tabbody .panel.focus {
35
+    width: 100%;
36
+    height: 346px;
37
+    display: block;
38
+}
39
+
40
+/* 上传附件 */
41
+.tabbody #upload.panel {
42
+    width: 0;
43
+    height: 0;
44
+    overflow: hidden;
45
+    position: absolute !important;
46
+    clip: rect(1px, 1px, 1px, 1px);
47
+    background: #fff;
48
+    display: block;
49
+}
50
+
51
+.tabbody #upload.panel.focus {
52
+    width: 100%;
53
+    height: 346px;
54
+    display: block;
55
+    clip: auto;
56
+}
57
+
58
+#upload .queueList {
59
+    margin: 0;
60
+    width: 100%;
61
+    height: 100%;
62
+    position: absolute;
63
+    overflow: hidden;
64
+}
65
+
66
+#upload p {
67
+    margin: 0;
68
+}
69
+
70
+.element-invisible {
71
+    width: 0 !important;
72
+    height: 0 !important;
73
+    border: 0;
74
+    padding: 0;
75
+    margin: 0;
76
+    overflow: hidden;
77
+    position: absolute !important;
78
+    clip: rect(1px, 1px, 1px, 1px);
79
+}
80
+
81
+#upload .placeholder {
82
+    margin: 10px;
83
+    /*border: 2px dashed #e6e6e6;*/
84
+    height: 172px;
85
+    padding-top: 150px;
86
+    text-align: center;
87
+    /*background: url(./images/image.png) center 70px no-repeat;*/
88
+    background-color: #f3f3f3;
89
+    color: #cccccc;
90
+    font-size: 18px;
91
+    position: relative;
92
+    top:0;
93
+    *top: 10px;
94
+}
95
+
96
+#upload .placeholder .webuploader-pick {
97
+    font-size: 16px;
98
+    background: #f3f3f3;
99
+    border-radius: 3px;
100
+    line-height: 44px;
101
+    padding: 0 30px;
102
+    color: #646464;
103
+    display: inline-block;
104
+    margin: 0 auto 20px auto;
105
+    cursor: pointer;
106
+    /* box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); */
107
+    border: 1px solid #ccc;
108
+}
109
+
110
+#upload .placeholder .webuploader-pick-hover {
111
+    border: 1px solid #00a2d4;
112
+    color: #00a2d4;
113
+}
114
+
115
+
116
+#filePickerContainer {
117
+    text-align: center;
118
+}
119
+
120
+#upload .placeholder .flashTip {
121
+    color: #666666;
122
+    font-size: 12px;
123
+    position: absolute;
124
+    width: 100%;
125
+    text-align: center;
126
+    bottom: 20px;
127
+}
128
+
129
+#upload .placeholder .flashTip a {
130
+    color: #0785d1;
131
+    text-decoration: none;
132
+}
133
+
134
+#upload .placeholder .flashTip a:hover {
135
+    text-decoration: underline;
136
+}
137
+
138
+#upload .placeholder.webuploader-dnd-over {
139
+    border-color: #999999;
140
+}
141
+
142
+#upload .filelist {
143
+    list-style: none;
144
+    margin: 0;
145
+    padding: 0;
146
+    overflow-x: hidden;
147
+    overflow-y: auto;
148
+    position: relative;
149
+    height: 300px;
150
+}
151
+
152
+#upload .filelist:after {
153
+    content: '';
154
+    display: block;
155
+    width: 0;
156
+    height: 0;
157
+    overflow: hidden;
158
+    clear: both;
159
+}
160
+
161
+#upload .filelist li {
162
+    width: 113px;
163
+    height: 113px;
164
+    background: url(./images/bg.png);
165
+    text-align: center;
166
+    margin: 9px 0 0 9px;
167
+    *margin: 6px 0 0 6px;
168
+    position: relative;
169
+    display: block;
170
+    float: left;
171
+    overflow: hidden;
172
+    font-size: 12px;
173
+}
174
+
175
+#upload .filelist li p.log {
176
+    position: relative;
177
+    top: -45px;
178
+}
179
+
180
+#upload .filelist li p.title {
181
+    position: absolute;
182
+    top: 0;
183
+    left: 0;
184
+    width: 100%;
185
+    overflow: hidden;
186
+    white-space: nowrap;
187
+    text-overflow: ellipsis;
188
+    top: 5px;
189
+    text-indent: 5px;
190
+    text-align: left;
191
+}
192
+
193
+#upload .filelist li p.progress {
194
+    position: absolute;
195
+    width: 100%;
196
+    bottom: 0;
197
+    left: 0;
198
+    height: 8px;
199
+    overflow: hidden;
200
+    z-index: 50;
201
+    margin: 0;
202
+    border-radius: 0;
203
+    background: none;
204
+    -webkit-box-shadow: 0 0 0;
205
+}
206
+
207
+#upload .filelist li p.progress span {
208
+    display: none;
209
+    overflow: hidden;
210
+    width: 0;
211
+    height: 100%;
212
+    background: #1483d8 url(./images/progress.png) repeat-x;
213
+
214
+    -webit-transition: width 200ms linear;
215
+    -moz-transition: width 200ms linear;
216
+    -o-transition: width 200ms linear;
217
+    -ms-transition: width 200ms linear;
218
+    transition: width 200ms linear;
219
+
220
+    -webkit-animation: progressmove 2s linear infinite;
221
+    -moz-animation: progressmove 2s linear infinite;
222
+    -o-animation: progressmove 2s linear infinite;
223
+    -ms-animation: progressmove 2s linear infinite;
224
+    animation: progressmove 2s linear infinite;
225
+
226
+    -webkit-transform: translateZ(0);
227
+}
228
+
229
+@-webkit-keyframes progressmove {
230
+    0% {
231
+        background-position: 0 0;
232
+    }
233
+    100% {
234
+        background-position: 17px 0;
235
+    }
236
+}
237
+
238
+@-moz-keyframes progressmove {
239
+    0% {
240
+        background-position: 0 0;
241
+    }
242
+    100% {
243
+        background-position: 17px 0;
244
+    }
245
+}
246
+
247
+@keyframes progressmove {
248
+    0% {
249
+        background-position: 0 0;
250
+    }
251
+    100% {
252
+        background-position: 17px 0;
253
+    }
254
+}
255
+
256
+#upload .filelist li p.imgWrap {
257
+    position: relative;
258
+    z-index: 2;
259
+    line-height: 113px;
260
+    vertical-align: middle;
261
+    overflow: hidden;
262
+    width: 113px;
263
+    height: 113px;
264
+
265
+    -webkit-transform-origin: 50% 50%;
266
+    -moz-transform-origin: 50% 50%;
267
+    -o-transform-origin: 50% 50%;
268
+    -ms-transform-origin: 50% 50%;
269
+    transform-origin: 50% 50%;
270
+
271
+    -webit-transition: 200ms ease-out;
272
+    -moz-transition: 200ms ease-out;
273
+    -o-transition: 200ms ease-out;
274
+    -ms-transition: 200ms ease-out;
275
+    transition: 200ms ease-out;
276
+}
277
+#upload .filelist li p.imgWrap.notimage {
278
+    margin-top: 0;
279
+    width: 111px;
280
+    height: 111px;
281
+    border: 1px #eeeeee solid;
282
+}
283
+#upload .filelist li p.imgWrap.notimage i.file-preview {
284
+    margin-top: 15px;
285
+}
286
+
287
+#upload .filelist li img {
288
+    width: 100%;
289
+}
290
+
291
+#upload .filelist li p.error {
292
+    background: #f43838;
293
+    color: #fff;
294
+    position: absolute;
295
+    bottom: 0;
296
+    left: 0;
297
+    height: 28px;
298
+    line-height: 28px;
299
+    width: 100%;
300
+    z-index: 100;
301
+    display:none;
302
+}
303
+
304
+#upload .filelist li .success {
305
+    display: block;
306
+    position: absolute;
307
+    left: 0;
308
+    bottom: 0;
309
+    height: 40px;
310
+    width: 100%;
311
+    z-index: 200;
312
+    background: url(./images/success.png) no-repeat right bottom;
313
+    background-image: url(./images/success.gif) \9;
314
+}
315
+
316
+#upload .filelist li.filePickerBlock {
317
+    width: 113px;
318
+    height: 113px;
319
+    background: url(../fonts/images/addfile.svg) no-repeat center;
320
+    border: 1px solid #eeeeee;
321
+    border-radius: 0;
322
+}
323
+#upload .filelist li.filePickerBlock div.webuploader-pick  {
324
+    width: 100%;
325
+    height: 100%;
326
+    margin: 0;
327
+    padding: 0;
328
+    opacity: 0;
329
+    background: none;
330
+    font-size: 0;
331
+}
332
+
333
+#upload .filelist div.file-panel {
334
+    position: absolute;
335
+    height: 0;
336
+    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \0;
337
+    background: rgba(0, 0, 0, 0.5);
338
+    width: 100%;
339
+    top: 0;
340
+    left: 0;
341
+    overflow: hidden;
342
+    z-index: 300;
343
+}
344
+
345
+#upload .filelist div.file-panel span {
346
+    width: 24px;
347
+    height: 24px;
348
+    display: inline;
349
+    float: right;
350
+    text-indent: -9999px;
351
+    overflow: hidden;
352
+    background: url(./images/icons.png) no-repeat;
353
+    background: url(./images/icons.gif) no-repeat \9;
354
+    margin: 5px 1px 1px;
355
+    cursor: pointer;
356
+    -webkit-tap-highlight-color: rgba(0,0,0,0);
357
+    -webkit-user-select: none;
358
+    -moz-user-select: none;
359
+    -ms-user-select: none;
360
+    user-select: none;
361
+}
362
+
363
+#upload .filelist div.file-panel span.rotateLeft {
364
+    display:none;
365
+    background-position: 0 -24px;
366
+}
367
+
368
+#upload .filelist div.file-panel span.rotateLeft:hover {
369
+    background-position: 0 0;
370
+}
371
+
372
+#upload .filelist div.file-panel span.rotateRight {
373
+    display:none;
374
+    background-position: -24px -24px;
375
+}
376
+
377
+#upload .filelist div.file-panel span.rotateRight:hover {
378
+    background-position: -24px 0;
379
+}
380
+
381
+#upload .filelist div.file-panel span.cancel {
382
+    background-position: -48px -24px;
383
+}
384
+
385
+#upload .filelist div.file-panel span.cancel:hover {
386
+    background-position: -48px 0;
387
+}
388
+
389
+#upload .statusBar {
390
+    height: 45px;
391
+    border-bottom: 1px solid #dadada;
392
+    margin: 0 10px;
393
+    padding: 0;
394
+    line-height: 45px;
395
+    vertical-align: middle;
396
+    position: relative;
397
+}
398
+
399
+#upload .statusBar .progress {
400
+    border: 1px solid #1483d8;
401
+    width: 198px;
402
+    background: #fff;
403
+    height: 18px;
404
+    position: absolute;
405
+    top: 12px;
406
+    display: none;
407
+    text-align: center;
408
+    line-height: 18px;
409
+    color: #6dbfff;
410
+    margin: 0 10px 0 0;
411
+}
412
+#upload .statusBar .progress span.percentage {
413
+    width: 0;
414
+    height: 100%;
415
+    left: 0;
416
+    top: 0;
417
+    background: #1483d8;
418
+    position: absolute;
419
+}
420
+#upload .statusBar .progress span.text {
421
+    position: relative;
422
+    z-index: 10;
423
+}
424
+
425
+#upload .statusBar .info {
426
+    display: inline-block;
427
+    font-size: 14px;
428
+    color: #666666;
429
+}
430
+
431
+#upload .statusBar .btns {
432
+    position: absolute;
433
+    top: 7px;
434
+    right: 0;
435
+    line-height: 30px;
436
+}
437
+
438
+#filePickerBtn {
439
+    display: inline-block;
440
+    float: left;
441
+}
442
+#upload .statusBar .btns .webuploader-pick,
443
+#upload .statusBar .btns .uploadBtn,
444
+#upload .statusBar .btns .uploadBtn.state-uploading,
445
+#upload .statusBar .btns .uploadBtn.state-paused {
446
+    background: #ffffff;
447
+    border: 1px solid #cfcfcf;
448
+    color: #565656;
449
+    padding: 0 18px;
450
+    display: inline-block;
451
+    border-radius: 3px;
452
+    margin-left: 10px;
453
+    cursor: pointer;
454
+    font-size: 14px;
455
+    float: left;
456
+    -webkit-user-select: none;
457
+    -moz-user-select: none;
458
+    -ms-user-select: none;
459
+    user-select: none;
460
+}
461
+#upload .statusBar .btns .webuploader-pick-hover,
462
+#upload .statusBar .btns .uploadBtn:hover,
463
+#upload .statusBar .btns .uploadBtn.state-uploading:hover,
464
+#upload .statusBar .btns .uploadBtn.state-paused:hover {
465
+    background: #f0f0f0;
466
+}
467
+
468
+#upload .statusBar .btns .uploadBtn,
469
+#upload .statusBar .btns .uploadBtn.state-paused{
470
+    background: #00b7ee;
471
+    color: #fff;
472
+    border-color: transparent;
473
+}
474
+#upload .statusBar .btns .uploadBtn:hover,
475
+#upload .statusBar .btns .uploadBtn.state-paused:hover{
476
+    background: #00a2d4;
477
+}
478
+
479
+#upload .statusBar .btns .uploadBtn.disabled {
480
+    pointer-events: none;
481
+    filter:alpha(opacity=60);
482
+    -moz-opacity:0.6;
483
+    -khtml-opacity: 0.6;
484
+    opacity: 0.6;
485
+}
486
+
487
+
488
+
489
+/* 图片管理样式 */
490
+#online {
491
+    width: 100%;
492
+    height: 336px;
493
+    padding: 10px 0 0 0;
494
+}
495
+#online #fileList{
496
+    width: 100%;
497
+    height: 100%;
498
+    overflow-x: hidden;
499
+    overflow-y: auto;
500
+    position: relative;
501
+}
502
+#online ul {
503
+    display: block;
504
+    list-style: none;
505
+    margin: 0;
506
+    padding: 0;
507
+}
508
+#online li {
509
+    float: left;
510
+    display: block;
511
+    list-style: none;
512
+    padding: 0;
513
+    width: 113px;
514
+    height: 113px;
515
+    margin: 0 0 9px 9px;
516
+    *margin: 0 0 6px 6px;
517
+    background-color: #eee;
518
+    overflow: hidden;
519
+    cursor: pointer;
520
+    position: relative;
521
+}
522
+#online li.clearFloat {
523
+    float: none;
524
+    clear: both;
525
+    display: block;
526
+    width:0;
527
+    height:0;
528
+    margin: 0;
529
+    padding: 0;
530
+}
531
+#online li img {
532
+    cursor: pointer;
533
+}
534
+#online li div.file-wrapper {
535
+    cursor: pointer;
536
+    position: absolute;
537
+    display: block;
538
+    width: 111px;
539
+    height: 111px;
540
+    border: 1px solid #eee;
541
+    background: url("./images/bg.png") repeat;
542
+}
543
+#online li div span.file-title{
544
+    display: block;
545
+    padding: 0 3px;
546
+    margin: 3px 0 0 0;
547
+    font-size: 12px;
548
+    height: 15px;
549
+    color: #555555;
550
+    text-align: center;
551
+    width: 107px;
552
+    white-space: nowrap;
553
+    word-break: break-all;
554
+    overflow: hidden;
555
+    text-overflow: ellipsis;
556
+}
557
+#online li .icon {
558
+    cursor: pointer;
559
+    width: 113px;
560
+    height: 113px;
561
+    position: absolute;
562
+    top: 0;
563
+    left: 0;
564
+    z-index: 2;
565
+    border: 0;
566
+    background-repeat: no-repeat;
567
+}
568
+#online li .icon:hover {
569
+    width: 107px;
570
+    height: 107px;
571
+    border: 3px solid #1094fa;
572
+}
573
+#online li.selected .icon {
574
+    background-image: url(images/success.png);
575
+    background-image: url(images/success.gif) \9;
576
+    background-position: 75px 75px;
577
+}
578
+#online li.selected .icon:hover {
579
+    width: 107px;
580
+    height: 107px;
581
+    border: 3px solid #1094fa;
582
+    background-position: 72px 72px;
583
+}
584
+
585
+
586
+/* 在线文件的文件预览图标 */
587
+i.file-preview {
588
+    display: block;
589
+    margin: 10px auto;
590
+    width: 70px;
591
+    height: 70px;
592
+    background-image: url("./images/file-icons.png");
593
+    background-image: url("./images/file-icons.gif") \9;
594
+    background-position: -140px center;
595
+    background-repeat: no-repeat;
596
+}
597
+i.file-preview.file-type-dir{
598
+    background-position: 0 center;
599
+}
600
+i.file-preview.file-type-file{
601
+    background-position: -140px center;
602
+}
603
+i.file-preview.file-type-filelist{
604
+    background-position: -210px center;
605
+}
606
+i.file-preview.file-type-zip,
607
+i.file-preview.file-type-rar,
608
+i.file-preview.file-type-7z,
609
+i.file-preview.file-type-tar,
610
+i.file-preview.file-type-gz,
611
+i.file-preview.file-type-bz2{
612
+    background-position: -280px center;
613
+}
614
+i.file-preview.file-type-xls,
615
+i.file-preview.file-type-xlsx{
616
+    background-position: -350px center;
617
+}
618
+i.file-preview.file-type-doc,
619
+i.file-preview.file-type-docx{
620
+    background-position: -420px center;
621
+}
622
+i.file-preview.file-type-ppt,
623
+i.file-preview.file-type-pptx{
624
+    background-position: -490px center;
625
+}
626
+i.file-preview.file-type-vsd{
627
+    background-position: -560px center;
628
+}
629
+i.file-preview.file-type-pdf{
630
+    background-position: -630px center;
631
+}
632
+i.file-preview.file-type-txt,
633
+i.file-preview.file-type-md,
634
+i.file-preview.file-type-json,
635
+i.file-preview.file-type-htm,
636
+i.file-preview.file-type-xml,
637
+i.file-preview.file-type-html,
638
+i.file-preview.file-type-js,
639
+i.file-preview.file-type-css,
640
+i.file-preview.file-type-php,
641
+i.file-preview.file-type-jsp,
642
+i.file-preview.file-type-asp{
643
+    background-position: -700px center;
644
+}
645
+i.file-preview.file-type-apk{
646
+    background-position: -770px center;
647
+}
648
+i.file-preview.file-type-exe{
649
+    background-position: -840px center;
650
+}
651
+i.file-preview.file-type-ipa{
652
+    background-position: -910px center;
653
+}
654
+i.file-preview.file-type-mp4,
655
+i.file-preview.file-type-swf,
656
+i.file-preview.file-type-mkv,
657
+i.file-preview.file-type-avi,
658
+i.file-preview.file-type-flv,
659
+i.file-preview.file-type-mov,
660
+i.file-preview.file-type-mpg,
661
+i.file-preview.file-type-mpeg,
662
+i.file-preview.file-type-ogv,
663
+i.file-preview.file-type-webm,
664
+i.file-preview.file-type-rm,
665
+i.file-preview.file-type-rmvb{
666
+    background-position: -980px center;
667
+}
668
+i.file-preview.file-type-ogg,
669
+i.file-preview.file-type-wav,
670
+i.file-preview.file-type-wmv,
671
+i.file-preview.file-type-mid,
672
+i.file-preview.file-type-mp3{
673
+    background-position: -1050px center;
674
+}
675
+i.file-preview.file-type-jpg,
676
+i.file-preview.file-type-jpeg,
677
+i.file-preview.file-type-gif,
678
+i.file-preview.file-type-bmp,
679
+i.file-preview.file-type-png,
680
+i.file-preview.file-type-psd{
681
+    background-position: -140px center;
682
+}

+ 60 - 0
static/neditor/dialogs/attachment/attachment.html View File

@@ -0,0 +1,60 @@
1
+<!doctype html>
2
+<html>
3
+<head>
4
+    <meta charset="UTF-8">
5
+    <title>neditor图片对话框</title>
6
+    <script type="text/javascript" src="../internal.js"></script>
7
+
8
+    <!-- jquery -->
9
+    <script type="text/javascript" src="../../third-party/jquery-1.10.2.min.js"></script>
10
+
11
+    <!-- webuploader -->
12
+    <script src="../../third-party/webuploader/webuploader.js"></script>
13
+    <link rel="stylesheet" type="text/css" href="../../third-party/webuploader/webuploader.css">
14
+
15
+    <!-- attachment dialog -->
16
+    <link rel="stylesheet" href="attachment.css" type="text/css" />
17
+</head>
18
+<body>
19
+
20
+    <div class="wrapper">
21
+        <div id="tabhead" class="tabhead">
22
+            <span class="tab focus" data-content-id="upload"><var id="lang_tab_upload"></var></span>
23
+            <!-- <span class="tab" data-content-id="online"><var id="lang_tab_online"></var></span> -->
24
+        </div>
25
+        <div id="tabbody" class="tabbody">
26
+            <!-- 上传图片 -->
27
+            <div id="upload" class="panel focus">
28
+                <div id="queueList" class="queueList">
29
+                    <div class="statusBar element-invisible">
30
+                        <div class="progress">
31
+                            <span class="text">0%</span>
32
+                            <span class="percentage"></span>
33
+                        </div><div class="info"></div>
34
+                        <div class="btns">
35
+                            <div id="filePickerBtn"></div>
36
+                            <div class="uploadBtn"><var id="lang_start_upload"></var></div>
37
+                        </div>
38
+                    </div>
39
+                    <div id="dndArea" class="placeholder">
40
+                        <div class="filePickerContainer">
41
+                            <div id="filePickerReady"></div>
42
+                        </div>
43
+                    </div>
44
+                    <ul class="filelist element-invisible">
45
+                        <li id="filePickerBlock" class="filePickerBlock"></li>
46
+                    </ul>
47
+                </div>
48
+            </div>
49
+
50
+            <!-- 在线图片 -->
51
+            <div id="online" class="panel">
52
+                <div id="fileList"><var id="lang_imgLoading"></var></div>
53
+            </div>
54
+
55
+        </div>
56
+    </div>
57
+    <script type="text/javascript" src="attachment.js"></script>
58
+
59
+</body>
60
+</html>

+ 775 - 0
static/neditor/dialogs/attachment/attachment.js View File

@@ -0,0 +1,775 @@
1
+/**
2
+ * User: Jinqn
3
+ * Date: 14-04-08
4
+ * Time: 下午16:34
5
+ * 上传图片对话框逻辑代码,包括tab: 远程图片/上传图片/在线图片/搜索图片
6
+ */
7
+
8
+(function () {
9
+
10
+    var uploadFile,
11
+        onlineFile;
12
+
13
+    window.onload = function () {
14
+        initTabs();
15
+        initButtons();
16
+    };
17
+
18
+    /* 初始化tab标签 */
19
+    function initTabs() {
20
+        var tabs = $G('tabhead').children;
21
+        for (var i = 0; i < tabs.length; i++) {
22
+            domUtils.on(tabs[i], "click", function (e) {
23
+                var target = e.target || e.srcElement;
24
+                setTabFocus(target.getAttribute('data-content-id'));
25
+            });
26
+        }
27
+
28
+        setTabFocus('upload');
29
+    }
30
+
31
+    /* 初始化tabbody */
32
+    function setTabFocus(id) {
33
+        if(!id) return;
34
+        var i, bodyId, tabs = $G('tabhead').children;
35
+        for (i = 0; i < tabs.length; i++) {
36
+            bodyId = tabs[i].getAttribute('data-content-id')
37
+            if (bodyId == id) {
38
+                domUtils.addClass(tabs[i], 'focus');
39
+                domUtils.addClass($G(bodyId), 'focus');
40
+            } else {
41
+                domUtils.removeClasses(tabs[i], 'focus');
42
+                domUtils.removeClasses($G(bodyId), 'focus');
43
+            }
44
+        }
45
+        switch (id) {
46
+            case 'upload':
47
+                uploadFile = uploadFile || new UploadFile('queueList');
48
+                break;
49
+            case 'online':
50
+                onlineFile = onlineFile || new OnlineFile('fileList');
51
+                break;
52
+        }
53
+    }
54
+
55
+    /* 初始化onok事件 */
56
+    function initButtons() {
57
+
58
+        dialog.onok = function () {
59
+            var list = [], id, tabs = $G('tabhead').children;
60
+            for (var i = 0; i < tabs.length; i++) {
61
+                if (domUtils.hasClass(tabs[i], 'focus')) {
62
+                    id = tabs[i].getAttribute('data-content-id');
63
+                    break;
64
+                }
65
+            }
66
+
67
+            switch (id) {
68
+                case 'upload':
69
+                    list = uploadFile.getInsertList();
70
+                    var count = uploadFile.getQueueCount();
71
+                    if (count) {
72
+                        $('.info', '#queueList').html('<span style="color:red;">' + '还有2个未上传文件'.replace(/[\d]/, count) + '</span>');
73
+                        return false;
74
+                    }
75
+                    break;
76
+                case 'online':
77
+                    list = onlineFile.getInsertList();
78
+                    break;
79
+            }
80
+
81
+            editor.execCommand('insertfile', list);
82
+        };
83
+    }
84
+
85
+
86
+    /* 上传附件 */
87
+    function UploadFile(target) {
88
+        this.$wrap = target.constructor == String ? $('#' + target) : $(target);
89
+        this.init();
90
+    }
91
+    UploadFile.prototype = {
92
+        init: function () {
93
+            this.fileList = [];
94
+            this.initContainer();
95
+            this.initUploader();
96
+        },
97
+        initContainer: function () {
98
+            this.$queue = this.$wrap.find('.filelist');
99
+        },
100
+        /* 初始化容器 */
101
+        initUploader: function () {
102
+            var _this = this,
103
+                $ = jQuery,    // just in case. Make sure it's not an other libaray.
104
+                $wrap = _this.$wrap,
105
+            // 图片容器
106
+                $queue = $wrap.find('.filelist'),
107
+            // 状态栏,包括进度和控制按钮
108
+                $statusBar = $wrap.find('.statusBar'),
109
+            // 文件总体选择信息。
110
+                $info = $statusBar.find('.info'),
111
+            // 上传按钮
112
+                $upload = $wrap.find('.uploadBtn'),
113
+            // 上传按钮
114
+                $filePickerBtn = $wrap.find('.filePickerBtn'),
115
+            // 上传按钮
116
+                $filePickerBlock = $wrap.find('.filePickerBlock'),
117
+            // 没选择文件之前的内容。
118
+                $placeHolder = $wrap.find('.placeholder'),
119
+            // 总体进度条
120
+                $progress = $statusBar.find('.progress').hide(),
121
+            // 添加的文件数量
122
+                fileCount = 0,
123
+            // 添加的文件总大小
124
+                fileSize = 0,
125
+            // 优化retina, 在retina下这个值是2
126
+                ratio = window.devicePixelRatio || 1,
127
+            // 缩略图大小
128
+                thumbnailWidth = 113 * ratio,
129
+                thumbnailHeight = 113 * ratio,
130
+            // 可能有pedding, ready, uploading, confirm, done.
131
+                state = '',
132
+            // 所有文件的进度信息,key为file id
133
+                percentages = {},
134
+                supportTransition = (function () {
135
+                    var s = document.createElement('p').style,
136
+                        r = 'transition' in s ||
137
+                            'WebkitTransition' in s ||
138
+                            'MozTransition' in s ||
139
+                            'msTransition' in s ||
140
+                            'OTransition' in s;
141
+                    s = null;
142
+                    return r;
143
+                })(),
144
+            // WebUploader实例
145
+                uploader,
146
+                actionUrl = editor.getActionUrl(editor.getOpt('fileActionName')),
147
+                fileMaxSize = editor.getOpt('fileMaxSize'),
148
+                acceptExtensions = (editor.getOpt('fileAllowFiles') || 
149
+                    [".txt",".doc",".docs",".xls",".xlsx",".ppt",".pdf",".odt",".ott",".fodt",".uot",".xml",".dot",".htm",".html",".rtf",".docm",".zip",".rar",".tar",".7z",".tar.gz",".tar.bz",".tar.xz"]).join('').replace(/\./g, ',').replace(/^[,]/, '');;
150
+            if (!WebUploader.Uploader.support()) {
151
+                $('#filePickerReady').after($('<div>').html(lang.errorNotSupport)).hide();
152
+                return;
153
+            } else if (!editor.getOpt('fileActionName')) {
154
+                $('#filePickerReady').after($('<div>').html(lang.errorLoadConfig)).hide();
155
+                return;
156
+            }
157
+
158
+            uploader = _this.uploader = WebUploader.create({
159
+                pick: {
160
+                    id: '#filePickerReady',
161
+                    label: lang.uploadSelectFile
162
+                },
163
+                swf: '../../third-party/webuploader/Uploader.swf',
164
+                server: actionUrl,
165
+                fileVal: editor.getOpt('fileFieldName'),
166
+                duplicate: true,
167
+                fileSingleSizeLimit: fileMaxSize,
168
+                compress: false
169
+            });
170
+            uploader.addButton({
171
+                id: '#filePickerBlock'
172
+            });
173
+            uploader.addButton({
174
+                id: '#filePickerBtn',
175
+                label: lang.uploadAddFile
176
+            });
177
+
178
+            setState('pedding');
179
+
180
+            // 当有文件添加进来时执行,负责view的创建
181
+            function addFile(file) {
182
+                var $li = $('<li id="' + file.id + '">' +
183
+                        '<p class="title">' + file.name + '</p>' +
184
+                        '<p class="imgWrap"></p>' +
185
+                        '<p class="progress"><span></span></p>' +
186
+                        '</li>'),
187
+
188
+                    $btns = $('<div class="file-panel">' +
189
+                        '<span class="cancel">' + lang.uploadDelete + '</span>' +
190
+                        '<span class="rotateRight">' + lang.uploadTurnRight + '</span>' +
191
+                        '<span class="rotateLeft">' + lang.uploadTurnLeft + '</span></div>').appendTo($li),
192
+                    $prgress = $li.find('p.progress span'),
193
+                    $wrap = $li.find('p.imgWrap'),
194
+                    $info = $('<p class="error"></p>').hide().appendTo($li),
195
+
196
+                    showError = function (code) {
197
+                        switch (code) {
198
+                            case 'exceed_size':
199
+                                text = lang.errorExceedSize;
200
+                                break;
201
+                            case 'interrupt':
202
+                                text = lang.errorInterrupt;
203
+                                break;
204
+                            case 'http':
205
+                                text = lang.errorHttp;
206
+                                break;
207
+                            case 'not_allow_type':
208
+                                text = lang.errorFileType;
209
+                                break;
210
+                            default:
211
+                                text = lang.errorUploadRetry;
212
+                                break;
213
+                        }
214
+                        $info.text(text).show();
215
+                    };
216
+
217
+                if (file.getStatus() === 'invalid') {
218
+                    showError(file.statusText);
219
+                } else {
220
+                    $wrap.text(lang.uploadPreview);
221
+                    if ('|png|jpg|jpeg|bmp|gif|'.indexOf('|'+file.ext.toLowerCase()+'|') == -1) {
222
+                        $wrap.empty().addClass('notimage').append('<i class="file-preview file-type-' + file.ext.toLowerCase() + '"></i>' +
223
+                        '<span class="file-title" title="' + file.name + '">' + file.name + '</span>');
224
+                    } else {
225
+                        if (browser.ie && browser.version <= 7) {
226
+                            $wrap.text(lang.uploadNoPreview);
227
+                        } else {
228
+                            uploader.makeThumb(file, function (error, src) {
229
+                                if (error || !src) {
230
+                                    $wrap.text(lang.uploadNoPreview);
231
+                                } else {
232
+                                    var $img = $('<img src="' + src + '">');
233
+                                    $wrap.empty().append($img);
234
+                                    $img.on('error', function () {
235
+                                        $wrap.text(lang.uploadNoPreview);
236
+                                    });
237
+                                }
238
+                            }, thumbnailWidth, thumbnailHeight);
239
+                        }
240
+                    }
241
+                    percentages[ file.id ] = [ file.size, 0 ];
242
+                    file.rotation = 0;
243
+
244
+                    /* 检查文件格式 */
245
+                    if (!file.ext || acceptExtensions.indexOf(file.ext.toLowerCase()) == -1) {
246
+                        showError('not_allow_type');
247
+                        uploader.removeFile(file);
248
+                    }
249
+                }
250
+
251
+                file.on('statuschange', function (cur, prev) {
252
+                    if (prev === 'progress') {
253
+                        $prgress.hide().width(0);
254
+                    } else if (prev === 'queued') {
255
+                        $li.off('mouseenter mouseleave');
256
+                        $btns.remove();
257
+                    }
258
+                    // 成功
259
+                    if (cur === 'error' || cur === 'invalid') {
260
+                        showError(file.statusText);
261
+                        percentages[ file.id ][ 1 ] = 1;
262
+                    } else if (cur === 'interrupt') {
263
+                        showError('interrupt');
264
+                    } else if (cur === 'queued') {
265
+                        percentages[ file.id ][ 1 ] = 0;
266
+                    } else if (cur === 'progress') {
267
+                        $info.hide();
268
+                        $prgress.css('display', 'block');
269
+                    } else if (cur === 'complete') {
270
+                    }
271
+
272
+                    $li.removeClass('state-' + prev).addClass('state-' + cur);
273
+                });
274
+
275
+                $li.on('mouseenter', function () {
276
+                    $btns.stop().animate({height: 30});
277
+                });
278
+                $li.on('mouseleave', function () {
279
+                    $btns.stop().animate({height: 0});
280
+                });
281
+
282
+                $btns.on('click', 'span', function () {
283
+                    var index = $(this).index(),
284
+                        deg;
285
+
286
+                    switch (index) {
287
+                        case 0:
288
+                            uploader.removeFile(file);
289
+                            return;
290
+                        case 1:
291
+                            file.rotation += 90;
292
+                            break;
293
+                        case 2:
294
+                            file.rotation -= 90;
295
+                            break;
296
+                    }
297
+
298
+                    if (supportTransition) {
299
+                        deg = 'rotate(' + file.rotation + 'deg)';
300
+                        $wrap.css({
301
+                            '-webkit-transform': deg,
302
+                            '-mos-transform': deg,
303
+                            '-o-transform': deg,
304
+                            'transform': deg
305
+                        });
306
+                    } else {
307
+                        $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')');
308
+                    }
309
+
310
+                });
311
+
312
+                $li.insertBefore($filePickerBlock);
313
+            }
314
+
315
+            // 负责view的销毁
316
+            function removeFile(file) {
317
+                var $li = $('#' + file.id);
318
+                delete percentages[ file.id ];
319
+                updateTotalProgress();
320
+                $li.off().find('.file-panel').off().end().remove();
321
+            }
322
+
323
+            function updateTotalProgress() {
324
+                var loaded = 0,
325
+                    total = 0,
326
+                    spans = $progress.children(),
327
+                    percent;
328
+
329
+                $.each(percentages, function (k, v) {
330
+                    total += v[ 0 ];
331
+                    loaded += v[ 0 ] * v[ 1 ];
332
+                });
333
+
334
+                percent = total ? loaded / total : 0;
335
+
336
+                spans.eq(0).text(Math.round(percent * 100) + '%');
337
+                spans.eq(1).css('width', Math.round(percent * 100) + '%');
338
+                updateStatus();
339
+            }
340
+
341
+            function setState(val, files) {
342
+
343
+                if (val != state) {
344
+
345
+                    var stats = uploader.getStats();
346
+
347
+                    $upload.removeClass('state-' + state);
348
+                    $upload.addClass('state-' + val);
349
+
350
+                    switch (val) {
351
+
352
+                        /* 未选择文件 */
353
+                        case 'pedding':
354
+                            $queue.addClass('element-invisible');
355
+                            $statusBar.addClass('element-invisible');
356
+                            $placeHolder.removeClass('element-invisible');
357
+                            $progress.hide(); $info.hide();
358
+                            uploader.refresh();
359
+                            break;
360
+
361
+                        /* 可以开始上传 */
362
+                        case 'ready':
363
+                            $placeHolder.addClass('element-invisible');
364
+                            $queue.removeClass('element-invisible');
365
+                            $statusBar.removeClass('element-invisible');
366
+                            $progress.hide(); $info.show();
367
+                            $upload.text(lang.uploadStart);
368
+                            uploader.refresh();
369
+                            break;
370
+
371
+                        /* 上传中 */
372
+                        case 'uploading':
373
+                            $progress.show(); $info.hide();
374
+                            $upload.text(lang.uploadPause);
375
+                            break;
376
+
377
+                        /* 暂停上传 */
378
+                        case 'paused':
379
+                            $progress.show(); $info.hide();
380
+                            $upload.text(lang.uploadContinue);
381
+                            break;
382
+
383
+                        case 'confirm':
384
+                            $progress.show(); $info.hide();
385
+                            $upload.text(lang.uploadStart);
386
+
387
+                            stats = uploader.getStats();
388
+                            if (stats.successNum && !stats.uploadFailNum) {
389
+                                setState('finish');
390
+                                return;
391
+                            }
392
+                            break;
393
+
394
+                        case 'finish':
395
+                            $progress.hide(); $info.show();
396
+                            if (stats.uploadFailNum) {
397
+                                $upload.text(lang.uploadRetry);
398
+                            } else {
399
+                                $upload.text(lang.uploadStart);
400
+                            }
401
+                            break;
402
+                    }
403
+
404
+                    state = val;
405
+                    updateStatus();
406
+
407
+                }
408
+
409
+                if (!_this.getQueueCount()) {
410
+                    $upload.addClass('disabled')
411
+                } else {
412
+                    $upload.removeClass('disabled')
413
+                }
414
+
415
+            }
416
+
417
+            function updateStatus() {
418
+                var text = '', stats;
419
+
420
+                if (state === 'ready') {
421
+                    text = lang.updateStatusReady.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize));
422
+                } else if (state === 'confirm') {
423
+                    stats = uploader.getStats();
424
+                    if (stats.uploadFailNum) {
425
+                        text = lang.updateStatusConfirm.replace('_', stats.successNum).replace('_', stats.successNum);
426
+                    }
427
+                } else {
428
+                    stats = uploader.getStats();
429
+                    text = lang.updateStatusFinish.replace('_', fileCount).
430
+                        replace('_KB', WebUploader.formatSize(fileSize)).
431
+                        replace('_', stats.successNum);
432
+
433
+                    if (stats.uploadFailNum) {
434
+                        text += lang.updateStatusError.replace('_', stats.uploadFailNum);
435
+                    }
436
+                }
437
+
438
+                $info.html(text);
439
+            }
440
+
441
+            uploader.on('fileQueued', function (file) {
442
+                /* 选择文件后设置上传相关的url和自定义参数 */
443
+                editor.getOpt("fileUploadService")(_this, editor).setUploadData(file);
444
+
445
+                if (file.ext && acceptExtensions.indexOf(file.ext.toLowerCase()) != -1 && file.size <= fileMaxSize) {
446
+                    fileCount++;
447
+                    fileSize += file.size;
448
+                }
449
+
450
+                if (fileCount === 1) {
451
+                    $placeHolder.addClass('element-invisible');
452
+                    $statusBar.show();
453
+                }
454
+
455
+                addFile(file);
456
+            });
457
+
458
+            uploader.on('fileDequeued', function (file) {
459
+                if (file.ext && acceptExtensions.indexOf(file.ext.toLowerCase()) != -1 && file.size <= fileMaxSize) {
460
+                    fileCount--;
461
+                    fileSize -= file.size;
462
+                }
463
+
464
+                removeFile(file);
465
+                updateTotalProgress();
466
+            });
467
+
468
+            uploader.on('filesQueued', function (file) {
469
+                if (!uploader.isInProgress() && (state == 'pedding' || state == 'finish' || state == 'confirm' || state == 'ready')) {
470
+                    setState('ready');
471
+                }
472
+                updateTotalProgress();
473
+            });
474
+
475
+            uploader.on('all', function (type, files) {
476
+                switch (type) {
477
+                    case 'uploadFinished':
478
+                        setState('confirm', files);
479
+                        break;
480
+                    case 'startUpload':
481
+                        /* 设置Uploader配置项 */
482
+                        editor.getOpt("fileUploadService")(_this, editor).setUploaderOptions(uploader);
483
+                        setState('uploading', files);
484
+                        break;
485
+                    case 'stopUpload':
486
+                        setState('paused', files);
487
+                        break;
488
+                }
489
+            });
490
+
491
+            uploader.on('uploadBeforeSend', function (object, data, headers) {
492
+                //这里可以通过data对象添加POST参数
493
+                editor.getOpt("fileUploadService")(_this, editor).setFormData(object, data, headers);
494
+            });
495
+
496
+            uploader.on('uploadProgress', function (file, percentage) {
497
+                var $li = $('#' + file.id),
498
+                    $percent = $li.find('.progress span');
499
+
500
+                $percent.css('width', percentage * 100 + '%');
501
+                percentages[ file.id ][ 1 ] = percentage;
502
+                updateTotalProgress();
503
+            });
504
+
505
+            uploader.on('uploadSuccess', function (file, res) {
506
+                var $file = $('#' + file.id);
507
+                try {
508
+                    if (editor.getOpt("fileUploadService")(_this, editor).getResponseSuccess(res)) {
509
+                        _this.fileList.push(res);
510
+                        $file.append('<span class="success"></span>');
511
+                    } else {
512
+                        $file.find('.error').text(res.message).show();
513
+                    }
514
+                } catch (e) {
515
+                    $file.find('.error').text(lang.errorServerUpload).show();
516
+                }
517
+            });
518
+
519
+            uploader.on('uploadError', function (file, code) {
520
+            });
521
+            uploader.on('error', function (code, file) {
522
+                if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') {
523
+                    addFile(file);
524
+                }
525
+            });
526
+            uploader.on('uploadComplete', function (file, ret) {
527
+            });
528
+
529
+            $upload.on('click', function () {
530
+                if ($(this).hasClass('disabled')) {
531
+                    return false;
532
+                }
533
+
534
+                if (state === 'ready') {
535
+                    uploader.upload();
536
+                } else if (state === 'paused') {
537
+                    uploader.upload();
538
+                } else if (state === 'uploading') {
539
+                    uploader.stop();
540
+                }
541
+            });
542
+
543
+            $upload.addClass('state-' + state);
544
+            updateTotalProgress();
545
+        },
546
+        getQueueCount: function () {
547
+            var file, i, status, readyFile = 0, files = this.uploader.getFiles();
548
+            for (i = 0; file = files[i++]; ) {
549
+                status = file.getStatus();
550
+                if (status == 'queued' || status == 'uploading' || status == 'progress') readyFile++;
551
+            }
552
+            return readyFile;
553
+        },
554
+        getInsertList: function () {
555
+            var i, link, data, list = [],
556
+                prefix = editor.getOpt('fileUrlPrefix'),
557
+                fileSrcField = editor.getOpt("fileUploadService")(this, editor).fileSrcField || 'url',
558
+                fileSrc = '',
559
+                fileSrcFieldKeys = fileSrcField.split('.');
560
+
561
+            for (i = 0; i < this.fileList.length; i++) {
562
+                data = this.fileList[i];
563
+                if(fileSrcFieldKeys.length > 1) {
564
+                    function setFileSrc(obj, keys, index) {
565
+                        obj = obj[keys[index]];
566
+                        if (index < keys.length - 1) {
567
+                            setFileSrc(obj, keys, index += 1)
568
+                        } else {
569
+                            fileSrc = obj;
570
+                        }
571
+                    }
572
+    
573
+                    setFileSrc(data, fileSrcFieldKeys, 0);
574
+                } else {
575
+                    fileSrc = data[fileSrcField];
576
+                }
577
+                link = fileSrc;
578
+                list.push({
579
+                    title: data.original || link.substr(link.lastIndexOf('/') + 1),
580
+                    url: prefix + link
581
+                });
582
+            }
583
+            return list;
584
+        }
585
+    };
586
+
587
+
588
+    /* 在线附件 */
589
+    function OnlineFile(target) {
590
+        this.container = utils.isString(target) ? document.getElementById(target) : target;
591
+        this.init();
592
+    }
593
+    OnlineFile.prototype = {
594
+        init: function () {
595
+            this.initContainer();
596
+            this.initEvents();
597
+            this.initData();
598
+        },
599
+        /* 初始化容器 */
600
+        initContainer: function () {
601
+            this.container.innerHTML = '';
602
+            this.list = document.createElement('ul');
603
+            this.clearFloat = document.createElement('li');
604
+
605
+            domUtils.addClass(this.list, 'list');
606
+            domUtils.addClass(this.clearFloat, 'clearFloat');
607
+
608
+            this.list.appendChild(this.clearFloat);
609
+            this.container.appendChild(this.list);
610
+        },
611
+        /* 初始化滚动事件,滚动到地步自动拉取数据 */
612
+        initEvents: function () {
613
+            var _this = this;
614
+
615
+            /* 滚动拉取图片 */
616
+            domUtils.on($G('fileList'), 'scroll', function(e){
617
+                var panel = this;
618
+                if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {
619
+                    _this.getFileData();
620
+                }
621
+            });
622
+            /* 选中图片 */
623
+            domUtils.on(this.list, 'click', function (e) {
624
+                var target = e.target || e.srcElement,
625
+                    li = target.parentNode;
626
+
627
+                if (li.tagName.toLowerCase() == 'li') {
628
+                    if (domUtils.hasClass(li, 'selected')) {
629
+                        domUtils.removeClasses(li, 'selected');
630
+                    } else {
631
+                        domUtils.addClass(li, 'selected');
632
+                    }
633
+                }
634
+            });
635
+        },
636
+        /* 初始化第一次的数据 */
637
+        initData: function () {
638
+
639
+            /* 拉取数据需要使用的值 */
640
+            this.state = 0;
641
+            this.listSize = editor.getOpt('fileManagerListSize');
642
+            this.listIndex = 0;
643
+            this.listEnd = false;
644
+
645
+            /* 第一次拉取数据 */
646
+            this.getFileData();
647
+        },
648
+        /* 向后台拉取图片列表数据 */
649
+        getFileData: function () {
650
+            var _this = this;
651
+
652
+            if(!_this.listEnd && !this.isLoadingData) {
653
+                this.isLoadingData = true;
654
+                ajax.request(editor.getActionUrl(editor.getOpt('fileManagerActionName')), {
655
+                    timeout: 100000,
656
+                    data: utils.extend({
657
+                            start: this.listIndex,
658
+                            size: this.listSize
659
+                        }, editor.queryCommandValue('serverparam')),
660
+                    method: 'get',
661
+                    onsuccess: function (r) {
662
+                        try {
663
+                            var json = eval('(' + r.responseText + ')');
664
+                            if (json.state == 'SUCCESS') {
665
+                                _this.pushData(json.list);
666
+                                _this.listIndex = parseInt(json.start) + parseInt(json.list.length);
667
+                                if(_this.listIndex >= json.total) {
668
+                                    _this.listEnd = true;
669
+                                }
670
+                                _this.isLoadingData = false;
671
+                            }
672
+                        } catch (e) {
673
+                            if(r.responseText.indexOf('ue_separate_ue') != -1) {
674
+                                var list = r.responseText.split(r.responseText);
675
+                                _this.pushData(list);
676
+                                _this.listIndex = parseInt(list.length);
677
+                                _this.listEnd = true;
678
+                                _this.isLoadingData = false;
679
+                            }
680
+                        }
681
+                    },
682
+                    onerror: function () {
683
+                        _this.isLoadingData = false;
684
+                    }
685
+                });
686
+            }
687
+        },
688
+        /* 添加图片到列表界面上 */
689
+        pushData: function (list) {
690
+            var i, item, img, filetype, preview, icon, _this = this,
691
+                urlPrefix = editor.getOpt('fileManagerUrlPrefix');
692
+            for (i = 0; i < list.length; i++) {
693
+                if(list[i] && list[i].url) {
694
+                    item = document.createElement('li');
695
+                    icon = document.createElement('span');
696
+                    filetype = list[i].url.substr(list[i].url.lastIndexOf('.') + 1);
697
+
698
+                    if ( "png|jpg|jpeg|gif|bmp".indexOf(filetype) != -1 ) {
699
+                        preview = document.createElement('img');
700
+                        domUtils.on(preview, 'load', (function(image){
701
+                            return function(){
702
+                                _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);
703
+                            };
704
+                        })(preview));
705
+                        preview.width = 113;
706
+                        preview.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=':'&noCache=') + (+new Date()).toString(36) );
707
+                    } else {
708
+                        var ic = document.createElement('i'),
709
+                            textSpan = document.createElement('span');
710
+                        textSpan.innerHTML = list[i].url.substr(list[i].url.lastIndexOf('/') + 1);
711
+                        preview = document.createElement('div');
712
+                        preview.appendChild(ic);
713
+                        preview.appendChild(textSpan);
714
+                        domUtils.addClass(preview, 'file-wrapper');
715
+                        domUtils.addClass(textSpan, 'file-title');
716
+                        domUtils.addClass(ic, 'file-type-' + filetype);
717
+                        domUtils.addClass(ic, 'file-preview');
718
+                    }
719
+                    domUtils.addClass(icon, 'icon');
720
+                    item.setAttribute('data-url', urlPrefix + list[i].url);
721
+                    if (list[i].original) {
722
+                        item.setAttribute('data-title', list[i].original);
723
+                    }
724
+
725
+                    item.appendChild(preview);
726
+                    item.appendChild(icon);
727
+                    this.list.insertBefore(item, this.clearFloat);
728
+                }
729
+            }
730
+        },
731
+        /* 改变图片大小 */
732
+        scale: function (img, w, h, type) {
733
+            var ow = img.width,
734
+                oh = img.height;
735
+
736
+            if (type == 'justify') {
737
+                if (ow >= oh) {
738
+                    img.width = w;
739
+                    img.height = h * oh / ow;
740
+                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
741
+                } else {
742
+                    img.width = w * ow / oh;
743
+                    img.height = h;
744
+                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
745
+                }
746
+            } else {
747
+                if (ow >= oh) {
748
+                    img.width = w * ow / oh;
749
+                    img.height = h;
750
+                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
751
+                } else {
752
+                    img.width = w;
753
+                    img.height = h * oh / ow;
754
+                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
755
+                }
756
+            }
757
+        },
758
+        getInsertList: function () {
759
+            var i, lis = this.list.children, list = [];
760
+            for (i = 0; i < lis.length; i++) {
761
+                if (domUtils.hasClass(lis[i], 'selected')) {
762
+                    var url = lis[i].getAttribute('data-url');
763
+                    var title = lis[i].getAttribute('data-title') || url.substr(url.lastIndexOf('/') + 1);
764
+                    list.push({
765
+                        title: title,
766
+                        url: url
767
+                    });
768
+                }
769
+            }
770
+            return list;
771
+        }
772
+    };
773
+
774
+
775
+})();

BIN
static/neditor/dialogs/attachment/fileTypeImages/icon_chm.gif View File


BIN
static/neditor/dialogs/attachment/fileTypeImages/icon_default.png View File


BIN
static/neditor/dialogs/attachment/fileTypeImages/icon_doc.gif View File


BIN
static/neditor/dialogs/attachment/fileTypeImages/icon_exe.gif View File


BIN
static/neditor/dialogs/attachment/fileTypeImages/icon_jpg.gif View File


BIN
static/neditor/dialogs/attachment/fileTypeImages/icon_mp3.gif View File


BIN
static/neditor/dialogs/attachment/fileTypeImages/icon_mv.gif View File


BIN
static/neditor/dialogs/attachment/fileTypeImages/icon_pdf.gif View File


BIN
static/neditor/dialogs/attachment/fileTypeImages/icon_ppt.gif View File


BIN
static/neditor/dialogs/attachment/fileTypeImages/icon_psd.gif View File


BIN
static/neditor/dialogs/attachment/fileTypeImages/icon_rar.gif View File


BIN
static/neditor/dialogs/attachment/fileTypeImages/icon_txt.gif View File


BIN
static/neditor/dialogs/attachment/fileTypeImages/icon_xls.gif View File


BIN
static/neditor/dialogs/attachment/images/alignicon.gif View File


BIN
static/neditor/dialogs/attachment/images/alignicon.png View File


BIN
static/neditor/dialogs/attachment/images/bg.png View File


BIN
static/neditor/dialogs/attachment/images/file-icons.gif View File


BIN
static/neditor/dialogs/attachment/images/file-icons.png View File


BIN
static/neditor/dialogs/attachment/images/icons.gif View File


BIN
static/neditor/dialogs/attachment/images/icons.png View File


BIN
static/neditor/dialogs/attachment/images/image.png View File


BIN
static/neditor/dialogs/attachment/images/progress.png View File


BIN
static/neditor/dialogs/attachment/images/success.gif View File


BIN
static/neditor/dialogs/attachment/images/success.png View File


+ 97 - 0
static/neditor/dialogs/background/background.css View File

@@ -0,0 +1,97 @@
1
+.wrapper{ width: 424px;margin: 20px; zoom:1;position: relative}
2
+.tabbody{height:225px;}
3
+.tabbody .panel { position: absolute;width:100%; height:100%;background: #fff; display: none;}
4
+.tabbody .focus { display: block;}
5
+
6
+body{font-size: 12px;color: #888;overflow: hidden;}
7
+input,label{vertical-align:middle}
8
+.clear{clear: both;}
9
+.pl{padding-left: 18px;padding-left: 23px\9;}
10
+
11
+#imageList {width: 420px;height: 215px;margin-top: 10px;overflow: hidden;overflow-y: auto;}
12
+#imageList div {float: left;width: 100px;height: 95px;margin: 5px 10px;}
13
+#imageList img {cursor: pointer;border: 2px solid white;}
14
+
15
+.bgarea{margin: 10px;padding: 5px;height: 84%;border: 1px solid #A8A297;border-radius: 4px;}
16
+.content div{margin: 10px 0 10px 5px;}
17
+.content .iptradio{margin: 0px 5px 5px 0px;}
18
+.txt{width:280px; margin-left: 10px;height: 26px;line-height: 26px; border-radius: 5px;border: 1px solid #ccc;}
19
+
20
+.wrapcolor{height: 19px;}
21
+div.color{float: left;margin: 0;}
22
+#colorPicker{width: 17px;height: 17px;border: 1px solid #CCC;display: inline-block;border-radius: 3px;box-shadow: 2px 2px 5px #D3D6DA;margin: 0 0 0 10px;float: left;}
23
+div.alignment,#custom{margin-left: 23px;margin-left: 28px\9;}
24
+#custom input{height: 15px;min-height: 15px;width:20px;}
25
+#repeatType{width:100px;
26
+    margin-left: 10px;
27
+    border-radius: 4px;
28
+    height: 23px;}
29
+
30
+
31
+/* 图片管理样式 */
32
+#imgManager {
33
+    width: 100%;
34
+    height: 225px;
35
+}
36
+#imgManager #imageList{
37
+    width: 100%;
38
+    overflow-x: hidden;
39
+    overflow-y: auto;
40
+}
41
+#imgManager ul {
42
+    display: block;
43
+    list-style: none;
44
+    margin: 0;
45
+    padding: 0;
46
+}
47
+#imgManager li {
48
+    float: left;
49
+    display: block;
50
+    list-style: none;
51
+    padding: 0;
52
+    width: 113px;
53
+    height: 113px;
54
+    margin: 9px 0 0 19px;
55
+    background-color: #eee;
56
+    overflow: hidden;
57
+    cursor: pointer;
58
+    position: relative;
59
+}
60
+#imgManager li.clearFloat {
61
+    float: none;
62
+    clear: both;
63
+    display: block;
64
+    width:0;
65
+    height:0;
66
+    margin: 0;
67
+    padding: 0;
68
+}
69
+#imgManager li img {
70
+    cursor: pointer;
71
+}
72
+#imgManager li .icon {
73
+    cursor: pointer;
74
+    width: 113px;
75
+    height: 113px;
76
+    position: absolute;
77
+    top: 0;
78
+    left: 0;
79
+    z-index: 2;
80
+    border: 0;
81
+    background-repeat: no-repeat;
82
+}
83
+#imgManager li .icon:hover {
84
+    width: 107px;
85
+    height: 107px;
86
+    border: 3px solid #1094fa;
87
+}
88
+#imgManager li.selected .icon {
89
+    background-image: url(images/success.png);
90
+    background-position: 75px 75px;
91
+}
92
+#imgManager li.selected .icon:hover {
93
+    width: 107px;
94
+    height: 107px;
95
+    border: 3px solid #1094fa;
96
+    background-position: 72px 72px;
97
+}

+ 56 - 0
static/neditor/dialogs/background/background.html View File

@@ -0,0 +1,56 @@
1
+<!DOCTYPE HTML>
2
+<html>
3
+<head>
4
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
5
+    <script type="text/javascript" src="../internal.js"></script>
6
+    <link rel="stylesheet" type="text/css" href="background.css">
7
+</head>
8
+<body>
9
+    <div id="bg_container" class="wrapper">
10
+        <div id="tabHeads" class="tabhead">
11
+            <span class="focus" data-content-id="normal"><var id="lang_background_normal"></var></span>
12
+            <!-- <span class="" data-content-id="imgManager"><var id="lang_background_local"></var></span> -->
13
+        </div>
14
+        <div id="tabBodys" class="tabbody">
15
+            <div id="normal" class="panel focus">
16
+                <fieldset class="bgarea">
17
+                    <legend><var id="lang_background_set"></var></legend>
18
+                    <div class="content">
19
+                        <div>
20
+                            <label><input id="nocolorRadio" class="iptradio" type="radio" name="t" value="none" checked="checked"><var id="lang_background_none"></var></label>
21
+                            <label><input id="coloredRadio" class="iptradio" type="radio" name="t" value="color"><var id="lang_background_colored"></var></label>
22
+                        </div>
23
+                        <div class="wrapcolor pl">
24
+                            <div class="color">
25
+                                <var id="lang_background_color"></var>:
26
+                            </div>
27
+                            <div id="colorPicker"></div>
28
+                            <div class="clear"></div>
29
+                        </div>
30
+                        <div class="wrapcolor pl">
31
+                            <label><var id="lang_background_netimg"></var>:</label><input class="txt" type="text" id="url">
32
+                        </div>
33
+                        <div id="alignment" class="alignment">
34
+                            <var id="lang_background_align"></var>:<select id="repeatType">
35
+                                <option value="center"></option>
36
+                                <option value="repeat-x"></option>
37
+                                <option value="repeat-y"></option>
38
+                                <option value="repeat"></option>
39
+                                <option value="self"></option>
40
+                            </select>
41
+                        </div>
42
+                        <div id="custom" >
43
+                            <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
44
+                        </div>
45
+                    </div>
46
+                </fieldset>
47
+
48
+            </div>
49
+            <div id="imgManager" class="panel">
50
+                <div id="imageList" style=""></div>
51
+            </div>
52
+        </div>
53
+    </div>
54
+    <script type="text/javascript" src="background.js"></script>
55
+</body>
56
+</html>

+ 376 - 0
static/neditor/dialogs/background/background.js View File

@@ -0,0 +1,376 @@
1
+(function () {
2
+
3
+    var onlineImage,
4
+        backupStyle = editor.queryCommandValue('background');
5
+
6
+    window.onload = function () {
7
+        initTabs();
8
+        initColorSelector();
9
+    };
10
+
11
+    /* 初始化tab标签 */
12
+    function initTabs(){
13
+        var tabs = $G('tabHeads').children;
14
+        for (var i = 0; i < tabs.length; i++) {
15
+            domUtils.on(tabs[i], "click", function (e) {
16
+                var target = e.target || e.srcElement;
17
+                for (var j = 0; j < tabs.length; j++) {
18
+                    if(tabs[j] == target){
19
+                        tabs[j].className = "focus";
20
+                        var contentId = tabs[j].getAttribute('data-content-id');
21
+                        $G(contentId).style.display = "block";
22
+                        if(contentId == 'imgManager') {
23
+                            initImagePanel();
24
+                        }
25
+                    }else {
26
+                        tabs[j].className = "";
27
+                        $G(tabs[j].getAttribute('data-content-id')).style.display = "none";
28
+                    }
29
+                }
30
+            });
31
+        }
32
+    }
33
+
34
+    /* 初始化颜色设置 */
35
+    function initColorSelector () {
36
+        var obj = editor.queryCommandValue('background');
37
+        if (obj) {
38
+            var color = obj['background-color'],
39
+                repeat = obj['background-repeat'] || 'repeat',
40
+                image = obj['background-image'] || '',
41
+                position = obj['background-position'] || 'center center',
42
+                pos = position.split(' '),
43
+                x = parseInt(pos[0]) || 0,
44
+                y = parseInt(pos[1]) || 0;
45
+
46
+            if(repeat == 'no-repeat' && (x || y)) repeat = 'self';
47
+
48
+            image = image.match(/url[\s]*\(([^\)]*)\)/);
49
+            image = image ? image[1]:'';
50
+            updateFormState('colored', color, image, repeat, x, y);
51
+        } else {
52
+            updateFormState();
53
+        }
54
+
55
+        var updateHandler = function () {
56
+            updateFormState();
57
+            updateBackground();
58
+        }
59
+        domUtils.on($G('nocolorRadio'), 'click', updateBackground);
60
+        domUtils.on($G('coloredRadio'), 'click', updateHandler);
61
+        domUtils.on($G('url'), 'keyup', function(){
62
+            if($G('url').value && $G('alignment').style.display == "none") {
63
+                utils.each($G('repeatType').children, function(item){
64
+                    item.selected = ('repeat' == item.getAttribute('value') ? 'selected':false);
65
+                });
66
+            }
67
+            updateHandler();
68
+        });
69
+        domUtils.on($G('repeatType'), 'change', updateHandler);
70
+        domUtils.on($G('x'), 'keyup', updateBackground);
71
+        domUtils.on($G('y'), 'keyup', updateBackground);
72
+
73
+        initColorPicker();
74
+    }
75
+
76
+    /* 初始化颜色选择器 */
77
+    function initColorPicker() {
78
+        var me = editor,
79
+            cp = $G("colorPicker");
80
+
81
+        /* 生成颜色选择器ui对象 */
82
+        var popup = new UE.ui.Popup({
83
+            content: new UE.ui.ColorPicker({
84
+                noColorText: me.getLang("clearColor"),
85
+                editor: me,
86
+                onpickcolor: function (t, color) {
87
+                    updateFormState('colored', color);
88
+                    updateBackground();
89
+                    UE.ui.Popup.postHide();
90
+                },
91
+                onpicknocolor: function (t, color) {
92
+                    updateFormState('colored', 'transparent');
93
+                    updateBackground();
94
+                    UE.ui.Popup.postHide();
95
+                }
96
+            }),
97
+            editor: me,
98
+            onhide: function () {
99
+            }
100
+        });
101
+
102
+        /* 设置颜色选择器 */
103
+        domUtils.on(cp, "click", function () {
104
+            popup.showAnchor(this);
105
+        });
106
+        domUtils.on(document, 'mousedown', function (evt) {
107
+            var el = evt.target || evt.srcElement;
108
+            UE.ui.Popup.postHide(el);
109
+        });
110
+        domUtils.on(window, 'scroll', function () {
111
+            UE.ui.Popup.postHide();
112
+        });
113
+    }
114
+
115
+    /* 初始化在线图片列表 */
116
+    function initImagePanel() {
117
+        onlineImage = onlineImage || new OnlineImage('imageList');
118
+    }
119
+
120
+    /* 更新背景色设置面板 */
121
+    function updateFormState (radio, color, url, align, x, y) {
122
+        var nocolorRadio = $G('nocolorRadio'),
123
+            coloredRadio = $G('coloredRadio');
124
+
125
+        if(radio) {
126
+            nocolorRadio.checked = (radio == 'colored' ? false:'checked');
127
+            coloredRadio.checked = (radio == 'colored' ? 'checked':false);
128
+        }
129
+        if(color) {
130
+            domUtils.setStyle($G("colorPicker"), "background-color", color);
131
+        }
132
+
133
+        if(url && /^\//.test(url)) {
134
+            var a = document.createElement('a');
135
+            a.href = url;
136
+            browser.ie && (a.href = a.href);
137
+            url = browser.ie ? a.href:(a.protocol + '//' + a.host + a.pathname + a.search + a.hash);
138
+        }
139
+
140
+        if(url || url === '') {
141
+            $G('url').value = url;
142
+        }
143
+        if(align) {
144
+            utils.each($G('repeatType').children, function(item){
145
+                item.selected = (align == item.getAttribute('value') ? 'selected':false);
146
+            });
147
+        }
148
+        if(x || y) {
149
+            $G('x').value = parseInt(x) || 0;
150
+            $G('y').value = parseInt(y) || 0;
151
+        }
152
+
153
+        $G('alignment').style.display = coloredRadio.checked && $G('url').value ? '':'none';
154
+        $G('custom').style.display = coloredRadio.checked && $G('url').value && $G('repeatType').value == 'self' ? '':'none';
155
+    }
156
+
157
+    /* 更新背景颜色 */
158
+    function updateBackground () {
159
+        if ($G('coloredRadio').checked) {
160
+            var color = domUtils.getStyle($G("colorPicker"), "background-color"),
161
+                bgimg = $G("url").value,
162
+                align = $G("repeatType").value,
163
+                backgroundObj = {
164
+                    "background-repeat": "no-repeat",
165
+                    "background-position": "center center"
166
+                };
167
+
168
+            if (color) backgroundObj["background-color"] = color;
169
+            if (bgimg) backgroundObj["background-image"] = 'url(' + bgimg + ')';
170
+            if (align == 'self') {
171
+                backgroundObj["background-position"] = $G("x").value + "px " + $G("y").value + "px";
172
+            } else if (align == 'repeat-x' || align == 'repeat-y' || align == 'repeat') {
173
+                backgroundObj["background-repeat"] = align;
174
+            }
175
+
176
+            editor.execCommand('background', backgroundObj);
177
+        } else {
178
+            editor.execCommand('background', null);
179
+        }
180
+    }
181
+
182
+
183
+    /* 在线图片 */
184
+    function OnlineImage(target) {
185
+        this.container = utils.isString(target) ? document.getElementById(target) : target;
186
+        this.init();
187
+    }
188
+    OnlineImage.prototype = {
189
+        init: function () {
190
+            this.reset();
191
+            this.initEvents();
192
+        },
193
+        /* 初始化容器 */
194
+        initContainer: function () {
195
+            this.container.innerHTML = '';
196
+            this.list = document.createElement('ul');
197
+            this.clearFloat = document.createElement('li');
198
+
199
+            domUtils.addClass(this.list, 'list');
200
+            domUtils.addClass(this.clearFloat, 'clearFloat');
201
+
202
+            this.list.id = 'imageListUl';
203
+            this.list.appendChild(this.clearFloat);
204
+            this.container.appendChild(this.list);
205
+        },
206
+        /* 初始化滚动事件,滚动到地步自动拉取数据 */
207
+        initEvents: function () {
208
+            var _this = this;
209
+
210
+            /* 滚动拉取图片 */
211
+            domUtils.on($G('imageList'), 'scroll', function(e){
212
+                var panel = this;
213
+                if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {
214
+                    _this.getImageData();
215
+                }
216
+            });
217
+            /* 选中图片 */
218
+            domUtils.on(this.container, 'click', function (e) {
219
+                var target = e.target || e.srcElement,
220
+                    li = target.parentNode,
221
+                    nodes = $G('imageListUl').childNodes;
222
+
223
+                if (li.tagName.toLowerCase() == 'li') {
224
+                    updateFormState('nocolor', null, '');
225
+                    for (var i = 0, node; node = nodes[i++];) {
226
+                        if (node == li && !domUtils.hasClass(node, 'selected')) {
227
+                            domUtils.addClass(node, 'selected');
228
+                            updateFormState('colored', null, li.firstChild.getAttribute("_src"), 'repeat');
229
+                        } else {
230
+                            domUtils.removeClasses(node, 'selected');
231
+                        }
232
+                    }
233
+                    updateBackground();
234
+                }
235
+            });
236
+        },
237
+        /* 初始化第一次的数据 */
238
+        initData: function () {
239
+
240
+            /* 拉取数据需要使用的值 */
241
+            this.state = 0;
242
+            this.listSize = editor.getOpt('imageManagerListSize');
243
+            this.listIndex = 0;
244
+            this.listEnd = false;
245
+
246
+            /* 第一次拉取数据 */
247
+            this.getImageData();
248
+        },
249
+        /* 重置界面 */
250
+        reset: function() {
251
+            this.initContainer();
252
+            this.initData();
253
+        },
254
+        /* 向后台拉取图片列表数据 */
255
+        getImageData: function () {
256
+            var _this = this;
257
+
258
+            if(!_this.listEnd && !this.isLoadingData) {
259
+                this.isLoadingData = true;
260
+                var url = editor.getActionUrl(editor.getOpt('imageManagerActionName')),
261
+                    isJsonp = utils.isCrossDomainUrl(url);
262
+                ajax.request(url, {
263
+                    'timeout': 100000,
264
+                    'dataType': isJsonp ? 'jsonp':'',
265
+                    'data': utils.extend({
266
+                            start: this.listIndex,
267
+                            size: this.listSize
268
+                        }, editor.queryCommandValue('serverparam')),
269
+                    'method': 'get',
270
+                    'onsuccess': function (r) {
271
+                        try {
272
+                            var json = isJsonp ? r:eval('(' + r.responseText + ')');
273
+                            if (json.state == 'SUCCESS') {
274
+                                _this.pushData(json.list);
275
+                                _this.listIndex = parseInt(json.start) + parseInt(json.list.length);
276
+                                if(_this.listIndex >= json.total) {
277
+                                    _this.listEnd = true;
278
+                                }
279
+                                _this.isLoadingData = false;
280
+                            }
281
+                        } catch (e) {
282
+                            if(r.responseText.indexOf('ue_separate_ue') != -1) {
283
+                                var list = r.responseText.split(r.responseText);
284
+                                _this.pushData(list);
285
+                                _this.listIndex = parseInt(list.length);
286
+                                _this.listEnd = true;
287
+                                _this.isLoadingData = false;
288
+                            }
289
+                        }
290
+                    },
291
+                    'onerror': function () {
292
+                        _this.isLoadingData = false;
293
+                    }
294
+                });
295
+            }
296
+        },
297
+        /* 添加图片到列表界面上 */
298
+        pushData: function (list) {
299
+            var i, item, img, icon, _this = this,
300
+                urlPrefix = editor.getOpt('imageManagerUrlPrefix');
301
+            for (i = 0; i < list.length; i++) {
302
+                if(list[i] && list[i].url) {
303
+                    item = document.createElement('li');
304
+                    img = document.createElement('img');
305
+                    icon = document.createElement('span');
306
+
307
+                    domUtils.on(img, 'load', (function(image){
308
+                        return function(){
309
+                            _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);
310
+                        }
311
+                    })(img));
312
+                    img.width = 113;
313
+                    img.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=':'&noCache=') + (+new Date()).toString(36) );
314
+                    img.setAttribute('_src', urlPrefix + list[i].url);
315
+                    domUtils.addClass(icon, 'icon');
316
+
317
+                    item.appendChild(img);
318
+                    item.appendChild(icon);
319
+                    this.list.insertBefore(item, this.clearFloat);
320
+                }
321
+            }
322
+        },
323
+        /* 改变图片大小 */
324
+        scale: function (img, w, h, type) {
325
+            var ow = img.width,
326
+                oh = img.height;
327
+
328
+            if (type == 'justify') {
329
+                if (ow >= oh) {
330
+                    img.width = w;
331
+                    img.height = h * oh / ow;
332
+                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
333
+                } else {
334
+                    img.width = w * ow / oh;
335
+                    img.height = h;
336
+                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
337
+                }
338
+            } else {
339
+                if (ow >= oh) {
340
+                    img.width = w * ow / oh;
341
+                    img.height = h;
342
+                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
343
+                } else {
344
+                    img.width = w;
345
+                    img.height = h * oh / ow;
346
+                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
347
+                }
348
+            }
349
+        },
350
+        getInsertList: function () {
351
+            var i, lis = this.list.children, list = [], align = getAlign();
352
+            for (i = 0; i < lis.length; i++) {
353
+                if (domUtils.hasClass(lis[i], 'selected')) {
354
+                    var img = lis[i].firstChild,
355
+                        src = img.getAttribute('_src');
356
+                    list.push({
357
+                        src: src,
358
+                        _src: src,
359
+                        floatStyle: align
360
+                    });
361
+                }
362
+
363
+            }
364
+            return list;
365
+        }
366
+    };
367
+
368
+    dialog.onok = function () {
369
+        updateBackground();
370
+        editor.fireEvent('saveScene');
371
+    };
372
+    dialog.oncancel = function () {
373
+        editor.execCommand('background', backupStyle);
374
+    };
375
+
376
+})();

BIN
static/neditor/dialogs/background/images/bg.png View File


BIN
static/neditor/dialogs/background/images/success.png View File


+ 65 - 0
static/neditor/dialogs/charts/chart.config.js View File

@@ -0,0 +1,65 @@
1
+/*
2
+ * 图表配置文件
3
+ * */
4
+
5
+
6
+//不同类型的配置
7
+var typeConfig = [
8
+    {
9
+        chart: {
10
+            type: 'line'
11
+        },
12
+        plotOptions: {
13
+            line: {
14
+                dataLabels: {
15
+                    enabled: false
16
+                },
17
+                enableMouseTracking: true
18
+            }
19
+        }
20
+    }, {
21
+        chart: {
22
+            type: 'line'
23
+        },
24
+        plotOptions: {
25
+            line: {
26
+                dataLabels: {
27
+                    enabled: true
28
+                },
29
+                enableMouseTracking: false
30
+            }
31
+        }
32
+    }, {
33
+        chart: {
34
+            type: 'area'
35
+        }
36
+    }, {
37
+        chart: {
38
+            type: 'bar'
39
+        }
40
+    }, {
41
+        chart: {
42
+            type: 'column'
43
+        }
44
+    }, {
45
+        chart: {
46
+            plotBackgroundColor: null,
47
+            plotBorderWidth: null,
48
+            plotShadow: false
49
+        },
50
+        plotOptions: {
51
+            pie: {
52
+                allowPointSelect: true,
53
+                cursor: 'pointer',
54
+                dataLabels: {
55
+                    enabled: true,
56
+                    color: '#000000',
57
+                    connectorColor: '#000000',
58
+                    formatter: function() {
59
+                        return '<b>'+ this.point.name +'</b>: '+ ( Math.round( this.point.percentage*100 ) / 100 ) +' %';
60
+                    }
61
+                }
62
+            }
63
+        }
64
+    }
65
+];

+ 165 - 0
static/neditor/dialogs/charts/charts.css View File

@@ -0,0 +1,165 @@
1
+html, body {
2
+    width: 100%;
3
+    height: 100%;
4
+    margin: 0;
5
+    padding: 0;
6
+    overflow-x: hidden;
7
+}
8
+
9
+.main {
10
+    width: 100%;
11
+    overflow: hidden;
12
+}
13
+
14
+.table-view {
15
+    height: 100%;
16
+    float: left;
17
+    margin: 20px;
18
+    width: 40%;
19
+}
20
+
21
+.table-view .table-container {
22
+    width: 100%;
23
+    margin-bottom: 50px;
24
+    overflow: scroll;
25
+}
26
+
27
+.table-view th {
28
+    padding: 5px 10px;
29
+    background-color: #F7F7F7;
30
+}
31
+
32
+.table-view td {
33
+    width: 50px;
34
+    text-align: center;
35
+    padding:0;
36
+}
37
+
38
+.table-container input {
39
+    width: 40px;
40
+    padding: 5px;
41
+    border: none;
42
+    outline: none;
43
+}
44
+
45
+.table-view caption {
46
+    font-size: 18px;
47
+    text-align: left;
48
+}
49
+
50
+.charts-view {
51
+    /*margin-left: 49%!important;*/
52
+    width: 50%;
53
+    margin-left: 49%;
54
+    height: 400px;
55
+}
56
+
57
+.charts-container {
58
+    border-left: 1px solid #c3c3c3;
59
+}
60
+
61
+.charts-format fieldset {
62
+    padding-left: 20px;
63
+    margin-bottom: 50px;
64
+}
65
+
66
+.charts-format legend {
67
+    padding-left: 10px;
68
+    padding-right: 10px;
69
+}
70
+
71
+.format-item-container {
72
+    padding: 20px;
73
+}
74
+
75
+.format-item-container label {
76
+    display: block;
77
+    margin: 10px 0;
78
+}
79
+
80
+.charts-format .data-item {
81
+    border: 1px solid black;
82
+    outline: none;
83
+    padding: 2px 3px;
84
+}
85
+
86
+/* 图表类型 */
87
+
88
+.charts-type {
89
+    margin-top: 50px;
90
+    height: 300px;
91
+}
92
+
93
+.scroll-view {
94
+    border: 1px solid #c3c3c3;
95
+    border-left: none;
96
+    border-right: none;
97
+    overflow: hidden;
98
+}
99
+
100
+.scroll-container {
101
+    margin: 20px;
102
+    width: 100%;
103
+    overflow: hidden;
104
+}
105
+
106
+.scroll-bed {
107
+    width: 10000px;
108
+    _margin-top: 20px;
109
+    -webkit-transition: margin-left .5s ease;
110
+    -moz-transition: margin-left .5s ease;
111
+    transition: margin-left .5s ease;
112
+}
113
+
114
+.view-box {
115
+    display: inline-block;
116
+    *display: inline;
117
+    *zoom: 1;
118
+    margin-right: 20px;
119
+    border: 2px solid white;
120
+    line-height: 0;
121
+    overflow: hidden;
122
+    cursor: pointer;
123
+}
124
+
125
+.view-box img {
126
+    border: 1px solid #cecece;
127
+}
128
+
129
+.view-box.selected {
130
+    border-color: #7274A7;
131
+}
132
+
133
+.button-container {
134
+    margin-bottom: 20px;
135
+    text-align: center;
136
+}
137
+
138
+.button-container a {
139
+    display: inline-block;
140
+    width: 100px;
141
+    height: 25px;
142
+    line-height: 25px;
143
+    border: 1px solid #c2ccd1;
144
+    margin-right: 30px;
145
+    text-decoration: none;
146
+    color: black;
147
+    -webkit-border-radius: 2px;
148
+    -moz-border-radius: 2px;
149
+    border-radius: 2px;
150
+}
151
+
152
+.button-container a:HOVER {
153
+    background: #fcfcfc;
154
+}
155
+
156
+.button-container a:ACTIVE {
157
+    border-top-color: #c2ccd1;
158
+    box-shadow:inset 0 5px 4px -4px rgba(49, 49, 64, 0.1);
159
+}
160
+
161
+.edui-charts-not-data {
162
+    height: 100px;
163
+    line-height: 100px;
164
+    text-align: center;
165
+}

+ 89 - 0
static/neditor/dialogs/charts/charts.html View File

@@ -0,0 +1,89 @@
1
+<!DOCTYPE html>
2
+<html>
3
+    <head>
4
+        <title>chart</title>
5
+        <meta chartset="utf-8">
6
+        <link rel="stylesheet" type="text/css" href="charts.css">
7
+        <script type="text/javascript" src="../internal.js"></script>
8
+    </head>
9
+    <body>
10
+        <div class="main">
11
+            <div class="table-view">
12
+                <h3><var id="lang_data_source"></var></h3>
13
+                <div id="tableContainer" class="table-container"></div>
14
+                <h3><var id="lang_chart_format"></var></h3>
15
+                <form name="data-form">
16
+                    <div class="charts-format">
17
+                        <fieldset>
18
+                            <legend><var id="lang_data_align"></var></legend>
19
+                            <div class="format-item-container">
20
+                                <label>
21
+                                    <input type="radio" class="format-ctrl not-pie-item" name="charts-format" value="1" checked="checked">
22
+                                    <var id="lang_chart_align_same"></var>
23
+                                </label>
24
+                                <label>
25
+                                    <input type="radio" class="format-ctrl not-pie-item" name="charts-format" value="-1">
26
+                                    <var id="lang_chart_align_reverse"></var>
27
+                                </label>
28
+                                <br>
29
+                            </div>
30
+                        </fieldset>
31
+                        <fieldset>
32
+                            <legend><var id="lang_chart_title"></var></legend>
33
+                            <div class="format-item-container">
34
+                                <label>
35
+                                    <var id="lang_chart_main_title"></var><input type="text" name="title" class="data-item">
36
+                                </label>
37
+                                <label>
38
+                                    <var id="lang_chart_sub_title"></var><input type="text" name="sub-title" class="data-item not-pie-item">
39
+                                </label>
40
+                                <label>
41
+                                    <var id="lang_chart_x_title"></var><input type="text" name="x-title" class="data-item not-pie-item">
42
+                                </label>
43
+                                <label>
44
+                                    <var id="lang_chart_y_title"></var><input type="text" name="y-title" class="data-item not-pie-item">
45
+                                </label>
46
+                            </div>
47
+                        </fieldset>
48
+                        <fieldset>
49
+                            <legend><var id="lang_chart_tip"></var></legend>
50
+                            <div class="format-item-container">
51
+                                <label>
52
+                                    <var id="lang_cahrt_tip_prefix"></var>
53
+                                    <input type="text" id="tipInput" name="tip" class="data-item" disabled="disabled">
54
+                                </label>
55
+                                <p><var id="lang_cahrt_tip_description"></var></p>
56
+                            </div>
57
+                        </fieldset>
58
+                        <fieldset>
59
+                            <legend><var id="lang_chart_data_unit"></var></legend>
60
+                            <div class="format-item-container">
61
+                                <label><var id="lang_chart_data_unit_title"></var><input type="text" name="unit" class="data-item"></label>
62
+                                <p><var id="lang_chart_data_unit_description"></var></p>
63
+                            </div>
64
+                        </fieldset>
65
+                    </div>
66
+                </form>
67
+            </div>
68
+            <div class="charts-view">
69
+                <div id="chartsContainer" class="charts-container"></div>
70
+                <div id="chartsType" class="charts-type">
71
+                    <h3><var id="lang_chart_type"></var></h3>
72
+                    <div class="scroll-view">
73
+                        <div class="scroll-container">
74
+                            <div id="scrollBed" class="scroll-bed"></div>
75
+                        </div>
76
+                        <div id="buttonContainer" class="button-container">
77
+                            <a href="#" data-title="prev"><var id="lang_prev_btn"></var></a>
78
+                            <a href="#" data-title="next"><var id="lang_next_btn"></var></a>
79
+                        </div>
80
+                    </div>
81
+                </div>
82
+            </div>
83
+        </div>
84
+        <script src="../../third-party/jquery-1.10.2.min.js"></script>
85
+        <script src="../../third-party/highcharts/highcharts.js"></script>
86
+        <script src="chart.config.js"></script>
87
+        <script src="charts.js"></script>
88
+    </body>
89
+</html>

+ 519 - 0
static/neditor/dialogs/charts/charts.js View File

@@ -0,0 +1,519 @@
1
+/*
2
+ * 图片转换对话框脚本
3
+ **/
4
+
5
+var tableData = [],
6
+    //编辑器页面table
7
+    editorTable = null,
8
+    chartsConfig = window.typeConfig,
9
+    resizeTimer = null,
10
+    //初始默认图表类型
11
+    currentChartType = 0;
12
+
13
+window.onload = function () {
14
+
15
+    editorTable = domUtils.findParentByTagName( editor.selection.getRange().startContainer, 'table', true);
16
+
17
+    //未找到表格, 显示错误页面
18
+    if ( !editorTable ) {
19
+        document.body.innerHTML = "<div class='edui-charts-not-data'>未找到数据</div>";
20
+        return;
21
+    }
22
+
23
+    //初始化图表类型选择
24
+    initChartsTypeView();
25
+    renderTable( editorTable );
26
+    initEvent();
27
+    initUserConfig( editorTable.getAttribute( "data-chart" ) );
28
+    $( "#scrollBed .view-box:eq("+ currentChartType +")" ).trigger( "click" );
29
+    updateViewType( currentChartType );
30
+
31
+    dialog.addListener( "resize", function () {
32
+
33
+        if ( resizeTimer != null ) {
34
+            window.clearTimeout( resizeTimer );
35
+        }
36
+
37
+        resizeTimer = window.setTimeout( function () {
38
+
39
+            resizeTimer = null;
40
+
41
+            renderCharts();
42
+
43
+        }, 500 );
44
+
45
+    } );
46
+
47
+};
48
+
49
+function initChartsTypeView () {
50
+
51
+    var contents = [];
52
+
53
+    for ( var i = 0, len = chartsConfig.length; i<len; i++ ) {
54
+
55
+        contents.push( '<div class="view-box" data-chart-type="'+ i +'"><img width="300" src="images/charts'+ i +'.png"></div>' );
56
+
57
+    }
58
+
59
+    $( "#scrollBed" ).html( contents.join( "" ) );
60
+
61
+}
62
+
63
+//渲染table, 以便用户修改数据
64
+function renderTable ( table ) {
65
+
66
+    var tableHtml = [];
67
+
68
+    //构造数据
69
+    for ( var i = 0, row; row = table.rows[ i ]; i++ ) {
70
+
71
+        tableData[ i ] = [];
72
+        tableHtml[ i ] = [];
73
+
74
+        for ( var j = 0, cell; cell = row.cells[ j ]; j++ ) {
75
+
76
+            var value = getCellValue( cell );
77
+
78
+            if ( i > 0 && j > 0 ) {
79
+                value = +value;
80
+            }
81
+
82
+            if ( i === 0 || j === 0 ) {
83
+                tableHtml[ i ].push( '<th>'+ value +'</th>' );
84
+            } else {
85
+                tableHtml[ i ].push( '<td><input type="text" class="data-item" value="'+ value +'"></td>' );
86
+            }
87
+
88
+            tableData[ i ][ j ] = value;
89
+
90
+        }
91
+
92
+        tableHtml[ i ] = tableHtml[ i ].join( "" );
93
+
94
+    }
95
+
96
+    //draw 表格
97
+    $( "#tableContainer" ).html( '<table id="showTable" border="1"><tbody><tr>'+ tableHtml.join( "</tr><tr>" ) +'</tr></tbody></table>' );
98
+
99
+}
100
+
101
+/*
102
+ * 根据表格已有的图表属性初始化当前图表属性
103
+ */
104
+function initUserConfig ( config ) {
105
+
106
+    var parsedConfig = {};
107
+
108
+    if ( !config ) {
109
+        return;
110
+    }
111
+
112
+    config = config.split( ";" );
113
+
114
+    $.each( config, function ( index, item ) {
115
+
116
+        item = item.split( ":" );
117
+        parsedConfig[ item[ 0 ] ] = item[ 1 ];
118
+
119
+    } );
120
+
121
+    setUserConfig( parsedConfig );
122
+
123
+}
124
+
125
+function initEvent () {
126
+
127
+    var cacheValue = null,
128
+        //图表类型数
129
+        typeViewCount = chartsConfig.length- 1,
130
+        $chartsTypeViewBox = $( '#scrollBed .view-box' );
131
+
132
+    $( ".charts-format" ).delegate( ".format-ctrl", "change", function () {
133
+
134
+        renderCharts();
135
+
136
+    } )
137
+
138
+    $( ".table-view" ).delegate( ".data-item", "focus", function () {
139
+
140
+        cacheValue = this.value;
141
+
142
+    } ).delegate( ".data-item", "blur", function () {
143
+
144
+        if ( this.value !== cacheValue ) {
145
+            renderCharts();
146
+        }
147
+
148
+        cacheValue = null;
149
+
150
+    } );
151
+
152
+    $( "#buttonContainer" ).delegate( "a", "click", function (e) {
153
+
154
+        e.preventDefault();
155
+
156
+        if ( this.getAttribute( "data-title" ) === 'prev' ) {
157
+
158
+            if ( currentChartType > 0 ) {
159
+                currentChartType--;
160
+                updateViewType( currentChartType );
161
+            }
162
+
163
+        } else {
164
+
165
+            if ( currentChartType < typeViewCount ) {
166
+                currentChartType++;
167
+                updateViewType( currentChartType );
168
+            }
169
+
170
+        }
171
+
172
+    } );
173
+
174
+    //图表类型变化
175
+    $( '#scrollBed' ).delegate( ".view-box", "click", function (e) {
176
+
177
+        var index = $( this ).attr( "data-chart-type" );
178
+        $chartsTypeViewBox.removeClass( "selected" );
179
+        $( $chartsTypeViewBox[ index ] ).addClass( "selected" );
180
+
181
+        currentChartType = index | 0;
182
+
183
+        //饼图, 禁用部分配置
184
+        if ( currentChartType === chartsConfig.length - 1 ) {
185
+
186
+            disableNotPieConfig();
187
+
188
+        //启用完整配置
189
+        } else {
190
+
191
+            enableNotPieConfig();
192
+
193
+        }
194
+
195
+        renderCharts();
196
+
197
+    } );
198
+
199
+}
200
+
201
+function renderCharts () {
202
+
203
+    var data = collectData();
204
+
205
+    $('#chartsContainer').highcharts( $.extend( {}, chartsConfig[ currentChartType ], {
206
+
207
+        credits: {
208
+            enabled: false
209
+        },
210
+        exporting: {
211
+            enabled: false
212
+        },
213
+        title: {
214
+            text: data.title,
215
+            x: -20 //center
216
+        },
217
+        subtitle: {
218
+            text: data.subTitle,
219
+            x: -20
220
+        },
221
+        xAxis: {
222
+            title: {
223
+                text: data.xTitle
224
+            },
225
+            categories: data.categories
226
+        },
227
+        yAxis: {
228
+            title: {
229
+                text: data.yTitle
230
+            },
231
+            plotLines: [{
232
+                value: 0,
233
+                width: 1,
234
+                color: '#808080'
235
+            }]
236
+        },
237
+        tooltip: {
238
+            enabled: true,
239
+            valueSuffix: data.suffix
240
+        },
241
+        legend: {
242
+            layout: 'vertical',
243
+            align: 'right',
244
+            verticalAlign: 'middle',
245
+            borderWidth: 1
246
+        },
247
+        series: data.series
248
+
249
+    } ));
250
+
251
+}
252
+
253
+function updateViewType ( index ) {
254
+
255
+    $( "#scrollBed" ).css( 'marginLeft', -index*324+'px' );
256
+
257
+}
258
+
259
+function collectData () {
260
+
261
+    var form = document.forms[ 'data-form' ],
262
+        data = null;
263
+
264
+    if ( currentChartType !== chartsConfig.length - 1 ) {
265
+
266
+        data = getSeriesAndCategories();
267
+        $.extend( data, getUserConfig() );
268
+
269
+    //饼图数据格式
270
+    } else {
271
+        data = getSeriesForPieChart();
272
+        data.title = form[ 'title' ].value;
273
+        data.suffix = form[ 'unit' ].value;
274
+    }
275
+
276
+    return data;
277
+
278
+}
279
+
280
+/**
281
+ * 获取用户配置信息
282
+ */
283
+function getUserConfig () {
284
+
285
+    var form = document.forms[ 'data-form' ],
286
+        info = {
287
+            title: form[ 'title' ].value,
288
+            subTitle: form[ 'sub-title' ].value,
289
+            xTitle: form[ 'x-title' ].value,
290
+            yTitle: form[ 'y-title' ].value,
291
+            suffix: form[ 'unit' ].value,
292
+            //数据对齐方式
293
+            tableDataFormat: getTableDataFormat (),
294
+            //饼图提示文字
295
+            tip: $( "#tipInput" ).val()
296
+        };
297
+
298
+    return info;
299
+
300
+}
301
+
302
+function setUserConfig ( config ) {
303
+
304
+    var form = document.forms[ 'data-form' ];
305
+
306
+    config.title && ( form[ 'title' ].value = config.title );
307
+    config.subTitle && ( form[ 'sub-title' ].value = config.subTitle );
308
+    config.xTitle && ( form[ 'x-title' ].value = config.xTitle );
309
+    config.yTitle && ( form[ 'y-title' ].value = config.yTitle );
310
+    config.suffix && ( form[ 'unit' ].value = config.suffix );
311
+    config.dataFormat == "-1" && ( form[ 'charts-format' ][ 1 ].checked = true );
312
+    config.tip && ( form[ 'tip' ].value = config.tip );
313
+    currentChartType = config.chartType || 0;
314
+
315
+}
316
+
317
+function getSeriesAndCategories () {
318
+
319
+    var form = document.forms[ 'data-form' ],
320
+        series = [],
321
+        categories = [],
322
+        tmp = [],
323
+        tableData = getTableData();
324
+
325
+    //反转数据
326
+    if ( getTableDataFormat() === "-1" ) {
327
+
328
+        for ( var i = 0, len = tableData.length; i < len; i++ ) {
329
+
330
+            for ( var j = 0, jlen = tableData[ i ].length; j < jlen; j++ ) {
331
+
332
+                if ( !tmp[ j ] ) {
333
+                    tmp[ j ] = [];
334
+                }
335
+
336
+                tmp[ j ][ i ] = tableData[ i ][ j ];
337
+
338
+            }
339
+
340
+        }
341
+
342
+        tableData = tmp;
343
+
344
+    }
345
+
346
+    categories = tableData[0].slice( 1 );
347
+
348
+    for ( var i = 1, data; data = tableData[ i ]; i++ ) {
349
+
350
+        series.push( {
351
+            name: data[ 0 ],
352
+            data: data.slice( 1 )
353
+        } );
354
+
355
+    }
356
+
357
+    return {
358
+        series: series,
359
+        categories: categories
360
+    };
361
+
362
+}
363
+
364
+/*
365
+ * 获取数据源数据对齐方式
366
+ */
367
+function getTableDataFormat () {
368
+
369
+    var form = document.forms[ 'data-form' ],
370
+        items = form['charts-format'];
371
+
372
+    return items[ 0 ].checked ? items[ 0 ].value : items[ 1 ].value;
373
+
374
+}
375
+
376
+/*
377
+ * 禁用非饼图类型的配置项
378
+ */
379
+function disableNotPieConfig() {
380
+
381
+    updateConfigItem( 'disable' );
382
+
383
+}
384
+
385
+/*
386
+ * 启用非饼图类型的配置项
387
+ */
388
+function enableNotPieConfig() {
389
+
390
+    updateConfigItem( 'enable' );
391
+
392
+}
393
+
394
+function updateConfigItem ( value ) {
395
+
396
+    var table = $( "#showTable" )[ 0 ],
397
+        isDisable = value === 'disable' ? true : false;
398
+
399
+    //table中的input处理
400
+    for ( var i = 2 , row; row = table.rows[ i ]; i++ ) {
401
+
402
+        for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) {
403
+
404
+            $( "input", cell ).attr( "disabled", isDisable );
405
+
406
+        }
407
+
408
+    }
409
+
410
+    //其他项处理
411
+    $( "input.not-pie-item" ).attr( "disabled", isDisable );
412
+    $( "#tipInput" ).attr( "disabled", !isDisable )
413
+
414
+}
415
+
416
+/*
417
+ * 获取饼图数据
418
+ * 饼图的数据只取第一行的
419
+ **/
420
+function getSeriesForPieChart () {
421
+
422
+    var series = {
423
+            type: 'pie',
424
+            name: $("#tipInput").val(),
425
+            data: []
426
+        },
427
+        tableData = getTableData();
428
+
429
+
430
+    for ( var j = 1, jlen = tableData[ 0 ].length; j < jlen; j++ ) {
431
+
432
+        var title = tableData[ 0 ][ j ],
433
+            val = tableData[ 1 ][ j ];
434
+
435
+        series.data.push( [ title, val ] );
436
+
437
+    }
438
+
439
+    return {
440
+        series: [ series ]
441
+    };
442
+
443
+}
444
+
445
+function getTableData () {
446
+
447
+    var table = document.getElementById( "showTable" ),
448
+        xCount = table.rows[0].cells.length - 1,
449
+        values = getTableInputValue();
450
+
451
+    for ( var i = 0, value; value = values[ i ]; i++ ) {
452
+
453
+        tableData[ Math.floor( i / xCount ) + 1 ][ i % xCount + 1 ] = values[ i ];
454
+
455
+    }
456
+
457
+    return tableData;
458
+
459
+}
460
+
461
+function getTableInputValue () {
462
+
463
+    var table = document.getElementById( "showTable" ),
464
+        inputs = table.getElementsByTagName( "input" ),
465
+        values = [];
466
+
467
+    for ( var i = 0, input; input = inputs[ i ]; i++ ) {
468
+        values.push( input.value | 0 );
469
+    }
470
+
471
+    return values;
472
+
473
+}
474
+
475
+function getCellValue ( cell ) {
476
+
477
+    var value = utils.trim( ( cell.innerText || cell.textContent || '' ) );
478
+
479
+    return value.replace( new RegExp( UE.dom.domUtils.fillChar, 'g' ), '' ).replace( /^\s+|\s+$/g, '' );
480
+
481
+}
482
+
483
+
484
+//dialog确认事件
485
+dialog.onok = function () {
486
+
487
+    //收集信息
488
+    var form = document.forms[ 'data-form' ],
489
+        info = getUserConfig();
490
+
491
+    //添加图表类型
492
+    info.chartType = currentChartType;
493
+
494
+    //同步表格数据到编辑器
495
+    syncTableData();
496
+
497
+    //执行图表命令
498
+    editor.execCommand( 'charts', info );
499
+
500
+};
501
+
502
+/*
503
+ * 同步图表编辑视图的表格数据到编辑器里的原始表格
504
+ */
505
+function syncTableData () {
506
+
507
+    var tableData = getTableData();
508
+
509
+    for ( var i = 1, row; row = editorTable.rows[ i ]; i++ ) {
510
+
511
+        for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) {
512
+
513
+            cell.innerHTML = tableData[ i ] [ j ];
514
+
515
+        }
516
+
517
+    }
518
+
519
+}

BIN
static/neditor/dialogs/charts/images/charts0.png View File


BIN
static/neditor/dialogs/charts/images/charts1.png View File


BIN
static/neditor/dialogs/charts/images/charts2.png View File


BIN
static/neditor/dialogs/charts/images/charts3.png View File


BIN
static/neditor/dialogs/charts/images/charts4.png View File


BIN
static/neditor/dialogs/charts/images/charts5.png View File


+ 43 - 0
static/neditor/dialogs/emotion/emotion.css View File

@@ -0,0 +1,43 @@
1
+.jd img{
2
+    background:transparent url(images/jxface2.gif?v=1.1) no-repeat scroll left top;
3
+    cursor:pointer;width:35px;height:35px;display:block;
4
+}
5
+.pp img{
6
+    background:transparent url(images/fface.gif?v=1.1) no-repeat scroll left top;
7
+    cursor:pointer;width:25px;height:25px;display:block;
8
+}
9
+.ldw img{
10
+    background:transparent url(images/wface.gif?v=1.1) no-repeat scroll left top;
11
+    cursor:pointer;width:35px;height:35px;display:block;
12
+}
13
+.tsj img{
14
+    background:transparent url(images/tface.gif?v=1.1) no-repeat scroll left top;
15
+    cursor:pointer;width:35px;height:35px;display:block;
16
+}
17
+.cat img{
18
+    background:transparent url(images/cface.gif?v=1.1) no-repeat scroll left top;
19
+    cursor:pointer;width:35px;height:35px;display:block;
20
+}
21
+.bb img{
22
+    background:transparent url(images/bface.gif?v=1.1) no-repeat scroll left top;
23
+    cursor:pointer;width:35px;height:35px;display:block;
24
+}
25
+.youa img{
26
+    background:transparent url(images/yface.gif?v=1.1) no-repeat scroll left top;
27
+    cursor:pointer;width:35px;height:35px;display:block;
28
+}
29
+
30
+.smileytable td {height: 37px;}
31
+#tabPanel{margin-left:5px;overflow: hidden;}
32
+#tabContent {float:left;background:#FFFFFF;}
33
+#tabContent div{display: none;width:480px;overflow:hidden;}
34
+#tabIconReview.show{left:17px;display:block;}
35
+.menuFocus{background:#ACCD3C;}
36
+.menuDefault{background:#FFFFFF;}
37
+#tabIconReview{position:absolute;left:406px;left:398px \9;top:41px;z-index:65533;width:90px;height:76px;}
38
+img.review{width:90px;height:76px;border:2px solid #9cb945;background:#FFFFFF;background-position:center;background-repeat:no-repeat;}
39
+
40
+.wrapper .tabbody{position:relative;float:left;clear:both;padding:10px;width: 95%;}
41
+.tabbody table{width: 100%;}
42
+.tabbody td{border:1px solid #BAC498;}
43
+.tabbody td span{display: block;zoom:1;padding:0 4px;}

+ 54 - 0
static/neditor/dialogs/emotion/emotion.html View File

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

+ 186 - 0
static/neditor/dialogs/emotion/emotion.js View File

@@ -0,0 +1,186 @@
1
+window.onload = function () {
2
+    editor.setOpt({
3
+        emotionLocalization:false
4
+    });
5
+
6
+    emotion.SmileyPath = editor.options.emotionLocalization === true ? 'images/' : "//imgbaidu.b0.upaiyun.com/hi/";
7
+    emotion.SmileyBox = createTabList( emotion.tabNum );
8
+    emotion.tabExist = createArr( emotion.tabNum );
9
+
10
+    initImgName();
11
+    initEvtHandler( "tabHeads" );
12
+};
13
+
14
+function initImgName() {
15
+    for ( var pro in emotion.SmilmgName ) {
16
+        var tempName = emotion.SmilmgName[pro],
17
+                tempBox = emotion.SmileyBox[pro],
18
+                tempStr = "";
19
+
20
+        if ( tempBox.length ) return;
21
+        for ( var i = 1; i <= tempName[1]; i++ ) {
22
+            tempStr = tempName[0];
23
+            if ( i < 10 ) tempStr = tempStr + '0';
24
+            tempStr = tempStr + i + '.gif';
25
+            tempBox.push( tempStr );
26
+        }
27
+    }
28
+}
29
+
30
+function initEvtHandler( conId ) {
31
+    var tabHeads = $G( conId );
32
+    for ( var i = 0, j = 0; i < tabHeads.childNodes.length; i++ ) {
33
+        var tabObj = tabHeads.childNodes[i];
34
+        if ( tabObj.nodeType == 1 ) {
35
+            domUtils.on( tabObj, "click", (function ( index ) {
36
+                return function () {
37
+                    switchTab( index );
38
+                };
39
+            })( j ) );
40
+            j++;
41
+        }
42
+    }
43
+    switchTab( 0 );
44
+    $G( "tabIconReview" ).style.display = 'none';
45
+}
46
+
47
+function InsertSmiley( url, evt ) {
48
+    var obj = {
49
+        src:editor.options.emotionLocalization ? editor.options.UEDITOR_HOME_URL + "dialogs/emotion/" + url : url
50
+    };
51
+    obj._src = obj.src;
52
+    editor.execCommand( 'insertimage', obj );
53
+    if ( !evt.ctrlKey ) {
54
+        dialog.popup.hide();
55
+    }
56
+}
57
+
58
+function switchTab( index ) {
59
+
60
+    autoHeight( index );
61
+    if ( emotion.tabExist[index] == 0 ) {
62
+        emotion.tabExist[index] = 1;
63
+        createTab( 'tab' + index );
64
+    }
65
+    //获取呈现元素句柄数组
66
+    var tabHeads = $G( "tabHeads" ).getElementsByTagName( "span" ),
67
+            tabBodys = $G( "tabBodys" ).getElementsByTagName( "div" ),
68
+            i = 0, L = tabHeads.length;
69
+    //隐藏所有呈现元素
70
+    for ( ; i < L; i++ ) {
71
+        tabHeads[i].className = "";
72
+        tabBodys[i].style.display = "none";
73
+    }
74
+    //显示对应呈现元素
75
+    tabHeads[index].className = "focus";
76
+    tabBodys[index].style.display = "block";
77
+}
78
+
79
+function autoHeight( index ) {
80
+    var iframe = dialog.getDom( "iframe" ),
81
+            parent = iframe.parentNode.parentNode;
82
+    switch ( index ) {
83
+        case 0:
84
+            iframe.style.height = "380px";
85
+            parent.style.height = "392px";
86
+            break;
87
+        case 1:
88
+            iframe.style.height = "220px";
89
+            parent.style.height = "232px";
90
+            break;
91
+        case 2:
92
+            iframe.style.height = "260px";
93
+            parent.style.height = "272px";
94
+            break;
95
+        case 3:
96
+            iframe.style.height = "300px";
97
+            parent.style.height = "312px";
98
+            break;
99
+        case 4:
100
+            iframe.style.height = "140px";
101
+            parent.style.height = "152px";
102
+            break;
103
+        case 5:
104
+            iframe.style.height = "260px";
105
+            parent.style.height = "272px";
106
+            break;
107
+        case 6:
108
+            iframe.style.height = "230px";
109
+            parent.style.height = "242px";
110
+            break;
111
+        default:
112
+
113
+    }
114
+}
115
+
116
+
117
+function createTab( tabName ) {
118
+    var faceVersion = "?v=1.1", //版本号
119
+            tab = $G( tabName ), //获取将要生成的Div句柄
120
+            imagePath = emotion.SmileyPath + emotion.imageFolders[tabName], //获取显示表情和预览表情的路径
121
+            positionLine = 11 / 2, //中间数
122
+            iWidth = iHeight = 35, //图片长宽
123
+            iColWidth = 3, //表格剩余空间的显示比例
124
+            tableCss = emotion.imageCss[tabName],
125
+            cssOffset = emotion.imageCssOffset[tabName],
126
+            textHTML = ['<table class="smileytable">'],
127
+            i = 0, imgNum = emotion.SmileyBox[tabName].length, imgColNum = 11, faceImage,
128
+            sUrl, realUrl, posflag, offset, infor;
129
+
130
+    for ( ; i < imgNum; ) {
131
+        textHTML.push( '<tr>' );
132
+        for ( var j = 0; j < imgColNum; j++, i++ ) {
133
+            faceImage = emotion.SmileyBox[tabName][i];
134
+            if ( faceImage ) {
135
+                sUrl = imagePath + faceImage + faceVersion;
136
+                realUrl = imagePath + faceImage;
137
+                posflag = j < positionLine ? 0 : 1;
138
+                offset = cssOffset * i * (-1) - 1;
139
+                infor = emotion.SmileyInfor[tabName][i];
140
+
141
+                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)">' );
142
+                textHTML.push( '<span>' );
143
+                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>' );
144
+                textHTML.push( '</span>' );
145
+            } else {
146
+                textHTML.push( '<td width="' + iColWidth + '%"   bgcolor="#FFFFFF">' );
147
+            }
148
+            textHTML.push( '</td>' );
149
+        }
150
+        textHTML.push( '</tr>' );
151
+    }
152
+    textHTML.push( '</table>' );
153
+    textHTML = textHTML.join( "" );
154
+    tab.innerHTML = textHTML;
155
+}
156
+
157
+function over( td, srcPath, posFlag ) {
158
+    td.style.backgroundColor = "#ACCD3C";
159
+    $G( 'faceReview' ).style.backgroundImage = "url(" + srcPath + ")";
160
+    if ( posFlag == 1 ) $G( "tabIconReview" ).className = "show";
161
+    $G( "tabIconReview" ).style.display = 'block';
162
+}
163
+
164
+function out( td ) {
165
+    td.style.backgroundColor = "transparent";
166
+    var tabIconRevew = $G( "tabIconReview" );
167
+    tabIconRevew.className = "";
168
+    tabIconRevew.style.display = 'none';
169
+}
170
+
171
+function createTabList( tabNum ) {
172
+    var obj = {};
173
+    for ( var i = 0; i < tabNum; i++ ) {
174
+        obj["tab" + i] = [];
175
+    }
176
+    return obj;
177
+}
178
+
179
+function createArr( tabNum ) {
180
+    var arr = [];
181
+    for ( var i = 0; i < tabNum; i++ ) {
182
+        arr[i] = 0;
183
+    }
184
+    return arr;
185
+}
186
+

BIN
static/neditor/dialogs/emotion/images/0.gif View File


BIN
static/neditor/dialogs/emotion/images/bface.gif View File


BIN
static/neditor/dialogs/emotion/images/cface.gif View File


BIN
static/neditor/dialogs/emotion/images/fface.gif View File


BIN
static/neditor/dialogs/emotion/images/jxface2.gif View File


BIN
static/neditor/dialogs/emotion/images/neweditor-tab-bg.png View File


BIN
static/neditor/dialogs/emotion/images/tface.gif View File


BIN
static/neditor/dialogs/emotion/images/wface.gif View File


BIN
static/neditor/dialogs/emotion/images/yface.gif View File


File diff suppressed because it is too large
+ 272 - 0
static/neditor/dialogs/fonts/buttoniconex.css


BIN
static/neditor/dialogs/fonts/iconfont.eot View File


+ 398 - 0
static/neditor/dialogs/fonts/iconfont.svg View File

@@ -0,0 +1,398 @@
1
+<?xml version="1.0" standalone="no"?>
2
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
+<!--
4
+2013-9-30: Created.
5
+-->
6
+<svg>
7
+<metadata>
8
+Created by iconfont
9
+</metadata>
10
+<defs>
11
+
12
+<font id="edui-notadd" horiz-adv-x="1024" >
13
+  <font-face
14
+    font-family="edui-notadd"
15
+    font-weight="500"
16
+    font-stretch="normal"
17
+    units-per-em="1024"
18
+    ascent="896"
19
+    descent="-128"
20
+  />
21
+    <missing-glyph />
22
+    
23
+    <glyph glyph-name="close" unicode="&#58964;" d="M960 742.4l-89.6 89.6-358.4-358.4-358.4 358.4-89.6-89.6 358.4-358.4-358.4-358.4 89.6-89.6 358.4 358.4 358.4-358.4 89.6 89.6-358.4 358.4 358.4 358.4z"  horiz-adv-x="1024" />
24
+
25
+    
26
+    <glyph glyph-name="searchreplace" unicode="&#59151;" d="M437.771654 317.01890000000003h82.93098L299.553354 896H219.181972L0.080371 317.01890000000003h80.883302L136.762912 476.225905h241.626065zM160.823135 541.751617l87.026337 241.114145A222.173119 222.173119 0 0 1 256.040186 823.307413a274.388921 274.388921 0 0 1 9.214553-40.441651l90.097855-241.114145h-194.529459z m825.214441-403.904587a146.920933 146.920933 0 0 1-94.705131 44.537008 145.897094 145.897094 0 0 1 74.740266 51.191963 138.730219 138.730219 0 0 1 27.13174 84.466738 117.741515 117.741515 0 0 1-45.560847 96.75281 189.922182 189.922182 0 0 1-122.348791 36.346294h-170.469237V-127.83925699999998h175.076513a204.767851 204.767851 0 0 1 137.70638 46.072766 153.575889 153.575889 0 0 1 53.751561 121.324952 136.170621 136.170621 0 0 1-35.322454 98.288569z m-255.959814 250.840618h74.740266q109.550801 0 109.5508-81.907141a91.121694 91.121694 0 0 0-30.715178-73.204506 126.956068 126.956068 0 0 0-84.978658-26.619821h-68.59723V388.687648z m180.707629-421.821774a136.682541 136.682541 0 0 0-90.609775-27.13174h-90.097854v204.767851h77.299864q135.146782 0 135.146782-99.824327a93.681292 93.681292 0 0 0-31.739017-78.323704zM460.808037 94.33386199999995a176.100352 176.100352 0 0 0-85.490578 40.95357 178.148031 178.148031 0 0 0-38.905892 219.613521L282.148087 384.080371A241.114145 241.114145 0 0 1 460.808037 29.32006899999999v-42.489329l112.110399 77.811783L460.808037 142.966226v-51.191963z"  horiz-adv-x="1024" />
27
+
28
+    
29
+    <glyph glyph-name="italic" unicode="&#58925;" d="M384 832v-64h128L384 0H256v-64h384v64H512l128 768h128V832z"  horiz-adv-x="1024" />
30
+
31
+    
32
+    <glyph glyph-name="insertcaption" unicode="&#58967;" d="M568.25 834v-393.75h393.75V834z m337.5-225h-112.5v-112.5h-56.25V609h-112.5V665.25h112.5V777.75h56.25v-112.5h112.5zM938.375 440.25H62v-506.25h900V440.25zM114.875-9.75v225H343.25v-225z m423.5625 0H399.5v225h225v-225z m370.6875 0H680.75v225h228.375zM455.75 834H62v-56.25h168.75v-337.5h56.25V777.75h168.75V834z"  horiz-adv-x="1024" />
33
+
34
+    
35
+    <glyph glyph-name="insertparagraph" unicode="&#58926;" d="M997.12 896h-997.12v-576h1024v576zM60.16 384v256h259.84v-256zM542.080 384h-158.080v256h256v-256zM963.84 384h-259.84v256h259.84zM448 320h-448v-64h192v-384h64v384h192v64z"  horiz-adv-x="1024" />
36
+
37
+    
38
+    <glyph glyph-name="inserttitlecol" unicode="&#58969;" d="M64-64v128h-64v-192h192v64h-128zM448-128h576v1024h-576zM960 192v-256h-192v256zM704 192v-256h-192v256zM960 512v-256h-192v256zM704 512v-256h-192v256zM960 832v-256h-192v256zM704 832v-256h-192v256zM64 384h128v64h-192v-192h64v128zM384 384v-128h64v192h-192v-64h128zM384-64h-128v-64h192v192h-64v-128zM64-64v128h-64v-192h192v64h-128zM448-128h576v1024h-576zM960 192v-256h-192v256zM704 192v-256h-192v256zM960 512v-256h-192v256zM704 512v-256h-192v256zM960 832v-256h-192v256zM704 832v-256h-192v256zM64 384h128v64h-192v-192h64v128zM384 384v-128h64v192h-192v-64h128zM384-64h-128v-64h192v192h-64v-128zM0 448h448v448h-448zM256 832v-128h128v-64h-128v-128h-64v128h-128v64h128v128z"  horiz-adv-x="1024" />
39
+
40
+    
41
+    <glyph glyph-name="insertimage" unicode="&#58903;" d="M350.080 360.96l128-192 263.68 430.080 156.16-256v-23.040h64v458.88c0 0.010 0 0.023 0 0.035 0 29.337-23.783 53.12-53.12 53.12-0.675 0-1.347-0.013-2.017-0.038l-853.663 0.003c-29.337 0-53.12-23.783-53.12-53.12v-727.040c0-28.63 23.21-51.84 51.84-51.84 0 0 0 0 0 0h588.16v64h-485.12zM296.96 711.68c-0.034-0-0.033-0-0.032-0-118.007-53.154-65.211-0.36 0 0zM1024 192h-192v192h-64v-192h-192v-64h192v-192h64v192h192v64z"  horiz-adv-x="1024" />
42
+
43
+    
44
+    <glyph glyph-name="previousstep" unicode="&#58928;" d="M483.84 0c-9.271 0.086-17.958 2.506-25.527 6.698l-3.273-0.298-368 332.8c-13.235 9.399-22.074 24.243-23.235 41.197 0.134-1.173 0.1-0.024 0.1 1.134 0 18.444 8.766 34.84 22.359 45.25l371.336 328.42c8.13 7.803 19.143 12.656 31.289 12.811-0.567-0.011-0.565-0.011-0.563-0.011 15.34 0 28.71-8.432 35.728-20.914 4.536-8.376 7.142-18.094 7.146-28.419l-0-191.946h29.44c34.754-0.054 68.438-4.531 100.552-12.9 60.101-15.232 114.839-46.015 159.094-87.786 24.409-12.831 74.63-78.825 101.032-155.877 11.808-7.806 39.215-98.972 43.624-196.13-3.497 49.062-2.666 43.42-2.666 37.584 0-13.892-4.709-26.684-12.617-36.868-7.167-8.081-17.718-13.251-29.479-13.305-18.37 1.665-34.085 12.269-42.803 27.412-24.444 39.773-60.939 71.608-104.398 90.375-0.074 8.386-50.308 30.081-105.051 37.675 15.832 0.434-31.071 8.408-79.837 8.408-1.776 0-3.549-0.011-5.32-0.032l-48.371 0.003v-161.28c0.493-3.088 0.775-6.648 0.775-10.274 0-15.423-5.098-29.655-13.702-41.102-7.798-8.019-18.891-13.106-31.173-13.106-2.28 0-4.519 0.175-6.704 0.513zM145.28 384l312.96-281.6v148.48c7.245 27.987 32.273 48.324 62.050 48.324 2.264 0 4.501-0.118 6.705-0.347l52.844 0.023c1.379 0.014 3.008 0.021 4.64 0.021 58.359 0 114.417-9.85 166.603-27.978 61.993-22.007 117.34-60.173 160.325-109.408l-43.568 42.646c-22.699 92.319-79.174 168.698-155.264 216.901-21.633 14.132-81.989 33.984-146.982 33.984-0.617 0-1.233-0.002-1.849-0.005-4.98 0.383-10.897 0.6-16.865 0.6-5.968 0-11.885-0.218-17.744-0.646l-12.016 0.046c-0.636-0.025-1.382-0.040-2.131-0.040-19.528 0-36.761 9.827-47.023 24.805-5.559 8.317-8.91 18.241-9.215 28.927l0.13 152.388z"  horiz-adv-x="1024" />
45
+
46
+    
47
+    <glyph glyph-name="nextstep" unicode="&#58929;" d="M506.88 15.36c-8.477 11.272-13.575 25.504-13.575 40.926 0 3.626 0.282 7.186 0.825 10.66l-0.050 159.614h-48.64c-1.501 0.019-3.275 0.029-5.051 0.029-48.766 0-95.669-7.974-139.477-22.689-50.006-17.279-94.98-47.496-130.256-86.627 4.899 12.591-24.587-25.889-40.469-70.797 10.925 27.391-5.086 17.214-23.542 16.13-10.253 0.213-20.784 5.419-27.986 13.621-9.722 10.595-15.716 24.869-15.716 40.544 0 3.971 0.385 7.852 1.119 11.608 13.646 97.38 48.926 184.899 100.832 260.053 10.486 22.71 71.898 78.958 145.81 112.475-16.158-3.265 43.015 19.543 107.047 25.738-22.32-1.169 11.377 3.266 46.109 3.274l28.94-0v192c0.014 10.328 2.629 20.042 7.223 28.527 7.288 10.538 19.676 17.6 33.714 17.6 0.683 0 1.363-0.017 2.038-0.050 12.071-0.314 23.014-5.3 31.061-13.22l370.124-327.897c13.729-10.51 22.495-26.906 22.495-45.35 0-1.157-0.035-2.307-0.103-3.447-1.522-16.856-10.584-31.479-23.778-40.507l-366.614-329.256h-3.84c-7.316-4.007-16.024-6.375-25.284-6.402-0.212-0.022-0.839-0.035-1.47-0.035-12.377 0-23.547 5.166-31.471 13.46zM565.12 661.12v-154.24c-0.823-10.739-4.61-20.458-10.535-28.506-8.813-12.907-26.046-22.734-45.574-22.734-0.75 0-1.496 0.014-2.238 0.043l-9.493-0.003c-5.075 0.382-10.992 0.6-16.96 0.6-5.968 0-11.885-0.218-17.744-0.646 0.263 0.049-0.353 0.051-0.97 0.051-64.993 0-125.349-19.852-175.335-53.823-70.569-55.034-119.949-136.478-133.177-229.562l15.866 40.18c50.614 39.788 112.633 67.349 180.391 77.216-20.185 0.726 36.912 11.038 96.409 11.112l50.881-0.008c1.928 0.206 4.165 0.324 6.43 0.324 29.778 0 54.806-20.337 61.952-47.879l0.098-150.845 313.6 281.6z"  horiz-adv-x="1024" />
48
+
49
+    
50
+    <glyph glyph-name="scaleboard" unicode="&#58930;" d="M374.935 244.376c-6.461 7.093-15.736 11.526-26.046 11.526-0.291 0-0.581-0.004-0.87-0.011l-308.991 0.001c-21.495-0.701-38.694-18.129-39.029-39.649l-0-24.333c2.003-21.281 19.78-37.802 41.416-37.802 0.736 0 1.467 0.019 2.194 0.057l163.053-0.004-186.828-190.667c-9.538-9.598-15.433-22.825-15.433-37.43s5.895-27.832 15.436-37.432c9.39-9.462 22.404-15.321 36.787-15.321 14.383 0 27.397 5.859 36.787 15.32l186.831 188.111v-165.074c-0.014-0.383-0.022-0.833-0.022-1.285 0-20.631 16.551-37.397 37.099-37.744l26.905-0c0.983-0.094 2.125-0.148 3.279-0.148 19.293 0 35.087 14.981 36.384 33.945l0.006 309.786c0.069 0.841 0.108 1.82 0.108 2.809 0 9.24-3.436 17.677-9.1 24.104zM383.893 570.045v291.758c-0.898 19.073-16.579 34.196-35.793 34.196-1.592 0-3.16-0.104-4.697-0.305l-27.971 0.019c-0.015 0-0.032 0-0.050 0-20.495 0-37.11-16.615-37.11-37.11 0-0.675 0.018-1.346 0.054-2.012l-0.004-166.261-184.269 184.269c-9.289 9.429-22.197 15.27-36.47 15.27s-27.18-5.841-36.464-15.264c-9.318-9.469-15.067-22.461-15.067-36.796 0-14.335 5.749-27.327 15.067-36.797l184.262-184.262h-161.875c-0.387 0.013-0.842 0.020-1.298 0.020-22.879 0-41.508-18.195-42.208-40.904l-0.002-26.937c1.642-20.273 18.063-36.222 38.394-37.111l310.308 0.001c0.233-0.006 0.508-0.009 0.784-0.009 10.002 0 19.029 4.173 25.436 10.873 5.684 6.325 9.152 14.716 9.152 23.917 0 1.271-0.066 2.526-0.195 3.763l0.013 19.040zM648.779 523.338c6.421-6.724 15.456-10.905 25.467-10.905 0.494 0 0.986 0.010 1.475 0.030l308.964-0.002c21.282 0.686 38.357 17.77 39.028 38.991l0.001 24.351c-2.003 21.281-19.78 37.802-41.416 37.802-0.736 0-1.467-0.019-2.194-0.057l-163.053 0.004 186.828 187.468c9.538 9.598 15.433 22.825 15.433 37.43s-5.895 27.832-15.436 37.432c-9.39 9.462-22.404 15.321-36.787 15.321-14.383 0-27.397-5.859-36.787-15.32l-186.831-184.912v165.074c0.032 0.579 0.050 1.257 0.050 1.94 0 20.416-16.207 37.047-36.457 37.728l-26.935 0.002c-1.164 0.132-2.513 0.207-3.879 0.207-19.539 0-35.49-15.366-36.426-34.673l-0.003-309.757c-0.069-0.841-0.108-1.82-0.108-2.809 0-9.24 3.436-17.677 9.1-24.104zM639.821 197.669v-291.119c0.998-18.987 16.637-34.005 35.784-34.005 0.917 0 1.826 0.034 2.726 0.102l28.032-0.007c0.015-0 0.032-0 0.050-0 20.495 0 37.11 16.615 37.11 37.11 0 0.675-0.018 1.346-0.054 2.012l0.004 166.261 185.548-184.269c9.289-9.429 22.197-15.27 36.47-15.27s27.18 5.841 36.464 15.264c9.318 9.469 15.067 22.461 15.067 36.796 0 14.335-5.749 27.327-15.067 36.797l-183.622 183.622h161.875c0.387-0.013 0.842-0.020 1.298-0.020 22.879 0 41.508 18.195 42.208 40.904l0.002 26.937c-0.666 21.074-17.41 38.028-38.335 39.027l-309.728 0.002c-0.233 0.006-0.508 0.009-0.784 0.009-10.002 0-19.029-4.173-25.436-10.873-5.651-6.317-9.098-14.684-9.098-23.857 0-1.066 0.047-2.121 0.138-3.164l-0.010-19.059z"  horiz-adv-x="1024" />
51
+
52
+    
53
+    <glyph glyph-name="brush" unicode="&#58931;" d="M986.879 611.21l-247.031 249.591c-22.153 21.757-52.546 35.188-86.077 35.188s-63.924-13.431-86.095-35.206l-474.845-476.765c-18.637-14.716-31.089-36.552-33.229-61.336l-59.567-342.489c-0.021-0.846-0.034-1.842-0.034-2.841 0-29.481 10.66-56.473 28.336-77.331 16.942-17.233 40.717-28.021 67.013-28.021 0.915 0 1.826 0.013 2.734 0.039l13.946-0.003 344.308 63.998c24.036 2.986 44.69 15.459 58.416 33.491l472.125 472.091c22.918 21.123 37.224 51.289 37.224 84.797 0 33.508-14.306 63.674-37.144 84.724zM448.018 27.551l-348.788-63.998 60.798 348.148 347.508 351.347 288.63-287.35zM922.881 507.534l-63.998-70.397-291.19 286.71 63.998 63.998c5.716 4.344 12.952 6.96 20.799 6.96s15.083-2.615 20.885-7.022l246.306-249.529c5.572-5.706 9.258-13.277 10.035-21.691 1.485 0.571-3.635-4.548-8.115-9.028z"  horiz-adv-x="1024" />
54
+
55
+    
56
+    <glyph glyph-name="background" unicode="&#58973;" d="M988.16 448h-568.32c-19.794 0-35.84-16.046-35.84-35.84 0 0 0 0 0 0v-504.32c0-19.794 16.046-35.84 35.84-35.84h568.96c0 0 0 0 0 0 19.794 0 35.84 16.046 35.84 35.84 0 0 0 0 0 0v504.32c0 0.002 0 0.004 0 0.006 0 19.794-16.046 35.84-35.84 35.84-0.225 0-0.45-0.002-0.674-0.006zM664.32 283.52c-1.074-43.349-36.469-78.080-79.977-78.080-44.183 0-80 35.817-80 80 0 44.175 35.804 79.987 79.976 80 44.338-0.719 80.004-36.829 80.004-81.27 0-0.229-0.001-0.457-0.003-0.685zM929.28-64h-467.84l131.2 205.44 85.12-133.12 177.28 298.24 104.96-178.56v-163.2c-1.040-16.12-14.369-28.8-30.66-28.8-0.021 0-0.042 0-0.063 0zM320 64h-96c-17.673 0-32-14.327-32-32s14.327-32 32-32h96zM320 256h-192c-35.346 0-64 28.654-64 64v448c0 35.346 28.654 64 64 64h640c35.346 0 64-28.654 64-64v-256h64v320c0 35.346-28.654 64-64 64h-768c-35.346 0-64-28.654-64-64v-576c0-35.346 28.654-64 64-64h256z"  horiz-adv-x="1024" />
57
+
58
+    
59
+    <glyph glyph-name="strikethrough" unicode="&#58892;" d="M994.56 224c-23.431-29.473-59.162-48.299-99.302-48.649-73.498 0.009-122.138 57.609-127.258 150.409h236.8v52.48h-236.8c7.68 92.8 58.24 150.4 132.48 150.4 35.063-0.422 66.321-16.357 87.286-41.248l28.554 35.488c-28.874 32.657-70.869 53.143-117.65 53.143-0.939 0-1.876-0.008-2.811-0.025-100.339 0.002-176.499-74.238-186.739-197.758h-100.48c26.76 17.48 44.197 47.29 44.197 81.173 0 0.938-0.013 1.873-0.040 2.804 0.003 76.023-59.517 105.463-146.557 105.463h-128v-192h-110.72l-64 192h-58.88l-64-192h-58.24v-52.48h41.6l-64-192h54.4l41.6 136.32h155.52l40.32-131.84h56.96l-64 192h95.36v-192h135.68c95.36 0 161.28 41.6 161.28 128 0.031 0.938 0.048 2.041 0.048 3.148 0 22.888-7.462 44.033-20.087 61.134l52.679-0.282c9.6-126.080 84.48-199.68 186.24-199.68 52.305 0.631 98.632 25.674 128.197 64.243zM433.92 524.8h64c64 0 100.48-18.56 100.48-69.76s-28.16-71.040-101.12-71.040h-64zM172.16 524.8c14.080-49.92 26.88-96.64 42.88-145.28h-87.040c17.28 47.36 31.36 93.44 44.16 144zM236.16 312.32h-128l4.48 14.72h120.96zM620.16 264.96c0-58.24-42.88-85.12-115.84-85.12h-70.4v145.92h154.88c21.122-10.749 35.339-32.326 35.339-57.224 0-1.484-0.050-2.955-0.15-4.414z"  horiz-adv-x="1024" />
60
+
61
+    
62
+    <glyph glyph-name="spechars" unicode="&#58883;" d="M954.24-128l-158.72 160c-74.993-63.304-172.734-101.779-279.462-101.779-1.427 0-2.852 0.007-4.275 0.021-2.434-0.062-5.559-0.096-8.691-0.096-105.177 0-201.348 38.558-275.15 102.309l-158.182-160.455-69.76 72.32 160.64 155.52c-60.013 78.679-96.281 178.281-96.653 286.339-0.087 1.262-0.144 5.312-0.144 9.374 0 103.089 36.542 197.643 97.38 271.415l-161.223 156.712 69.76 72.32 158.72-160c77.817 61.889 177.407 99.439 285.753 99.854-0.643 0.007 1.234 0.019 3.114 0.019 105.383 0 201.953-37.734 276.935-100.428l159.958 160.555 69.76-72.32-161.92-157.44c61.004-73.69 98.013-169.18 98.013-273.313 0-3.139-0.034-6.27-0.101-9.393 0.012-0.237 0.014-1.069 0.014-1.901 0-106.863-37.416-204.987-99.861-281.987l163.855-155.326zM512 736c-2.049 0.045-4.464 0.070-6.885 0.070-95.58 0-181.874-39.758-243.247-103.638-62.592-62.161-101.269-148.112-101.269-243.098 0-1.876 0.015-3.748 0.045-5.617-0.010-0.497-0.014-1.417-0.014-2.338 0-96.943 40.213-184.494 104.868-246.882 62.121-65.122 149.43-105.554 246.182-105.554 96.752 0 184.061 40.432 245.952 105.321 64.513 62.767 104.458 150.238 104.458 247.038 0 0.948-0.004 1.895-0.011 2.842 0.048 1.936 0.074 4.389 0.074 6.847 0 95.909-40.57 182.342-105.486 243.074-61.899 63.002-147.752 101.939-242.699 101.939-0.692 0-1.384-0.002-2.075-0.006z"  horiz-adv-x="1024" />
63
+
64
+    
65
+    <glyph glyph-name="clearboard" unicode="&#58932;" d="M704 768v128h-384v-128h-320v-64h64v-832h896v832h64v64zM384 832h256v-64h-256zM320-64h-192v576h192zM640-64h-256v576h256zM896-64h-192v576h192zM896 576h-768v128h768z"  horiz-adv-x="1024" />
66
+
67
+    
68
+    <glyph glyph-name="bold" unicode="&#58884;" d="M876.8 185.60000000000002c-6.4 51.2-25.6 102.4-57.6 140.8-32 38.4-83.2 70.4-128 76.8 44.8 12.8 76.8 38.4 102.4 76.8 32 38.4 38.4 83.2 38.4 134.4 0 57.6-25.6 121.6-70.4 166.4C710.4 819.2 640 832 576 832H192v-896h384c76.8-6.4 140.8 12.8 211.2 51.2 57.6 44.8 96 121.6 89.6 198.4zM288 742.4h262.4c44.8 0 96-6.4 134.4-38.4 32-25.6 51.2-57.6 44.8-96 0-44.8-12.8-83.2-44.8-115.2-38.4-32-89.6-44.8-134.4-38.4H288V742.4zM768 192c0-51.2-25.6-102.4-70.4-134.4-44.8-25.6-89.6-38.4-140.8-38.4H288V352h275.2c51.2 0 102.4-6.4 147.2-38.4 44.8-25.6 64-76.8 57.6-121.6z"  horiz-adv-x="1024" />
69
+
70
+    
71
+    <glyph glyph-name="fullscreen" unicode="&#58966;" d="M960 896h-896c-35.346 0-64-28.654-64-64v-704c0-35.346 28.654-64 64-64h320v-128h-96c-17.673 0-32-14.327-32-32s14.327-32 32-32h448c17.673 0 32 14.327 32 32s-14.327 32-32 32h-96v128h320c35.346 0 64 28.654 64 64v704c0 35.346-28.654 64-64 64zM576-64h-128v128h128zM960 192c0-35.346-28.654-64-64-64h-768c-35.346 0-64 28.654-64 64v576c0 35.346 28.654 64 64 64h768c35.346 0 64-28.654 64-64z"  horiz-adv-x="1024" />
72
+
73
+    
74
+    <glyph glyph-name="formatmatch" unicode="&#58893;" d="M128 448v-448l108.8 300.8L396.8 0H896V448zM128 640h768v-64H128zM384 768h256v-128H384z"  horiz-adv-x="1024" />
75
+
76
+    
77
+    <glyph glyph-name="underline" unicode="&#58885;" d="M192 0h640v-64H192zM704 832v-384c0-102.4-83.2-192-192-192-102.4 0-192 83.2-192 192V832H192v-384c0-179.2 147.2-320 320-320s320 147.2 320 320V832h-128z"  horiz-adv-x="1024" />
78
+
79
+    
80
+    <glyph glyph-name="removeformat" unicode="&#58894;" d="M682.88 832l-682.88-704 170.88-192h398.080l455.040 512zM528 64h-288l-48 56.96 192 227.2 192-227.84z"  horiz-adv-x="1024" />
81
+
82
+    
83
+    <glyph glyph-name="blockquote" unicode="&#58895;" d="M401.92 1.7279999999999518v292.48H248.064c-7.36 187.392 65.92 344.96 219.648 472.448L401.856 834.112C218.88 706.56 127.36 511.616 127.36 249.27999999999997v-247.552h274.56z m428.16 0v292.48h-153.728c-7.36 187.392 65.92 344.96 219.648 472.448L830.08 834.112c-182.976-127.616-274.432-322.496-274.432-584.832v-247.552h274.496z"  horiz-adv-x="1024" />
84
+
85
+    
86
+    <glyph glyph-name="anchor" unicode="&#58904;" d="M722.56 227.84l76.8-72.32c-69.066-57.593-157.186-94.491-253.698-100.167l30.338 404.167c75.21 27.154 128 97.922 128 181.019 0 106.039-85.961 192-192 192-106.039 0-192-85.961-192-192 0-83.098 52.79-153.865 126.663-180.597l1.337-400.423c-96.583 9.193-182.742 47.773-250.98 106.575l101.86 61.745-298.88 42.88 45.44-280.96 79.36 74.24c103.19-79.877 234.444-128.040 376.947-128.040 2.48 0 4.957 0.015 7.43 0.044 2.030-0.038 4.87-0.058 7.715-0.058 142.963 0 274.192 50.241 376.992 134.031l85.956-82.776 44.16 283.52zM384 640c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128-70.692 0-128 57.308-128 128z"  horiz-adv-x="1024" />
87
+
88
+    
89
+    <glyph glyph-name="help" unicode="&#58905;" d="M512 896c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM512-64c-247.424 0-448 200.576-448 448s200.576 448 448 448c247.424 0 448-200.576 448-448 0-247.424-200.576-448-448-448zM512 256h-64v27.52c4.886 52.070 35.44 96.057 78.726 119.583q60.794 45.537 60.794 88.417c-3.36 32.484-30.587 57.601-63.679 57.601-0.113 0-0.225-0-0.338-0.001q-76.783 0-95.343-87.68l-108.16 20.48c15.836 91.427 94.565 160.079 189.328 160.079 9.749 0 19.329-0.727 28.687-2.129q152.545-7.55 165.985-135.55c-0.314-62.091-36.817-115.582-89.483-140.485-79.833-53.479-142.936-124.653-185.13-208.189zM448 192h128v-128h-128z"  horiz-adv-x="1024" />
90
+
91
+    
92
+    <glyph glyph-name="horizontal" unicode="&#58936;" d="M0 448h1024v-128h-1024z"  horiz-adv-x="1024" />
93
+
94
+    
95
+    <glyph glyph-name="simpleupload" unicode="&#58906;" d="M128 64l160 320 160-320h-320zM514.56 64l254.72 512 254.72-512h-509.44zM960 832h-896c-35.346 0-64-28.654-64-64v-768c0-35.346 28.654-64 64-64h896c35.346 0 64 28.654 64 64v768c0 35.346-28.654 64-64 64zM960 64c0-35.346-28.654-64-64-64h-768c-35.346 0-64 28.654-64 64v640c0 35.346 28.654 64 64 64h768c35.346 0 64-28.654 64-64z"  horiz-adv-x="1024" />
96
+
97
+    
98
+    <glyph glyph-name="indent" unicode="&#58907;" d="M896 480L768 576v-384l128 96L1024 384zM32 768h960c19.2 0 32 12.8 32 32s-12.8 32-32 32H32c-19.2 0-32-12.8-32-32s12.8-32 32-32zM32-64h960c19.2 0 32 12.8 32 32s-12.8 32-32 32H32c-19.2 0-32-12.8-32-32s12.8-32 32-32zM64 448h512c32 0 64 25.6 64 64 0 32-25.6 64-64 64H64c-38.4 0-64-25.6-64-64s25.6-64 64-64zM64 192h512c32 0 64 25.6 64 64 0 32-25.6 64-64 64H64c-32 0-64-25.6-64-64s25.6-64 64-64z"  horiz-adv-x="1024" />
99
+
100
+    
101
+    <glyph glyph-name="justifycenter" unicode="&#58908;" d="M992 832H32C12.8 832 0 844.8 0 864S12.8 896 32 896h960c19.2 0 32-12.8 32-32s-12.8-32-32-32zM800 640h-576c-19.2 0-32 12.8-32 32s12.8 32 32 32h576c19.2 0 32-12.8 32-32s-12.8-32-32-32zM992 448H32C12.8 448 0 460.8 0 480S12.8 512 32 512h960c19.2 0 32-12.8 32-32s-12.8-32-32-32zM800 256h-576c-19.2 0-32 12.8-32 32s12.8 32 32 32h576c19.2 0 32-12.8 32-32s-12.8-32-32-32zM992 64H32c-19.2 0-32 12.8-32 32s12.8 32 32 32h960c19.2 0 32-12.8 32-32s-12.8-32-32-32zM800-128h-576c-19.2 0-32 12.8-32 32s12.8 32 32 32h576c19.2 0 32-12.8 32-32s-12.8-32-32-32zM992 448H32C12.8 448 0 460.8 0 480S12.8 512 32 512h960c19.2 0 32-12.8 32-32s-12.8-32-32-32zM800 256h-576c-19.2 0-32 12.8-32 32s12.8 32 32 32h576c19.2 0 32-12.8 32-32s-12.8-32-32-32z"  horiz-adv-x="1024" />
102
+
103
+    
104
+    <glyph glyph-name="justifyleft" unicode="&#58909;" d="M992 832H32C12.8 832 0 844.8 0 864S12.8 896 32 896h960c19.2 0 32-12.8 32-32s-12.8-32-32-32zM608 640h-576C12.8 640 0 652.8 0 672S12.8 704 32 704h576c19.2 0 32-12.8 32-32s-12.8-32-32-32zM992 448H32C12.8 448 0 460.8 0 480S12.8 512 32 512h960c19.2 0 32-12.8 32-32s-12.8-32-32-32zM992 64H32c-19.2 0-32 12.8-32 32s12.8 32 32 32h960c19.2 0 32-12.8 32-32s-12.8-32-32-32zM608-128h-576c-19.2 0-32 12.8-32 32s12.8 32 32 32h576c19.2 0 32-12.8 32-32s-12.8-32-32-32zM992 448H32C12.8 448 0 460.8 0 480S12.8 512 32 512h960c19.2 0 32-12.8 32-32s-12.8-32-32-32zM608 256h-576c-19.2 0-32 12.8-32 32S12.8 320 32 320h576c19.2 0 32-12.8 32-32s-12.8-32-32-32z"  horiz-adv-x="1024" />
105
+
106
+    
107
+    <glyph glyph-name="justifyjustify" unicode="&#58910;" d="M992 832H32C12.8 832 0 844.8 0 864S12.8 896 32 896h960c19.2 0 32-12.8 32-32s-12.8-32-32-32zM992 640H32C12.8 640 0 652.8 0 672S12.8 704 32 704h960c19.2 0 32-12.8 32-32s-12.8-32-32-32zM992 448H32C12.8 448 0 460.8 0 480S12.8 512 32 512h960c19.2 0 32-12.8 32-32s-12.8-32-32-32zM992 64H32c-19.2 0-32 12.8-32 32s12.8 32 32 32h960c19.2 0 32-12.8 32-32s-12.8-32-32-32zM992-128H32c-19.2 0-32 12.8-32 32s12.8 32 32 32h960c19.2 0 32-12.8 32-32s-12.8-32-32-32zM992 448H32C12.8 448 0 460.8 0 480S12.8 512 32 512h960c19.2 0 32-12.8 32-32s-12.8-32-32-32zM992 256H32c-19.2 0-32 12.8-32 32S12.8 320 32 320h960c19.2 0 32-12.8 32-32s-12.8-32-32-32z"  horiz-adv-x="1024" />
108
+
109
+    
110
+    <glyph glyph-name="justifyright" unicode="&#58911;" d="M992 832H32C12.8 832 0 844.8 0 864S12.8 896 32 896h960c19.2 0 32-12.8 32-32s-12.8-32-32-32zM992 640h-576c-19.2 0-32 12.8-32 32s12.8 32 32 32h576c19.2 0 32-12.8 32-32s-12.8-32-32-32zM992 448H32C12.8 448 0 460.8 0 480S12.8 512 32 512h960c19.2 0 32-12.8 32-32s-12.8-32-32-32zM992 64H32c-19.2 0-32 12.8-32 32s12.8 32 32 32h960c19.2 0 32-12.8 32-32s-12.8-32-32-32zM992-128h-576c-19.2 0-32 12.8-32 32s12.8 32 32 32h576c19.2 0 32-12.8 32-32s-12.8-32-32-32zM992 448H32C12.8 448 0 460.8 0 480S12.8 512 32 512h960c19.2 0 32-12.8 32-32s-12.8-32-32-32zM992 256h-576c-19.2 0-32 12.8-32 32s12.8 32 32 32h576c19.2 0 32-12.8 32-32s-12.8-32-32-32z"  horiz-adv-x="1024" />
111
+
112
+    
113
+    <glyph glyph-name="link" unicode="&#58912;" d="M759.040 128v124.16c73.167 0 132.48 59.313 132.48 132.48 0 73.167-59.313 132.48-132.48 132.48l-150.4-0c-0.384 0.004-0.839 0.006-1.294 0.006-73.908 0-133.948-59.373-135.025-133.025l-128.001-0.101c2.862 142.002 118.651 256.020 261.070 256.020 1.143 0 2.284-0.007 3.423-0.022l150.227 0.002c1.157 0.018 2.522 0.029 3.89 0.029 142.422 0 258.213-114.023 261.066-255.763-2.853-142.272-118.644-256.295-261.066-256.295-1.368 0-2.733 0.011-4.095 0.031zM415.36 128h-150.4c-1.157-0.018-2.522-0.029-3.89-0.029-142.422 0-258.213 114.023-261.066 255.763 2.853 142.272 118.644 256.295 261.066 256.295 1.368 0 2.733-0.011 4.095-0.031l-0.206-124.158c-0 0-0 0-0 0-73.167 0-132.48-59.313-132.48-132.48 0-73.167 59.313-132.48 132.48-132.48 0 0 0 0 0 0h150.4c0.575-0.009 1.254-0.014 1.933-0.014 73.91 0 133.952 59.378 135.025 133.033l128.001 0.101c-2.857-142.006-118.648-256.029-261.070-256.029-1.368 0-2.733 0.011-4.095 0.031z"  horiz-adv-x="1024" />
114
+
115
+    
116
+    <glyph glyph-name="cleardoc" unicode="&#58913;" d="M895.91 639.939h-191.955v199.633c-3.964 31.88-30.89 56.308-63.523 56.308-0.162 0-0.325-0.001-0.487-0.002l-502.257 0c-1.216 0.076-2.637 0.119-4.068 0.119-36.533 0-66.506-28.090-69.498-63.85l-0.017-896.043c3.010-36.014 32.982-64.104 69.515-64.104 1.431 0 2.852 0.043 4.261 0.128l748.43-0.009c1.216-0.076 2.637-0.119 4.068-0.119 36.533 0 66.506 28.090 69.498 63.85l0.017 647.142c-3.664 32.179-30.738 56.948-63.597 56.948-0.136 0-0.273-0-0.409-0.001zM895.91-55.577c-0-4.594-3.724-8.318-8.318-8.318h-749.903c-5.301 0-9.598 4.297-9.598 9.598 0 0 0 0 0 0v877.873c0 4.594 3.724 8.318 8.318 8.318h491.404c0.196 0.012 0.426 0.019 0.657 0.019 6.142 0 11.162-4.808 11.499-10.866l0.001-191.985c3.573-30.12 28.96-53.257 59.75-53.257 1.49 0 2.968 0.054 4.431 0.161l180.242-0.011c0.196 0.012 0.426 0.019 0.657 0.019 6.142 0 11.162-4.808 11.499-10.866l0.001-620.684z"  horiz-adv-x="1024" />
117
+
118
+    
119
+    <glyph glyph-name="drafts" unicode="&#58896;" d="M832 576v160c0 17.673-14.327 32-32 32h-224v64c0 35.346-28.654 64-64 64h-128c-35.346 0-64-28.654-64-64v-64h-224c-17.673 0-32-14.327-32-32v-640c0-17.673 14.327-32 32-32h288v-192h448l192 192v512zM384 832h128v-64h-128zM192 704h512v-64h-512zM832-37.76v101.76h101.76zM960 128h-192v-192h-320v576h512z"  horiz-adv-x="1024" />
120
+
121
+    
122
+    <glyph glyph-name="subscript" unicode="&#58897;" d="M716.8 76.79999999999995v29.696c0 99.328 160.256 135.68 160.256 179.2 0 16.896-10.752 27.136-32.768 27.136a116.736 116.736 0 0 1-74.24-35.84l-47.104 51.2A170.496 170.496 0 0 0 852.992 384c76.288 0 119.808-40.448 119.808-93.184 0-74.752-95.232-94.72-142.848-141.312H972.8V76.79999999999995zM72.192 175.61599999999999l494.592 494.592a56.832 56.832 0 0 0 78.848 8.704l7.68-7.68a56.832 56.832 0 0 0-8.704-78.848l-494.592-494.592a56.832 56.832 0 0 0-78.848-8.704l-7.68 7.68a56.832 56.832 0 0 0 8.704 78.848zM566.784 97.79200000000003L72.192 592.384a56.832 56.832 0 0 0-8.704 78.848l7.68 7.68a56.832 56.832 0 0 0 78.848-8.704l494.592-494.592a56.832 56.832 0 0 0 8.704-78.848l-7.68-7.68a56.832 56.832 0 0 0-78.848 8.704z"  horiz-adv-x="1024" />
123
+
124
+    
125
+    <glyph glyph-name="unlink" unicode="&#58914;" d="M539.417 447.988v127.976c1.652-0.102 3.582-0.16 5.526-0.16 49.558 0 90.285 37.811 94.905 86.159l0.030 19.581c-4.65 48.732-45.377 86.544-94.935 86.544-1.944 0-3.874-0.058-5.789-0.173l-310.717 0.013c-1.652 0.102-3.582 0.16-5.526 0.16-49.558 0-90.285-37.811-94.905-86.159l-0.030-18.942c4.338-49.025 45.209-87.18 94.992-87.18 1.924 0 3.835 0.057 5.73 0.169l-0.261-127.988c-1.945-0.061-4.233-0.096-6.528-0.096-119.961 0-217.703 95.133-221.897 214.072l-0.011 19.58c4.205 119.322 101.947 214.455 221.908 214.455 2.296 0 4.583-0.035 6.862-0.104l310.647 0.008c1.945 0.061 4.233 0.096 6.528 0.096 119.961 0 217.703-95.133 221.897-214.072l0.011-18.94c-3.859-119.604-101.743-215.094-221.929-215.094-2.288 0-4.568 0.035-6.84 0.103zM795.368-127.902h-310.981c-1.945-0.061-4.233-0.096-6.528-0.096-119.961 0-217.703 95.133-221.897 214.072l-0.011 18.94c3.859 119.604 101.743 215.094 221.929 215.094 2.288 0 4.568-0.035 6.84-0.103l-0.333-127.968c-1.652 0.102-3.582 0.16-5.526 0.16-49.558 0-90.285-37.811-94.905-86.159l-0.030-18.942c4.338-49.025 45.209-87.18 94.992-87.18 1.924 0 3.835 0.057 5.73 0.169l311.359-0.012c1.46-0.080 3.169-0.125 4.889-0.125 49.546 0 90.265 37.792 94.902 86.123l0.030 18.943c-4.338 49.025-45.209 87.18-94.992 87.18-1.924 0-3.835-0.057-5.73-0.169l0.261 127.988c1.945 0.061 4.233 0.096 6.528 0.096 119.961 0 217.703-95.133 221.897-214.072l0.011-18.94c-3.859-119.604-101.743-215.094-221.929-215.094-2.288 0-4.568 0.035-6.84 0.103z"  horiz-adv-x="1024" />
126
+
127
+    
128
+    <glyph glyph-name="superscript" unicode="&#58898;" d="M716.8 384v29.696c0 99.328 160.256 135.68 160.256 179.2 0 16.896-10.752 27.136-32.768 27.136a116.736 116.736 0 0 1-74.24-35.84l-47.104 51.2A170.496 170.496 0 0 0 852.992 691.2C929.28 691.2 972.8 650.752 972.8 598.0160000000001c0-74.752-95.232-94.72-142.848-141.312H972.8V384zM72.192 175.61599999999999l494.592 494.592a56.832 56.832 0 0 0 78.848 8.704l7.68-7.68a56.832 56.832 0 0 0-8.704-78.848l-494.592-494.592a56.832 56.832 0 0 0-78.848-8.704l-7.68 7.68a56.832 56.832 0 0 0 8.704 78.848zM566.784 97.79200000000003L72.192 592.384a56.832 56.832 0 0 0-8.704 78.848l7.68 7.68a56.832 56.832 0 0 0 78.848-8.704l494.592-494.592a56.832 56.832 0 0 0 8.704-78.848l-7.68-7.68a56.832 56.832 0 0 0-78.848 8.704z"  horiz-adv-x="1024" />
129
+
130
+    
131
+    <glyph glyph-name="forecolor" unicode="&#58938;" d="M588.8 832H428.8L192 128h108.8l57.6 166.4h275.2l57.6-166.4H832L588.8 832zM390.4 396.8l102.4 313.6 102.4-313.6H390.4zM192 0h640v-64H192z"  horiz-adv-x="1024" />
132
+
133
+    
134
+    <glyph glyph-name="backcolor" unicode="&#58965;" d="M910.594 232.538s-105.392-190.467-105.392-246.973c-0.202-2.447-0.317-5.297-0.317-8.174 0-58.206 47.186-105.392 105.392-105.392 58.206 0 105.392 47.186 105.392 105.392 0 2.877-0.115 5.727-0.341 8.545 0.659 58.674-104.733 246.601-104.733 246.601zM412.839 795.052l-24.126-26.031-121.899 126.978-97.138-100.313 121.899-126.978-291.415-299.034 412.679-426.012 412.679 426.012zM138.566 369.675l275.543 283.797 274.908-283.797z"  horiz-adv-x="1024" />
135
+
136
+    
137
+    <glyph glyph-name="touppercase" unicode="&#58915;" d="M295.68 768l-295.68-768h113.28l74.24 192h328.96l71.040-192h116.48l-295.68 768zM242.56 320l92.16 250.88c11.787 26.52 19.084 57.373 20.096 89.81 0.577-50.126 8.010-77.346 19.81-102.083l86.814-238.607zM996.48 83.84v115.84q1.92 120.32-131.2 120.32t-152.32-92.16l67.84-17.92q8.32 55.68 82.56 51.84t64-53.76c-27.154-12.564-58.932-19.893-92.421-19.893-1.709 0-3.413 0.019-5.112 0.057q-122.627-12.164-127.747-101.764t118.4-86.4c3.66-0.341 7.916-0.536 12.216-0.536 40.397 0 76.785 17.169 102.263 44.608 0.399-15.437 7.943-29.137 19.476-37.823l69.565 0.151c-17.207 18.277-27.781 42.967-27.781 70.127 0 2.573 0.095 5.124 0.281 7.65zM926.72 128q-6.4-64-95.36-71.68-56.96 0-55.040 32t67.84 44.16c0.513-0.006 1.118-0.010 1.724-0.010 30.022 0 57.98 8.834 81.418 24.044zM949.76 512h74.24c-15.36 106.88-232.32 128-311.040 128v128l-200.96-160 200.32-160v120.96c2.461 0.045 5.363 0.070 8.271 0.070 83.861 0 162.791-21.112 231.766-58.31z"  horiz-adv-x="1024" />
138
+
139
+    
140
+    <glyph glyph-name="tolowercase" unicode="&#58916;" d="M295.68 768l-295.68-768h113.28l74.24 192h328.96l71.040-192h116.48l-295.68 768zM242.56 320l92.16 250.88c11.787 26.52 19.084 57.373 20.096 89.81 0.577-50.126 8.010-77.346 19.81-102.083l86.814-238.607zM996.48 83.84v115.84q1.92 120.32-131.2 120.32t-152.32-92.16l67.84-17.92q8.32 55.68 82.56 51.84t64-53.76c-27.154-12.564-58.932-19.893-92.421-19.893-1.709 0-3.413 0.019-5.112 0.057q-122.627-12.164-127.747-101.764t118.4-86.4c3.66-0.341 7.916-0.536 12.216-0.536 40.397 0 76.785 17.169 102.263 44.608 0.399-15.437 7.943-29.137 19.476-37.823l69.565 0.151c-17.207 18.277-27.781 42.967-27.781 70.127 0 2.573 0.095 5.124 0.281 7.65zM926.72 128q-6.4-64-95.36-71.68-56.96 0-55.040 32t67.84 44.16c0.513-0.006 1.118-0.010 1.724-0.010 30.022 0 57.98 8.834 81.418 24.044zM586.24 512h-74.24c15.36 106.88 232.32 128 311.040 128v128l200.96-160-200.96-160v120.96c-2.276 0.038-4.96 0.060-7.65 0.060-83.854 0-162.777-21.108-231.747-58.3z"  horiz-adv-x="1024" />
141
+
142
+    
143
+    <glyph glyph-name="insertvideo" unicode="&#58919;" d="M384 128l256 256-256 256v-512zM960 832h-896c-35.346 0-64-28.654-64-64v-768c0-35.346 28.654-64 64-64h896c35.346 0 64 28.654 64 64v768c0 35.346-28.654 64-64 64zM960 0h-896v768h896z"  horiz-adv-x="1024" />
144
+
145
+    
146
+    <glyph glyph-name="emotion" unicode="&#58886;" d="M512 896c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM512-64c-247.424 0-448 200.576-448 448s200.576 448 448 448c247.424 0 448-200.576 448-448 0-247.424-200.576-448-448-448zM256 512c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64zM640 512c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64zM512 64c141.385 0 256 114.615 256 256h-512c0-141.385 114.615-256 256-256z"  horiz-adv-x="1024" />
147
+
148
+    
149
+    <glyph glyph-name="pasteplain" unicode="&#58899;" d="M640 640v128h-64v64c0 35.346-28.654 64-64 64h-192c-35.346 0-64-28.654-64-64v-64h-64v-128zM320 832h192v-64h-192zM832 512v224c-0.704 17.824-15.323 32.007-33.256 32.007-0.234 0-0.467-0.002-0.699-0.007l-94.045 0.001v-64h64v-64h-64v-64h-576v192h-94.080c-0.198 0.004-0.431 0.007-0.664 0.007-17.932 0-32.552-14.183-33.254-31.943l-0.002-736.064h384v-128h640v640zM448-64v512h512v-512zM576 320h320v-64h-320zM704 256h64v-256h-64zM704 704h64v-128h-64z"  horiz-adv-x="1024" />
150
+
151
+    
152
+    <glyph glyph-name="preview" unicode="&#58939;" d="M895.91 639.939h-191.955v199.633c-3.964 31.88-30.89 56.308-63.523 56.308-0.162 0-0.325-0.001-0.487-0.002l-502.257 0c-1.216 0.076-2.637 0.119-4.068 0.119-36.533 0-66.506-28.090-69.498-63.85l-0.017-896.043c3.010-36.014 32.982-64.104 69.515-64.104 1.431 0 2.852 0.043 4.261 0.128l748.43-0.009c1.216-0.076 2.637-0.119 4.068-0.119 36.533 0 66.506 28.090 69.498 63.85l0.017 647.142c-3.664 32.179-30.738 56.948-63.597 56.948-0.136 0-0.273-0-0.409-0.001zM895.91-55.577c-0-4.594-3.724-8.318-8.318-8.318h-749.903c-5.301 0-9.598 4.297-9.598 9.598 0 0 0 0 0 0v877.873c0 4.594 3.724 8.318 8.318 8.318h491.404c0.196 0.012 0.426 0.019 0.657 0.019 6.142 0 11.162-4.808 11.499-10.866l0.001-191.985c3.573-30.12 28.96-53.257 59.75-53.257 1.49 0 2.968 0.054 4.431 0.161l180.242-0.011c0.196 0.012 0.426 0.019 0.657 0.019 6.142 0 11.162-4.808 11.499-10.866l0.001-620.684zM767.94 45.519l-173.399 172.759c11.267 14.903 21.003 31.929 28.429 50.141l99.541-268.33zM256.060 352.007c-0 88.345 71.618 159.962 159.962 159.962s159.962-71.618 159.962-159.962c0-88.345-71.618-159.962-159.962-159.962-88.345 0-159.962 71.618-159.962 159.962z"  horiz-adv-x="1024" />
153
+
154
+    
155
+    <glyph glyph-name="print" unicode="&#58940;" d="M320.006 448h384v-64h-384zM320.006 320h384v-64h-384zM988.806 716.8h-156.8v179.2h-640v-179.2h-156.8c-0.002 0-0.004 0-0.006 0-19.44 0-35.2-15.76-35.2-35.2 0-0.225 0.002-0.45 0.006-0.674l-0-443.486h192v-45.44l256-256h384v301.44h192v311.68c0.032 0.574 0.051 1.245 0.051 1.92s-0.018 1.346-0.055 2.013l0.004 127.907c0.004 0.19 0.006 0.415 0.006 0.64 0 19.44-15.76 35.2-35.2 35.2-0.002 0-0.004-0-0.006-0zM256.006 832h512v-115.2h-512zM896.006 320h-56.96v120.32h-71.040v-440.32h-296.96v199.040h-215.040v241.28h-68.48v-120.32h-59.52v192h768zM928.006 594.56c-0.19-0.004-0.415-0.006-0.64-0.006-18.027 0-32.64 14.613-32.64 32.64 0 18.027 14.613 32.64 32.64 32.64 18.024 0 32.636-14.61 32.64-32.633 0.004-0.191 0.006-0.415 0.006-0.64 0-17.673-14.327-32-32-32-0.002 0-0.005 0-0.007 0z"  horiz-adv-x="1024" />
156
+
157
+    
158
+    <glyph glyph-name="selectall" unicode="&#58900;" d="M184.32 782.080l113.92 113.92h-40.32l-113.92-113.92h40.32zM113.92 752l-113.92-113.92v-40.32l113.92 113.92v40.32zM144 896l-144-144v-40.32l184.32 184.32h-40.32zM30.72 896l-30.72-30.72v-40.32l71.040 71.040h-40.32zM527.36 782.080l113.92 113.92h-40.32l-113.28-113.92h39.68zM113.92 408.32l-113.92-113.28v-40.32l113.92 113.92v39.68zM113.92 522.24l-113.92-113.92v-39.68l113.92 113.28v40.32zM414.080 782.080l113.28 113.92h-39.68l-113.92-113.92h40.32zM300.16 782.080l113.92 113.92h-40.32l-113.92-113.92h40.32zM113.92 636.16l-113.92-113.92v-40.32l113.92 113.92v40.32zM113.92 60.8l-113.92-113.28v-40.32l113.92 113.28v40.32zM875.52 782.080l113.28 113.92h-40.32l-113.28-113.92h40.32zM113.92 174.72l-113.92-113.92v-40.32l113.92 113.92v40.32zM761.6 782.080l113.92 113.92h-40.32l-113.92-113.92h40.32zM113.92 288.64l-113.92-113.92v-40.32l113.92 113.92v40.32zM647.68 782.080l113.92 113.92h-40.32l-113.92-113.92h40.32zM910.080 476.8l113.92 113.92v40.32l-113.92-113.92v-40.32zM378.88-14.080l-113.92-113.92h40.32l113.92 113.92h-40.32zM910.080 590.72l113.92 113.28v40.32l-113.92-113.28v-40.32zM264.96-14.080l-113.28-113.92h40.32l113.28 113.92h-40.32zM151.68-14.080l-113.92-113.92h40.32l113.92 113.92h-40.32zM910.080 744.32v-40.32l113.92 113.92v40.32l-113.92-113.92zM910.080 136.96l113.92 113.92v40.32l-113.92-113.92v-40.32zM718.72-14.080l-113.92-113.92h40.32l113.92 113.92h-40.32zM910.080 250.88l113.92 113.92v40.32l-113.92-113.92v-40.32zM604.8-14.080l-113.92-113.92h40.32l113.92 113.92h-40.32zM490.88-14.080l-113.92-113.92h40.32l113.92 113.92h-40.32zM910.080 364.8l113.92 113.92v40.32l-113.92-113.92v-40.32zM988.16-128l35.84 35.84v40.32l-76.16-76.16h40.32zM874.24-128l149.76 149.76v40.32l-190.080-190.080h40.32zM833.92-14.080l-113.28-113.92h39.68l113.92 113.92h-40.32zM910.080 21.76l113.92 113.92v39.68l-113.92-113.28v-40.32zM256 265.6q7.040-137.6 186.24-137.6c5.836-0.542 12.621-0.851 19.478-0.851 64.527 0 122.663 27.362 163.439 71.117 0.443-24.781 12.479-46.819 30.964-60.763l111.879 0.097c-27.64 29.266-44.63 68.846-44.63 112.395 0 4.366 0.171 8.692 0.506 12.971l-0.036 185.034q3.2 192-211.84 192t-242.56-147.2l108.8-28.8q13.44 89.6 133.76 83.2 112 6.4 101.76-86.4c-43.614-20.262-94.671-32.082-148.489-32.082-2.697 0-5.387 0.030-8.070 0.089q-198-19.207-201.2-163.207zM611.84 377.6v-44.8q-10.24-105.6-152.32-115.2-91.52 0-88.32 51.2-6.4 60.8 108.8 70.4c0.479-0.003 1.045-0.005 1.611-0.005 48.398 0 93.45 14.326 131.147 38.969z"  horiz-adv-x="1024" />
159
+
160
+    
161
+    <glyph glyph-name="mergecells" unicode="&#58941;" d="M0 896v-1024h1024v1024zM320-64h-256v256h256zM320 256h-256v256h256zM320 576h-256v256h256zM384 832h256v-256h-256zM960-64h-576v576h576zM960 576h-256v256h256z"  horiz-adv-x="1024" />
162
+
163
+    
164
+    <glyph glyph-name="deletecol" unicode="&#58942;" d="M1024 588.16v307.84h-256v-576h256zM832 640v192h128v-192zM832 384v192h128v-192zM448 588.16v307.84h-448v-576h448zM64 640v192h128v-192zM256 640v192h128v-192zM64 384v192h128v-192zM256 384v192h128v-192zM640 192v68.48l-69.76-68.48h69.76zM593.28 187.52zM640 384v-136.32l64 34.56v357.76h-192v-352l64-32v128zM576 448v128h64v-128zM734.72-128l96.64 92.8-127.36 122.24 128 122.88-96 92.16-32-19.84v-154.24h-192v160l-32 14.080-96-92.16 128-122.88-127.36-122.24 96-92.8 127.36 122.24 126.72-122.24zM512 192h76.8l-76.8 74.24v-74.24z"  horiz-adv-x="1024" />
165
+
166
+    
167
+    <glyph glyph-name="deleterow" unicode="&#58943;" d="M307.84 896h-307.84v-256h576v256zM256 704h-192v128h192zM512 704h-192v128h192zM307.84 320h-307.84v-448h576v448zM256-64h-192v128h192zM256 128h-192v128h192zM512-64h-192v128h192zM512 128h-192v128h192zM716.8 535.68h-68.48l68.48-70.4v70.4zM708.48 465.28zM520.96 551.040h128l-34.56 35.84h-358.4v-219.52h352l32 35.84h-119.040zM448 448h-131.84v64h131.84zM1024 607.36l-92.8 96-122.24-127.36-122.88 128-92.16-96 19.84-21.12h137.6v-219.52h-143.36l-14.080-15.36 92.16-96 122.88 128 122.24-127.36 92.8 96.64-122.24 126.72 122.24 127.36zM716.8 403.2v76.8l-74.24-76.8h74.24z"  horiz-adv-x="1024" />
168
+
169
+    
170
+    <glyph glyph-name="attachment" unicode="&#58920;" d="M972.16 523.52l-520.32-512c-40.168-39.518-95.315-63.917-156.16-63.917-60.845 0-115.992 24.399-156.19 63.947-40.076 39.269-64.939 93.994-64.939 154.525 0 60.216 24.604 114.685 64.307 153.904l468.502 460.822c26.767 26.283 63.489 42.507 104 42.507s77.233-16.224 104.022-42.529c26.612-26.227 43.112-62.696 43.112-103.018 0-40.323-16.5-76.791-43.117-103.023l-467.857-463.377c-13.401-13.236-31.826-21.411-52.16-21.411s-38.759 8.175-52.168 21.418c-13.309 13.117-21.559 31.351-21.559 51.513 0 20.161 8.25 38.396 21.558 51.511l416.649 411.529-51.84 51.2-416-411.52c-26.634-26.249-43.134-62.717-43.134-103.040s16.5-76.791 43.117-103.023c26.785-26.3 63.506-42.524 104.017-42.524 40.511 0 77.233 16.224 104.022 42.529l468.458 463.338c39.758 39.343 64.377 93.916 64.377 154.24s-24.619 114.897-64.358 154.222c-40.254 39.917-95.659 64.572-156.823 64.572-60.843 0-115.989-24.397-156.186-63.943l-491.49-488.931c-37.461-48.505-60.045-110.166-60.045-177.101 0-80.906 32.995-154.105 86.262-206.877 53.349-51.49 126.039-83.2 206.136-83.2 67.624 0 129.969 22.604 179.89 60.668l547.756 535.151-51.84 51.2z"  horiz-adv-x="1024" />
171
+
172
+    
173
+    <glyph glyph-name="music" unicode="&#58944;" d="M991.14 895.112h-7.673c-2.402 0.564-5.16 0.887-7.993 0.887s-5.591-0.323-8.239-0.935l-747.266-134.875c-15.608-1.932-27.64-14.874-28.137-30.724-0.026-0.447-0.041-1.006-0.041-1.568 0-0.562 0.015-1.121 0.046-1.676l-0.003-616.348c-18.531 11.177-40.89 17.823-64.795 17.91-69.781-0.006-127.038-57.264-127.038-127.895 0-70.631 57.258-127.889 127.889-127.889 70.631 0 127.889 57.258 127.889 127.889l-0 511.556c2.687-0.709 5.772-1.116 8.952-1.116s6.265 0.407 9.206 1.172l685.232 123.996v-457.203c-18.531 11.177-40.89 17.823-64.795 17.91-69.747-0.051-126.96-57.291-126.96-127.895 0-70.631 57.258-127.889 127.889-127.889 69.057 0 125.33 54.734 127.804 123.187l0.006 799.532c0 17.658-14.314 31.972-31.972 31.972z"  horiz-adv-x="1024" />
174
+
175
+    
176
+    <glyph glyph-name="gmap" unicode="&#58921;" d="M543.36 323.84h128v-144.64c-27.042-18.911-60.614-30.218-96.827-30.218-2.41 0-4.808 0.050-7.194 0.149-135.339-0.011-207.659 89.589-207.659 236.789s83.84 233.6 206.080 233.6c1.985 0.077 4.316 0.121 6.658 0.121 51.625 0 98.258-21.372 131.535-55.751l56.368 63.95c-48.672 47.215-115.142 76.321-188.411 76.321-3.288 0-6.562-0.059-9.822-0.175-2.247 0.102-5.444 0.153-8.653 0.153-164.713 0-298.24-133.527-298.24-298.24 0-7.707 0.292-15.345 0.866-22.905-0.061-201.235 127.939-318.995 303.939-318.995 2.993-0.105 6.51-0.164 10.041-0.164 75.665 0 144.927 27.412 198.397 72.848l-0.438 267.157h-224.64zM896 896h-768c-35.346 0-64-28.654-64-64v-896c0-35.346 28.654-64 64-64h768c35.346 0 64 28.654 64 64v896c0 35.346-28.654 64-64 64zM896 0c0-35.346-28.654-64-64-64h-640c-35.346 0-64 28.654-64 64v768c0 35.346 28.654 64 64 64h640c35.346 0 64-28.654 64-64z"  horiz-adv-x="1024" />
177
+
178
+    
179
+    <glyph glyph-name="insertframe" unicode="&#58949;" d="M448 512c-141.385 0-256-114.615-256-256s114.615-256 256-256c141.385 0 256 114.615 256 256 0 141.385-114.615 256-256 256zM643.84 341.12c11.26-25.164 17.818-54.536 17.818-85.44s-6.558-60.276-18.358-86.801l-96.099 1.361c4.638 25.688 7.29 55.254 7.29 85.44 0 30.186-2.652 59.752-7.736 88.479zM384 256c-0.006 0.936-0.009 2.043-0.009 3.15 0 28.938 2.331 57.331 6.815 85.002l114.795-3.032c4.079-24.639 6.409-53.032 6.409-81.97 0-1.108-0.003-2.214-0.010-3.32 0.007-0.766 0.010-1.872 0.010-2.98 0-28.938-2.331-57.331-6.815-85.002l-114.795 3.032c-4.079 24.639-6.409 53.032-6.409 81.97 0 1.108 0.003 2.214 0.010 3.32zM618.88 384h-81.28c-11.121 41.020-32.662 76.060-61.625 103.299 78.384-37.794 124.984-72.611 153.982-119.469zM448 448c19.2 0 35.84-24.96 48-64h-96c12.16 39.040 28.8 64 48 64zM398.080 463.36c-24.403-30.724-40.833-68.802-45.587-110.426l-75.373 31.066c33.569 44.293 83.219 74.881 140.108 83.067zM252.16 341.12h96c-4.638-25.688-7.29-55.254-7.29-85.44 0-30.186 2.652-59.752 7.736-88.479l-96.446 3.039c-11.26 25.164-17.818 54.536-17.818 85.44s6.558 60.276 18.358 86.801zM277.12 128h81.28c11.121-41.020 32.662-76.060 61.625-103.299-78.384 37.794-124.984 72.611-153.982 119.469zM448 64c-19.2 0-35.84 24.96-48 64h96c-12.16-39.040-28.8-64-48-64zM497.92 48.64c24.403 30.724 40.833 68.802 45.587 110.426l75.373-31.066c-33.569-44.293-83.219-74.881-140.108-83.067zM597.76 896h-533.76v-1024h896v693.76zM896 540.16v-604.16h-768v896h448v-256h320z"  horiz-adv-x="1024" />
180
+
181
+    
182
+    <glyph glyph-name="pdfformat" unicode="&#58927;" d="M597.76 896h-533.76v-1024h896v693.76zM896-64h-768v896h448v-291.2h320zM213.76 280.32h-47.36v-133.12h49.28c58.24 0 85.76 21.76 85.76 69.76s-30.72 63.36-87.68 63.36zM486.4 273.92h-32.64v-268.8h32.64c77.44 0 119.040 45.44 119.040 135.68s-40.96 133.12-119.040 133.12zM64 448v-576h874.24v576zM239.36 95.36h-54.4v-136.96h-56.96v361.6h109.44c82.56 0 138.24-27.52 138.24-108.8s-55.68-115.84-136.32-115.84zM495.36-41.6h-98.56v361.6h93.44c5.013 0.56 10.826 0.879 16.713 0.879 88.012 0 159.36-71.348 159.36-159.36 0-7.305-0.492-14.496-1.443-21.54 1.076-5.861 1.638-13.575 1.638-21.42 0-88.719-71.921-160.64-160.64-160.64-4.374 0-8.707 0.175-12.992 0.518zM906.88 272h-158.72v-110.72h133.76v-48h-133.76v-155.52h-56.96v362.24h214.4z"  horiz-adv-x="1024" />
183
+
184
+    
185
+    <glyph glyph-name="word" unicode="&#58950;" d="M718.080 350.080c-12.16-60.16-21.12-117.76-32-177.28h-3.84c-12.8 58.88-23.68 117.12-36.48 177.28l-78.080 337.92h-106.24l-77.44-337.92c-12.8-58.88-23.68-117.76-35.84-177.28h-2.56c-9.6 58.88-18.56 117.12-29.44 177.28l-72.96 337.92h-115.2l147.84-624h131.84l64 307.2c14.080 58.88 23.68 117.12 34.56 181.76h5.76c12.16-64 21.76-121.6 34.56-180.48l71.68-308.48h136.96l140.8 624h-106.88zM960 896h-896c-35.346 0-64-28.654-64-64v-896c0-35.346 28.654-64 64-64h896c35.346 0 64 28.654 64 64v896c0 35.346-28.654 64-64 64zM960 0c0-35.346-28.654-64-64-64h-768c-35.346 0-64 28.654-64 64v768c0 35.346 28.654 64 64 64h768c35.346 0 64-28.654 64-64z"  horiz-adv-x="1024" />
186
+
187
+    
188
+    <glyph glyph-name="excel" unicode="&#58951;" d="M960 896h-896c-35.346 0-64-28.654-64-64v-896c0-35.346 28.654-64 64-64h896c35.346 0 64 28.654 64 64v896c0 35.346-28.654 64-64 64zM960 0c0-35.346-28.654-64-64-64h-768c-35.346 0-64 28.654-64 64v768c0 35.346 28.654 64 64 64h768c35.346 0 64-28.654 64-64zM816.64 768h-155.52l-74.88-154.88c-19.2-41.6-40.32-85.12-59.52-128h-5.12c-23.040 43.52-46.72 86.4-67.2 128l-85.12 154.88h-160.64l213.76-367.36-230.4-400.64h156.16l82.56 161.92c21.76 47.36 44.16 93.44 64 136.96h6.4c25.6-43.52 50.56-90.88 73.6-136.96l96-161.92h161.28l-229.12 384z"  horiz-adv-x="1024" />
189
+
190
+    
191
+    <glyph glyph-name="time" unicode="&#58954;" d="M839.71 665.392l21.719 21.719 43.439-43.439 54.298 53.659-127.76 127.76-54.937-54.298 43.439-43.439-21.719-21.719c-75.422 67.785-173.222 112.028-281.079 120.458 35.914 34.385 3.15 64.831-36.725 64.831-39.875 0-72.639-30.446-76.313-69.359-53.727-9.585-101.81-26.59-145.709-50.339l109.274-52.815c33.919 10.918 72.943 17.223 113.435 17.25 210.674-0.002 382.275-171.603 382.275-383.283 0-211.68-171.601-383.281-383.281-383.281-211.68 0-383.281 171.601-383.281 383.281-0 0.065-0 0.141-0 0.218 0 67.637 17.52 131.182 48.269 186.345l-80.209 52.35c-40.161-67.975-63.89-149.791-63.89-237.149 0-1.069 0.004-2.137 0.011-3.204-0.001-264.436 214.5-478.938 479.101-478.938 264.601 0 479.102 214.501 479.102 479.102-0.017 120.866-45.332 231.144-119.891 314.787zM480.065 640.479c-0.001 0-0.003 0-0.004 0-25.53 0-46.268-20.516-46.628-45.96l-0-182.093c-18.945-13.991-31.096-36.239-31.096-61.325s12.151-47.334 30.889-61.179l0.207-64.027c2.821-23.303 22.479-41.184 46.313-41.184s43.492 17.881 46.291 40.96l0.022 64.104c18.945 13.991 31.096 36.239 31.096 61.325s-12.151 47.334-30.889 61.179l-0.207 184.76c-1.708 24.169-21.601 43.165-45.99 43.439zM252.651 896l-109.235-251.049 274.685-5.11-50.465 77.934-51.104 79.85-63.88 98.376z"  horiz-adv-x="1024" />
192
+
193
+    
194
+    <glyph glyph-name="snapscreen" unicode="&#58960;" d="M665.6 503.040l-204.8-155.52-204.8 233.6v-389.12h512v155.52l-102.4 155.52zM1024 64h-128v704h-704v128h-64v-128h-128v-64h128v-704h704v-128h64v128h128zM192 64v640h640v-640z"  horiz-adv-x="1024" />
195
+
196
+    
197
+    <glyph glyph-name="wordimage" unicode="&#58962;" d="M988.16 448h-568.32c-19.794 0-35.84-16.046-35.84-35.84 0 0 0 0 0 0v-504.32c0-19.794 16.046-35.84 35.84-35.84h568.96c0 0 0 0 0 0 19.794 0 35.84 16.046 35.84 35.84 0 0 0 0 0 0v504.32c0 0.002 0 0.004 0 0.006 0 19.794-16.046 35.84-35.84 35.84-0.225 0-0.45-0.002-0.674-0.006zM664.32 283.52c-1.074-43.349-36.469-78.080-79.977-78.080-44.183 0-80 35.817-80 80 0 44.175 35.804 79.987 79.976 80 44.338-0.719 80.004-36.829 80.004-81.27 0-0.229-0.001-0.457-0.003-0.685zM929.28-64h-467.84l131.2 205.44 85.12-133.12 177.28 298.24 104.96-178.56v-163.2c-1.040-16.12-14.369-28.8-30.66-28.8-0.021 0-0.042 0-0.063 0zM960 896h-896c-35.346 0-64-28.654-64-64v-896c0-35.346 28.654-64 64-64h256v64h-192c-35.346 0-64 28.654-64 64v768c0 35.346 28.654 64 64 64h768c35.346 0 64-28.654 64-64v-256h64v320c0 35.346-28.654 64-64 64zM320 341.76l-78.72 362.24h-118.4l151.68-640h45.44v266.24zM858.88 512l43.52 192h-116.48l-40.32-192h113.28zM501.76 512c0 26.88 4.48 40.32 7.040 64h3.2c0-23.68 7.68-64 7.68-64h97.28l-44.8 192h-115.84l-42.88-192z"  horiz-adv-x="1024" />
198
+
199
+    
200
+    <glyph glyph-name="edittd" unicode="&#58970;" d="M576 128c0-106.039 85.961-192 192-192s192 85.961 192 192c0 106.039-85.961 192-192 192-106.039 0-192-85.961-192-192zM448 128c0.094 176.66 143.327 319.835 320 319.835 46.3 0 90.303-9.833 130.036-27.525l-2.036 347.69h-768v-768h346.88c-16.972 37.769-26.865 81.866-26.88 128.273zM0 896v-1024h576c-46.418 35.069-82.504 81.491-104.415 135.203l-407.585-71.203v896h896v-448c46.418-35.069 82.504-81.491 104.415-135.203l-40.415 647.203z"  horiz-adv-x="1024" />
201
+
202
+    
203
+    <glyph glyph-name="lineheight" unicode="&#58922;" d="M380.8 128h-380.8l190.72-254.72 190.080 254.72zM512 128h512v-64h-512v64zM512 320h512v-64h-512v64zM512 512h512v-64h-512v64zM512 704h512v-64h-512v64zM2.56 640h380.8l-190.080 254.72-190.72-254.72z"  horiz-adv-x="1024" />
204
+
205
+    
206
+    <glyph glyph-name="rowspacingbottom" unicode="&#58923;" d="M704 128H320l192-256zM672 256H32c-19.2 0-32 12.8-32 32S12.8 320 32 320h640c19.2 0 32-12.8 32-32s-12.8-32-32-32zM864 448H32C12.8 448 0 460.8 0 480S12.8 512 32 512h832c19.2 0 32-12.8 32-32s-12.8-32-32-32zM480 640h-448C12.8 640 0 652.8 0 672S12.8 704 32 704h448c19.2 0 32-12.8 32-32s-12.8-32-32-32zM992 832H32C12.8 832 0 844.8 0 864S12.8 896 32 896h960c19.2 0 32-12.8 32-32s-12.8-32-32-32z"  horiz-adv-x="1024" />
207
+
208
+    
209
+    <glyph glyph-name="rowspacingtop" unicode="&#58924;" d="M320 640h384L512 896zM352 512h640c19.2 0 32-12.8 32-32s-12.8-32-32-32h-640c-19.2 0-32 12.8-32 32s12.8 32 32 32zM160 320h832c19.2 0 32-12.8 32-32s-12.8-32-32-32h-832c-19.2 0-32 12.8-32 32s12.8 32 32 32zM544 128h448c19.2 0 32-12.8 32-32s-12.8-32-32-32h-448c-19.2 0-32 12.8-32 32s12.8 32 32 32zM32-64h960c19.2 0 32-12.8 32-32s-12.8-32-32-32H32c-19.2 0-32 12.8-32 32s12.8 32 32 32z"  horiz-adv-x="1024" />
210
+
211
+    
212
+    <glyph glyph-name="scrawl" unicode="&#58902;" d="M1018.284 618.88c-3.741 3.949-9.022 6.406-14.878 6.406-0.17 0-0.339-0.002-0.507-0.006-18.281-3.25-33.767-13.388-43.958-27.584l-387.377-385.216c-97.674-132.446-170.577-289.537-208.303-459.854l130.863 340.174 14.080 8.96c3.84 0 90.24 56.96 104.96 71.040l390.4 389.12c16.64 14.080 29.44 41.6 14.72 56.96zM774.444 497.92c-1.065-30.621-26.145-55.040-56.928-55.040-31.458 0-56.96 25.502-56.96 56.96 0 31.447 25.483 56.942 56.926 56.96 31.613-0.715 56.965-26.51 56.965-58.226 0-0.23-0.001-0.46-0.004-0.689zM173.484 292.48c-0.572-0.020-1.245-0.031-1.92-0.031-32.519 0-58.88 26.361-58.88 58.88 0 32.519 26.361 58.88 58.88 58.88 32.508 0 58.862-26.344 58.88-58.847 0.002-0.196 0.004-0.426 0.004-0.656 0-31.716-25.352-57.511-56.897-58.225zM256.684 497.92c1.065 30.621 26.145 55.040 56.928 55.040 31.458 0 56.96-25.502 56.96-56.96 0-31.447-25.483-56.942-56.926-56.96-31.613 0.715-56.965 26.51-56.965 58.226 0 0.23 0.001 0.46 0.004 0.689zM459.564 556.8c1.065 30.621 26.145 55.040 56.928 55.040 31.458 0 56.96-25.502 56.96-56.96 0-31.447-25.483-56.942-56.926-56.96-31.613 0.715-56.965 26.51-56.965 58.226 0 0.23 0.001 0.46 0.004 0.689zM902.444 357.76c-31.114-198.424-199.103-348.964-402.953-352.649-44.127 0.133-86.562 8.912-125.365 24.752-35.522 14.937-52.802 33.497-56.642 45.657s-3.84 13.44-5.12 20.48c-7.834 36.146-22.479 67.979-42.623 95.538 5.698-5.462-21.312 11.988-52.397 11.988-0.345 0-0.689-0.002-1.033-0.006-3.886 0.48-8.445 0.754-13.068 0.754-4.623 0-9.182-0.274-13.662-0.806-12.472-3.188-27.415-5.056-42.792-5.072-27.705 0.004-76.345 7.684-77.625 60.164-8.32 266.88 206.080 412.16 421.76 437.76 7.269 0.45 15.764 0.706 24.32 0.706 8.556 0 17.051-0.256 25.48-0.762-0.547 0.058 0.179 0.060 0.905 0.060 61.978 0 121.325-11.266 176.105-31.862 7.43-3.343 13.19-5.903 41.35-19.983 45.5-22.593 82.418-56.579 107.926-98.3l0.234 108.54c-39.591 39.065-89.533 67.734-145.34 81.521 39.74-11.761 32.060-7.921 18.62-2.161-57.675 21.514-124.314 33.964-193.861 33.964-2.496 0-4.989-0.016-7.477-0.048-8.039 0.525-17.876 0.822-27.782 0.822-9.906 0-19.744-0.297-29.503-0.882-141.37-14.839-266.964-78.425-360.631-173.541-66.027-62.45-121.268-181.419-121.268-313.291 0-8.831 0.248-17.603 0.737-26.312-0.056 0.957-0.057 0.66-0.057 0.363 0-38.985 18.155-73.73 46.471-96.241 26.281-19.448 59.014-31.013 94.449-31.013 1.984 0 3.961 0.036 5.927 0.108 20.847 0.167 41.263 2.875 60.785 7.826l7.41-0.794c13.44 0 19.2-11.52 30.72-57.6 0-7.68 3.84-15.36 5.76-23.040 18.972-47.312 59.266-82.528 108.663-94.1 33.53-14.445 83.337-24.315 135.45-24.315 1.254 0 2.507 0.006 3.758 0.017 0.225-0.003 0.719-0.004 1.212-0.004 63.695 0 124.367 12.941 179.531 36.338 81.727 34.251 151.681 90.814 202.313 162.068 5.358-6.858 54.273 74.77 77.563 166.616-8.168-44.029 10.698 24.185 13.446 96.526l-3.217-20.585z"  horiz-adv-x="1024" />
213
+
214
+    
215
+    <glyph glyph-name="redo" unicode="&#58889;" d="M900.608 421.888c-51.2 51.2-260.608 261.632-291.84 292.352-11.806 10.097-27.254 16.241-44.137 16.241-18.488 0-35.255-7.368-47.525-19.327-11.992-12.987-19.355-30.431-19.355-49.596 0-9.601 1.848-18.77 5.208-27.172 12.114-17.938 187.73-199.186 187.73-199.186h-520.704c-1.707 0.167-3.691 0.262-5.696 0.262-34.215 0-61.952-27.737-61.952-61.952 0-0.993 0.023-1.98 0.070-2.961 1.872-36.617 31.37-65.906 68.041-67.444l517.682-0.001-173.056-172.032c-11.419-12.149-18.435-28.551-18.435-46.592s7.016-34.443 18.468-46.628c12.029-13.522 29.523-22.020 49.001-22.020 15.841 0 30.37 5.621 41.7 14.976 24.977 22.951 255.889 252.839 297.873 296.359s-3.072 94.72-3.072 94.72z"  horiz-adv-x="1024" />
216
+
217
+    
218
+    <glyph glyph-name="undo" unicode="&#58880;" d="M128.512 419.84c51.2 51.2 260.608 261.632 291.84 292.352 11.806 10.097 27.254 16.241 44.137 16.241 18.488 0 35.255-7.368 47.525-19.327 11.777-12.935 18.997-30.227 18.997-49.205 0-9.749-1.905-19.053-5.364-27.559-13.648-17.942-187.216-197.142-187.216-197.142h520.192c1.125 0.073 2.44 0.114 3.764 0.114 34.215 0 61.952-27.737 61.952-61.952 0-1.662-0.065-3.309-0.194-4.938-1.863-36.541-31.361-65.829-68.033-67.368l-517.682-0.001 173.568-173.056c11.419-12.149 18.435-28.551 18.435-46.592s-7.016-34.443-18.468-46.628c-12.029-13.522-29.523-22.020-49.001-22.020-15.841 0-30.37 5.621-41.7 14.976-24.977 22.951-255.889 252.839-297.873 296.359s5.12 95.744 5.12 95.744z"  horiz-adv-x="1024" />
219
+
220
+    
221
+    <glyph glyph-name="inserttitle" unicode="&#58971;" d="M512 379.904v153.6h-51.2v-102.4h-102.4v-51.2h-153.6v51.2h-102.4v102.4h-51.2v-614.4h921.6v460.8zM338.944-29.696h-240.64v167.936h238.592zM338.944 189.44h-240.64v139.264h238.592zM636.416-29.696h-248.32v167.936h246.272zM636.416 189.44h-248.32v139.264h246.272zM919.552-29.696h-233.984v167.936h231.936zM919.552 189.44h-233.984v139.264h231.936zM512 430.592v-51.2h460.8v465.408h-460.8v-307.2zM563.2 635.392h153.6v153.6h51.2v-153.6h153.6v-51.2h-153.6v-153.6h-51.2v153.6h-153.6zM99.328 787.968h102.4v51.2h-153.6v-153.6h51.2v102.4zM512.512 791.040v51.2h-153.6v-51.2h102.4v-102.4h51.2v102.4z"  horiz-adv-x="1024" />
222
+
223
+    
224
+    <glyph glyph-name="insertparagraphtrue" unicode="&#58976;" d="M997.12 448h-997.12v-576h1024v576zM60.16-64v256h259.84v-256zM542.080-64h-158.080v256h256v-256zM963.84-64h-259.84v256h259.84zM448 896h-448v-64h192v-384h64v384h192v64z"  horiz-adv-x="1024" />
225
+
226
+    
227
+    <glyph glyph-name="aligntable" unicode="&#58978;" d="M992 832H32C12.8 832 0 844.8 0 864S12.8 896 32 896h960c19.2 0 32-12.8 32-32s-12.8-32-32-32z m0-192H32C12.8 640 0 652.8 0 672S12.8 704 32 704h960c19.2 0 32-12.8 32-32s-12.8-32-32-32z m0-192H32C12.8 448 0 460.8 0 480S12.8 512 32 512h960c19.2 0 32-12.8 32-32s-12.8-32-32-32z m0-384H32c-19.2 0-32 12.8-32 32s12.8 32 32 32h960c19.2 0 32-12.8 32-32s-12.8-32-32-32z m0-192H32c-19.2 0-32 12.8-32 32s12.8 32 32 32h960c19.2 0 32-12.8 32-32s-12.8-32-32-32zM992 448H32C12.8 448 0 460.8 0 480S12.8 512 32 512h960c19.2 0 32-12.8 32-32s-12.8-32-32-32z m0-192H32c-19.2 0-32 12.8-32 32S12.8 320 32 320h960c19.2 0 32-12.8 32-32s-12.8-32-32-32z"  horiz-adv-x="1024" />
228
+
229
+    
230
+    <glyph glyph-name="table" unicode="&#58980;" d="M0 896v-1024h1024v1024zM320-64h-256v256h256zM320 256h-256v256h256zM640-64h-256v256h256zM640 256h-256v256h256zM960-64h-256v256h256zM960 256h-256v256h256zM960 576h-896v256h896z"  horiz-adv-x="1024" />
231
+
232
+    
233
+    <glyph glyph-name="tablealignment-left" unicode="&#58979;" d="M51.2 793.6l921.6 0 0-51.2-921.6 0 0 51.2ZM51.2 640l614.4 0 0-51.2-614.4 0 0 51.2ZM51.2 486.4l921.6 0 0-51.2-921.6 0 0 51.2ZM51.2 332.79999999999995l614.4 0 0-51.2-614.4 0 0 51.2ZM51.2 179.20000000000005l921.6 0 0-51.2-921.6 0 0 51.2ZM51.2 25.600000000000023l614.4 0 0-51.2-614.4 0 0 51.2Z"  horiz-adv-x="1024" />
234
+
235
+    
236
+    <glyph glyph-name="tablealignment-center" unicode="&#58981;" d="M51.2 793.6l921.6 0 0-51.2-921.6 0 0 51.2ZM51.2 486.4l921.6 0 0-51.2-921.6 0 0 51.2ZM51.2 179.20000000000005l921.6 0 0-51.2-921.6 0 0 51.2ZM51.2 640l921.6 0 0-51.2-921.6 0 0 51.2ZM51.2 332.79999999999995l921.6 0 0-51.2-921.6 0 0 51.2ZM51.2 25.600000000000023l921.6 0 0-51.2-921.6 0 0 51.2ZM51.2 793.6l921.6 0 0-51.2-921.6 0 0 51.2ZM51.2 486.4l921.6 0 0-51.2-921.6 0 0 51.2ZM51.2 179.20000000000005l921.6 0 0-51.2-921.6 0 0 51.2Z"  horiz-adv-x="1024" />
237
+
238
+    
239
+    <glyph glyph-name="tablealignment-right" unicode="&#58982;" d="M51.2 793.6l921.6 0 0-51.2-921.6 0 0 51.2ZM358.4 640l614.4 0 0-51.2-614.4 0 0 51.2ZM51.2 486.4l921.6 0 0-51.2-921.6 0 0 51.2ZM358.4 332.79999999999995l614.4 0 0-51.2-614.4 0 0 51.2ZM51.2 179.20000000000005l921.6 0 0-51.2-921.6 0 0 51.2ZM358.4 25.600000000000023l614.4 0 0-51.2-614.4 0 0 51.2Z"  horiz-adv-x="1024" />
240
+
241
+    
242
+    <glyph glyph-name="paste" unicode="&#58983;" d="M832 576v160c0 17.673-14.327 32-32 32h-224v64c0 35.346-28.654 64-64 64h-128c-35.346 0-64-28.654-64-64v-64h-224c-17.673 0-32-14.327-32-32v-640c0-17.673 14.327-32 32-32h288v-192h448l192 192v512zM384 832h128v-64h-128zM192 704h512v-64h-512zM832-37.76v101.76h101.76zM960 128h-192v-192h-320v576h512z"  horiz-adv-x="1024" />
243
+
244
+    
245
+    <glyph glyph-name="map" unicode="&#58984;" d="M375.424 564.176c-2.432-6.96-7.856-24.704-3.152-40.208 9.232-34.672 39.424-36.24 39.424-36.24h43.264V593.632h-46.4c-20.864-6.24-30.944-22.432-33.136-29.456z m129.072-119.072H397.008c-46.448 9.28-64.896 40.992-67.28 46.368-2.288 5.456-15.504 30.944-8.464 74.256 20.032 64.976 77.28 69.616 77.28 69.616h57.248v70.368l48.704-0.8v-259.808z m200.272 0.768H581.04c-47.92 12.368-50.176 46.496-50.176 46.496V629.184L581.04 630v-123.024c3.008-13.024 19.376-15.44 19.376-15.44h50.912V629.232h53.456v-183.36h-0.016zM512-125.45c-11.203 0-21.563 6-27.172 15.688L208.375 368.274c-30.803 53.1-47.11 113.662-47.11 175.084 0 193.047 157.35 350.094 350.75 350.094 193.391 0 350.72-157.047 350.72-350.094 0-61.421-16.298-121.975-47.126-175.115l-276.437-478.007c-5.61-9.687-15.953-15.687-27.172-15.687z m0.016 956.138c-158.788 0-287.985-128.907-287.985-287.329 0-50.375 13.375-100.037 38.663-143.615l249.303-431.1 249.297 431.062c25.297 43.616 38.656 93.281 38.656 143.656 0 158.42-129.172 287.325-287.934 287.325z"  horiz-adv-x="1024" />
246
+
247
+    
248
+    <glyph glyph-name="directionalityrtl" unicode="&#58881;" d="M960 62.080l-384 320 384 320.64v-640.64zM64 704v64h448v-64h-192v-640h192v-64h-448v64h192v640h-192z"  horiz-adv-x="1024" />
249
+
250
+    
251
+    <glyph glyph-name="imagecenter" unicode="&#58882;" d="M0 896h1024v-64h-1024zM128 704h768v-448h-768v448zM0 128h1024v-64h-1024zM0-64h1024v-64h-1024z"  horiz-adv-x="1024" />
252
+
253
+    
254
+    <glyph glyph-name="imagenone" unicode="&#58887;" d="M52.736 788.992l921.6 0 0-51.2-921.6 0 0 51.2ZM52.736 635.392l409.6 0 0-512-409.6 0 0 512ZM564.736 174.592l409.6 0 0-51.2-409.6 0 0 51.2ZM54.784 20.992l921.6 0 0-51.2-921.6 0 0 51.2ZM564.736 328.192l409.6 0 0-51.2-409.6 0 0 51.2Z"  horiz-adv-x="1024" />
255
+
256
+    
257
+    <glyph glyph-name="fontborder" unicode="&#58888;" d="M345.6 64l44.8 153.6h224l44.8-153.6H768L576 704H448L256 64h89.6z m153.6 531.2l83.2-288H416l83.2 288zM896 832H64v-896h896V832h-64z m0-832H128V768h768v-768z"  horiz-adv-x="1024" />
258
+
259
+    
260
+    <glyph glyph-name="edittable" unicode="&#58890;" d="M993.92 47.36l-144 144.64c8.659 23.774 13.667 51.219 13.667 79.833 0 132.548-107.452 240-240 240-33.832 0-66.029-7-95.221-19.632l-16.365-6.441v-2.56c-2.225-2.205-3.603-5.261-3.603-8.64s1.378-6.435 3.602-8.639l134.401-134.401-81.92-80.64-131.84 133.12c-2.579 2.775-6.249 4.505-10.323 4.505-6.183 0-11.434-3.985-13.327-9.526l-4.509-10.339c-12.032-27.638-19.033-59.835-19.033-93.667 0-132.548 107.452-240 240-240 28.614 0 56.059 5.008 81.505 14.194l142.328-144.527c18.54-18.584 44.175-30.081 72.496-30.081 0.163 0 0.326 0 0.489 0.001 56.695 0.247 102.579 46.285 102.579 103.039 0 28.187-11.318 53.73-29.656 72.333zM960-64c-10.303-10.282-24.526-16.64-40.234-16.64-0.030 0-0.061 0-0.091 0-0.021-0-0.051-0-0.082-0-15.708 0-29.93 6.358-40.235 16.641l-165.119 165.119-14.080-6.4c-23.254-10.787-50.473-17.079-79.162-17.079-106.039 0-192 85.961-192 192 0 16.288 2.028 32.103 5.846 47.205l120.676-124.846c2.359-1.847 5.369-2.963 8.64-2.963s6.281 1.115 8.671 2.986l127.969 127.977c2.168 2.464 3.491 5.718 3.491 9.28s-1.323 6.816-3.504 9.296l-120.306 122.864c14.813 4.102 31.821 6.459 49.381 6.459 106.039 0 192-85.961 192-192 0-30.528-7.125-59.393-19.803-85.021l-5.898-12.958 163.84-162.56c9.956-10.245 16.095-24.246 16.095-39.68s-6.139-29.435-16.108-39.694zM832 896h-832v-832h320v512h512zM256 128h-192v192h192zM256 384h-192v192h192zM256 640h-192v192h192zM512 640h-192v192h192zM576 640v192h192v-192z"  horiz-adv-x="1024" />
261
+
262
+    
263
+    <glyph glyph-name="imageleft" unicode="&#58891;" d="M50.688 794.624l921.6 0 0-51.2-921.6 0 0 51.2ZM50.688 641.024l409.6 0 0-512-409.6 0 0 512ZM562.688 180.224l409.6 0 0-51.2-409.6 0 0 51.2ZM52.736 26.624l921.6 0 0-51.2-921.6 0 0 51.2ZM562.688 333.824l409.6 0 0-51.2-409.6 0 0 51.2ZM562.688 487.424l409.6 0 0-51.2-409.6 0 0 51.2ZM562.688 641.024l409.6 0 0-51.2-409.6 0 0 51.2Z"  horiz-adv-x="1024" />
264
+
265
+    
266
+    <glyph glyph-name="imageright" unicode="&#58901;" d="M0 896h1024v-64h-1024zM512 704h512v-640h-512v640zM0 128h448v-64h-448zM0-64h1024v-64h-1024zM0 320h448v-64h-448zM0 512h448v-64h-448zM0 704h448v-64h-448z"  horiz-adv-x="1024" />
267
+
268
+    
269
+    <glyph glyph-name="insertcol" unicode="&#58917;" d="M256 640l-256-256 256-256v512zM1024-128v1024h-640v-1024zM768 832h192v-256h-192zM768 512h192v-256h-192zM768 192h192v-256h-192zM448 832h192v-256h-192zM448 512h192v-256h-192zM448 192h192v-256h-192z"  horiz-adv-x="1024" />
270
+
271
+    
272
+    <glyph glyph-name="insertcolnext" unicode="&#58918;" d="M768 128l256 256-256 256v-512zM0 896v-1024h640v1024zM256-64h-192v256h192zM256 256h-192v256h192zM256 576h-192v256h192zM576-64h-192v256h192zM576 256h-192v256h192zM576 576h-192v256h192z"  horiz-adv-x="1024" />
273
+
274
+    
275
+    <glyph glyph-name="insertorderedlist" unicode="&#58933;" d="M319.956 832.009h703.902v-127.982h-703.902v127.982zM319.956 448.062h703.902v-127.982h-703.902v127.982zM319.956 64.115h703.902v-127.982h-703.902v127.982zM191.973 896v-255.964h-127.982v255.964zM0 256.089v30.716c0 103.666 159.978 141.42 159.978 186.854 0 17.918-10.878 28.156-33.275 28.156-31.301-3-58.565-18.191-77.352-40.702l-43.591 57.98c30.879 35.002 75.835 56.965 125.921 56.965 0.725 0 1.448-0.005 2.171-0.014 78.599 0.001 122.113-42.233 122.113-97.265 0-78.069-95.347-98.546-142.7-147.18h142.7v-75.51zM127.982-127.858c-2.045-0.090-4.443-0.142-6.854-0.142-47.758 0-90.798 20.2-121.042 52.521l48.547 49.366c18.682-18.147 44.020-29.531 72.013-30.151 25.894 0.076 39.332 14.154 39.332 33.351 0 17.278-12.158 26.236-36.475 26.236h-24.317v52.473h24.957c23.037 0 36.475 6.399 36.475 26.876 0 19.837-12.798 31.356-38.395 31.356-26.139-0.731-49.26-13.049-64.502-31.98l-47.483 49.257c29.161 33.898 72.108 55.232 120.038 55.232 2.794 0 5.572-0.073 8.33-0.216 72.564 5.775 117.357-35.819 117.357-82.533v-5.119c0-0.034 0-0.075 0-0.115 0-35.341-28.65-63.991-63.991-63.991-1.351 0-2.692 0.042-4.022 0.124 50.735-7.048 70.572-33.284 70.572-67.2v-3.839c-2.56-53.113-54.392-91.507-130.542-91.507z"  horiz-adv-x="1024" />
276
+
277
+    
278
+    <glyph glyph-name="insertparagraphbeforetable" unicode="&#58934;" d="M256 512v-640h768v640zM512-64h-192v512h192zM960-64h-384v128h384zM960 128h-384v128h384zM960 320h-384v128h384zM384 320h64v-256h-64zM0 896v-64h128v-384h64v384h128v64h-320z"  horiz-adv-x="1024" />
279
+
280
+    
281
+    <glyph glyph-name="insertrow" unicode="&#58935;" d="M768 640l-256 256-256-256h512zM0-128h1024v640h-1024zM960 128v-192h-256v192zM640 128v-192h-256v192zM320 128v-192h-256v192zM960 448v-192h-256v192zM640 448v-192h-256v192zM320 448v-192h-256v192z"  horiz-adv-x="1024" />
282
+
283
+    
284
+    <glyph glyph-name="insertrownext" unicode="&#58937;" d="M256 128l256-256 256 256h-512zM1024 896h-1024v-640h1024zM64 640v192h256v-192zM384 640v192h256v-192zM704 640v192h256v-192zM64 320v192h256v-192zM384 320v192h256v-192zM704 320v192h256v-192z"  horiz-adv-x="1024" />
285
+
286
+    
287
+    <glyph glyph-name="insertunorderedlist" unicode="&#58945;" d="M960 704H256c-38.4 0-64 25.6-64 64s25.6 64 64 64h704c38.4 0 64-25.6 64-64s-25.6-64-64-64zM64 704c-38.4 0-64 25.6-64 64s25.6 64 64 64 64-25.6 64-64-25.6-64-64-64zM960 320H256c-38.4 0-64 25.6-64 64s25.6 64 64 64h704c38.4 0 64-25.6 64-64s-25.6-64-64-64zM64 320c-38.4 0-64 25.6-64 64s25.6 64 64 64 64-25.6 64-64-25.6-64-64-64zM960-64H256c-38.4 0-64 25.6-64 64s25.6 64 64 64h704c38.4 0 64-25.6 64-64s-25.6-64-64-64zM64-64c-38.4 0-64 25.6-64 64s25.6 64 64 64 64-25.6 64-64-25.6-64-64-64z"  horiz-adv-x="1024" />
288
+
289
+    
290
+    <glyph glyph-name="mergeright" unicode="&#58946;" d="M0 896v-1024h1024v1024zM384 832h256v-256h-256zM384 448h320v64l192-128-192-128v64h-320zM320-64h-256v256h256zM320 256h-256v256h256zM320 576h-256v256h256zM640-64h-256v256h256zM960-64h-256v256h256zM960 576h-256v256h256z"  horiz-adv-x="1024" />
291
+
292
+    
293
+    <glyph glyph-name="mergedown" unicode="&#58947;" d="M0 896v-1024h1024v1024zM320-64h-256v256h256zM320 256h-256v256h256zM320 576h-256v256h256zM512 0l-128 192h64v320h128v-320h64zM640 576h-256v256h256zM960-64h-256v256h256zM960 256h-256v256h256zM960 576h-256v256h256z"  horiz-adv-x="1024" />
294
+
295
+    
296
+    <glyph glyph-name="inserttable" unicode="&#58948;" d="M0 896v-1024h1024v1024zM320-64h-256v256h256zM320 256h-256v256h256zM640-64h-256v256h256zM640 256h-256v256h256zM960-64h-256v256h256zM960 256h-256v256h256zM960 576h-896v256h896z"  horiz-adv-x="1024" />
297
+
298
+    
299
+    <glyph glyph-name="pagebreak" unicode="&#58952;" d="M384-64h512v-64h-512zM0 576v-384l256 192-256 192zM320 768h576v-64h-576zM384 64h256v-64h-256zM192 192v-320h64v256h704v-256h64v320h-832zM1022.72 896h-62.72v-256h-704v256h-64v-320h832v320h-1.28z"  horiz-adv-x="1024" />
300
+
301
+    
302
+    <glyph glyph-name="source" unicode="&#58953;" d="M170.88 384h-113.92v128h-56.96v-320h56.96v128h113.92v-128h56.96v320h-56.96v-128zM284.16 448h56.96v-256h56.96v256h56.96v64h-170.88v-64zM738.56 510.72l-84.48-250.24-84.48 251.52-2.56-1.28h-55.040v-316.8h56.96v140.16l47.36-140.8h72.96l2.56-1.28 48 140.8v-139.52h56.32v316.8h-55.040l-2.56 0.64zM910.080 256v256h-56.96v-320h170.88v64h-113.92z"  horiz-adv-x="1024" />
303
+
304
+    
305
+    <glyph glyph-name="splittorows" unicode="&#58955;" d="M0 896h1024v-64H0zM960 896v-320h-128V896h-64v-320H256V896H192v-320H64V896H0v-1024h1024V896z m-192-384v-256H256V512zM64 512h128v-256H64z m0-576v256h128v-256z m192 0v256h512v-256z m704 0h-128v256h128z m0 320h-128V512h128z"  horiz-adv-x="1024" />
306
+
307
+    
308
+    <glyph glyph-name="splittocols" unicode="&#58956;" d="M1024 896h-1024v-1024h1024zM960 512v-256h-128v256zM960 832v-256h-128v256zM64 576v256h128v-256zM64 256v256h128v-256zM64-64v256h128v-256zM256-64v896h128v-896zM448-64v896h128v-896zM640-64v896h128v-896zM832-64v256h128v-256z"  horiz-adv-x="1024" />
309
+
310
+    
311
+    <glyph glyph-name="splittocells" unicode="&#58957;" d="M0 896v-1024h1024v1024zM320-64h-256v576h256zM640-64h-256v256h256zM640 256h-256v256h256zM960-64h-256v256h256zM960 256h-256v256h256zM960 576h-576v256h576z"  horiz-adv-x="1024" />
312
+
313
+    
314
+    <glyph glyph-name="arrow" unicode="&#58959;" d="M513.024 230.4l204.8 204.8h-409.6l204.8-204.8z"  horiz-adv-x="1024" />
315
+
316
+    
317
+    <glyph glyph-name="aligntd" unicode="&#58961;" d="M256.061 128.061h511.877v-63.985h-511.877v63.985zM256.061 320.015h511.877v-63.985h-511.877v63.985zM256.061 511.969h511.877v-63.985h-511.877v63.985zM256.061 703.923h511.877v-63.985h-511.877v63.985zM863.916-127.878h-703.832c-1.402-0.077-3.043-0.121-4.695-0.121-48.324 0-87.898 37.462-91.266 84.928l-0.017 853.847c3.384 47.758 42.959 85.22 91.282 85.22 1.651 0 3.292-0.044 4.922-0.13l703.604 0.010c1.402 0.077 3.043 0.121 4.695 0.121 48.324 0 87.898-37.462 91.266-84.928l0.017-853.847c-3.384-47.758-42.959-85.22-91.282-85.22-1.651 0-3.292 0.044-4.922 0.13zM160.084 831.892c-0.591 0.041-1.281 0.065-1.977 0.065-15.956 0-29.010-12.427-30.011-28.131l-0.004-839.567c1.005-15.791 14.059-28.218 30.016-28.218 0.696 0 1.386 0.024 2.069 0.070l703.739-0.005c0.591-0.041 1.281-0.065 1.977-0.065 15.956 0 29.010 12.427 30.011 28.131l0.004 839.567c-1.005 15.791-14.059 28.218-30.016 28.218-0.696 0-1.386-0.024-2.069-0.070z"  horiz-adv-x="1024" />
318
+
319
+    
320
+    <glyph glyph-name="autotypeset" unicode="&#58963;" d="M192 704h384v-320h-384v320zM640 704h192v-64h-192v64zM640 512h192v-64h-192v64zM192 320h640v-64h-640v64zM192 128h640v-64h-640v64zM960 896h-896c-35.346 0-64-28.654-64-64v-896c0-35.346 28.654-64 64-64h896c35.346 0 64 28.654 64 64v896c0 35.346-28.654 64-64 64zM960 0c0-35.346-28.654-64-64-64h-768c-35.346 0-64 28.654-64 64v768c0 35.346 28.654 64 64 64h768c35.346 0 64-28.654 64-64z"  horiz-adv-x="1024" />
321
+
322
+    
323
+    <glyph glyph-name="charts" unicode="&#58968;" d="M0 832v-896h1024v896zM960 0h-896v768h896zM704 640h128v-512h-128zM448 320h128v-192h-128zM192 512h128v-384h-128z"  horiz-adv-x="1024" />
324
+
325
+    
326
+    <glyph glyph-name="closeerror" unicode="&#58972;" d="M512 896c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM796.16 225.92l-128-128-156.16 158.080-158.080-156.16-128 128 158.080 156.16-156.16 158.080 128 128 156.16-158.080 158.080 158.080 128-128-158.080-158.080z"  horiz-adv-x="1024" />
327
+
328
+    
329
+    <glyph glyph-name="copy" unicode="&#58975;" d="M256.060 511.97h511.879v-63.985h-511.879v63.985zM256.060 320.015h511.879v-63.985h-511.879v63.985zM256.060 128.060h511.879v-63.985h-511.879v63.985zM256.060 703.924h255.94v-63.985h-255.94v63.985zM895.91 639.939h-191.955v199.633c-3.964 31.88-30.89 56.308-63.523 56.308-0.162 0-0.325-0.001-0.487-0.002l-502.257 0c-1.216 0.076-2.637 0.119-4.068 0.119-36.533 0-66.506-28.090-69.498-63.85l-0.017-896.043c3.010-36.014 32.982-64.104 69.515-64.104 1.431 0 2.852 0.043 4.261 0.128l748.43-0.009c1.216-0.076 2.637-0.119 4.068-0.119 36.533 0 66.506 28.090 69.498 63.85l0.017 647.142c-3.664 32.179-30.738 56.948-63.597 56.948-0.136 0-0.273-0-0.409-0.001zM895.91-55.577c-0-4.594-3.724-8.318-8.318-8.318h-749.903c-5.301 0-9.598 4.297-9.598 9.598 0 0 0 0 0 0v877.873c0 4.594 3.724 8.318 8.318 8.318h491.404c0.196 0.012 0.426 0.019 0.657 0.019 6.142 0 11.162-4.808 11.499-10.866l0.001-191.985c3.573-30.12 28.96-53.257 59.75-53.257 1.49 0 2.968 0.054 4.431 0.161l180.242-0.011c0.196 0.012 0.426 0.019 0.657 0.019 6.142 0 11.162-4.808 11.499-10.866l0.001-620.684z"  horiz-adv-x="1024" />
330
+
331
+    
332
+    <glyph glyph-name="date" unicode="&#58977;" d="M896 768v-64h64v-704h-896v704h64v64h-128v-832h1024v832h-128zM832 832h-192v-255.36l192-0.64v256zM576 192h256v-64h-256zM576 384h256v-64h-256zM448 768h128v-64h-128zM192 192h256v-64h-256zM192 384h256v-64h-256zM384 832h-192v-256l192 0.64v255.36z"  horiz-adv-x="1024" />
333
+
334
+    
335
+    <glyph glyph-name="deletetable" unicode="&#58985;" d="M576 896v-448h448v448zM1003.52 558.72l-90.24-90.24-113.28 113.28-113.28-113.28-90.24 90.24 113.28 113.28-113.28 113.28 90.24 90.24 113.28-113.28 113.28 113.28 90.88-90.88-113.92-112.64zM960 256h-256v192h-64v-192h-256v256h192v64h-512v256h512v64h-576v-1024h1024v576h-64zM320-64h-256v256h256zM320 256h-256v256h256zM640-64h-256v256h256zM960-64h-256v256h256z"  horiz-adv-x="1024" />
336
+
337
+    
338
+    <glyph glyph-name="directionalityltr" unicode="&#58986;" d="M64 64l384 320-384 320v-640zM960 704v64h-448v-64h192v-640h-192v-64h448v64h-192v640h192z"  horiz-adv-x="1024" />
339
+
340
+    
341
+    <glyph glyph-name="arrowright" unicode="&#58987;" d="M615.424 384l-204.8 204.8v-409.6l204.8 204.8z"  horiz-adv-x="1024" />
342
+
343
+    
344
+    <glyph glyph-name="tableleft" unicode="&#58988;" d="M960 832v-896H64V832h896m64 64H0v-1024h1024V896zM192 704h640v-64H192zM192 512h640v-64H192zM192 320h256v-64H192z"  horiz-adv-x="1024" />
345
+
346
+    
347
+    <glyph glyph-name="tableright" unicode="&#58989;" d="M960 832v-896H64V832h896m64 64H0v-1024h1024V896zM188.8 704.64h640v-64h-640zM188.8 512.64h640v-64h-640zM576 320.64h256v-64H576z"  horiz-adv-x="1024" />
348
+
349
+    
350
+    <glyph glyph-name="tablecenter" unicode="&#58990;" d="M960 832v-896H64V832h896m64 64H0v-1024h1024V896zM188.8 703.36h640v-64h-640zM188.8 511.36h640v-64h-640zM383.36 319.36h256v-64h-256z"  horiz-adv-x="1024" />
351
+
352
+    
353
+    <glyph glyph-name="videoleft" unicode="&#58991;" d="M96 800l832 0 0-32-832 0 0 32ZM96 704l832 0 0-32-832 0 0 32ZM96 96l832 0 0-32-832 0 0 32ZM96 0l399.36 0 0-32-399.36 0 0 32ZM704 192l224 0 0-32-224 0 0 32ZM704 288l224 0 0-32-224 0 0 32ZM704 384l224 0 0-32-224 0 0 32ZM704 480l224 0 0-32-224 0 0 32ZM704 576l224 0 0-32-224 0 0 32ZM256 416m-64 0a64 64 0 1 1 128 0 64 64 0 1 1-128 0ZM640 576H128a32 32 0 0 1-32-32v-352a32 32 0 0 1 32-32h512a32 32 0 0 1 32 32V544a32 32 0 0 1-32 32z m0-251.52L544 448l-162.24-208.64L304 332.8 186.56 192H160a32 32 0 0 0-32 32v288a32 32 0 0 0 32 32h448a32 32 0 0 0 32-32zM992 864v-960H32V864h960m0 32H32a32 32 0 0 1-32-32v-960a32 32 0 0 1 32-32h960a32 32 0 0 1 32 32V864a32 32 0 0 1-32 32z"  horiz-adv-x="1024" />
354
+
355
+    
356
+    <glyph glyph-name="videocenter" unicode="&#58992;" d="M96 800l832 0 0-32-832 0 0 32ZM96 704l832 0 0-32-832 0 0 32ZM96 96l832 0 0-32-832 0 0 32ZM96 0l399.36 0 0-32-399.36 0 0 32ZM96 192l96 0 0-32-96 0 0 32ZM96 288l96 0 0-32-96 0 0 32ZM96 384l96 0 0-32-96 0 0 32ZM96 480l96 0 0-32-96 0 0 32ZM96 576l96 0 0-32-96 0 0 32ZM832 288l96 0 0-32-96 0 0 32ZM832 192l96 0 0-32-96 0 0 32ZM832 384l96 0 0-32-96 0 0 32ZM832 480l96 0 0-32-96 0 0 32ZM832 576l96 0 0-32-96 0 0 32ZM384 416m-64 0a64 64 0 1 1 128 0 64 64 0 1 1-128 0ZM768 576H256a32 32 0 0 1-32-32v-352a32 32 0 0 1 32-32h512a32 32 0 0 1 32 32V544a32 32 0 0 1-32 32z m0-251.52L672 448l-162.24-208.64-77.76 93.44L314.56 192H288a32 32 0 0 0-32 32v288a32 32 0 0 0 32 32h448a32 32 0 0 0 32-32zM992 864v-960H32V864h960m0 32H32a32 32 0 0 1-32-32v-960a32 32 0 0 1 32-32h960a32 32 0 0 1 32 32V864a32 32 0 0 1-32 32z"  horiz-adv-x="1024" />
357
+
358
+    
359
+    <glyph glyph-name="videonone" unicode="&#58993;" d="M96 800l832 0 0-32-832 0 0 32ZM96 704l832 0 0-32-832 0 0 32ZM96 96l832 0 0-32-832 0 0 32ZM96 0l399.36 0 0-32-399.36 0 0 32ZM704 192l224 0 0-32-224 0 0 32ZM704 288l224 0 0-32-224 0 0 32ZM256 416m-64 0a64 64 0 1 1 128 0 64 64 0 1 1-128 0ZM640 576H128a32 32 0 0 1-32-32v-352a32 32 0 0 1 32-32h512a32 32 0 0 1 32 32V544a32 32 0 0 1-32 32z m0-251.52L544 448l-162.24-208.64L304 332.8 186.56 192H160a32 32 0 0 0-32 32v288a32 32 0 0 0 32 32h448a32 32 0 0 0 32-32zM992 864v-960H32V864h960m0 32H32a32 32 0 0 1-32-32v-960a32 32 0 0 1 32-32h960a32 32 0 0 1 32 32V864a32 32 0 0 1-32 32z"  horiz-adv-x="1024" />
360
+
361
+    
362
+    <glyph glyph-name="videoright" unicode="&#58994;" d="M96 800l832 0 0-32-832 0 0 32ZM96 704l832 0 0-32-832 0 0 32ZM96 96l832 0 0-32-832 0 0 32ZM96 0l399.36 0 0-32-399.36 0 0 32ZM96 192l224 0 0-32-224 0 0 32ZM96 288l224 0 0-32-224 0 0 32ZM96 384l224 0 0-32-224 0 0 32ZM96 480l224 0 0-32-224 0 0 32ZM96 576l224 0 0-32-224 0 0 32ZM512 416m-64 0a64 64 0 1 1 128 0 64 64 0 1 1-128 0ZM896 576H384a32 32 0 0 1-32-32v-352a32 32 0 0 1 32-32h512a32 32 0 0 1 32 32V544a32 32 0 0 1-32 32z m0-251.52L800 448l-162.24-208.64-77.76 93.44-117.44-140.8H416a32 32 0 0 0-32 32v288a32 32 0 0 0 32 32h448a32 32 0 0 0 32-32zM992 864v-960H32V864h960m0 32H32a32 32 0 0 1-32-32v-960a32 32 0 0 1 32-32h960a32 32 0 0 1 32 32V864a32 32 0 0 1-32 32z"  horiz-adv-x="1024" />
363
+
364
+    
365
+    <glyph glyph-name="template" unicode="&#58958;" d="M0 832v-896h1024v896zM960 0h-896v768h896zM192 640h320v-192h-320zM640 640h192v-512h-192zM192 320h320v-192h-320z"  horiz-adv-x="1024" />
366
+
367
+    
368
+    <glyph glyph-name="addfile" unicode="&#58995;" d="M1024 416H544V896h-64v-480H0v-64h480v-480h64V352h480v64z"  horiz-adv-x="1024" />
369
+
370
+    
371
+    <glyph glyph-name="selected" unicode="&#58996;" d="M914.24 278.72a32 32 0 0 1-45.12 0l-221.44-221.12-112.96 112.96a32 32 0 1 1-45.12-45.12l135.68-135.68a32 32 0 0 1 45.44 0l243.52 243.52a32 32 0 0 1 0 45.44zM0-128h1024V896z m914.24 361.28L672-10.24a32 32 0 0 0-45.44 0l-135.68 135.68a32 32 0 1 0 45.12 45.12l112.96-112.96 221.12 221.12a32 32 0 1 0 45.12-45.12z"  horiz-adv-x="1024" />
372
+
373
+    
374
+    <glyph glyph-name="pickarea" unicode="&#58997;" d="M977.454545 802.909091h-46.545454v-791.272727a46.545455 46.545455 0 0 0-46.545455-46.545455H93.090909v-46.545454a46.545455 46.545455 0 0 1 46.545455-46.545455h837.818181a46.545455 46.545455 0 0 1 46.545455 46.545455V756.363636a46.545455 46.545455 0 0 1-46.545455 46.545455zM46.545455 849.454545l837.818181 0 0-837.818181-837.818181 0 0 837.818181ZM884.363636 896H46.545455a46.545455 46.545455 0 0 1-46.545455-46.545455v-837.818181a46.545455 46.545455 0 0 1 46.545455-46.545455h837.818181a46.545455 46.545455 0 0 1 46.545455 46.545455V849.454545a46.545455 46.545455 0 0 1-46.545455 46.545455z m0-837.818182a46.545455 46.545455 0 0 0-46.545454-46.545454H93.090909a46.545455 46.545455 0 0 0-46.545454 46.545454V802.909091a46.545455 46.545455 0 0 0 46.545454 46.545454h744.727273a46.545455 46.545455 0 0 0 46.545454-46.545454z"  horiz-adv-x="1024" />
375
+
376
+    
377
+    <glyph glyph-name="overlay" unicode="&#58998;" d="M977.454545 802.909091h-46.545454v-791.272727a46.545455 46.545455 0 0 0-46.545455-46.545455H93.090909v-46.545454a46.545455 46.545455 0 0 1 46.545455-46.545455h837.818181a46.545455 46.545455 0 0 1 46.545455 46.545455V756.363636a46.545455 46.545455 0 0 1-46.545455 46.545455zM46.545455 849.454545l837.818181 0 0-837.818181-837.818181 0 0 837.818181ZM884.363636 896H46.545455a46.545455 46.545455 0 0 1-46.545455-46.545455v-837.818181a46.545455 46.545455 0 0 1 46.545455-46.545455h837.818181a46.545455 46.545455 0 0 1 46.545455 46.545455V849.454545a46.545455 46.545455 0 0 1-46.545455 46.545455z m0-837.818182a46.545455 46.545455 0 0 0-46.545454-46.545454H93.090909a46.545455 46.545455 0 0 0-46.545454 46.545454V802.909091a46.545455 46.545455 0 0 0 46.545454 46.545454h744.727273a46.545455 46.545455 0 0 0 46.545454-46.545454z"  horiz-adv-x="1024" />
378
+
379
+    
380
+    <glyph glyph-name="preitem" unicode="&#58999;" d="M0 896v-1024h1462.857143V896z m1433.6-994.742857H29.257143V866.742857h1404.342857zM175.542857 764.342857h497.371429v-58.514286H175.542857zM175.542857 384h438.857143v-29.257143H175.542857zM175.542857 501.028571h906.971429v-29.257142H175.542857zM175.542857 618.057143h234.057143v-29.257143H175.542857zM175.542857 266.971429h1111.771429v-29.257143H175.542857zM175.542857 149.942857h292.571429v-29.257143H175.542857zM175.542857 32.914286h760.685714v-29.257143H175.542857z"  horiz-adv-x="1462" />
381
+
382
+    
383
+    <glyph glyph-name="preitem1" unicode="&#59000;" d="M0 896v-1024h1462.857143V896z m1433.6-994.742857H29.257143V866.742857h1404.342857zM117.028571 720.457143h351.085715v-29.257143H117.028571z"  horiz-adv-x="1462" />
384
+
385
+    
386
+    <glyph glyph-name="preitem2" unicode="&#59001;" d="M0 896v-1024h1462.857143V896z m1433.6-994.742857H29.257143V866.742857h1404.342857zM175.542857 778.971429h497.371429v-58.514286H175.542857zM848.457143 340.114286h438.857143v-29.257143H848.457143zM848.457143 457.142857h438.857143v-29.257143H848.457143zM848.457143 574.171429h438.857143v-29.257143H848.457143zM175.542857 223.085714h1111.771429v-29.257143H175.542857zM175.542857 106.057143h702.171429v-29.257143H175.542857zM175.542857-10.971429h702.171429v-29.257142H175.542857zM731.428571 544.914286v-204.8H204.8V544.914286h526.628571m29.257143 29.257143H175.542857v-263.314286h585.142857V574.171429zM1258.057143 106.057143v-117.028572H994.742857v117.028572h263.314286m29.257143 29.257143H965.485714v-175.542857h321.828572V135.314286z"  horiz-adv-x="1462" />
387
+
388
+    
389
+    <glyph glyph-name="preitem3" unicode="&#59002;" d="M0 896v-1024h1462.857143V896z m1433.6-994.742857H29.257143V866.742857h1404.342857zM482.742857 720.457143h497.371429v-58.514286H482.742857zM643.657143 603.428571h175.542857v-29.257142H643.657143zM175.542857 427.885714h1111.771429v-29.257143H175.542857zM175.542857 310.857143h1111.771429v-29.257143H175.542857zM175.542857 193.828571h1111.771429v-29.257142H175.542857zM175.542857 76.8h1111.771429v-29.257143H175.542857z"  horiz-adv-x="1462" />
390
+
391
+    
392
+    <glyph glyph-name="preitem4" unicode="&#59003;" d="M1258.057143 632.685714v-204.8H204.8V632.685714h1053.257143m29.257143 29.257143H175.542857v-263.314286h1111.771429V661.942857zM0 896v-1024h1462.857143V896z m1433.6-994.742857H29.257143V866.742857h1404.342857zM175.542857 778.971429h497.371429v-58.514286H175.542857zM175.542857 340.114286h351.085714v-29.257143H175.542857zM175.542857 223.085714h1111.771429v-29.257143H175.542857zM175.542857 106.057143h702.171429v-29.257143H175.542857zM175.542857-10.971429h1111.771429v-29.257142H175.542857z"  horiz-adv-x="1462" />
393
+
394
+    
395
+
396
+
397
+  </font>
398
+</defs></svg>

BIN
static/neditor/dialogs/fonts/iconfont.ttf View File


BIN
static/neditor/dialogs/fonts/iconfont.woff View File


+ 1 - 0
static/neditor/dialogs/fonts/images/addfile.svg View File

@@ -0,0 +1 @@
1
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1488001777589" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5327" xmlns:xlink="http://www.w3.org/1999/xlink" width="50" height="50"><defs><style type="text/css"></style></defs><path d="M1024 480H544V0h-64v480H0v64h480v480h64V544h480v-64z" fill="#E5E5E5" p-id="5328"></path></svg>

+ 1 - 0
static/neditor/dialogs/fonts/images/selected.svg View File

@@ -0,0 +1 @@
1
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1488001207278" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5218" xmlns:xlink="http://www.w3.org/1999/xlink" width="40" height="40"><defs><style type="text/css"></style></defs><path d="M914.24 617.28a32 32 0 0 0-45.12 0l-221.44 221.12-112.96-112.96a32 32 0 1 0-45.12 45.12l135.68 135.68a32 32 0 0 0 45.44 0l243.52-243.52a32 32 0 0 0 0-45.44z" fill="#FFFFFF" p-id="5219"></path><path d="M0 1024h1024V0z m914.24-361.28L672 906.24a32 32 0 0 1-45.44 0l-135.68-135.68a32 32 0 1 1 45.12-45.12l112.96 112.96 221.12-221.12a32 32 0 1 1 45.12 45.12z" fill="#1094FA" p-id="5220"></path></svg>

+ 106 - 0
static/neditor/dialogs/gmap/gmap.html View File

@@ -0,0 +1,106 @@
1
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2
+        "http://www.w3.org/TR/html4/loose.dtd">
3
+<html>
4
+<head>
5
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+    <title></title>
7
+    <script type="text/javascript" src="../internal.js"></script>
8
+    <style type="text/css">
9
+        .content{
10
+            width: 600px;
11
+            height: 412px;
12
+            margin: 20px;
13
+        }
14
+        .content table{width: 100%}
15
+        .content table td{vertical-align: middle;}
16
+        #address{width:405px;height:28px;background: #FFF;border:1px solid #ccc; line-height: 28px;border-radius: 5px;margin-left: 10px;}
17
+        #container {margin-top: 10px;}
18
+        #doSearch {
19
+            display: block;
20
+            text-align: center;
21
+            line-height: 30px;
22
+            text-decoration: none;
23
+            height: 30px;
24
+            width: 78px;
25
+            border: 0;
26
+            background-color: #3498db;
27
+            border-radius: 5px;
28
+            color: #fff;
29
+        }
30
+    </style>
31
+    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
32
+</head>
33
+<body>
34
+<div class="content">
35
+    <table>
36
+        <tr>
37
+            <td><label for="address"><var id="lang_input_address"></var></label></td>
38
+            <td><input id="address" type="text" /></td>
39
+            <td><a id="doSearch" href="javascript:void(0)" class="button"><var id="lang_input_search"></var></a></td>
40
+        </tr>
41
+    </table>
42
+    <div id="container" style="width: 100%; height: 362px;margin-top: 20px;"></div>
43
+</div>
44
+<script type="text/javascript">
45
+    domUtils.on(window,"load",function(){
46
+        var map = new google.maps.Map(document.getElementById('container'), {
47
+                zoom: 3,
48
+                streetViewControl: false,
49
+                scaleControl: true,
50
+                mapTypeId: google.maps.MapTypeId.ROADMAP
51
+            });
52
+            var imgcss;
53
+            var marker = new google.maps.Marker({
54
+                map: map,
55
+                draggable: true
56
+            });
57
+            function doSearch(){
58
+                var address = document.getElementById('address').value;
59
+                var geocoder = new google.maps.Geocoder();
60
+                geocoder.geocode( { 'address': address}, function (results, status) {
61
+                    if (status == google.maps.GeocoderStatus.OK) {
62
+                        var bounds = results[0].geometry.viewport;
63
+                        map.fitBounds(bounds);
64
+                        marker.setPosition(results[0].geometry.location);
65
+                        marker.setTitle(address);
66
+                    } else alert(lang.searchError);
67
+                });
68
+            }
69
+            $G('address').onkeydown = function (evt){
70
+                evt = evt || event;
71
+                if (evt.keyCode == 13) {
72
+                    doSearch();
73
+                }
74
+            };
75
+            $G("doSearch").onclick = doSearch;
76
+            dialog.onok = function (){
77
+                var center = map.getCenter();
78
+                var point = marker.getPosition();
79
+                var url = "https://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";
80
+                editor.execCommand('inserthtml', '<img width="520" height="340" src="' + url + '"' + (imgcss ? ' style="' + imgcss + '"' :'') + '/>');
81
+            };
82
+
83
+            function getPars(str,par){
84
+                var reg = new RegExp(par+"=((\\d+|[.,])*)","g");
85
+                return reg.exec(str)[1];
86
+            }
87
+            var img = editor.selection.getRange().getClosedNode();
88
+            if(img && img.src.indexOf("https://maps.googleapis.com/maps/api/staticmap")!=-1){
89
+                var url = img.getAttribute("src");
90
+                var centers = getPars(url,"center").split(",");
91
+                point = new google.maps.LatLng(Number(centers[0]),Number(centers[1]));
92
+                map.setCenter(point);
93
+                map.setZoom(Number(getPars(url,"zoom")));
94
+                centers = getPars(url,"markers").split(",");
95
+                marker.setPosition(new google.maps.LatLng(Number(centers[0]),Number(centers[1])));
96
+                imgcss = img.style.cssText;
97
+            }else{
98
+                setTimeout(function(){
99
+                    doSearch();
100
+                },30)
101
+            }
102
+    });
103
+
104
+</script>
105
+</body>
106
+</html>

+ 7 - 0
static/neditor/dialogs/help/help.css View File

@@ -0,0 +1,7 @@
1
+.wrapper{width: 370px;margin: 10px auto;zoom: 1;}
2
+.tabbody{height: 360px;}
3
+.tabbody .panel{width:100%;height: 360px;position: absolute;background: #fff;}
4
+.tabbody .panel h1{font-size:26px;margin: 5px 0 0 5px;}
5
+.tabbody .panel p{font-size:12px;margin: 5px 0 0 5px;}
6
+.tabbody table{width:90%;line-height: 20px;margin: 5px 0 0 5px;;}
7
+.tabbody table thead{font-weight: bold;line-height: 25px;}

+ 82 - 0
static/neditor/dialogs/help/help.html View File

@@ -0,0 +1,82 @@
1
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2
+        "http://www.w3.org/TR/html4/loose.dtd">
3
+<html>
4
+<head>
5
+    <title>帮助</title>
6
+    <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
7
+    <script type="text/javascript" src="../internal.js"></script>
8
+    <link rel="stylesheet" type="text/css" href="help.css">
9
+</head>
10
+<body>
11
+<div class="wrapper" id="helptab">
12
+    <div id="tabHeads" class="tabhead">
13
+        <span class="focus" tabsrc="about"><var id="lang_input_about"></var></span>
14
+        <span tabsrc="shortcuts"><var id="lang_input_shortcuts"></var></span>
15
+    </div>
16
+    <div id="tabBodys" class="tabbody">
17
+        <div id="about" class="panel">
18
+            <h1>UEditor</h1>
19
+            <p id="version"></p>
20
+            <p><var id="lang_input_introduction"></var></p>
21
+        </div>
22
+        <div id="shortcuts" class="panel">
23
+            <table>
24
+                <thead>
25
+                <tr>
26
+                    <td><var id="lang_Txt_shortcuts"></var></td>
27
+                    <td><var id="lang_Txt_func"></var></td>
28
+                </tr>
29
+                </thead>
30
+                <tbody>
31
+                <tr>
32
+                    <td>ctrl+b</td>
33
+                    <td><var id="lang_Txt_bold"></var></td>
34
+                </tr>
35
+                <tr>
36
+                    <td>ctrl+c</td>
37
+                    <td><var id="lang_Txt_copy"></var></td>
38
+                </tr>
39
+                <tr>
40
+                    <td>ctrl+x</td>
41
+                    <td><var id="lang_Txt_cut"></var></td>
42
+                </tr>
43
+                <tr>
44
+                    <td>ctrl+v</td>
45
+                    <td><var id="lang_Txt_Paste"></var></td>
46
+                </tr>
47
+                <tr>
48
+                    <td>ctrl+y</td>
49
+                    <td><var id="lang_Txt_undo"></var></td>
50
+                </tr>
51
+                <tr>
52
+                    <td>ctrl+z</td>
53
+                    <td><var id="lang_Txt_redo"></var></td>
54
+                </tr>
55
+                <tr>
56
+                    <td>ctrl+i</td>
57
+                    <td><var id="lang_Txt_italic"></var></td>
58
+                </tr>
59
+                <tr>
60
+                    <td>ctrl+u</td>
61
+                    <td><var id="lang_Txt_underline"></var></td>
62
+                </tr>
63
+                <tr>
64
+                    <td>ctrl+a</td>
65
+                    <td><var id="lang_Txt_selectAll"></var></td>
66
+                </tr>
67
+                <tr>
68
+                    <td>shift+enter</td>
69
+                    <td><var id="lang_Txt_visualEnter"></var></td>
70
+                </tr>
71
+                <tr>
72
+                    <td>alt+z</td>
73
+                    <td><var id="lang_Txt_fullscreen"></var></td>
74
+                </tr>
75
+                </tbody>
76
+            </table>
77
+        </div>
78
+    </div>
79
+</div>
80
+<script type="text/javascript" src="help.js"></script>
81
+</body>
82
+</html>

+ 56 - 0
static/neditor/dialogs/help/help.js View File

@@ -0,0 +1,56 @@
1
+/**
2
+ * Created with JetBrains PhpStorm.
3
+ * User: xuheng
4
+ * Date: 12-9-26
5
+ * Time: 下午1:06
6
+ * To change this template use File | Settings | File Templates.
7
+ */
8
+/**
9
+ * tab点击处理事件
10
+ * @param tabHeads
11
+ * @param tabBodys
12
+ * @param obj
13
+ */
14
+function clickHandler( tabHeads,tabBodys,obj ) {
15
+    //head样式更改
16
+    for ( var k = 0, len = tabHeads.length; k < len; k++ ) {
17
+        tabHeads[k].className = "";
18
+    }
19
+    obj.className = "focus";
20
+    //body显隐
21
+    var tabSrc = obj.getAttribute( "tabSrc" );
22
+    for ( var j = 0, length = tabBodys.length; j < length; j++ ) {
23
+        var body = tabBodys[j],
24
+            id = body.getAttribute( "id" );
25
+        body.onclick = function(){
26
+            this.style.zoom = 1;
27
+        };
28
+        if ( id != tabSrc ) {
29
+            body.style.zIndex = 1;
30
+        } else {
31
+            body.style.zIndex = 200;
32
+        }
33
+    }
34
+
35
+}
36
+
37
+/**
38
+ * TAB切换
39
+ * @param tabParentId  tab的父节点ID或者对象本身
40
+ */
41
+function switchTab( tabParentId ) {
42
+    var tabElements = $G( tabParentId ).children,
43
+        tabHeads = tabElements[0].children,
44
+        tabBodys = tabElements[1].children;
45
+
46
+    for ( var i = 0, length = tabHeads.length; i < length; i++ ) {
47
+        var head = tabHeads[i];
48
+        if ( head.className === "focus" )clickHandler(tabHeads,tabBodys, head );
49
+        head.onclick = function () {
50
+            clickHandler(tabHeads,tabBodys,this);
51
+        }
52
+    }
53
+}
54
+switchTab("helptab");
55
+
56
+document.getElementById('version').innerHTML = parent.UE.version;

+ 936 - 0
static/neditor/dialogs/image/image.css View File

@@ -0,0 +1,936 @@
1
+@charset "utf-8";
2
+/* dialog样式 */
3
+.wrapper {
4
+    zoom: 1;
5
+    width: 600px;
6
+    height: 412px;
7
+    margin: 0 auto;
8
+    padding: 20px;
9
+    position: relative;
10
+    font-family: sans-serif;
11
+}
12
+
13
+/*tab样式框大小*/
14
+.tabhead {
15
+    float:left;
16
+}
17
+.tabbody {
18
+    width: 100%;
19
+    height: 346px;
20
+    position: relative;
21
+    clear: both;
22
+}
23
+
24
+.tabbody .panel {
25
+    position: absolute;
26
+    width: 0;
27
+    height: 0;
28
+    background: #fff;
29
+    overflow: hidden;
30
+    display: none;
31
+}
32
+
33
+.tabbody .panel.focus {
34
+    width: 100%;
35
+    height: 380px;
36
+    display: block;
37
+}
38
+
39
+/* 图片对齐方式 */
40
+.alignBar{
41
+    float:right;
42
+    margin-top: 5px;
43
+    position: relative;
44
+}
45
+
46
+.alignBar .algnLabel{
47
+    float:left;
48
+    height: 20px;
49
+    line-height: 20px;
50
+}
51
+
52
+.alignBar #alignIcon{
53
+    zoom:1;
54
+    _display: inline;
55
+    display: inline-block;
56
+    position: relative;
57
+}
58
+.alignBar #alignIcon span{
59
+    float: left;
60
+    cursor: pointer;
61
+    display: block;
62
+    width: 19px;
63
+    height: 17px;
64
+    margin-right: 3px;
65
+    margin-left: 3px;
66
+    background-image: url(./images/alignicon.jpg);
67
+}
68
+.alignBar #alignIcon .none-align{
69
+    background-position: 0 -18px;
70
+}
71
+.alignBar #alignIcon .left-align{
72
+    background-position: -20px -18px;
73
+}
74
+.alignBar #alignIcon .right-align{
75
+    background-position: -40px -18px;
76
+}
77
+.alignBar #alignIcon .center-align{
78
+    background-position: -60px -18px;
79
+}
80
+.alignBar #alignIcon .none-align.focus{
81
+    background-position: 0 0;
82
+}
83
+.alignBar #alignIcon .left-align.focus{
84
+    background-position: -20px 0;
85
+}
86
+.alignBar #alignIcon .right-align.focus{
87
+    background-position: -40px 0;
88
+}
89
+.alignBar #alignIcon .center-align.focus{
90
+    background-position: -60px 0;
91
+}
92
+
93
+
94
+
95
+
96
+/* 远程图片样式 */
97
+#remote {
98
+    z-index: 200;
99
+}
100
+
101
+#remote .top{
102
+    width: 100%;
103
+    margin-top: 20px;
104
+}
105
+#remote .left{
106
+    display: block;
107
+    float: left;
108
+    width: 240px;
109
+    height:10px;
110
+}
111
+#remote .right{
112
+    display: block;
113
+    float: right;
114
+    width: 345px;
115
+    height:10px;
116
+}
117
+#remote .row{
118
+    /*margin-left: 20px;*/
119
+    display: flex;
120
+    clear: both;
121
+    height: 30px;
122
+    line-height: 30px;
123
+    margin-bottom: 20px;
124
+}
125
+
126
+#remote .row label{
127
+    text-align: center;
128
+    width: 50px;
129
+    zoom:1;
130
+    _display: inline;
131
+    display:inline-block;
132
+    vertical-align: middle;
133
+    margin-right: 10px;
134
+}
135
+#remote .row label.algnLabel{
136
+    float: left;
137
+
138
+}
139
+
140
+#remote input.text{
141
+    height: 28px;
142
+    width: 150px;
143
+    font-size: 14px;
144
+    line-height: 1.42857143;
145
+    color: #555;
146
+    background-color: #fff;
147
+    background-image: none;
148
+    border: 1px solid #ccc;
149
+    border-radius: 4px;
150
+    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
151
+    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
152
+    -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
153
+    transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
154
+}
155
+#remote input.text:focus {
156
+    border-color: #66afe9;
157
+    outline: 0;
158
+    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
159
+    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
160
+}
161
+#remote textarea.text{
162
+    width: 160px;
163
+    height: 120px;
164
+    font-size: 14px;
165
+    line-height: 1.42857143;
166
+    color: #555;
167
+    background-color: #fff;
168
+    background-image: none;
169
+    border: 1px solid #ccc;
170
+    border-radius: 4px;
171
+    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
172
+    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
173
+    -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
174
+    transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
175
+    resize: none;
176
+}
177
+#remote textarea.text:focus {
178
+    border-color: #66afe9;
179
+    outline: 0;
180
+    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
181
+    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
182
+}
183
+#remote #url{
184
+    width: 537px;
185
+    height: 28px;
186
+}
187
+#remote #width,
188
+#remote #height{
189
+    width: 60px;
190
+    height: 28px;
191
+    margin-left: 8px;
192
+    margin-right: 8px;
193
+}
194
+#remote .top .row:nth-child(2) span:nth-child(1) ,
195
+#remote .top .row:nth-child(2) span:nth-child(2) {
196
+    display: block;
197
+    margin-right: 18px;
198
+}
199
+
200
+#remote .top .row:nth-child(2) span:last-child {
201
+    margin-left: 15px;
202
+}
203
+#remote #border,
204
+#remote #vhSpace,
205
+#remote #title{
206
+    width: 145px;
207
+    margin-right: 8px;
208
+}
209
+#remote #lock{
210
+    margin-top: 11px;
211
+}
212
+#remote #lockicon{
213
+    zoom: 1;
214
+    _display:inline;
215
+    display: inline-block;
216
+    height: 20px;
217
+    background: url("../../themes/notadd/images/lock.gif") -13px -13px no-repeat;
218
+    vertical-align: middle;
219
+}
220
+#remote #preview{
221
+    clear: both;
222
+    width: 345px;
223
+    height: 261px;
224
+    z-index: 9999;
225
+    background-color: #f3f3f3;
226
+    overflow: hidden;
227
+}
228
+
229
+/* 上传图片 */
230
+.tabbody #upload.panel {
231
+    width: 0;
232
+    height: 0;
233
+    overflow: hidden;
234
+    position: absolute !important;
235
+    clip: rect(1px, 1px, 1px, 1px);
236
+    background: #fff;
237
+    display: block;
238
+}
239
+
240
+.tabbody #upload.panel.focus {
241
+    width: 100%;
242
+    height: 373px;
243
+    display: block;
244
+    clip: auto;
245
+    margin-top: 12px;
246
+}
247
+
248
+#upload .queueList {
249
+    margin: 0;
250
+    width: 100%;
251
+    height: 100%;
252
+    position: absolute;
253
+    overflow: hidden;
254
+}
255
+
256
+#upload p {
257
+    margin: 0;
258
+}
259
+
260
+.element-invisible {
261
+    width: 0 !important;
262
+    height: 0 !important;
263
+    border: 0;
264
+    padding: 0;
265
+    margin: 0;
266
+    overflow: hidden;
267
+    position: absolute !important;
268
+    clip: rect(1px, 1px, 1px, 1px);
269
+}
270
+
271
+#upload .placeholder {
272
+    margin: 10px;
273
+    height: 212px;
274
+    padding-top: 160px;
275
+    text-align: center;
276
+    /*background: url(./images/image.png) center 130px no-repeat #f3f3f3;*/
277
+    background-color: #f3f3f3;
278
+    color: #cccccc;
279
+    font-size: 18px;
280
+    position: relative;
281
+    top: 0;
282
+}
283
+
284
+#upload .placeholder .webuploader-pick {
285
+    font-size: 16px;
286
+    background: #f3f3f3;
287
+    border-radius: 3px;
288
+    line-height: 44px;
289
+    padding: 0 30px;
290
+    color: #646464;
291
+    display: inline-block;
292
+    margin: 0 auto 20px auto;
293
+    cursor: pointer;
294
+    /* box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); */
295
+    border: 1px solid #ccc;
296
+}
297
+
298
+#upload .placeholder .webuploader-pick-hover {
299
+    border: 1px solid #00a2d4;
300
+    color: #00a2d4;
301
+}
302
+
303
+
304
+#filePickerContainer {
305
+    text-align: center;
306
+}
307
+
308
+#upload .placeholder .flashTip {
309
+    color: #666666;
310
+    font-size: 12px;
311
+    position: absolute;
312
+    width: 100%;
313
+    text-align: center;
314
+    bottom: 20px;
315
+}
316
+
317
+#upload .placeholder .flashTip a {
318
+    color: #0785d1;
319
+    text-decoration: none;
320
+}
321
+
322
+#upload .placeholder .flashTip a:hover {
323
+    text-decoration: underline;
324
+}
325
+
326
+#upload .placeholder.webuploader-dnd-over {
327
+    border-color: #999999;
328
+}
329
+
330
+#upload .filelist {
331
+    list-style: none;
332
+    margin: 0;
333
+    padding: 0;
334
+    overflow-x: hidden;
335
+    overflow-y: auto;
336
+    position: relative;
337
+    height: 300px;
338
+}
339
+
340
+#upload .filelist:after {
341
+    content: '';
342
+    display: block;
343
+    width: 0;
344
+    height: 0;
345
+    overflow: hidden;
346
+    clear: both;
347
+    position: relative;
348
+}
349
+
350
+#upload .filelist li {
351
+    width: 135px;
352
+    height: 135px;
353
+    background: url(./images/bg.png);
354
+    text-align: center;
355
+    margin: 9px 0 0 9px;
356
+    *margin: 6px 0 0 6px;
357
+    position: relative;
358
+    display: block;
359
+    float: left;
360
+    overflow: hidden;
361
+    font-size: 12px;
362
+}
363
+
364
+#upload .filelist li p.log {
365
+    position: relative;
366
+    top: -45px;
367
+}
368
+
369
+#upload .filelist li p.title {
370
+    position: absolute;
371
+    top: 0;
372
+    left: 0;
373
+    width: 100%;
374
+    overflow: hidden;
375
+    white-space: nowrap;
376
+    text-overflow: ellipsis;
377
+    top: 5px;
378
+    text-indent: 5px;
379
+    text-align: left;
380
+}
381
+
382
+#upload .filelist li p.progress {
383
+    position: absolute;
384
+    width: 100%;
385
+    bottom: 0;
386
+    left: 0;
387
+    height: 8px;
388
+    overflow: hidden;
389
+    z-index: 50;
390
+    margin: 0;
391
+    border-radius: 0;
392
+    background: none;
393
+    -webkit-box-shadow: 0 0 0;
394
+}
395
+
396
+#upload .filelist li p.progress span {
397
+    display: none;
398
+    overflow: hidden;
399
+    width: 0;
400
+    height: 100%;
401
+    background: #1483d8 url(./images/progress.png) repeat-x;
402
+
403
+    -webit-transition: width 200ms linear;
404
+    -moz-transition: width 200ms linear;
405
+    -o-transition: width 200ms linear;
406
+    -ms-transition: width 200ms linear;
407
+    transition: width 200ms linear;
408
+
409
+    -webkit-animation: progressmove 2s linear infinite;
410
+    -moz-animation: progressmove 2s linear infinite;
411
+    -o-animation: progressmove 2s linear infinite;
412
+    -ms-animation: progressmove 2s linear infinite;
413
+    animation: progressmove 2s linear infinite;
414
+
415
+    -webkit-transform: translateZ(0);
416
+}
417
+
418
+@-webkit-keyframes progressmove {
419
+    0% {
420
+        background-position: 0 0;
421
+    }
422
+    100% {
423
+        background-position: 17px 0;
424
+    }
425
+}
426
+
427
+@-moz-keyframes progressmove {
428
+    0% {
429
+        background-position: 0 0;
430
+    }
431
+    100% {
432
+        background-position: 17px 0;
433
+    }
434
+}
435
+
436
+@keyframes progressmove {
437
+    0% {
438
+        background-position: 0 0;
439
+    }
440
+    100% {
441
+        background-position: 17px 0;
442
+    }
443
+}
444
+
445
+#upload .filelist li p.imgWrap {
446
+    position: relative;
447
+    z-index: 2;
448
+    line-height: 135px;
449
+    vertical-align: middle;
450
+    overflow: hidden;
451
+    width: 135px;
452
+    height: 135px;
453
+
454
+    -webkit-transform-origin: 50% 50%;
455
+    -moz-transform-origin: 50% 50%;
456
+    -o-transform-origin: 50% 50%;
457
+    -ms-transform-origin: 50% 50%;
458
+    transform-origin: 50% 50%;
459
+
460
+    -webit-transition: 200ms ease-out;
461
+    -moz-transition: 200ms ease-out;
462
+    -o-transition: 200ms ease-out;
463
+    -ms-transition: 200ms ease-out;
464
+    transition: 200ms ease-out;
465
+}
466
+
467
+#upload .filelist li img {
468
+    width: 100%;
469
+}
470
+
471
+#upload .filelist li p.error {
472
+    background: #f43838;
473
+    color: #fff;
474
+    position: absolute;
475
+    bottom: 0;
476
+    left: 0;
477
+    height: 28px;
478
+    line-height: 28px;
479
+    width: 100%;
480
+    z-index: 100;
481
+    display:none;
482
+}
483
+
484
+#upload .filelist li .success {
485
+    display: block;
486
+    position: absolute;
487
+    left: 0;
488
+    bottom: 0;
489
+    height: 40px;
490
+    width: 100%;
491
+    z-index: 200;
492
+    background: url(../fonts/images/selected.svg) no-repeat right bottom;
493
+}
494
+
495
+#upload .filelist li.filePickerBlock {
496
+    width: 135px;
497
+    height: 135px;
498
+    background: url(../fonts/images/addfile.svg) no-repeat center;
499
+    border: 1px solid #eeeeee;
500
+    border-radius: 0;
501
+}
502
+#upload .filelist li.filePickerBlock div.webuploader-pick  {
503
+    width: 100%;
504
+    height: 100%;
505
+    margin: 0;
506
+    padding: 0;
507
+    opacity: 0;
508
+    background: none;
509
+    font-size: 0;
510
+}
511
+
512
+#upload .filelist div.file-panel {
513
+    position: absolute;
514
+    height: 0;
515
+    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \0;
516
+    background: rgba(0, 0, 0, 0.5);
517
+    width: 100%;
518
+    top: 0;
519
+    left: 0;
520
+    overflow: hidden;
521
+    z-index: 300;
522
+}
523
+
524
+#upload .filelist div.file-panel span {
525
+    width: 24px;
526
+    height: 24px;
527
+    display: inline;
528
+    float: right;
529
+    text-indent: -9999px;
530
+    overflow: hidden;
531
+    background: url(./images/icons.png) no-repeat;
532
+    background: url(./images/icons.gif) no-repeat \9;
533
+    margin: 5px 1px 1px;
534
+    cursor: pointer;
535
+    -webkit-tap-highlight-color: rgba(0,0,0,0);
536
+    -webkit-user-select: none;
537
+    -moz-user-select: none;
538
+    -ms-user-select: none;
539
+    user-select: none;
540
+}
541
+
542
+#upload .filelist div.file-panel span.rotateLeft {
543
+    display:none;
544
+    background-position: 0 -24px;
545
+}
546
+
547
+#upload .filelist div.file-panel span.rotateLeft:hover {
548
+    background-position: 0 0;
549
+}
550
+
551
+#upload .filelist div.file-panel span.rotateRight {
552
+    display:none;
553
+    background-position: -24px -24px;
554
+}
555
+
556
+#upload .filelist div.file-panel span.rotateRight:hover {
557
+    background-position: -24px 0;
558
+}
559
+
560
+#upload .filelist div.file-panel span.cancel {
561
+    background-position: -48px -24px;
562
+}
563
+
564
+#upload .filelist div.file-panel span.cancel:hover {
565
+    background-position: -48px 0;
566
+}
567
+
568
+#upload .statusBar {
569
+    height: 45px;
570
+    border-bottom: 1px solid #dadada;
571
+    margin: 0 10px;
572
+    padding: 0;
573
+    line-height: 45px;
574
+    vertical-align: middle;
575
+    position: relative;
576
+}
577
+
578
+#upload .statusBar .progress {
579
+    border: 1px solid #1483d8;
580
+    width: 198px;
581
+    background: #fff;
582
+    height: 18px;
583
+    position: absolute;
584
+    top: 12px;
585
+    display: none;
586
+    text-align: center;
587
+    line-height: 18px;
588
+    color: #6dbfff;
589
+    margin: 0 10px 0 0;
590
+}
591
+#upload .statusBar .progress span.percentage {
592
+    width: 0;
593
+    height: 100%;
594
+    left: 0;
595
+    top: 0;
596
+    background: #1483d8;
597
+    position: absolute;
598
+}
599
+#upload .statusBar .progress span.text {
600
+    position: relative;
601
+    z-index: 10;
602
+}
603
+
604
+#upload .statusBar .info {
605
+    display: inline-block;
606
+    font-size: 14px;
607
+    color: #666666;
608
+}
609
+
610
+#upload .statusBar .btns {
611
+    position: absolute;
612
+    top: 7px;
613
+    right: 0;
614
+    line-height: 30px;
615
+}
616
+
617
+#filePickerBtn {
618
+    display: inline-block;
619
+    float: left;
620
+}
621
+#upload .statusBar .btns .webuploader-pick,
622
+#upload .statusBar .btns .uploadBtn,
623
+#upload .statusBar .btns .uploadBtn.state-uploading,
624
+#upload .statusBar .btns .uploadBtn.state-paused {
625
+    background: #ffffff;
626
+    border: 1px solid #cfcfcf;
627
+    color: #565656;
628
+    padding: 0 18px;
629
+    display: inline-block;
630
+    border-radius: 3px;
631
+    margin-left: 10px;
632
+    cursor: pointer;
633
+    font-size: 14px;
634
+    float: left;
635
+    -webkit-user-select: none;
636
+    -moz-user-select: none;
637
+    -ms-user-select: none;
638
+    user-select: none;
639
+}
640
+#upload .statusBar .btns .webuploader-pick-hover,
641
+#upload .statusBar .btns .uploadBtn:hover,
642
+#upload .statusBar .btns .uploadBtn.state-uploading:hover,
643
+#upload .statusBar .btns .uploadBtn.state-paused:hover {
644
+    background: #f0f0f0;
645
+}
646
+
647
+#upload .statusBar .btns .uploadBtn,
648
+#upload .statusBar .btns .uploadBtn.state-paused{
649
+    background: #00b7ee;
650
+    color: #fff;
651
+    border-color: transparent;
652
+}
653
+#upload .statusBar .btns .uploadBtn:hover,
654
+#upload .statusBar .btns .uploadBtn.state-paused:hover{
655
+    background: #00a2d4;
656
+}
657
+
658
+#upload .statusBar .btns .uploadBtn.disabled {
659
+    pointer-events: none;
660
+    filter:alpha(opacity=60);
661
+    -moz-opacity:0.6;
662
+    -khtml-opacity: 0.6;
663
+    opacity: 0.6;
664
+}
665
+
666
+
667
+
668
+/* 图片管理样式 */
669
+#online {
670
+    width: 100%;
671
+    height: 336px;
672
+    padding: 10px 0 0 0;
673
+}
674
+#online #imageList{
675
+    width: 100%;
676
+    height: 100%;
677
+    overflow-x: hidden;
678
+    overflow-y: auto;
679
+    position: relative;
680
+}
681
+#online ul {
682
+    display: block;
683
+    list-style: none;
684
+    margin: 0;
685
+    padding: 0;
686
+}
687
+#online li {
688
+    float: left;
689
+    display: block;
690
+    list-style: none;
691
+    padding: 0;
692
+    width: 135px;
693
+    height: 135px;
694
+    margin: 0 0 9px 9px;
695
+    *margin: 0 0 6px 6px;
696
+    background-color: #eee;
697
+    overflow: hidden;
698
+    cursor: pointer;
699
+    position: relative;
700
+}
701
+#online li.clearFloat {
702
+    float: none;
703
+    clear: both;
704
+    display: block;
705
+    width:0;
706
+    height:0;
707
+    margin: 0;
708
+    padding: 0;
709
+}
710
+#online li img {
711
+    cursor: pointer;
712
+    width: 135px !important;
713
+    height: 135px !important;
714
+    margin-top: 0px !important;
715
+}
716
+#online li .icon {
717
+    cursor: pointer;
718
+    width: 135px;
719
+    height: 135px;
720
+    position: absolute;
721
+    top: 0;
722
+    left: 0;
723
+    z-index: 2;
724
+    border: 0;
725
+    background-repeat: no-repeat;
726
+}
727
+#online li .icon:hover {
728
+    width: 129px;
729
+    height: 129px;
730
+    border: 3px solid #1094fa;
731
+}
732
+#online li.selected .icon {
733
+    background-image: url(images/success.png);
734
+    background-image: url(images/success.gif)\9;
735
+    background-position: 95px 95px;
736
+}
737
+#online li.selected .icon:hover {
738
+    width: 129px;
739
+    height: 129px;
740
+    border: 3px solid #1094fa;
741
+    background-position: 92px 92px;
742
+}
743
+
744
+
745
+/* 图片搜索样式 */
746
+#search .searchBar {
747
+    width: 100%;
748
+    height: 30px;
749
+    margin: 10px 0 5px 0;
750
+    padding: 0;
751
+}
752
+
753
+#search input.text{
754
+    width: 150px;
755
+    padding: 3px 6px;
756
+    font-size: 14px;
757
+    line-height: 1.42857143;
758
+    color: #555;
759
+    background-color: #fff;
760
+    background-image: none;
761
+    border: 1px solid #ccc;
762
+    border-radius: 4px;
763
+    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
764
+    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
765
+    -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
766
+    transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
767
+}
768
+#search input.text:focus {
769
+    border-color: #66afe9;
770
+    outline: 0;
771
+    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
772
+    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
773
+}
774
+#search input.searchTxt {
775
+    margin-left:5px;
776
+    padding-left: 5px;
777
+    background: #FFF;
778
+    width: 300px;
779
+    *width: 260px;
780
+    height: 21px;
781
+    line-height: 21px;
782
+    float: left;
783
+    dislay: block;
784
+}
785
+#search .pagination{
786
+    margin-top: 5px;
787
+}
788
+#search input.num{
789
+    width: 80px;
790
+}
791
+
792
+#search .searchType {
793
+    width: 95px;
794
+    height: 28px;
795
+    padding:0;
796
+    line-height: 28px;
797
+    border: 1px solid #d7d7d7;
798
+    border-radius: 0;
799
+    vertical-align: top;
800
+    margin-left: 5px;
801
+    float: left;
802
+    dislay: block;
803
+}
804
+
805
+#search #searchBtn,
806
+#search #searchReset {
807
+    display: inline-block;
808
+    margin-bottom: 0;
809
+    margin-right: 5px;
810
+    padding: 4px 10px;
811
+    font-weight: 400;
812
+    text-align: center;
813
+    vertical-align: middle;
814
+    cursor: pointer;
815
+    background-image: none;
816
+    border: 1px solid transparent;
817
+    white-space: nowrap;
818
+    font-size: 14px;
819
+    border-radius: 4px;
820
+    -webkit-user-select: none;
821
+    -moz-user-select: none;
822
+    -ms-user-select: none;
823
+    user-select: none;
824
+    vertical-align: top;
825
+    float: right;
826
+}
827
+
828
+#search #searchBtn {
829
+    color: white;
830
+    border-color: #285e8e;
831
+    background-color: #3b97d7;
832
+}
833
+#search #searchReset {
834
+    color: #333;
835
+    border-color: #ccc;
836
+    background-color: #fff;
837
+}
838
+#search #searchBtn:hover {
839
+    background-color: #3276b1;
840
+}
841
+#search #searchReset:hover {
842
+    background-color: #eee;
843
+}
844
+
845
+#search .msg {
846
+    margin-left: 5px;
847
+}
848
+
849
+#search .searchList{
850
+    width: 100%;
851
+    height: 300px;
852
+    overflow: hidden;
853
+    clear: both;
854
+}
855
+#search .searchList ul{
856
+    margin:0;
857
+    padding:0;
858
+    list-style:none;
859
+    clear: both;
860
+    width: 100%;
861
+    height: 100%;
862
+    overflow-x: hidden;
863
+    overflow-y: auto;
864
+    zoom: 1;
865
+    position: relative;
866
+}
867
+
868
+#search .searchList li {
869
+    list-style:none;
870
+    float: left;
871
+    display: block;
872
+    width: 115px;
873
+    margin: 5px 10px 5px 20px;
874
+    *margin: 5px 10px 5px 15px;
875
+    padding:0;
876
+    font-size: 12px;
877
+    box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
878
+    -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
879
+    -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
880
+    position: relative;
881
+    vertical-align: top;
882
+    text-align: center;
883
+    overflow: hidden;
884
+    cursor: pointer;
885
+    filter: alpha(Opacity=100);
886
+    -moz-opacity: 1;
887
+    opacity: 1;
888
+    border: 2px solid #eee;
889
+}
890
+
891
+#search .searchList li.selected {
892
+    filter: alpha(Opacity=40);
893
+    -moz-opacity: 0.4;
894
+    opacity: 0.4;
895
+    border: 2px solid #00a0e9;
896
+}
897
+
898
+#search .searchList li p {
899
+    background-color: #eee;
900
+    margin: 0;
901
+    padding: 0;
902
+    position: relative;
903
+    width:100%;
904
+    height:115px;
905
+    overflow: hidden;
906
+}
907
+
908
+#search .searchList li p img {
909
+    cursor: pointer;
910
+    border: 0;
911
+}
912
+
913
+#search .searchList li a {
914
+    color: #999;
915
+    border-top: 1px solid #F2F2F2;
916
+    background: #FAFAFA;
917
+    text-align: center;
918
+    display: block;
919
+    padding: 0 5px;
920
+    width: 105px;
921
+    height:32px;
922
+    line-height:32px;
923
+    white-space:nowrap;
924
+    text-overflow:ellipsis;
925
+    text-decoration: none;
926
+    overflow: hidden;
927
+    word-break: break-all;
928
+}
929
+
930
+#search .searchList a:hover {
931
+    text-decoration: underline;
932
+    color: #333;
933
+}
934
+#search .searchList .clearFloat{
935
+    clear: both;
936
+}

+ 127 - 0
static/neditor/dialogs/image/image.html View File

@@ -0,0 +1,127 @@
1
+<!doctype html>
2
+<html>
3
+<head>
4
+    <meta charset="UTF-8">
5
+    <title>neditor图片对话框</title>
6
+    <script type="text/javascript" src="../internal.js"></script>
7
+
8
+    <!-- jquery -->
9
+    <script type="text/javascript" src="../../third-party/jquery-1.10.2.min.js"></script>
10
+
11
+    <!-- webuploader -->
12
+    <script src="../../third-party/webuploader/webuploader.js"></script>
13
+    <link rel="stylesheet" type="text/css" href="../../third-party/webuploader/webuploader.css">
14
+
15
+    <!-- image dialog -->
16
+    <link rel="stylesheet" href="image.css" type="text/css" />
17
+    <!--<link rel="stylesheet" href="../fonts/buttoniconex.css">-->
18
+</head>
19
+<body>
20
+
21
+    <div class="wrapper">
22
+        <div id="tabhead" class="tabhead">
23
+            <span class="tab" data-content-id="remote"><var id="lang_tab_remote"></var></span>
24
+            <span class="tab focus" data-content-id="upload"><var id="lang_tab_upload"></var></span>
25
+            <!-- <span class="tab" data-content-id="online"><var id="lang_tab_online"></var></span> -->
26
+            <!-- <span class="tab" data-content-id="search"><var id="lang_tab_search"></var></span> -->
27
+        </div>
28
+        <div class="alignBar">
29
+            <label class="algnLabel"><var id="lang_input_align"></var></label>
30
+                <span id="alignIcon">
31
+                    <span id="noneAlign" class="none-align focus" data-align="none">
32
+                        <!--<i class="icon edui-icon"></i>-->
33
+                    </span>
34
+                    <span id="leftAlign" class="left-align" data-align="left"></span>
35
+                    <span id="rightAlign" class="right-align" data-align="right"></span>
36
+                    <span id="centerAlign" class="center-align" data-align="center"></span>
37
+                </span>
38
+            <input id="align" name="align" type="hidden" value="none"/>
39
+        </div>
40
+        <div id="tabbody" class="tabbody">
41
+
42
+            <!-- 远程图片 -->
43
+            <div id="remote" class="panel">
44
+                <div class="top">
45
+                    <div class="row">
46
+                        <label for="url"><var id="lang_input_url"></var></label>
47
+                        <span><input class="text" id="url" type="text"/></span>
48
+                    </div>
49
+                    <div class="row">
50
+                        <label><var id="lang_input_size"></var></label>
51
+                        <span><var id="lang_input_width">&nbsp;&nbsp;</var><input class="text" type="text" id="width"/>px </span>
52
+                        <span><var id="lang_input_height">&nbsp;&nbsp;</var><input class="text" type="text" id="height"/>px </span>
53
+                        <span><input id="lock" type="checkbox" disabled="disabled"><span id="lockicon"></span></span>
54
+                    </div>
55
+                </div>
56
+                <div class="left">
57
+                    <div class="row">
58
+                        <label><var id="lang_input_border"></var></label>
59
+                        <span><input class="text" type="text" id="border"/>px </span>
60
+                    </div>
61
+                    <div class="row">
62
+                        <label><var id="lang_input_vhspace"></var></label>
63
+                        <span><input class="text" type="text" id="vhSpace"/>px </span>
64
+                    </div>
65
+                    <div class="row">
66
+                        <label><var id="lang_input_title"></var></label>
67
+                        <span><textarea class="text" id="title" cols="30" rows="3"></textarea></span>
68
+                    </div>
69
+                </div>
70
+                <div class="right"><div id="preview"></div></div>
71
+            </div>
72
+
73
+            <!-- 上传图片 -->
74
+            <div id="upload" class="panel focus">
75
+                <div id="queueList" class="queueList">
76
+                    <div class="statusBar element-invisible">
77
+                        <div class="progress">
78
+                            <span class="text">0%</span>
79
+                            <span class="percentage"></span>
80
+                        </div><div class="info"></div>
81
+                        <div class="btns">
82
+                            <div id="filePickerBtn"></div>
83
+                            <div class="uploadBtn"><var id="lang_start_upload"></var></div>
84
+                        </div>
85
+                    </div>
86
+                    <div id="dndArea" class="placeholder">
87
+                        <div class="filePickerContainer">
88
+                            <div id="filePickerReady"></div>
89
+                        </div>
90
+                    </div>
91
+                    <ul class="filelist element-invisible">
92
+                        <li id="filePickerBlock" class="filePickerBlock"></li>
93
+                    </ul>
94
+                </div>
95
+            </div>
96
+
97
+            <!-- 在线图片 -->
98
+            <div id="online" class="panel">
99
+                <div id="imageList"><var id="lang_imgLoading"></var></div>
100
+            </div>
101
+
102
+            <!-- 搜索图片 -->
103
+            <div id="search" class="panel">
104
+                <div class="searchBar">
105
+                    <input id="searchTxt" class="searchTxt text" type="text" />
106
+                    <select id="searchType" class="searchType">
107
+                        <option value="&lm=-1&st=-1&face=0&s="></option>
108
+                        <option value="&lm=-1&st=-1&face=0&s=3"></option>
109
+                        <option value="&lm=-1&st=-1&face=1&s="></option>
110
+                        <option value="&lm=-1&st=1&face=0&s="></option>
111
+                        <option value="&lm=-1&st=2&face=0&s="></option>
112
+                        <option value="&lm=6&st=-1&face=0&s="></option>
113
+                        <option value="&lm=7&st=-1&face=0&s="></option>
114
+                    </select>
115
+                    <input id="searchReset" type="button"  />
116
+                    <input id="searchBtn" type="button"  />
117
+                </div>
118
+                <div id="searchList" class="searchList"><ul id="searchListUl"></ul></div>
119
+                <div class="pagination">每页显示 <input type="number" id="pageNum" class="text num" value="50"/> 条</div>
120
+            </div>
121
+
122
+        </div>
123
+    </div>
124
+    <script type="text/javascript" src="image.js"></script>
125
+
126
+</body>
127
+</html>

File diff suppressed because it is too large
+ 1130 - 0
static/neditor/dialogs/image/image.js


BIN
static/neditor/dialogs/image/images/alignicon.jpg View File


BIN
static/neditor/dialogs/image/images/bg.png View File


BIN
static/neditor/dialogs/image/images/icons.gif View File


+ 0 - 0
static/neditor/dialogs/image/images/icons.png View File


Some files were not shown because too many files changed in this diff