@flun/html-template 4.0.10

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 (59) hide show
  1. package/.env +9 -0
  2. package/LICENSE +15 -0
  3. package/build.js +3 -0
  4. package/compile.js +349 -0
  5. package/copy-files.js +200 -0
  6. package/customize/account.js +726 -0
  7. package/customize/data.json +484 -0
  8. package/customize/functions.js +48 -0
  9. package/customize/hotReloadInjector.js +25 -0
  10. package/customize/routes.js +141 -0
  11. package/customize/users.json +44 -0
  12. package/customize/variables.js +70 -0
  13. package/dev-server.js +344 -0
  14. package/dev.js +4 -0
  15. package/f-CHANGELOG.md +4 -0
  16. package/f-README.md +485 -0
  17. package/index.d.ts +133 -0
  18. package/index.js +4 -0
  19. package/package.json +77 -0
  20. package/restoreDefaults.js +8 -0
  21. package/services/templateService.js +962 -0
  22. package/static/about.css +118 -0
  23. package/static/auth.js +27 -0
  24. package/static/constants.css +138 -0
  25. package/static/img/dark.png +0 -0
  26. package/static/img/favicon.ico +0 -0
  27. package/static/img/light.png +0 -0
  28. package/static/img/top.png +0 -0
  29. package/static/index.css +86 -0
  30. package/static/mouseOrTouch.js +156 -0
  31. package/static/public.css +288 -0
  32. package/static/script.css +318 -0
  33. package/static/script.js +392 -0
  34. package/static/styling.css +874 -0
  35. package/static/styling.js +933 -0
  36. package/static/themeImg.css +10 -0
  37. package/static/themeImg.js +19 -0
  38. package/static/themeModule.js +222 -0
  39. package/static/topImg.css +19 -0
  40. package/static/topImg.js +21 -0
  41. package/static/utils/browser13.js +270 -0
  42. package/static/utils/closebrackets.js +166 -0
  43. package/static/utils/css-lint.js +308 -0
  44. package/static/utils/custom-css-hint.js +876 -0
  45. package/static/utils/foldgutter.js +141 -0
  46. package/static/utils/match-highlighter.js +70 -0
  47. package/templates/about.html +236 -0
  48. package/templates/account/2fa.html +184 -0
  49. package/templates/account/forgot-password.html +226 -0
  50. package/templates/account/login.html +230 -0
  51. package/templates/account/profile.html +977 -0
  52. package/templates/account/register.html +224 -0
  53. package/templates/account/reset-password.html +205 -0
  54. package/templates/account/verify-email.html +163 -0
  55. package/templates/base.html +71 -0
  56. package/templates/footer-content.html +5 -0
  57. package/templates/index.html +140 -0
  58. package/templates/script.html +209 -0
  59. package/templates/test-include.html +11 -0
