@jx3box/jx3box-editor 1.0.8 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/assets/css/article.less +32 -25
  2. package/assets/css/article_markdown.less +14 -10
  3. package/assets/css/markdown/_.less +2 -0
  4. package/assets/css/markdown/macro.less +45 -0
  5. package/assets/css/markdown/talent.less +42 -0
  6. package/assets/css/markdown/video.less +25 -0
  7. package/assets/css/markdown.less +67 -24
  8. package/assets/css/module/buff.less +1 -1
  9. package/assets/css/module/item.less +0 -1
  10. package/assets/css/module/item_simple.less +43 -41
  11. package/assets/css/module/macro.less +71 -38
  12. package/assets/css/module/npc.less +224 -0
  13. package/assets/css/module/skill.less +1 -1
  14. package/assets/css/module/talent.less +424 -0
  15. package/assets/css/resource.less +4 -0
  16. package/assets/css/{module → tinymce}/_.less +1 -1
  17. package/assets/css/{module → tinymce}/a.less +1 -1
  18. package/assets/css/{module → tinymce}/code.less +1 -1
  19. package/assets/css/{module → tinymce}/fold.less +1 -1
  20. package/assets/css/{module → tinymce}/h.less +1 -1
  21. package/assets/css/{module → tinymce}/hr.less +1 -1
  22. package/assets/css/{module → tinymce}/img.less +1 -1
  23. package/assets/css/{module → tinymce}/imgpreview.less +0 -0
  24. package/assets/css/{module → tinymce}/latex.less +1 -1
  25. package/assets/css/{module → tinymce}/list.less +1 -1
  26. package/assets/css/tinymce/macro.less +40 -0
  27. package/assets/css/{module → tinymce}/nextpage.less +5 -0
  28. package/assets/css/{module → tinymce}/p.less +1 -1
  29. package/assets/css/{module → tinymce}/plugin.less +0 -0
  30. package/assets/css/{module → tinymce}/qixue.less +2 -1
  31. package/assets/css/{module → tinymce}/quote.less +1 -1
  32. package/assets/css/{module → tinymce}/table.less +2 -2
  33. package/assets/css/{module → tinymce}/video.less +2 -2
  34. package/assets/data/markdown_whitelist.json +6 -2
  35. package/assets/img/npc/attack.svg +69 -0
  36. package/assets/img/npc/buff.svg +20 -0
  37. package/assets/img/npc/energy.svg +1 -0
  38. package/assets/img/npc/miss.svg +1 -0
  39. package/assets/img/npc/npc.svg +1 -0
  40. package/assets/img/npc/radar.svg +45 -0
  41. package/assets/img/npc/shield.svg +1 -0
  42. package/assets/img/npc/sight.svg +1 -0
  43. package/assets/img/npc/skull.svg +15 -0
  44. package/assets/img/npc/target.svg +55 -0
  45. package/assets/js/macro.js +0 -1
  46. package/assets/js/qixue.js +0 -1
  47. package/package.json +1 -1
  48. package/service/database.js +12 -1
  49. package/src/Article.vue +1 -1
  50. package/src/ArticleMarkdown.vue +9 -1
  51. package/src/Markdown.vue +55 -15
  52. package/src/Npc.vue +214 -0
  53. package/src/Resource.vue +35 -0
  54. package/src/components/markdown/katex.vue +58 -0
  55. package/src/components/markdown/macro.vue +3 -5
  56. package/src/components/markdown/pz.vue +4 -6
  57. package/src/components/markdown/talent.vue +49 -0
  58. package/src/components/markdown/talent2.vue +48 -0
  59. package/src/components/markdown/video.vue +49 -0
  60. package/assets/css/markdown/common.less +0 -13
