@jx3box/jx3box-editor 2.2.48 → 3.0.0

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
@@ -0,0 +1,164 @@
1
+ .u-hidden-input {
2
+ .none;
3
+ }
4
+
5
+ .c-upload-album {
6
+ > .el-button {
7
+ margin-top: 20px;
8
+ }
9
+ }
10
+
11
+ .c-upload-album-list {
12
+ border: 1px dashed #d9d9d9;
13
+ border-radius: 4px;
14
+ padding: 8px;
15
+ margin-top: 20px;
16
+ min-height: 148px;
17
+ position: relative;
18
+ cursor: pointer;
19
+ transition: border-color 0.2s ease, background-color 0.2s ease;
20
+
21
+ &.is-dragover {
22
+ border-color: #409eff;
23
+ background: #f0f9ff;
24
+ }
25
+
26
+ &.is-uploading {
27
+ opacity: 0.7;
28
+ pointer-events: none;
29
+ }
30
+
31
+ &.is-empty {
32
+ border: none;
33
+ background: transparent;
34
+ padding: 0;
35
+ }
36
+
37
+ .u-draggable-list {
38
+ display: inline;
39
+ min-height: 148px;
40
+ }
41
+
42
+ .u-album-item {
43
+ .pr;
44
+ .size(148px);
45
+ overflow: hidden;
46
+ background-color: #fff;
47
+ border: 1px solid #c0ccda;
48
+ border-radius: 6px;
49
+ box-sizing: border-box;
50
+ margin: 0 8px 8px 0;
51
+ display: inline-block;
52
+
53
+ .u-pic {
54
+ .db;
55
+ .size(100%);
56
+ }
57
+
58
+ &:hover {
59
+ .u-mask {
60
+ .db;
61
+ }
62
+ .u-op {
63
+ display: inline-flex;
64
+ }
65
+ }
66
+ }
67
+
68
+ .u-mask,
69
+ .u-op {
70
+ .pa;
71
+ .none;
72
+ }
73
+
74
+ .u-mask {
75
+ background-color: rgba(0, 0, 0, 0.5);
76
+ transition: opacity 0.3s;
77
+ .lt(0);
78
+ .size(100%);
79
+ cursor: move;
80
+ }
81
+
82
+ .u-op {
83
+ .pointer;
84
+ color: #fff;
85
+ .lt(50%);
86
+ transform: translate(-50%, -50%);
87
+ width: 30px;
88
+ height: 30px;
89
+ border-radius: 50%;
90
+ background: rgba(0, 0, 0, 0.58);
91
+ display: none;
92
+ align-items: center;
93
+ justify-content: center;
94
+ z-index: 2;
95
+
96
+ .el-icon {
97
+ font-size: 16px;
98
+ }
99
+ }
100
+
101
+ .u-delete {
102
+ .ml(24px);
103
+ }
104
+
105
+ .u-preview {
106
+ .ml(-24px);
107
+ }
108
+
109
+ .u-drop-hint {
110
+ display: inline-flex;
111
+ vertical-align: top;
112
+ align-items: center;
113
+ justify-content: center;
114
+ min-height: 148px;
115
+ min-width: 220px;
116
+ margin: 0 8px 8px 0;
117
+ border: 1px dashed #c9d1dc;
118
+ border-radius: 6px;
119
+ color: #909399;
120
+ gap: 6px;
121
+ padding: 0 16px;
122
+ background: #fafafa;
123
+
124
+ &.is-empty {
125
+ width: 100%;
126
+ min-height: 180px;
127
+ margin: 0;
128
+ }
129
+
130
+ .u-drop-icon {
131
+ font-size: 28px;
132
+ color: #c0c4cc;
133
+ }
134
+
135
+ .u-drop-link {
136
+ color: #409eff;
137
+ }
138
+ }
139
+
140
+ .u-add-card {
141
+ display: inline-flex;
142
+ vertical-align: top;
143
+ width: 148px;
144
+ height: 148px;
145
+ margin: 0 8px 8px 0;
146
+ border: 1px dashed #c0c4cc;
147
+ border-radius: 6px;
148
+ align-items: center;
149
+ justify-content: center;
150
+ background: #fff;
151
+ cursor: pointer;
152
+ transition: border-color 0.2s ease, color 0.2s ease;
153
+ color: #8c939d;
154
+
155
+ .el-icon {
156
+ font-size: 30px;
157
+ }
158
+
159
+ &:hover {
160
+ border-color: #409eff;
161
+ color: #409eff;
162
+ }
163
+ }
164
+ }
@@ -0,0 +1,2 @@
1
+ @import "../../../config/global.less";
2
+
@@ -0,0 +1 @@
1
+ <svg id="Capa_1" enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><g><path d="m456.66 0h-71.66c-8.284 0-15 6.716-15 15s6.716 15 15 15h71.66c13.972 0 25.34 11.368 25.34 25.341v71.659c0 8.284 6.716 15 15 15s15-6.716 15-15v-71.659c0-30.515-24.826-55.341-55.34-55.341z"/><path d="m15 142c8.284 0 15-6.716 15-15v-71.659c0-13.973 11.368-25.341 25.34-25.341h71.66c8.284 0 15-6.716 15-15s-6.716-15-15-15h-71.66c-30.514 0-55.34 24.826-55.34 55.341v71.659c0 8.284 6.716 15 15 15z"/><path d="m127 482h-71.66c-13.972 0-25.34-11.368-25.34-25.341v-71.659c0-8.284-6.716-15-15-15s-15 6.716-15 15v71.659c0 30.515 24.826 55.341 55.34 55.341h71.66c8.284 0 15-6.716 15-15s-6.716-15-15-15z"/><path d="m497 370c-8.284 0-15 6.716-15 15v71.659c0 13.973-11.368 25.341-25.34 25.341h-71.66c-8.284 0-15 6.716-15 15s6.716 15 15 15h71.66c30.515 0 55.34-24.826 55.34-55.341v-71.659c0-8.284-6.716-15-15-15z"/><path d="m341.643 110h47.575c6.497 0 11.782 5.285 11.782 11.782v47.574c0 8.284 6.716 15 15 15s15-6.716 15-15v-47.574c0-23.039-18.744-41.782-41.782-41.782h-47.575c-8.284 0-15 6.716-15 15s6.716 15 15 15z"/><path d="m81 121.782v47.574c0 8.284 6.716 15 15 15s15-6.716 15-15v-47.574c0-6.497 5.286-11.782 11.782-11.782h47.575c8.284 0 15-6.716 15-15s-6.716-15-15-15h-47.575c-23.038 0-41.782 18.743-41.782 41.782z"/><path d="m170.357 400h-47.575c-6.497 0-11.782-5.285-11.782-11.782v-47.574c0-8.284-6.716-15-15-15s-15 6.716-15 15v47.574c0 23.039 18.744 41.782 41.782 41.782h47.575c8.284 0 15-6.716 15-15s-6.716-15-15-15z"/><path d="m431 388.218v-47.574c0-8.284-6.716-15-15-15s-15 6.716-15 15v47.574c0 6.497-5.286 11.782-11.782 11.782h-47.575c-8.284 0-15 6.716-15 15s6.716 15 15 15h47.575c23.038 0 41.782-18.743 41.782-41.782z"/><path d="m1 256c0 8.284 6.716 15 15 15h480c8.284 0 15-6.716 15-15s-6.716-15-15-15h-480c-8.284 0-15 6.716-15 15z"/></g></svg>
@@ -1,6 +1,6 @@
1
1
  import $ from "jquery";