@@ -0,0 +1,288 @@
1
+ /* ================================================================ *
2
+ * 全局元素样式
3
+ * ================================================================ */
4
+
5
+ /* 全局元素重置:清除内外边距,设置盒模型 */
6
+ * {
7
+ padding: 0;
8
+ margin: 0;
9
+ /* 设置盒模型为边框盒(border-box) */
10
+ box-sizing: border-box;
11
+ /* 移动端点击高亮透明 */
12
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
13
+ -webkit-tap-highlight-color: transparent;
14
+ /* 移动端禁用文本选择 */
15
+ /* -webkit-user-select: none; */
16
+ /* IE/Edge禁用文本选择 */
17
+ /* -ms-user-select: none; */
18
+ /* 标准属性禁用文本选择 */
19
+ /* user-select: none; */
20
+ }
21
+
22
+ /* 页面主体样式 */
23
+ body {
24
+ /* 回退背景色 */
25
+ background-color: var(--bg-color);
26
+ background-image: var(--body-bg);
27
+ font-size: 15px;
28
+ color: var(--text-color);
29
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
30
+ min-height: 100vh;
31
+ display: flex;
32
+ flex-direction: column;
33
+ transition: background 0.5s ease, color 0.5s ease;
34
+ }
35
+
36
+ /* Vue.js属性选择器 - 防止渲染阻塞 */
37
+ [v-cloak] {
38
+ display: none;
39
+ }
40
+
41
+ /* 超链接通用样式 */
42
+ a,
43
+ a:hover,
44
+ a:active {
45
+ text-decoration: none;
46
+ color: var(--text-color);
47
+ }
48
+
49
+ /* 粗体样式重置 */
50
+ b {
51
+ font-weight: normal;
52
+ }
53
+
54
+ /* 按钮基础样式 */
55
+ button {
56
+ cursor: pointer;
57
+ border: none;
58
+ outline: none;
59
+ }
60
+
61
+ /* 斜体样式重置 */
62
+ em,
63
+ i {
64
+ font-style: normal;
65
+ }
66
+
67
+ /* 表单元素基础样式 */
68
+ input,
69
+ textarea,
70
+ select {
71
+ outline: none;
72
+ }
73
+
74
+ /* 颜色输入框 */
75
+ input[type="color"] {
76
+ cursor: crosshair;
77
+ }
78
+
79
+ /* 文件上传 */
80
+ input[type="file"] {
81
+ cursor: pointer;
82
+ }
83
+
84
+ input[type="file"]::file-selector-button {
85
+ cursor: pointer;
86
+ }
87
+
88
+ /* 范围选择器 */
89
+ input[type="range"] {
90
+ cursor: grab;
91
+ }
92
+
93
+ /* 图片基础样式 */
94
+ img {
95
+ border: none;
96
+ vertical-align: middle;
97
+ }
98
+
99
+ /* 列表样式重置 */
100
+ li,
101
+ ol {
102
+ list-style: none;
103
+ }
104
+
105
+ /* 覆盖自动填充样式 */
106
+ input:-webkit-autofill,
107
+ input:-webkit-autofill:hover,
108
+ input:-webkit-autofill:focus,
109
+ input:-webkit-autofill:active {
110
+ box-shadow: 0 0 0px 1000px var(--li-bg) inset !important;
111
+ -webkit-text-fill-color: var(--text-color) !important;
112
+ transition: background-color 5000s ease-in-out 0s;
113
+ }
114
+
115
+ input:-moz-autofill {
116
+ background-color: var(--li-bg) !important;
117
+ color: var(--text-color) !important;
118
+ }
119
+
120
+ /* ================================================================ *
121
+ * 页面布局组件样式
122
+ * ================================================================ */
123
+
124
+ header {
125
+ position: relative;
126
+ top: 0;
127
+ left: 0;
128
+ width: 100%;
129
+ height: 60px;
130
+ background: var(--header-bg);
131
+ color: var(--text-color);
132
+ padding: 0 24px;
133
+ box-shadow: var(--header-shadow);
134
+ display: flex;
135
+ align-items: center;
136
+ justify-content: flex-end;
137
+ gap: 20px;
138
+ }
139
+
140
+ header .home-link {
141
+ color: var(--header-text);
142
+ background: var(--header-link-bg);
143
+ font-weight: 500;
144
+ padding: 8px 12px;
145
+ border-radius: 6px;
146
+ transition: all 0.3s ease;
147
+ white-space: nowrap;
148
+ }
149
+
150
+ header .home-link:hover {
151
+ background: var(--header-link-hover-bg);
152
+ transform: translateY(-2px);
153
+ text-decoration: none;
154
+ }
155
+
156
+ /* 个人中心容器 */
157
+ .user-center {
158
+ display: flex;
159
+ align-items: center;
160
+ }
161
+
162
+ .user-center a {
163
+ background: var(--header-link-bg);
164
+ border-radius: 30px;
165
+ padding: 8px 20px;
166
+ font-weight: 600;
167
+ color: var(--text-color);
168
+ box-shadow: var(--link-shadow);
169
+ transition: all 0.3s ease;
170
+ }
171
+
172
+ .user-center a:hover {
173
+ background: var(--header-link-hover-bg);
174
+ transform: translateY(-2px);
175
+ text-decoration: none;
176
+ }
177
+
178
+ /* 主内容容器样式 */
179
+ .container {
180
+ max-width: 900px;
181
+ margin: 40px auto;
182
+ padding: 30px;
183
+ background: var(--container-bg);
184
+ border-radius: 12px;
185
+ box-shadow: var(--container-shadow);
186
+ text-align: center;
187
+ }
188
+
189
+ /* 页脚样式 */
190
+ footer {
191
+ background: var(--footer-bg);
192
+ color: var(--text-color);
193
+ text-align: center;
194
+ padding: 20px;
195
+ margin-top: auto;
196
+ font-size: 0.9em;
197
+ }
198
+
199
+ /* ================================================================ *
200
+ * 内容元素样式
201
+ * ================================================================ */
202
+
203
+ /* 一级标题样式 */
204
+ h1 {
205
+ color: var(--h1-color);
206
+ border-bottom: 3px solid var(--h1-border);
207
+ padding-bottom: 12px;
208
+ display: inline-block;
209
+ margin: 0 auto 15px;
210
+ font-size: 2.2rem;
211
+ font-weight: 700;
212
+ }
213
+
214
+ /* 二级标题样式 */
215
+ h2 {
216
+ color: var(--h2-color);
217
+ margin-bottom: 15px;
218
+ font-size: 1.8rem;
219
+ }
220
+
221
+ /* 段落样式 */
222
+ p {
223
+ color: var(--p-color);
224
+ line-height: 1.7;
225
+ margin: 15px 0;
226
+ font-size: 1.1rem;
227
+ }
228
+
229
+ /* 无序列表容器样式 */
230
+ ul {
231
+ display: inline-block;
232
+ text-align: left;
233
+ padding-left: 0;
234
+ margin: 20px 0;
235
+ list-style-type: none;
236
+ }
237
+
238
+ /* 列表项样式 */
239
+ ul li {
240
+ background: var(--li-bg);
241
+ margin: 12px 0;
242
+ padding: 15px 25px;
243
+ border-radius: 6px;
244
+ font-size: 1.1rem;
245
+ box-shadow: var(--item-shadow);
246
+ transition: all 0.3s ease;
247
+ }
248
+
249
+ /* 列表项悬停效果 */
250
+ ul li:hover {
251
+ background: var(--li-hover);
252
+ transform: translateX(5px);
253
+ }
254
+
255
+ /* 通用链接样式 */
256
+ a {
257
+ color: var(--link-color);
258
+ transition: all 0.3s ease;
259
+ }
260
+
261
+ /* 链接悬停效果 */
262
+ a:hover {
263
+ color: var(--link-hover);
264
+ text-decoration: underline;
265
+ }
266
+
267
+ /* 按钮样式 */
268
+ .btn {
269
+ display: inline-block;
270
+ background: var(--btn-bg);
271
+ color: var(--text-color);
272
+ padding: 12px 28px;
273
+ border-radius: 6px;
274
+ text-decoration: none;
275
+ margin-top: 25px;
276
+ font-weight: 600;
277
+ font-size: 1.05rem;
278
+ box-shadow: var(--btn-shadow);
279
+ transition: all 0.3s ease;
280
+ }
281
+
282
+ /* 按钮悬停效果 */
283
+ .btn:hover {
284
+ background: var(--btn-hover);
285
+ transform: translateY(-3px);
286
+ box-shadow: var(--btn-shadow-hover);
287
+ text-decoration: none;
288
+ }
@@ -0,0 +1,318 @@
1
+ /* script.css */
2
+ .modal {
3
+ position: fixed;
4
+ top: 0;
5
+ left: 0;
6
+ width: 100%;
7
+ height: 100%;
8
+ background-color: rgba(0, 0, 0, 0.7);
9
+ z-index: 1000;
10
+ }
11
+
12
+ #cssEditor {
13
+ display: flex;
14
+ flex-direction: column;
15
+ background: rgb(175, 63, 63);
16
+ padding: 20px;
17
+ border-radius: 10px;
18
+ width: 90%;
19
+ max-width: 700px;
20
+ height: 800px;
21
+ min-width: 300px;
22
+ min-height: 200px;
23
+ overflow: auto;
24
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
25
+ position: fixed;
26
+ top: 50%;
27
+ left: 50%;
28
+ cursor: grab;
29
+ box-sizing: border-box;
30
+ resize: none;
31
+ z-index: 1001;
32
+ }
33
+
34
+ #cssEditor:active {
35
+ cursor: grabbing;
36
+ }
37
+
38
+ #cssEditor .header {
39
+ display: flex;
40
+ justify-content: space-between;
41
+ align-items: center;
42
+ margin-bottom: 10px;
43
+ padding-bottom: 10px;
44
+ border-bottom: 1px solid #eee;
45
+ cursor: grab;
46
+ }
47
+
48
+ #cssEditor .header:active {
49
+ cursor: grabbing;
50
+ }
51
+
52
+ #cssEditor h2 {
53
+ margin-bottom: 8px;
54
+ color: #2c3e50;
55
+ }
56
+
57
+ .close-btn {
58
+ font-size: 30px;
59
+ cursor: pointer;
60
+ color: #999;
61
+ transition: color 0.3s;
62
+ }
63
+
64
+ .close-btn:hover {
65
+ color: #333;
66
+ }
67
+
68
+ .editor-info {
69
+ background: #069d57;
70
+ padding: 10px;
71
+ border-radius: 5px;
72
+ margin-bottom: 15px;
73
+ font-size: 14px;
74
+ color: #333aa6;
75
+ }
76
+
77
+ /* 隐藏原始 textarea */
78
+ #cssContent {
79
+ display: none;
80
+ }
81
+
82
+ /* CodeMirror 容器 */
83
+ #cssEditor .CodeMirror {
84
+ flex: 1;
85
+ width: 100%;
86
+ height: auto;
87
+ min-height: 200px;
88
+ border: 1px solid #444;
89
+ border-radius: 5px;
90
+ font-family: 'Courier New', monospace;
91
+ font-size: 14px;
92
+ line-height: 1.6;
93
+ margin-bottom: 20px;
94
+ background: #282a36;
95
+ }
96
+
97
+ #cssEditor .CodeMirror-gutters {
98
+ border-right: 1px solid #444;
99
+ background: #1e1f29;
100
+ }
101
+
102
+ #cssEditor .CodeMirror-linenumber {
103
+ color: #6272a4;
104
+ }
105
+
106
+ /* 注释颜色 */
107
+ .CodeMirror .cm-comment {
108
+ color: #3b9e3b !important;
109
+ }
110
+
111
+ /* ---------- 颜色色块组件样式 ---------- */
112
+ .cm-color-widget {
113
+ display: inline-flex;
114
+ align-items: center;
115
+ background: transparent;
116
+ border-radius: 3px;
117
+ margin: 0 2px;
118
+ padding: 0 2px;
119
+ font-family: 'Courier New', monospace;
120
+ white-space: nowrap;
121
+ }
122
+
123
+ .cm-color-swatch {
124
+ display: inline-block;
125
+ width: 16px;
126
+ height: 16px;
127
+ border-radius: 3px;
128
+ margin-right: 6px;
129
+ border: 1px solid rgba(255, 255, 255, 0.3);
130
+ box-shadow: 0 0 2px rgba(0, 0, 0, 0.3);
131
+ cursor: pointer;
132
+ transition: transform 0.1s;
133
+ flex-shrink: 0;
134
+ }
135
+
136
+ .cm-color-swatch:hover {
137
+ transform: scale(1.2);
138
+ border-color: var(--text-color);
139
+ }
140
+
141
+ .cm-color-text {
142
+ color: #f8f8f2;
143
+ background: rgba(0, 0, 0, 0.2);
144
+ padding: 0 4px;
145
+ border-radius: 2px;
146
+ font-size: 13px;
147
+ line-height: 1.5;
148
+ -webkit-user-select: text;
149
+ user-select: text;
150
+ cursor: text;
151
+ }
152
+
153
+ /* -------------------------------------- */
154
+
155
+ #cssEditor .actions {
156
+ display: flex;
157
+ justify-content: flex-end;
158
+ gap: 10px;
159
+ margin-top: 10px;
160
+ }
161
+
162
+ #previewBtn {
163
+ background: #3498db;
164
+ color: var(--text-color);
165
+ padding: 12px 24px;
166
+ border: none;
167
+ border-radius: 5px;
168
+ cursor: pointer;
169
+ font-size: 16px;
170
+ transition: all 0.3s;
171
+ min-width: 120px;
172
+ }
173
+
174
+ #previewBtn:hover {
175
+ background-color: #2980b9;
176
+ transform: translateY(-2px);
177
+ }
178
+
179
+ #cancelPreviewBtn {
180
+ display: none;
181
+ background: #d94bec;
182
+ color: var(--text-color);
183
+ padding: 12px 24px;
184
+ border: none;
185
+ border-radius: 5px;
186
+ cursor: pointer;
187
+ font-size: 16px;
188
+ transition: all 0.3s;
189
+ min-width: 120px;
190
+ }
191
+
192
+ #cancelPreviewBtn:hover {
193
+ background-color: #821d90;
194
+ transform: translateY(-2px);
195
+ }
196
+
197
+ #saveBtn {
198
+ background: #0ca55e;
199
+ color: var(--text-color);
200
+ padding: 12px 24px;
201
+ border: none;
202
+ border-radius: 5px;
203
+ cursor: pointer;
204
+ font-size: 16px;
205
+ transition: all 0.3s;
206
+ min-width: 120px;
207
+ }
208
+
209
+ #cancelBtn {
210
+ background: #bdb330;
211
+ color: var(--text-color);
212
+ padding: 12px 24px;
213
+ border: none;
214
+ border-radius: 5px;
215
+ cursor: pointer;
216
+ font-size: 16px;
217
+ transition: all 0.3s;
218
+ min-width: 120px;
219
+ }
220
+
221
+ #saveBtn:hover {
222
+ background-color: #17723d;
223
+ transform: translateY(-2px);
224
+ }
225
+
226
+ #cancelBtn:hover {
227
+ background-color: #566214;
228
+ transform: translateY(-2px);
229
+ }
230
+
231
+ #preview {
232
+ display: none;
233
+ position: fixed;
234
+ width: 800px;
235
+ height: 600px;
236
+ top: 40px;
237
+ left: 20px;
238
+ background: #181f3a;
239
+ border-radius: 10px;
240
+ box-shadow: 0 5px 25px rgba(0, 0, 0, 0.5);
241
+ z-index: 1001;
242
+ overflow: hidden;
243
+ transition: opacity 0.3s ease;
244
+ }
245
+
246
+ #preview::before {
247
+ content: '';
248
+ position: absolute;
249
+ top: 0;
250
+ left: 0;
251
+ width: 100%;
252
+ height: 100%;
253
+ z-index: 1002;
254
+ background: transparent;
255
+ cursor: grab;
256
+ }
257
+
258
+ #preview:active::before {
259
+ cursor: grabbing;
260
+ }
261
+
262
+ #previewFrame {
263
+ width: 100%;
264
+ height: 100%;
265
+ border: none;
266
+ }
267
+
268
+ #loader {
269
+ display: none;
270
+ }
271
+
272
+ .loader {
273
+ display: none;
274
+ position: fixed;
275
+ top: 50%;
276
+ left: 50%;
277
+ transform: translate(-50%, -50%);
278
+ background: rgba(0, 0, 0, 0.8);
279
+ color: var(--text-color);
280
+ padding: 20px 30px;
281
+ border-radius: 8px;
282
+ z-index: 1005;
283
+ text-align: center;
284
+ }
285
+
286
+ @keyframes spin {
287
+ 0% {
288
+ transform: rotate(0deg);
289
+ }
290
+
291
+ 100% {
292
+ transform: rotate(360deg);
293
+ }
294
+ }
295
+
296
+ @media (max-width: 768px) {
297
+ #cssEditor {
298
+ width: 95%;
299
+ height: 100%;
300
+ }
301
+
302
+ #cssEditor .actions {
303
+ flex-wrap: wrap;
304
+ }
305
+
306
+ #cssEditor h2 {
307
+ font-size: 18px;
308
+ }
309
+
310
+ #previewBtn,
311
+ #cancelPreviewBtn,
312
+ #saveBtn,
313
+ #cancelBtn {
314
+ min-width: 80px;
315
+ padding: 10px 15px;
316
+ font-size: 14px;
317
+ }
318
+ }