package/src/Npc.vue ADDED
@@ -0,0 +1,214 @@
1
+ <template>
2
+ <div class="w-npc" v-if="data">
3
+ <div class="w-npc-wrapper">
4
+ <div class="w-npc-content">
5
+ <div class="u-npc">
6
+ <div class="u-title">
7
+ <span class="u-name">{{ data.Name }}</span>
8
+ <span class="u-name-add">
9
+ <span v-if="data.Title || data.Level">&lt;</span>
10
+ <span class="u-nick" v-if="data.Title">
11
+ {{ data.Title }}
12
+ </span>
13
+ <span v-if="data.Title && data.Level">·</span>
14
+ <b class="u-level" v-if="data.Level">{{ data.Level }}</b>
15
+ <span v-if="data.Title || data.Level">&gt;</span>
16
+ </span>
17
+ <div class="u-base">
18
+ <span class="u-atmap" v-if="data.MapName">
19
+ {{ data.MapName }}
20
+ </span>
21
+ <span class="u-intensity" v-if="data.Intensity">
22
+ 强度
23
+ {{ data.Intensity }}
24
+ </span>
25
+ </div>
26
+ </div>
27
+ <div class="u-primary">
28
+ <div class="u-life">
29
+ <img class="u-descicon u-descicon-life" svg-inline src="../assets/img/npc/energy.svg" />
30
+ <b>血量</b>
31
+ <em>MaxLife</em>
32
+ <strong>{{ data.MaxLife }}</strong>
33
+ </div>
34
+ <div class="u-mana">
35
+ <img class="u-descicon u-descicon-mana" svg-inline src="../assets/img/npc/energy.svg" />
36
+ <b>内力</b>
37
+ <em>MaxMana</em>
38
+ <strong>{{ data.MaxMana }}</strong>
39
+ </div>
40
+ <div class="u-touch" v-if="data.TouchRange">
41
+ <img class="u-descicon u-descicon-touch" svg-inline src="../assets/img/npc/radar.svg" />
42
+ <b>范围</b>
43
+ <em>TouchRange</em>
44
+ <strong>{{ data.TouchRange }}</strong>
45
+ </div>
46
+ <div class="u-sense" v-if="data.Sense">
47
+ <img class="u-descicon u-descicon-sense" svg-inline src="../assets/img/npc/sight.svg" />
48
+ <b>识破</b>
49
+ <em>Sense</em>
50
+ <strong>{{ data.Sense }}</strong>
51
+ </div>
52
+ <div class="u-dodge" v-if="data.Dodge">
53
+ <img class="u-descicon u-descicon-dodge" svg-inline src="../assets/img/npc/miss.svg" />
54
+ <b>闪避</b>
55
+ <em>Dodge</em>
56
+ <strong>{{ data.Dodge }}</strong>
57
+ </div>
58
+ <div class="u-dodge" v-if="data.Parry">
59
+ <img class="u-descicon u-descicon-dodge" svg-inline src="../assets/img/npc/miss.svg" />
60
+ <b>招架</b>
61
+ <em>Parry</em>
62
+ <strong>{{ data.ParryValue }}</strong>
63
+ </div>
64
+ <div class="u-shield">
65
+ <img class="u-descicon u-descicon-shield" svg-inline src="../assets/img/npc/shield.svg" />
66
+ <b>防御</b>
67
+ <em>Shield</em>
68
+ <span class="u-sitem">
69
+ 外功防御
70
+ <em>PhysicsShieldBase</em>
71
+ <span class="u-value">{{ ~~data.PhysicsShieldBase }}</span>
72
+ </span>
73
+ <span class="u-sitem">
74
+ 混元防御
75
+ <em>NeutralMagicDefence</em>
76
+ <span class="u-value">{{ ~~data.NeutralMagicDefence }}</span>
77
+ </span>
78
+ <span class="u-sitem">
79
+ 阳性防御
80
+ <em>SolarMagicDefence</em>
81
+ <span class="u-value">{{ ~~data.SolarMagicDefence }}</span>
82
+ </span>
83
+ <span class="u-sitem">
84
+ 阴性防御
85
+ <em>LunarMagicDefence</em>
86
+ <span class="u-value">{{ ~~data.LunarMagicDefence }}</span>
87
+ </span>
88
+ <span class="u-sitem">
89
+ 毒性防御
90
+ <em>PoisonMagicDefence</em>
91
+ <span class="u-value">{{ ~~data.PoisonMagicDefence }}</span>
92
+ </span>
93
+ </div>
94
+ <div class="u-critical">
95
+ <img class="u-descicon u-descicon-attack" svg-inline src="../assets/img/npc/attack.svg" />
96
+ <b>会心</b>
97
+ <em>Critical</em>
98
+ <span class="u-sitem">
99
+ 外功会心
100
+ <em>PhysicsCriticalStrike</em>
101
+ <span class="u-value">{{ ~~data.PhysicsCriticalStrike }}</span>
102
+ </span>
103
+ <span class="u-sitem">
104
+ 混元会心
105
+ <em>NeutralCriticalStrike</em>
106
+ <span class="u-value">{{ ~~data.NeutralCriticalStrike }}</span>
107
+ </span>
108
+ <span class="u-sitem">
109
+ 阳性会心
110
+ <em>SolarCriticalStrike</em>
111
+ <span class="u-value">{{ ~~data.SolarCriticalStrike }}</span>
112
+ </span>
113
+ <span class="u-sitem">
114
+ 阴性会心
115
+ <em>LunarCriticalStrike</em>
116
+ <span class="u-value">{{ ~~data.LunarCriticalStrike }}</span>
117
+ </span>
118
+ <span class="u-sitem">
119
+ 毒性会心
120
+ <em>PoisonCriticalStrike</em>
121
+ <span class="u-value">{{ ~~data.PoisonCriticalStrike }}</span>
122
+ </span>
123
+ </div>
124
+ <div class="u-attack">
125
+ <img class="u-descicon u-descicon-attack" svg-inline src="../assets/img/npc/target.svg" />
126
+ <b>命中</b>
127
+ <em>Attack</em>
128
+ <span class="u-sitem">
129
+ 外功命中
130
+ <em>PhysicsAttackHit</em>
131
+ <span class="u-value">{{ ~~data.PhysicsAttackHit }}</span>
132
+ </span>
133
+ <span class="u-sitem">
134
+ 混元命中
135
+ <em>NeutralMagicHit</em>
136
+ <span class="u-value">{{ ~~data.NeutralMagicHit }}</span>
137
+ </span>
138
+ <span class="u-sitem">
139
+ 阳性命中
140
+ <em>SolarMagicHit</em>
141
+ <span class="u-value">{{ ~~data.SolarMagicHit }}</span>
142
+ </span>
143
+ <span class="u-sitem">
144
+ 阴性命中
145
+ <em>LunarMagicHit</em>
146
+ <span class="u-value">{{ ~~data.LunarMagicHit }}</span>
147
+ </span>
148
+ <span class="u-sitem">
149
+ 毒性命中
150
+ <em>PoisonMagicHit</em>
151
+ <span class="u-value">{{ ~~data.PoisonMagicHit }}</span>
152
+ </span>
153
+ </div>
154
+ </div>
155
+ <div class="u-id">
156
+ ID : {{id}}
157
+ </div>
158
+ </div>
159
+ </div>
160
+ </div>
161
+ </div>
162
+ </template>
163
+
164
+ <script>
165
+ import { getNpc } from "../service/database.js";
166
+ import { iconLink } from "@jx3box/jx3box-common/js/utils";
167
+ export default {
168
+ name: "Npc",
169
+ props: ["client", "id"],
170
+ data: () => ({
171
+ data: null,
172
+ }),
173
+ computed: {
174
+ params: function() {
175
+ return [this.client, this.id];
176
+ },
177
+ },
178
+ watch: {
179
+ params: {
180
+ immediate: true,
181
+ deep: true,
182
+ handler(val) {
183
+ if (val) {
184
+ let [client, id] = val;
185
+ // 读取本地数据
186
+ const cache = sessionStorage.getItem(`npc-${client}-${id}`);
187
+ if (cache) {
188
+ this.data = JSON.parse(cache);
189
+ // 没有缓存则发起请求获取数据
190
+ } else {
191
+ id &&
192
+ getNpc(...this.params).then((res) => {
193
+ let data = res.data?.list?.[0];
194
+ this.data = data;
195
+
196
+ // 将数据放入 sessionStorage
197
+ sessionStorage.setItem(`npc-${client}-${id}`, JSON.stringify(data));
198
+ });
199
+ }
200
+ }
201
+ },
202
+ },
203
+ },
204
+ methods: {
205
+ iconLink: function(id) {
206
+ return iconLink(id, this.client);
207
+ },
208
+ },
209
+ };
210
+ </script>
211
+
212
+ <style scoped lang="less">
213
+ @import "../assets/css/module/npc.less";
214
+ </style>
package/src/Resource.vue CHANGED
@@ -109,6 +109,35 @@
109
109
  </ul>
