@jx3box/jx3box-editor 2.2.48 → 3.0.1

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 (175) hide show
  1. package/config/global.js +79 -0
  2. package/config/global.less +16 -0
  3. package/index.js +21 -8
  4. package/package.json +64 -63
  5. package/readme.md +25 -99
  6. package/src/Article.vue +96 -57
  7. package/src/ArticleMarkdown.vue +54 -47
  8. package/src/BoxResource.vue +67 -42
  9. package/src/Buff.vue +18 -7
  10. package/src/GameText.vue +32 -45
  11. package/src/Item.vue +143 -235
  12. package/src/ItemSimple.vue +27 -37
  13. package/src/Markdown.vue +362 -210
  14. package/src/Npc.vue +51 -30
  15. package/src/Resource.vue +296 -252
  16. package/src/Skill.vue +36 -26
  17. package/src/Tinymce.vue +124 -137
  18. package/src/Upload.vue +238 -155
  19. package/src/UploadAlbum.vue +189 -118
  20. package/{assets → src/assets}/css/article.less +1 -0
  21. package/src/assets/css/markdown.less +4 -0
  22. package/{assets → src/assets}/css/module/author.less +4 -3
  23. package/{assets → src/assets}/css/module/directory.less +23 -32
  24. package/{assets → src/assets}/css/module/talent.less +2 -2
  25. package/{assets → src/assets}/css/resource.less +56 -22
  26. package/src/assets/css/tinymce/_.less +28 -0
  27. package/src/assets/css/tinymce/a.less +21 -0
  28. package/{assets → src/assets}/css/tinymce/code.less +1 -1
  29. package/{assets/css → src/assets/css/tinymce}/combo.less +123 -18
  30. package/{assets → src/assets}/css/tinymce/fold.less +3 -6
  31. package/src/assets/css/tinymce/h.less +90 -0
  32. package/{assets → src/assets}/css/tinymce/latex.less +14 -14
  33. package/{assets → src/assets}/css/tinymce/macro.less +3 -3
  34. package/{assets → src/assets}/css/tinymce/pz.less +2 -2
  35. package/{assets → src/assets}/css/tinymce/table.less +5 -10
  36. package/{assets → src/assets}/css/tinymce.less +8 -4
  37. package/src/assets/css/upload.less +195 -0
  38. package/src/assets/css/upload_album.less +164 -0
  39. package/src/assets/css/var.less +2 -0
  40. package/src/assets/img/other/qr-code.svg +1 -0
  41. package/{assets → src/assets}/js/audio.js +2 -2
  42. package/{assets → src/assets}/js/directory.js +51 -23
  43. package/src/assets/js/hljs_languages.js +177 -0
  44. package/src/assets/js/katex.js +211 -0
  45. package/src/assets/js/renderImgPreview.js +49 -0
  46. package/{assets → src/assets}/js/xss.js +48 -5
  47. package/src/components/Author.vue +32 -13
  48. package/src/components/Avatar.vue +22 -3
  49. package/src/components/Combo.vue +118 -72
  50. package/src/components/PostAuthor.vue +13 -11
  51. package/src/components/QRcode.vue +136 -0
  52. package/src/components/SkillMartial.vue +13 -12
  53. package/src/pages/article.js +14 -0
  54. package/src/pages/index.js +5 -0
  55. package/src/pages/markdown.js +14 -0
  56. package/src/pages/tinymce.js +49 -0
  57. package/src/pages/upload.js +14 -0
  58. package/{service → src/service}/author.js +2 -2
  59. package/{service → src/service}/cms.js +5 -3
  60. package/{service → src/service}/database.js +4 -2
  61. package/{service → src/service}/item.js +1 -1
  62. package/{service → src/service}/node.js +1 -1
  63. package/{service → src/service}/resource.js +1 -1
  64. package/src/views/article.vue +72 -0
  65. package/src/views/index.vue +11 -0
  66. package/src/views/markdown.vue +58 -0
  67. package/src/views/tinymce.vue +58 -0
  68. package/src/views/upload.vue +111 -0
  69. package/.env +0 -2
  70. package/.vscode/settings.json +0 -5
  71. package/assets/css/katex-fix.css +0 -20
  72. package/assets/css/tinymce/_.less +0 -30
  73. package/assets/css/tinymce/a.less +0 -30
  74. package/assets/css/tinymce/combo.less +0 -111
  75. package/assets/css/tinymce/h.less +0 -58
  76. package/assets/css/upload.less +0 -105
  77. package/assets/js/katex.js +0 -191
  78. package/assets/js/renderImgPreview.js +0 -25
  79. package/babel.config.js +0 -3
  80. package/docs/markdown.md +0 -16
  81. package/jsconfig.json +0 -9
  82. package/public/article.html +0 -15
  83. package/public/css/article.css +0 -2481
  84. package/public/css/article.less +0 -3
  85. package/public/favicon.ico +0 -0
  86. package/public/tinymce.html +0 -33
  87. package/src/Equip.vue +0 -301
  88. package/src/components/LetterDemo.vue +0 -93
  89. package/src/components/medal.vue +0 -43
  90. package/test-audio.html +0 -121
  91. package/vue.config.js +0 -147
  92. /package/{assets → src/assets}/css/markdown/_.less +0 -0
  93. /package/{assets → src/assets}/css/markdown/macro.less +0 -0
  94. /package/{assets/css/article_markdown.less → src/assets/css/markdown/markdown-article.less} +0 -0
  95. /package/{assets/css/markdown.less → src/assets/css/markdown/markdown-editor.less} +0 -0
  96. /package/{assets → src/assets}/css/markdown/talent.less +0 -0
  97. /package/{assets → src/assets}/css/markdown/video.less +0 -0
  98. /package/{assets → src/assets}/css/module/buff.less +0 -0
  99. /package/{assets → src/assets}/css/module/icon.less +0 -0
  100. /package/{assets → src/assets}/css/module/item.less +0 -0
  101. /package/{assets → src/assets}/css/module/item_simple.less +0 -0
  102. /package/{assets → src/assets}/css/module/jx3_element.less +0 -0
  103. /package/{assets → src/assets}/css/module/macro.less +0 -0
  104. /package/{assets → src/assets}/css/module/npc.less +0 -0
  105. /package/{assets → src/assets}/css/module/resource.less +0 -0
  106. /package/{assets → src/assets}/css/module/skill.less +0 -0
  107. /package/{assets → src/assets}/css/tinymce/hr.less +0 -0
  108. /package/{assets → src/assets}/css/tinymce/img.less +0 -0
  109. /package/{assets → src/assets}/css/tinymce/imgpreview.less +0 -0
  110. /package/{assets → src/assets}/css/tinymce/list.less +0 -0
  111. /package/{assets → src/assets}/css/tinymce/nextpage.less +0 -0
  112. /package/{assets → src/assets}/css/tinymce/p.less +0 -0
  113. /package/{assets → src/assets}/css/tinymce/plugin.less +0 -0
  114. /package/{assets → src/assets}/css/tinymce/qixue.less +0 -0
  115. /package/{assets → src/assets}/css/tinymce/quote.less +0 -0
  116. /package/{assets → src/assets}/css/tinymce/video.less +0 -0
  117. /package/{assets → src/assets}/css/tinymce/voice.less +0 -0
  118. /package/{assets → src/assets}/data/detach_type.json +0 -0
  119. /package/{assets → src/assets}/data/game_font.json +0 -0
  120. /package/{assets → src/assets}/data/markdown_whitelist.json +0 -0
  121. /package/{assets → src/assets}/data/weapon_type.json +0 -0
  122. /package/{assets → src/assets}/img/buff.svg +0 -0
  123. /package/{assets → src/assets}/img/equip_bg.png +0 -0
  124. /package/{assets → src/assets}/img/file.svg +0 -0
  125. /package/{assets → src/assets}/img/icons.svg +0 -0
  126. /package/{assets → src/assets}/img/item/pve.png +0 -0
  127. /package/{assets → src/assets}/img/item/pvp.png +0 -0
  128. /package/{assets → src/assets}/img/item/pvx.png +0 -0
  129. /package/{assets → src/assets}/img/item/std.png +0 -0
  130. /package/{assets → src/assets}/img/item/wujie.png +0 -0
  131. /package/{assets → src/assets}/img/item.svg +0 -0
  132. /package/{assets → src/assets}/img/jx3.svg +0 -0
  133. /package/{assets → src/assets}/img/jx3box.svg +0 -0
  134. /package/{assets → src/assets}/img/npc/attack.svg +0 -0
  135. /package/{assets → src/assets}/img/npc/buff.svg +0 -0
  136. /package/{assets → src/assets}/img/npc/energy.svg +0 -0
  137. /package/{assets → src/assets}/img/npc/miss.svg +0 -0
  138. /package/{assets → src/assets}/img/npc/npc.svg +0 -0
  139. /package/{assets → src/assets}/img/npc/radar.svg +0 -0
  140. /package/{assets → src/assets}/img/npc/shield.svg +0 -0
  141. /package/{assets → src/assets}/img/npc/sight.svg +0 -0
  142. /package/{assets → src/assets}/img/npc/skull.svg +0 -0
  143. /package/{assets → src/assets}/img/npc/target.svg +0 -0
  144. /package/{assets → src/assets}/img/skill.svg +0 -0
  145. /package/{assets → src/assets}/img/skillset.png +0 -0
  146. /package/{assets → src/assets}/js/a.js +0 -0
  147. /package/{assets → src/assets}/js/code.js +0 -0
  148. /package/{assets → src/assets}/js/combo.js +0 -0
  149. /package/{assets → src/assets}/js/drag.js +0 -0
  150. /package/{assets → src/assets}/js/filter2.js +0 -0
  151. /package/{assets → src/assets}/js/fold.js +0 -0
  152. /package/{assets → src/assets}/js/gallery.js +0 -0
  153. /package/{assets → src/assets}/js/iframe.js +0 -0
  154. /package/{assets → src/assets}/js/img.js +0 -0
  155. /package/{assets → src/assets}/js/item/attribute_percent.js +0 -0
  156. /package/{assets → src/assets}/js/item/bind.js +0 -0
  157. /package/{assets → src/assets}/js/item/border.js +0 -0
  158. /package/{assets → src/assets}/js/item/border_quest.js +0 -0
  159. /package/{assets → src/assets}/js/item/color.js +0 -0
  160. /package/{assets → src/assets}/js/item/hljs_languages.js +0 -0
  161. /package/{assets → src/assets}/js/item/icon_url.js +0 -0
  162. /package/{assets → src/assets}/js/item/second_format.js +0 -0
  163. /package/{assets → src/assets}/js/jx3_element.js +0 -0
  164. /package/{assets → src/assets}/js/macro.js +0 -0
  165. /package/{assets → src/assets}/js/nextpage.js +0 -0
  166. /package/{assets → src/assets}/js/pswp.js +0 -0
  167. /package/{assets → src/assets}/js/pswp_template.js +0 -0
  168. /package/{assets → src/assets}/js/pz_iframe.js +0 -0
  169. /package/{assets → src/assets}/js/qixue.js +0 -0
  170. /package/{assets → src/assets}/js/script.js +0 -0
  171. /package/{assets → src/assets}/js/talent2.js +0 -0
  172. /package/{assets → src/assets}/js/tex-mml-chtml.js +0 -0
  173. /package/{service → src/service}/enum/CollectionPublic.js +0 -0
  174. /package/{service → src/service}/enum/EquipPosition.js +0 -0
  175. /package/{service → src/service}/enum/EquipType.js +0 -0