2
2
  import { showAvatar } from "@jx3box/jx3box-common/js/utils";
3
- import {getUserInfo} from "../../service/author";
3
+ import { getUserInfo } from "../../service/author";
4
4
 
5
5
  /**
6
6
  * 渲染音频组件
@@ -34,7 +34,7 @@ function renderVoice(selector = ".w-audio, .e-audio") {
34
34
  console.log("用户信息:", user_info);
35
35
  avatar = showAvatar(user_info?.user_avatar || '', 240);
36
36
  author = author || user_info?.display_name || '匿名用户';
37
-
37
+
38
38
  // 生成唯一ID
39
39
  const playerId = `audio-player-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
40
40
 
@@ -9,12 +9,34 @@ const count = {
9
9
  };
10
10
  const MAX_DEPTH = 3;
11
11
  const PREFIX_CLS = "lv"; //class前缀
12
- const HEADER_HEIGHT = 112; //头部高度
12
+
13
+ const ICON_READING_SVG = `
14
+ <svg width="18px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" data-v-58697b5c=""><path fill="currentColor" d="m512 863.36 384-54.848v-638.72L525.568 222.72a96 96 0 0 1-27.136 0L128 169.792v638.72zM137.024 106.432l370.432 52.928a32 32 0 0 0 9.088 0l370.432-52.928A64 64 0 0 1 960 169.792v638.72a64 64 0 0 1-54.976 63.36l-388.48 55.488a32 32 0 0 1-9.088 0l-388.48-55.488A64 64 0 0 1 64 808.512v-638.72a64 64 0 0 1 73.024-63.36"></path><path fill="currentColor" d="M480 192h64v704h-64z"></path></svg>
15
+ `;
16
+
17
+ const ICON_CARET_SVG = `
18
+ <svg width="12px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" data-v-58697b5c=""><path fill="currentColor" d="m512 128 288 320H224zM224 576h576L512 896z"></path></svg>
19
+ `;
20
+
21
+ function getHeaderHeight() {
22
+ // 页面上可能没有这些元素,取存在的第一个:.c-header 优先,其次 .c-breadcrumb
23
+ const el = document.querySelector(".c-header") || document.querySelector(".c-breadcrumb");
24
+ if (!el) return 0;
25
+ const rect = el.getBoundingClientRect && el.getBoundingClientRect();
26
+ const h = (rect && rect.height) || el.offsetHeight || 0;
27
+ return Math.max(0, Math.round(h));
28
+ }
29
+
30
+ function scrollToTopWithOffset(top) {
31
+ const headerHeight = getHeaderHeight();
32
+ const targetTop = Math.max(0, (top || 0) - headerHeight);
33
+ window.scrollTo(0, targetTop);
34
+ }
13
35
 
14
36
  function directory(from, to = '#directory') {
15
37
  // 装载容器设置
16
38
  const $box = $(to);
17
- if (!to && $box.length) return;
39
+ if (!$box.length) return false;
18
40
 
19
41
  // 遍历节点
20
42
  let directories = $(from).find("h1,h2,h3,h4,h5,h6");
@@ -26,8 +48,8 @@ function directory(from, to = '#directory') {
26
48
  $box.html(
27
49
  `<div class="c-article-directory" id="c-article-directory">
28
50
  <div class="c-article-directory-title" id="c-article-directory-title">
29
- <span class="c-article-directory-title-label" class="c-go-top"><i class="u-icon el-icon-reading"></i> 导读</span>
30
- <span class="c-article-directory-title-folder" class="c-go-top"><i class="el-icon-d-caret"></i> 折叠</span>
51
+ <span class="c-article-directory-title-label" class="c-go-top">${ICON_READING_SVG} 导读</span>
52
+ <span class="c-article-directory-title-folder" class="c-go-top">${ICON_CARET_SVG} 折叠</span>
31
53
  </div>
32
54
  <div class="c-article-directory-content" id="c-article-directory-content"></div>
33
55
  </div>`
@@ -37,7 +59,7 @@ function directory(from, to = '#directory') {
37
59
  // const $skip = $(".c-article-directory-title-skip");
38
60
  const $folder = $(".c-article-directory-title-folder");
39
61
 
40
- $folder.on("click", function() {
62
+ $folder.off("click.jx3boxDirectory").on("click.jx3boxDirectory", function() {
41
63
  $("#c-article-directory-content").slideToggle();
42
64
  });
43
65
  // 顶部按钮
@@ -49,8 +71,10 @@ function directory(from, to = '#directory') {
49
71
  directories.each(function(i, item) {
50
72
  // 进行克隆
51
73
  let _item = $(item).clone();
52
- // 解决懒加载跳转位置问题
53
- $(item).prepend(`<a id="directory-${i}" class="w-directory-anchor"></a>`);
74
+ // 解决懒加载跳转位置问题(防止重复执行时重复插入)
75
+ if (!$(item).children("a.w-directory-anchor").length) {
76
+ $(item).prepend(`<a id="directory-${i}" class="w-directory-anchor"></a>`);
77
+ }
54
78
 
55
79
  // 过滤行内样式
56
80
  _item.removeAttr("style");
@@ -76,22 +100,26 @@ function directory(from, to = '#directory') {
76
100
  });
77
101
 
78
102
  // 进行事件委托
79
- $directory.on("click", "h1,h2,h3,h4,h5,h6", function(e) {
80
- e.preventDefault();
81
- window.location.hash = $(this).data("raw").find('a[id^="directory-"]').first().attr('id')
82
- let target = $(this)
83
- .data("raw")
84
- .offset().top;
85
- $(document).scrollTop(target - HEADER_HEIGHT);
86
- $(this)
87
- .data("raw")
88
- .addClass("isScrollFocus");
89
- setTimeout(() => {
90
- $(this)
91
- .data("raw")
92
- .removeClass("isScrollFocus");
93
- }, 3500);
94
- });
103
+ $directory
104
+ .off("click.jx3boxDirectory", "h1,h2,h3,h4,h5,h6")
105
+ .on("click.jx3boxDirectory", "h1,h2,h3,h4,h5,h6", function(e) {
106
+ e.preventDefault();
107
+
108
+ const $raw = $(this).data("raw");
109
+ if (!$raw || !$raw.length) return;
110
+
111
+ const anchorId = $raw.find('a[id^="directory-"]').first().attr("id");
112
+ if (anchorId) window.location.hash = anchorId;
113
+
114
+ const top = $raw.offset().top;
115
+ // 等待 hash 更新和布局稳定后再滚动,避免异步渲染/图片加载影响
116
+ requestAnimationFrame(() => scrollToTopWithOffset(top));
117
+
118
+ $raw.addClass("isScrollFocus");
119
+ setTimeout(() => {
120
+ $raw.removeClass("isScrollFocus");
121
+ }, 3500);
122
+ });
95
123
 
96
124
  return true;
97
125
  }
@@ -0,0 +1,177 @@
1
+ /**
2
+ * highlight.js 默认支持(不需要额外装库)的语法
3
+ * https://github.com/highlightjs/highlight.js/blob/main/SUPPORTED_LANGUAGES.md
4
+ */
5
+
6
+ export default [
7
+ // 不加参数时默认的
8
+ { text: "JSON", value: "json" },
9
+ { text: "Lua", value: "lua" },
10
+ { text: "HTML, XML", value: "xml" },
11
+ { text: "Bash", value: "bash" },
12
+ { text: "JavaScript", value: "javascript" },
13
+ { text: "Python", value: "python" },
14
+ { text: "Java", value: "java" },
15
+ { text: "C", value: "c" },
16
+ { text: "C#", value: "csharp" },
17
+ { text: "C++", value: "cpp" },
18
+
19
+ // 其他支持的
20
+ { text: "1C", value: "1c" },
21
+ { text: "ABNF", value: "abnf" },
22
+ { text: "Access logs", value: "accesslog" },
23
+ { text: "Ada", value: "ada" },
24
+ { text: "Arduino (C++ w/Arduino libs)", value: "arduino" },
25
+ { text: "ARM assembler", value: "armasm" },
26
+ { text: "AVR assembler", value: "avrasm" },
27
+ { text: "ActionScript", value: "actionscript" },
28
+ { text: "AngelScript", value: "angelscript" },
29
+ { text: "Apache", value: "apache" },
30
+ { text: "AppleScript", value: "applescript" },
31
+ { text: "Arcade", value: "arcade" },
32
+ { text: "AsciiDoc", value: "asciidoc" },
33
+ { text: "AspectJ", value: "aspectj" },
34
+ { text: "AutoHotkey", value: "autohotkey" },
35
+ { text: "AutoIt", value: "autoit" },
36
+ { text: "Awk", value: "awk" },
37
+ { text: "Basic", value: "basic" },
38
+ { text: "BNF", value: "bnf" },
39
+ { text: "Brainfuck", value: "brainfuck" },
40
+ { text: "C/AL", value: "cal" },
41
+ { text: "Cache Object Script", value: "cos" },
42
+ { text: "CMake", value: "cmake" },
43
+ { text: "Coq", value: "coq" },
44
+ { text: "CSP", value: "csp" },
45
+ { text: "CSS", value: "css" },
46
+ { text: "Cap’n Proto", value: "capnproto" },
47
+ { text: "Clojure", value: "clojure" },
48
+ { text: "CoffeeScript", value: "coffeescript" },
49
+ { text: "Crmsh", value: "crmsh" },
50
+ { text: "Crystal", value: "crystal" },
51
+ { text: "D", value: "d" },
52
+ { text: "Dart", value: "dart" },
53
+ { text: "Delphi", value: "dpr" },
54
+ { text: "Diff", value: "diff" },
55
+ { text: "Django", value: "django" },
56
+ { text: "DNS Zone file", value: "dns" },
57
+ { text: "Dockerfile", value: "dockerfile" },
58
+ { text: "DOS", value: "dos" },
59
+ { text: "dsconfig", value: "dsconfig" },
60
+ { text: "DTS (Device Tree)", value: "dts" },
61
+ { text: "Dust", value: "dust" },
62
+ { text: "EBNF", value: "ebnf" },
63
+ { text: "Elixir", value: "elixir" },
64
+ { text: "Elm", value: "elm" },
65
+ { text: "Erlang", value: "erlang" },
66
+ { text: "Excel", value: "excel" },
67
+ { text: "F#", value: "fsharp" },
68
+ { text: "FIX", value: "fix" },
69
+ { text: "Fortran", value: "fortran" },
70
+ { text: "G-Code", value: "gcode" },
71
+ { text: "Gams", value: "gams" },
72
+ { text: "GAUSS", value: "gauss" },
73
+ { text: "Gherkin", value: "gherkin" },
74
+ { text: "Go", value: "go" },
75
+ { text: "Golo", value: "golo" },
76
+ { text: "Gradle", value: "gradle" },
77
+ { text: "Groovy", value: "groovy" },
78
+ { text: "HTTP", value: "http" },
79
+ { text: "Haml", value: "haml" },
80
+ { text: "Handlebars", value: "handlebars" },
81
+ { text: "Haskell", value: "haskell" },
82
+ { text: "Haxe", value: "haxe" },
83
+ { text: "Hy", value: "hy" },
84
+ { text: "Ini, TOML", value: "ini" },
85
+ { text: "Inform7", value: "inform7" },
86
+ { text: "IRPF90", value: "irpf90" },
87
+ { text: "Julia", value: "julia" },
88
+ { text: "Kotlin", value: "kotlin" },
89
+ { text: "LaTeX", value: "tex" },
90
+ { text: "Leaf", value: "leaf" },
91
+ { text: "Lasso", value: "lasso" },
92
+ { text: "Less", value: "less" },
93
+ { text: "LDIF", value: "ldif" },
94
+ { text: "Lisp", value: "lisp" },
95
+ { text: "LiveCode Server", value: "livecodeserver" },
96
+ { text: "LiveScript", value: "livescript" },
97
+ { text: "Makefile", value: "makefile" },
98
+ { text: "Markdown", value: "markdown" },
99
+ { text: "Mathematica", value: "mathematica" },
100
+ { text: "Matlab", value: "matlab" },
101
+ { text: "Maxima", value: "maxima" },
102
+ { text: "Maya Embedded Language", value: "mel" },
103
+ { text: "Mercury", value: "mercury" },
104
+ { text: "Mizar", value: "mizar" },
105
+ { text: "Mojolicious", value: "mojolicious" },
106
+ { text: "Monkey", value: "monkey" },
107
+ { text: "Moonscript", value: "moonscript" },
108
+ { text: "N1QL", value: "n1ql" },
109
+ { text: "NSIS", value: "nsis" },
110
+ { text: "Nginx", value: "nginx" },
111
+ { text: "Nim", value: "nim" },
112
+ { text: "Nix", value: "nix" },
113
+ { text: "OCaml", value: "ocaml" },
114
+ { text: "Objective C", value: "objectivec" },
115
+ { text: "OpenGL Shading Language", value: "glsl" },
116
+ { text: "OpenSCAD", value: "openscad" },
117
+ { text: "Oracle Rules Language", value: "ruleslanguage" },
118
+ { text: "Oxygene", value: "oxygene" },
119
+ { text: "PF", value: "pf" },
120
+ { text: "PHP", value: "php" },
121
+ { text: "Parser3", value: "parser3" },
122
+ { text: "Perl", value: "perl" },
123
+ { text: "Plaintext", value: "plaintext" },
124
+ { text: "Pony", value: "pony" },
125
+ { text: "PostgreSQL & PL/pgSQL", value: "pgsql" },
126
+ { text: "PowerShell", value: "powershell" },
127
+ { text: "Processing", value: "processing" },
128
+ { text: "Prolog", value: "prolog" },
129
+ { text: "Properties", value: "properties" },
130
+ { text: "Protocol Buffers", value: "protobuf" },
131
+ { text: "Puppet", value: "puppet" },
132
+ { text: "Python profiler results", value: "profile" },
133
+ { text: "Python REPL", value: "python-repl" },
134
+ { text: "Q", value: "k" },
135
+ { text: "QML", value: "qml" },
136
+ { text: "R", value: "r" },
137
+ { text: "ReasonML", value: "reasonml" },
138
+ { text: "RenderMan RIB", value: "rib" },
139
+ { text: "RenderMan RSL", value: "rsl" },
140
+ { text: "Roboconf", value: "graph" },
141
+ { text: "Ruby", value: "ruby" },
142
+ { text: "Rust", value: "rust" },
143
+ { text: "SAS", value: "SAS" },
144
+ { text: "SCSS", value: "scss" },
145
+ { text: "SQL", value: "sql" },
146
+ { text: "STEP Part 21", value: "p21" },
147
+ { text: "Scala", value: "scala" },
148
+ { text: "Scheme", value: "scheme" },
149
+ { text: "Scilab", value: "scilab" },
150
+ { text: "Shell", value: "shell" },
151
+ { text: "Smali", value: "smali" },
152
+ { text: "Smalltalk", value: "smalltalk" },
153
+ { text: "SML", value: "sml" },
154
+ { text: "Stan", value: "stan" },
155
+ { text: "Stata", value: "stata" },
156
+ { text: "Stylus", value: "stylus" },
157
+ { text: "SubUnit", value: "subunit" },
158
+ { text: "Swift", value: "swift" },
159
+ { text: "Tcl", value: "tcl" },
160
+ { text: "Test Anything Protocol", value: "tap" },
161
+ { text: "Thrift", value: "thrift" },
162
+ { text: "TP", value: "tp" },
163
+ { text: "Twig", value: "twig" },
164
+ { text: "TypeScript", value: "typescript" },
165
+ { text: "VB.Net", value: "vbnet" },
166
+ { text: "VBScript", value: "vbscript" },
167
+ { text: "VHDL", value: "vhdl" },
168
+ { text: "Vala", value: "vala" },
169
+ { text: "Verilog", value: "verilog" },
170
+ { text: "Vim Script", value: "vim" },
171
+ { text: "X++", value: "axapta" },
172
+ { text: "x86 Assembly", value: "x86asm" },
173
+ { text: "XL", value: "xl" },
174
+ { text: "XQuery", value: "xquery" },
175
+ { text: "YAML", value: "yml" },
176
+ { text: "Zephir", value: "zephir" },
177
+ ];