110
110
  <el-alert v-if="!item.length && done" title="没有找到相关条目" type="info" show-icon></el-alert>
111
111
  </el-tab-pane>
112
+ <el-tab-pane label="Npc" name="npc">
113
+ <span slot="label">
114
+ <img class="u-icon" svg-inline src="../assets/img/npc/skull.svg" />
115
+ <b>Npc</b>
116
+ <em class="u-count">{{ stat.npc }}</em>
117
+ </span>
118
+ <p v-if="npc.length && done" class="m-resource-count">
119
+ <i class="el-icon-s-data"></i> 共找到 <b>{{ npc.length }}</b> 条记录
120
+ </p>
121
+ <ul class="m-resource-list" v-if="npc.length">
122
+ <li v-for="(o, i) in npc" :key="i" class="u-item" :class="{ on: o.isSelected }" @click="selectNpc(o, i)" ref="item">
123
+ <span class="u-id">ID:{{ o.ID }}</span>
124
+ <img class="u-pic" :title="'IconID:' + o.IconID" :src="iconURL(o.IconID)" />
125
+ <span class="u-name">
126
+ {{ o.Name }}
127
+ <em v-if="o.Level">(等级:{{ o.Level }})</em>
128
+ </span>
129
+ <span class="u-content">
130
+ <span class="u-map">地图:{{ o.MapName }}</span>
131
+ <span class="u-life">血量:{{ o.MaxLife }}</span>
132
+ <span class="u-mana">内力:{{ o.MaxMana }}</span>
133
+ </span>
134
+ <span class="u-remark">
135
+ {{ o.Requirement }}
136
+ </span>
137
+ </li>
138
+ </ul>
139
+ <el-alert v-if="!npc.length && done" title="没有找到相关条目" type="info" show-icon></el-alert>
140
+ </el-tab-pane>
112
141
  <el-tab-pane label="图标" name="icon">