@@ -1,58 +0,0 @@
1
- //标题
2
- .c-article-tinymce {
3
- h1,
4
- h2,
5
- h3,
6
- h4,
7
- h5,
8
- h6 {
9
- margin-top: 24px;
10
- margin-bottom: 16px;
11
- font-weight: 600;
12
- line-height: 1.25;
13
- }
14
-
15
- h1,
16
- h2 {
17
- padding-bottom: 0.3em;
18
- border-bottom: 1px solid #eaecef;
19
- }
20
-
21
- h1 {
22
- font-size: 2em;
23
- }
24
-
25
- h2 {
26
- font-size: 1.5em;
27
- }
28
-
29
- h3 {
30
- font-size: 1.25em;
31
- }
32
-
33
- h4 {
34
- font-size: 1em;
35
- border-left: 5px solid #0366d6;
36
- padding: 6px 10px;
37
- background-color: #fafbfc;
38
- }
39
-
40
- h5 {
41
- font-size: 14px;
42
- padding: 8px 10px;
43
- background-color: #fafbfc;
44
- border-radius: 4px;
45
- }
46
-
47
- h6 {
48
- font-size: 13px;
49
- padding: 5px 0 10px 0;
50
- border-bottom: 1px dotted #ddd;
51
- &:before {
52
- content: ">";
53
- color: #ccc;
54
- margin-right: 10px;
55
- font-family: "宋体", Consolas;
56
- }
57
- }
58
- }
@@ -1,105 +0,0 @@
1
- .c-upload {
2
- .u-upload-clear {
3
- .pa;
4
- .lt(70px, 20px);
5
- }
6
- .u-upload-tip {
7
- padding-right: 10px;
8
- padding-top: 6px;
9
- padding-bottom: 6px;
10
- .el-alert__title {
11
- .fz(12px, 16px);
12
- padding-right: 20px;
13
- .db;
14
- .nobreak;
15
- }
16
- .mb(20px);
17
- }
18
-
19
- .el-dialog__body {
20
- padding-top: 0;
21
- }
22
-
23
- .el-upload-list li {
24
- outline: none;
25
- }
26
-
27
- .el-upload-list__item {
28
- &:hover {
29
- border: 1px solid #13ce66;
30
- }
31
- }
32
-
33
- // 列表
34
- .u-file-wrapper {
35
- .size(100%);
36
- &.isSelected {
37
- }
38
- &.disabled {
39
- cursor: default;
40
- opacity: 0.38;
41
- border-color: #eee;
42
- .u-fileplaceholder {
43
- fill: #aaa;
44
- }
45
- }
46
- .pointer;
47
- }
48
- .u-filebox {
49
- .x;
50
- padding: 37px;
51
- }
52
- .u-fileplaceholder {
53
- width: 40px;
54
- height: 40px;
55
- fill: @primary;
56
- }
57
- .u-filename {
58
- .db;
59
- .nobreak;
60
- }
61
-
62
- // 勾选
63
- .u-file-select-label {
64
- position: absolute;
65
- right: -15px;
66
- top: -6px;
67
- width: 40px;
68
- height: 24px;
69
- background: #13ce66;
70
- text-align: center;
71
- -webkit-transform: rotate(45deg);
72
- transform: rotate(45deg);
73
- -webkit-box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2);
74
- box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2);
75
-
76
- i {
77
- font-size: 12px;
78
- margin-top: 12px;
79
- transform: rotate(-45deg);
80
- }
81
- }
82
-
83
- .c-large-dialog .el-dialog {
84
- .w(60%);
85
- height: 70%;
86
- .el-dialog__body {
87
- height: calc(100% - 70px*2);
88
- overflow-y: auto;
89
- box-sizing: border-box;
90
- }
91
- }
92
- @media screen and (max-width: @notebook) {
93
- .c-large-dialog .el-dialog {
94
- .w(90%);
95
- }
96
- }
97
- @media screen and (max-width: @ipad-y) {
98
- .c-large-dialog .el-dialog {
99
- margin: 0 !important;
100
- .size(100%);
101
- max-height: none;
102
- .h(100%);
103
- }
104
- }
105
- }
@@ -1,191 +0,0 @@
1
- import $ from 'jquery';
2
- import katex from 'katex';
3
- import 'katex/dist/katex.min.css';
4
-
5
- function renderKatexBlock(selector = ".w-latex") {
6
- try {
7
- $(selector).each(function(i, ele) {
8
- let $katex = $(this);
9
-
10
- // 获取原始HTML内容
11
- let raw = $katex.html();
12
-
13
- // 处理各种换行组合:
14
- // 1. \\<br /> 或 \\<br> -> \\
15
- raw = raw.replace(/\\\\\s*<br\s*\/?>/gi, '\\\\');
16
- // 2. \<br /> 或 \<br> -> \\
17
- raw = raw.replace(/\\\s*<br\s*\/?>/gi, '\\\\');
18
- // 3. 单独的 <br /> -> \\
19
- raw = raw.replace(/<br\s*\/?>/gi, '\\\\');
20
-
21
- // 移除其他HTML标签但保留内容
22
- raw = raw.replace(/<[^>]+>/g, '');
23
-
24
- // 解码HTML实体(如 &nbsp; -> 空格)
25
- raw = $('<div>').html(raw).text();
26
-
27
- // 清理多余的空白字符
28
- raw = raw.trim();
29
-
30
- console.log('Original HTML:', $katex.html());
31
- console.log('Processed LaTeX:', raw);
32
-
33
- katex.render(raw, $katex.get(0), { displayMode: true });
34
- });
35
- } catch (e) {
36
- console.error('KaTeX render error:', e);
37
- console.error('Failed content:', $(this).html());
38
- }
39
- }
40
-
41
- function renderKatexInline(container = document.body) {
42
- // 支持 \(...\) 和 $...$ 两种行内语法
43
- // 改进正则表达式,更好地匹配单美元符号
44
- const inlineRegex = /(\\\((.+?)\\\)|\$([^$]+?)\$)/g;
45
-
46
- const walker = document.createTreeWalker(
47
- container,
48
- NodeFilter.SHOW_TEXT,
49
- {
50
- acceptNode: function (node) {
51
- if (
52
- node.parentNode &&
53
- !node.parentNode.closest("pre") &&
54
- (node.nodeValue.includes("\\(") || node.nodeValue.includes("$"))
55
- ) {
56
- return NodeFilter.FILTER_ACCEPT;
57
- }
58
- return NodeFilter.FILTER_REJECT;
59
- },
60
- }
61
- );
62
-
63
- const nodesToReplace = [];
64
- while (walker.nextNode()) {
65
- nodesToReplace.push(walker.currentNode);
66
- }
67
-
68
- console.log('Inline processing nodes:', nodesToReplace.length);
69
-
70
- nodesToReplace.forEach((node) => {
71
- const text = node.nodeValue;
72
- const frag = document.createDocumentFragment();
73
- let lastIndex = 0;
74
- let match;
75
-
76
- console.log('Processing text:', text);
77
-
78
- while ((match = inlineRegex.exec(text))) {
79
- const fullMatch = match[0];
80
- const parenContent = match[2]; // \(...\)的内容
81
- const dollarContent = match[3]; // $...$的内容
82
- const raw = parenContent || dollarContent;
83
- const matchStart = match.index;
84
-
85
- console.log('Found inline match:', fullMatch, 'Raw:', raw);
86
-
87
- // 添加匹配前文本
88
- frag.appendChild(document.createTextNode(text.slice(lastIndex, matchStart)));
89
-
90
- try {
91
- const span = document.createElement("span");
92
- // 处理JavaScript字符串中的双反斜杠转义
93
- const processedRaw = raw.replace(/\\\\/g, '\\');
94
- console.log('Rendering inline:', processedRaw);
95
- // 添加更多选项确保正确渲染
96
- span.innerHTML = katex.renderToString(processedRaw, {
97
- displayMode: false,
98
- throwOnError: false,
99
- strict: false,
100
- trust: true
101
- });
102
- frag.appendChild(span);
103
- } catch (e) {
104
- frag.appendChild(document.createTextNode(fullMatch));
105
- console.error("Inline render error:", raw, e);
106
- }
107
-
108
- lastIndex = inlineRegex.lastIndex;
109
- }
110
-
111
- // 剩余文本
112
- if (lastIndex < text.length) {
113
- frag.appendChild(document.createTextNode(text.slice(lastIndex)));
114
- }
115
-
116
- if (frag.hasChildNodes()) {
117
- node.parentNode.replaceChild(frag, node);
118
- }
119
- });
120
- }
121
-
122
- function renderKatexDisplayBlock(container = document.body) {
123
- // 支持 $$...$$ 和 \[...\] 两种块语法
124
- const blockRegex = /(\$\$\s*([\s\S]+?)\s*\$\$|\\\[\s*([\s\S]+?)\s*\\\])/g;
125
-
126
- const walker = document.createTreeWalker(
127
- container,
128
- NodeFilter.SHOW_TEXT,
129
- {
130
- acceptNode: function (node) {
131
- if (
132
- node.parentNode &&
133
- !node.parentNode.closest("pre") &&
134
- (node.nodeValue.includes("$$") || node.nodeValue.includes("\\["))
135
- ) {
136
- return NodeFilter.FILTER_ACCEPT;
137
- }
138
- return NodeFilter.FILTER_REJECT;
139
- },
140
- }
141
- );
142
-
143
- const nodesToReplace = [];
144
- while (walker.nextNode()) {
145
- nodesToReplace.push(walker.currentNode);
146
- }
147
-
148
- nodesToReplace.forEach((node) => {
149
- const text = node.nodeValue;
150
- const frag = document.createDocumentFragment();
151
- let lastIndex = 0;
152
- let match;
153
-
154
- while ((match = blockRegex.exec(text))) {
155
- const fullMatch = match[0];
156
- const dollarContent = match[2]; // $$...$$的内容
157
- const bracketContent = match[3]; // \[...\]的内容
158
- const raw = dollarContent || bracketContent;
159
- const matchStart = match.index;
160
-
161
- // 添加匹配前文本
162
- frag.appendChild(document.createTextNode(text.slice(lastIndex, matchStart)));
163
-
164
- try {
165
- const div = document.createElement("div");
166
- // 处理JavaScript字符串中的双反斜杠转义
167
- const processedRaw = raw.replace(/\\\\/g, '\\');
168
- div.innerHTML = katex.renderToString(processedRaw, { displayMode: true });
169
- frag.appendChild(div);
170
- } catch (e) {
171
- frag.appendChild(document.createTextNode(fullMatch));
172
- console.error("Block render error:", raw, e);
173
- }
174
-
175
- lastIndex = blockRegex.lastIndex;
176
- }
177
-
178
- // 添加剩余文本
179
- if (lastIndex < text.length) {
180
- frag.appendChild(document.createTextNode(text.slice(lastIndex)));
181
- }
182
-
183
- node.parentNode.replaceChild(frag, node);
184
- });
185
- }
186
-
187
- export function renderKatexAll(container = document.body) {
188
- renderKatexBlock(".w-latex");
189
- renderKatexDisplayBlock(container);
190
- renderKatexInline(container);
191
- }
@@ -1,25 +0,0 @@
1
- import $ from 'jquery'
2
-
3
- function renderImgPreview(vm, selector='.c-article img'){
4
- // 获取src不为空的图片
5
- let imgs = $(selector).filter(function(){
6
- return $(this).attr('src') != ''
7
- })
8
- imgs.each((i, ele) => {
9
- // 加载全部src(lazyload)
10
- vm.images.push($(ele).attr('src'))
11
- // 绑定事件挂钩索引位置
12
- $(ele).on('click', (e) => {
13
- if (e.target.classList.contains('e-jx3-emotion-img')) return
14
- vm.$hevueImgPreview({
15
- multiple: true,
16
- nowImgIndex: i,
17
- imgList: vm.images,
18
- controlBar: false,
19
- clickMaskCLose: true
20
- })
21
- })
22
- })
23
- }
24
-
25
- export default renderImgPreview
package/babel.config.js DELETED
@@ -1,3 +0,0 @@
1
- module.exports = {
2
- presets: ["@vue/cli-plugin-babel/preset"],
3
- };
package/docs/markdown.md DELETED
@@ -1,16 +0,0 @@
1
- ## Markdown
2
-
3
- 这组件真是垃圾,有时间我一定自己重写一个。。。
4
-
5
-
6
- ## main.js引入
7
- ```javascript
8
- import mavonEditor from "@jx3box/markdown";
9
- import "@jx3box/markdown/dist/css/index.css";
10
- Vue.use(mavonEditor)
11
- ```
12
-
13
- ## 封装模块引入
14
- ```javascript
15
- import Markdown from '@jx3box/jx3box-editor/src/Markdown.vue'
16
- ```
package/jsconfig.json DELETED
@@ -1,9 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "baseUrl": ".",
4
- "paths": {
5
- "@/*": ["./src/*"]
6
- }
7
- },
8
- "exclude": ["node_modules"]
9
- }
@@ -1,15 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="zh-CN">
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
6
- <meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
7
- <meta name="renderer" content="webkit" />
8
- <title><%= htmlWebpackPlugin.options.title %></title>
9
- <link rel="icon" href="<%= BASE_URL %>favicon.ico" />
10
- <!-- <link rel="stylesheet" href="http://localhost:1024/css/article.css" /> -->
11
- </head>
12
- <body>
13
- <div id="app"></div>
14
- </body>
15
- </html>