113
142
  <span slot="label">
114
143
  <img class="u-icon" svg-inline src="../assets/img/icons.svg" />
@@ -192,6 +221,7 @@ export default {
192
221
  buff: [],
193
222
  item: [],
194
223
  icon: [],
224
+ npc: [],
195
225
 
196
226
  stat: {
197
227
  skill: 0,
@@ -370,6 +400,11 @@ export default {
370
400
  o.isSelected = true;
371
401
  this.html = `<img class="e-jx3-icon" src="${__iconPath}${this.iconDir}/${o.iconID}.png" alt="${o.iconID}"/>`;
372
402
  },
403
+ selectNpc: function (o, i){
404
+ this.resetItems()
405
+ o.isSelected = true
406
+ this.html = `<a data-type="npc" class="e-jx3-npc w-jx3-element" data-mode="" data-id="${o.ID}" data-client="${this.client}" target="_blank" href="${this.getLink("npc", this.client, o.ID, '')}">[${o.Name}]</a>`
407
+ },
373
408
  resetItems: function() {
374
409
  let data = this[this.type];
375
410
  data.forEach((item) => {
@@ -0,0 +1,58 @@
1
+ <template>
2
+ <div class="c-editor-markdown-dialog">
3
+ <span class="c-markdown-toolbar-file c-markdown-toolbar-item u-katex" @click="handleClick" title="插入Latex">
4
+ Σ
5
+ </span>
6
+
7
+ <el-dialog :visible.sync="visible" title="插入数学公式" :modal-append-to-body="false">
8
+ <a class="u-help" href="/tool/16295" target="_blank">💙 查看帮助文档</a>
9
+
10
+ <el-input class="u-input u-input-katex" type="textarea" :rows="5" v-model="katex"></el-input>
11
+
12
+ <div slot="footer">
13
+ <el-button @click="cancel">取消</el-button>
14
+ <el-button type="primary" @click="insert">插入</el-button>
15
+ </div>
16
+ </el-dialog>
17
+ </div>
18
+ </template>
19
+
20
+ <script>
21
+ export default {
22
+ name: "markdown_katex",
23
+ data() {
24
+ return {
25
+ visible: false,
26
+ katex: "",
27
+ };
28
+ },
29
+ methods: {
30
+ handleClick() {
31
+ this.visible = true;
32
+ },
33
+ cancel() {
34
+ this.visible = false;
35
+ this.katex = "";
36
+ },
37
+ insert() {
38
+ const content = `<pre class="e-latex-area w-latex">${this.katex}</pre>`;
39
+
40
+ this.$emit("insert", content);
41
+
42
+ this.katex = "";
43
+
44
+ this.visible = false;
45
+ },
46
+ },
47
+ };
48
+ </script>
49
+
50
+ <style lang="less">
51
+ .c-markdown-toolbar-item.u-katex {
52
+ display: inline-flex;
53
+ justify-content: center;
54
+ align-content: center;
55
+ width: 26px;
56
+ height: 26px;
57
+ }
58
+ </style>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="c-editor-markdown-dialog c-editor-markdown-macro">
2
+ <div class="c-editor-markdown-dialog">
3
3
  <span class="c-markdown-toolbar-file c-markdown-toolbar-item" @click="handleClick" title="插入宏">宏</span>
4
4
 
5
5
  <el-dialog :visible.sync="visible" title="插入宏" :modal-append-to-body="false">
@@ -35,12 +35,10 @@ export default {
35
35
 
36
36
  this.$emit('insert', content)
37
37
 
38
+ this.macro = ''
39
+
38
40
  this.visible = false
39
41
  }
40
42
  }
41
43
  }
42
44
  </script>
43
-
44
- <style lang="less">
45
- @import '../../../assets/css/markdown/common.less';
46
- </style>
@@ -1,12 +1,12 @@
1
1
  <template>
2
- <div class="m-macro-dialog m-pz-dialog">
2
+ <div class="c-editor-markdown-dialog ">
3
3
  <span class="c-markdown-toolbar-file c-markdown-toolbar-item" @click="handleClick" title="插入配装方案">装</span>
4
4
 
5
5
  <el-dialog :visible.sync="visible" title="配装方案" :modal-append-to-body="false">
6
6
 
7
7
  <p>👘 请填入魔盒配装方案的<a target="_blank" href="/tool/32032">【嵌入版】</a>编码</p>
8
8
 
9
- <el-input class="m-macro-input" type="textarea" :rows="4" v-model="pzCode"></el-input>
9
+ <el-input class="u-input" type="textarea" :rows="4" v-model="pzCode"></el-input>
10
10
 
11
11
  <div slot="footer">
12
12
  <el-button @click="cancel">取消</el-button>
@@ -38,12 +38,10 @@ export default {
38
38
 
39
39
  this.$emit('insert', content)
40
40
 
41
+ this.pz = ''
42
+
41
43
  this.visible = false
42
44
  }
43
45
  }
44
46
  }
45
47
  </script>
46
-
47
- <style lang="less">
48
- @import '../../../assets/css/markdown/common.less';
49
- </style>
@@ -0,0 +1,49 @@
1
+ <template>
2
+ <div class="c-editor-markdown-dialog">
3
+ <span class="c-markdown-toolbar-file c-markdown-toolbar-item" @click="handleClick" title="插入奇穴方案">
4
+
5
+ </span>
6
+
7
+ <el-dialog :visible.sync="visible" title="插入奇穴方案" :modal-append-to-body="false">
8
+ <p>💙 请填入<a target="_blank" href="/app/talent">奇穴模拟器</a>生成的编码</p>
9
+
10
+ <el-input class="u-input u-input-macro" type="textarea" :rows="5" v-model="talent"></el-input>
11
+
12
+ <div slot="footer">
13
+ <el-button @click="cancel">取消</el-button>
14
+ <el-button type="primary" @click="insert">插入</el-button>
15
+ </div>
16
+ </el-dialog>
17
+ </div>
18
+ </template>
19
+
20
+ <script>
21
+ export default {
22
+ name: "markdown_talent",
23
+ data() {
24
+ return {
25
+ visible: false,
26
+ talent: "",
27
+ };
28
+ },
29
+ methods: {
30
+ handleClick() {
31
+ this.visible = true;
32
+ },
33
+ cancel() {
34
+ this.visible = false;
35
+ this.talent = "";
36
+ },
37
+ insert() {
38
+ const content = `<pre class="e-jx3qixue-area">${this.talent}</pre>`;
39
+
40
+ this.$emit("insert", content);
41
+
42
+ this.talent = "";
43
+
44
+ this.visible = false;
45
+ },
46
+ },
47
+ };
48
+ </script>
49
+
@@ -0,0 +1,48 @@
1
+ <template>
2
+ <div class="c-editor-markdown-dialog">
3
+ <span class="c-markdown-toolbar-file c-markdown-toolbar-item" @click="handleClick" title="插入镇派方案">
4
+
5
+ </span>
6
+
7
+ <el-dialog :visible.sync="visible" title="插入镇派方案" :modal-append-to-body="false">
8
+ <p>💙 请填入<a target="_blank" href="/app/talent2">镇派模拟器</a>生成的编码</p>
9
+
10
+ <el-input class="u-input u-input-macro" type="textarea" :rows="5" v-model="talent"></el-input>
11
+
12
+ <div slot="footer">
13
+ <el-button @click="cancel">取消</el-button>
14
+ <el-button type="primary" @click="insert">插入</el-button>
15
+ </div>
16
+ </el-dialog>
17
+ </div>
18
+ </template>
19
+
20
+ <script>
21
+ export default {
22
+ name: "markdown_talent2",
23
+ data() {
24
+ return {
25
+ visible: false,
26
+ talent: "",
27
+ };
28
+ },
29
+ methods: {
30
+ handleClick() {
31
+ this.visible = true;
32
+ },
33
+ cancel() {
34
+ this.visible = false;
35
+ this.talent = "";
36
+ },
37
+ insert() {
38
+ const content = `<pre class="e-jx3talent2-area">${this.talent}</pre>`;
39
+
40
+ this.$emit("insert", content);
41
+
42
+ this.talent = "";
43
+
44
+ this.visible = false;
45
+ },
46
+ },
47
+ };
48
+ </script>
@@ -0,0 +1,49 @@
1
+ <template>
2
+ <div class="c-editor-markdown-dialog">
3
+ <span class="c-markdown-toolbar-video c-markdown-toolbar-item" @click="handleClick" title="插入视频">
4
+ <i class="el-icon-video-camera"></i>
5
+ </span>
6
+
7
+ <el-dialog :visible.sync="visible" title="插入视频" :modal-append-to-body="false">
8
+ <a class="u-help" href="/tool/686/" target="_blank">💙 点击查看如何获取视频地址</a>
9
+
10
+ <el-input class="u-input" type="textarea" :rows="4" v-model="videoUrl"></el-input>
11
+
12
+ <div slot="footer">
13
+ <el-button @click="cancel">取消</el-button>
14
+ <el-button type="primary" @click="insert">插入</el-button>
15
+ </div>
16
+ </el-dialog>
17
+ </div>
18
+ </template>
19
+
20
+ <script>
21
+ export default {
22
+ name: "markdown_video",
23
+ data() {
24
+ return {
25
+ visible: false,
26
+ videoUrl: "",
27
+ };
28
+ },
29
+ methods: {
30
+ handleClick() {
31
+ this.visible = true;
32
+ },
33
+ cancel() {
34
+ this.visible = false;
35
+ this.videoUrl = "";
36
+ },
37
+ insert() {
38
+ const content = `<div class="c-article-videox">${this.videoUrl}</div>`;
39
+
40
+ this.$emit("insert", content);
41
+
42
+ this.videoUrl = "";
43
+
44
+ this.visible = false;
45
+ },
46
+ },
47
+ };
48
+ </script>
49
+
@@ -1,13 +0,0 @@
1
- .c-editor-markdown-macro {
2
- display: inline-block;
3
-
4
- .u-input {
5
- .el-textarea__inner {
6
-
7
- font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
8
- }
9
- }
10
- .el-dialog__body {
11
- padding-top: 0;
12
- }
13
- }