visualifyjs 2.5.3-2.dev → 2.5.3-9-dev

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of visualifyjs might be problematic. Click here for more details.

Files changed (139) hide show
  1. package/.github/workflows/{static.yml.bak → build.yaml} +51 -51
  2. package/LICENSE +674 -674
  3. package/README.md +40 -58
  4. package/config-overrides.js +31 -31
  5. package/dist/visualify.js +3 -3
  6. package/docs/CLI.md +15 -0
  7. package/docs/{docs/README.md → README.md} +41 -65
  8. package/docs/{docs/Rechart → Rechart}/bar.md +190 -190
  9. package/docs/{docs/Rechart → Rechart}/funnel.md +193 -241
  10. package/docs/{docs/Rechart → Rechart}/line.md +355 -355
  11. package/docs/{docs/Rechart → Rechart}/pie.md +225 -225
  12. package/docs/{docs/Rechart → Rechart}/radar.md +253 -253
  13. package/docs/{docs/_404.md → _404.md} +51 -51
  14. package/docs/{docs/_coverpage.md → _coverpage.md} +11 -11
  15. package/docs/{docs/_sidebar.md → _sidebar.md} +42 -44
  16. package/docs/{docs/components → components}/dotBio.md +34 -34
  17. package/docs/{docs/components → components}/echart.md +82 -82
  18. package/docs/{docs/components → components}/html.md +34 -34
  19. package/docs/{docs/components → components}/macaron.md +145 -145
  20. package/docs/components/markdown.md +0 -0
  21. package/docs/{docs/components → components}/more.md +142 -142
  22. package/docs/{docs/components → components}/plotly.md +62 -62
  23. package/docs/{docs/components → components}/scatterL.md +70 -70
  24. package/docs/{docs/components → components}/visium.md +56 -56
  25. package/docs/{docs/configuration.md → configuration.md} +123 -121
  26. package/docs/{docs/deploy.md → deploy.md} +23 -31
  27. package/docs/index.html +70 -70
  28. package/docs/log.md +1 -0
  29. package/docs/manifest.json +23 -23
  30. package/docs/{docs/more-pages.md → more-pages.md} +23 -23
  31. package/docs/{docs/quickstart.md → quickstart.md} +115 -124
  32. package/docs/{docs/rechart-attributes.md → rechart-attributes.md} +74 -74
  33. package/docs/{docs/rechart-basic-usage.md → rechart-basic-usage.md} +162 -162
  34. package/docs/static/css/fluff-stuff.css +169 -169
  35. package/docs/static/css/font-awesome.min.css +4 -4
  36. package/docs/static/css/visualify.css +25 -25
  37. package/docs/static/js/configuration.js +448 -448
  38. package/docs/static/js/visualify.js +24 -23
  39. package/docs/theme.md +3 -0
  40. package/package.json +74 -83
  41. package/rollup.config.mjs +75 -75
  42. package/src/_css/404.css +115 -115
  43. package/src/_css/App.css +37 -37
  44. package/src/_css/autoSuggestion.css +26 -26
  45. package/src/_css/circular-progress.css +32 -32
  46. package/src/_css/index.css +36 -36
  47. package/src/_css/modern.css +24 -24
  48. package/src/_media/corner.svg +8 -8
  49. package/src/_media/download.svg +3 -3
  50. package/src/_media/logo.svg +14 -14
  51. package/src/_test/App.test.js +15 -15
  52. package/src/_utils/reportWebVitals.js +13 -13
  53. package/src/core/appContext.js +27 -27
  54. package/src/core/components/Scatter.js +188 -188
  55. package/src/core/components/ScatterBio.js +572 -572
  56. package/src/core/components/VisiumPlot.js +165 -165
  57. package/src/core/components/browser.js +42 -42
  58. package/src/core/components/dotplot.js +413 -413
  59. package/src/core/components/html.js +29 -29
  60. package/src/core/components/list.js +178 -178
  61. package/src/core/components/macaron.js +201 -201
  62. package/src/core/components/markdown.js +56 -56
  63. package/src/core/components/parser.scatterBio.js +579 -587
  64. package/src/core/components/ratio.js +80 -80
  65. package/src/core/components/scatterL.js +173 -173
  66. package/src/core/components/searchbar.js +131 -131
  67. package/src/core/components/selection.js +193 -193
  68. package/src/core/components/timeline.js +281 -281
  69. package/src/core/components/visium.js +97 -97
  70. package/src/core/fetch/condfetch.js +82 -82
  71. package/src/core/fetch/fetch.js +92 -92
  72. package/src/core/fetch/json.js +29 -29
  73. package/src/core/fetch/vfetch.js +42 -42
  74. package/src/core/liveEditor.js +44 -44
  75. package/src/core/modules/codeEditorWithPreview.js +104 -104
  76. package/src/core/modules/echarts/common.js +20 -20
  77. package/src/core/modules/echarts/presetHandler.js +41 -41
  78. package/src/core/modules/echarts/presets/esodev.chromium.js +172 -172
  79. package/src/core/modules/echarts/presets/esodev.codex.js +130 -130
  80. package/src/core/modules/echarts/presets/esodev.visium.js +123 -123
  81. package/src/core/modules/echarts/presets/mmtrbc.js +186 -186
  82. package/src/core/modules/echarts.js +71 -71
  83. package/src/core/modules/echartsUtils.js +43 -43
  84. package/src/core/modules/echartswitcher.js +152 -152
  85. package/src/core/modules/replotly/presetHandler.js +24 -24
  86. package/src/core/modules/replotly/presets/minimum.js +18 -18
  87. package/src/core/modules/replotly/presets/mmtrbc.dot.js +114 -114
  88. package/src/core/modules/replotly/presets/mmtrbc.violin.js +100 -100
  89. package/src/core/modules/replotly.js +71 -71
  90. package/src/core/pages/404.js +50 -50
  91. package/src/core/pages/error.js +27 -27
  92. package/src/core/pages/jsonPage.js +62 -62
  93. package/src/core/pages/loading.js +44 -44
  94. package/src/core/parser/echart.data.js +183 -183
  95. package/src/core/parser/echart.features.js +125 -125
  96. package/src/core/parser/echart.general.js +143 -147
  97. package/src/core/parser/echart.hilbert.js +57 -57
  98. package/src/core/parser/echart.parser.js +210 -210
  99. package/src/core/parser/echart.series.js +67 -67
  100. package/src/core/parser/echart.types.js +76 -76
  101. package/src/core/parser/plotly.config.js +10 -10
  102. package/src/core/parser/plotly.data.js +132 -132
  103. package/src/core/parser/plotly.layout.js +9 -9
  104. package/src/core/parser/plotly.violin.js +18 -18
  105. package/src/core/recharts.js +62 -62
  106. package/src/core/router/alias.js +49 -49
  107. package/src/core/router/jsonRouter.js +31 -31
  108. package/src/core/themes/modern.js +32 -32
  109. package/src/core/themes/themeSelector.js +33 -33
  110. package/src/core/visualify.js +47 -47
  111. package/src/core/widgets/circularProgress.js +23 -23
  112. package/src/core/widgets/controller.js +83 -83
  113. package/src/core/widgets/errorBoundary.js +36 -36
  114. package/src/core/widgets/footer.js +177 -177
  115. package/src/core/widgets/header.js +234 -234
  116. package/src/core/widgets/layout/Grid.js +31 -31
  117. package/src/core/widgets/layout.js +36 -36
  118. package/src/core/widgets/mapping.js +42 -42
  119. package/src/index.js +62 -62
  120. package/src/setupTests.js +5 -5
  121. package/docs/docs/CLI.md +0 -34
  122. package/docs/docs/Rechart/scatter.md +0 -298
  123. package/docs/docs/log.md +0 -9
  124. package/docs/docs/static/logo/favicon.ico +0 -0
  125. package/docs/docs/static/logo/logo_128x128.png +0 -0
  126. package/docs/docs/static/logo/logo_192x192.png +0 -0
  127. package/docs/docs/static/logo/logo_256x256.png +0 -0
  128. package/docs/docs/static/logo/logo_512x512.png +0 -0
  129. package/docs/docs/static/logo/logo_64x64.png +0 -0
  130. package/docs/docs/theme.md +0 -5
  131. /package/docs/{docs/Rechart → Rechart}/geo.md +0 -0
  132. /package/docs/{docs/Rechart → Rechart}/liquidfill.md +0 -0
  133. /package/docs/{docs/Rechart → Rechart}/polar.md +0 -0
  134. /package/docs/{docs/Rechart → Rechart}/sankey.md +0 -0
  135. /package/docs/{docs/Rechart/sunburst.md → Rechart/scatter.md} +0 -0
  136. /package/docs/{docs/Rechart/tree.md → Rechart/sunburst.md} +0 -0
  137. /package/docs/{docs/Rechart/wordcloud.md → Rechart/tree.md} +0 -0
  138. /package/docs/{docs/components/markdown.md → Rechart/wordcloud.md} +0 -0
  139. /package/docs/{docs/static → static}/_images/deploy-github-pages.png +0 -0
@@ -1,448 +1,448 @@
1
- // variableName (Type) | Default: defaultValue | Brief description
2
- /* variableName (Type)
3
- Default: defaultValue
4
- Brief description
5
- */
6
-
7
- config = {};
8
-
9
- // ====================================== Basic ======================================
10
-
11
- // name (String) | Website name in the sidebar, can include custom HTML for customization
12
- config.name = 'visualify.js';
13
-
14
- // repo (String) | Configure repository URL or username/repo for GitHub Corner widget in the top right corner
15
- config.repo = 'https://github.com/visualify/';
16
-
17
- /*
18
- config.corner = {
19
- // the icon link url to another site
20
- url: "https://github.com/usleolihao",
21
- // the default preset icon in docsify-corner
22
- //icon: "static/avatar/corner-unscreen.gif",
23
- //background: "#091a28",
24
- //width: 50,
25
- //height: 50,
26
- };
27
- */
28
-
29
- /* auto2top (Boolean)
30
- Default: false
31
- Scrolls to the top when the route is changed
32
- */
33
- config.auto2top = true;
34
-
35
- // basePath (String) | Base path of the website. You can set it to another directory or another domain name.
36
- config.basePath = 'docs/';
37
-
38
- // autoHeader (Boolean) | Default: false | prepend a header to the page before converting it to HTML.
39
- config.autoHeader = false;
40
-
41
- // catchPluginErrors (Boolean) | Default: true | prevent plugin errors from affecting docsify
42
- config.catchPluginErrors = true;
43
-
44
- /* coverpage (Boolean|String|String[]|Object)
45
- Default: false
46
- Activate the cover feature. If true, it will load from _coverpage.md.
47
- */
48
- config.coverpage = true;
49
-
50
- // el (String) | Default: '#app' | The DOM element to be mounted on initialization.
51
- config.el = '#docsify';
52
-
53
- /* executeScript (Boolean)
54
- Default: null
55
- Execute the script on the page. Only parses the first script tag (demo).
56
- If Vue is detected, this is true by default.
57
- <script>
58
- console.log(2333)
59
- </script>
60
- */
61
- config.executeScript = true;
62
-
63
- /* formatUpdated (String|Function)
64
- Default: null
65
- display the file update date through {docsify-updated} variable.
66
- window.$docsify = {
67
- formatUpdated: '{MM}/{DD} {HH}:{mm}',
68
-
69
- formatUpdated: function (time) {
70
- // ...
71
-
72
- return time;
73
- },
74
- };
75
- */
76
- config.formatUpdated =
77
- '<hr>\
78
- <footer><strong>Last modified</strong>: {MM}/{DD}/{YYYY} {HH}:{mm} <br>\
79
- <div style="text-align: center;margin-top: 50px;">\
80
- <span>Fluff & Stuff</a> © 2023. Power by <a href="https://docsify.js.org/#/" target="_blank">docsify</a></span>\
81
- </div>\
82
- </footer>';
83
-
84
- // homepage (String) | Default: 'README.md' | serve another file as homepage
85
- // config.homepage = "home.md"
86
-
87
- // loadNavbar (Boolean|String) | Default: false | Loads navbar from _navbar.md if true, else from specified path
88
- config.loadNavbar = false;
89
-
90
- // logo (String) | Website logo in the sidebar, can be resized using CSS
91
- config.logo = './static/logo/logo_128x128.png';
92
-
93
- // maxLevel (Number) | Default: 6 | Maximum Table of Contents level
94
- config.maxLevel = 3;
95
-
96
- // mergeNavbar (Boolean) | Default: false | Navbar merges with the sidebar on smaller screens
97
- config.mergeNavbar = true;
98
-
99
- // noCompileLinks (Array<string>) | Skips compiling of specified links using regex patterns
100
- config.noCompileLinks = ['/_media/', '/_social/'];
101
-
102
- // noEmoji (Boolean) | Default: false | Disables emoji parsing and renders all emoji shorthand as text
103
- config.noEmoji = false;
104
-
105
- // notFoundPage (Boolean | String | Object) | Default: false | Configures 404 page display or custom 404 page path
106
- config.notFoundPage = true;
107
-
108
- // onlyCover (Boolean) | Default: false | Only cover page is loaded when visiting the home page
109
- config.onlyCover = false;
110
-
111
- // relativePath (Boolean) | Default: false | If true, links are relative to the current context
112
- config.relativePath = true;
113
-
114
- // routerMode (String) | Default: 'hash' | Set router mode for navigation, can be 'hash' or 'history'
115
- config.routerMode = 'hash';
116
-
117
- // loadSidebar (Boolean|String) | Default: false | Loads sidebar from _sidebar.md if true, else from specified path
118
- config.loadSidebar = true;
119
-
120
- // subMaxLevel (Number) | Default: 0 | Add table of contents
121
- // 自定义侧边栏后默认不会再生成目录,你也可以通过设置生成目录的最大层级开启这个功能。
122
- config.subMaxLevel = 2;
123
- // set sidebar display level
124
- config.sidebarDisplayLevel = 3;
125
-
126
- // ====================================== Theme ======================================
127
-
128
- // themeColor (String) | Customize theme color using CSS3 variables feature and polyfill in older browsers
129
- config.themeColor = '#3F51B5';
130
-
131
- // topMargin (Number) | Default: 0 | Add space on top when scrolling content page to align anchors with sticky-header
132
- config.topMargin = 90;
133
-
134
- // ====================================== Router ======================================
135
-
136
- config.alias = {
137
- '/.*/_navbar.md': '/_navbar.md',
138
- '/.*/_sidebar.md': '/_sidebar.md',
139
- // "/_contents/fluffy/_sidebar.md"
140
- // "/_projs/_IoT/_sidebar.md"
141
- };
142
-
143
- // routes (Object) | Define virtual routes for dynamic content, map path to string or function returning markdown
144
- config.routes = {
145
- // ... existing routes ...
146
- // Basic match w/ return string
147
- '/foo': '# Custom Markdown',
148
- // RegEx match w/ synchronous function
149
- '/bar/(.*)': function (route, matched) {
150
- return '# Custom Markdown bar ' + matched[1];
151
- },
152
- // RegEx match w/ asynchronous function
153
- '/baz/(.*)': function (route, matched, next) {
154
- // Requires `fetch` polyfill for legacy browsers (https://github.github.io/fetch/)
155
- fetch('/api/users?id=12345')
156
- .then(function (response) {
157
- next(
158
- '# Custom Markdown baz\n' +
159
- matched[1] +
160
- ' ' +
161
- response.json(),
162
- );
163
- })
164
- .catch(function (err) {
165
- // Handle error...
166
- });
167
- },
168
- // accepts everything other than dogs (synchronous)
169
- '/pets/(.+)': function (route, matched) {
170
- if (matched[0] === 'dogs') {
171
- return null;
172
- } else {
173
- return 'I like all pets but dogs';
174
- }
175
- },
176
-
177
- // accepts everything other than cats (asynchronous)
178
- '/pets/(.*)': function (route, matched, next) {
179
- if (matched[0] === 'cats') {
180
- next();
181
- } else {
182
- // Async task(s)...
183
- next('I like all pets but cats');
184
- }
185
- },
186
-
187
- // explicit false value to load real markdown file
188
- '/petss/cats': function (route, matched) {
189
- return false;
190
- },
191
-
192
- // generate dynamic content for other pets
193
- '/petss/(.+)': function (route, matched) {
194
- const pet = matched[0];
195
- return `your pet is ${pet} (but not a cat)`;
196
- },
197
- };
198
-
199
- // ====================================== Markdown ======================================
200
-
201
- // markdown (Function) | Allows Markdown configuration and customization
202
- config.debug = false;
203
-
204
- config.markdown = {
205
- renderer: {
206
- code: function (code, lang) {
207
- if (typeof lang === 'string' && lang.startsWith('output')) {
208
- const conf = lang.split(',');
209
- let oconf = {};
210
- // iterate over the rest of the elements
211
- for (let i = 0; i < conf.length; i++) {
212
- //skip if not a key-value pair
213
- if (conf[i].indexOf('=') === -1) continue;
214
- // split the element into key and value
215
- const [key, value] = conf[i].split('=');
216
- // set the key-value pair in the config object
217
- oconf[key] = value;
218
- }
219
- if (config.debug) {
220
- console.log(oconf);
221
- }
222
-
223
- // add line numbers if linenums attribute is true
224
- if (oconf.linenums === 'true') {
225
- let lines = code.split(/(?:<br>)|(?:\n)/);
226
- for (let i = 0; i < lines.length; i++) {
227
- lines[i] = i + 1 + ': ' + lines[i];
228
- }
229
- code = lines.join('<br>');
230
- }
231
-
232
- return (
233
- '<div class="terminal">' +
234
- '<div class="terminal-fakeMenu">' +
235
- '<div class="terminal-fakeButtons terminal-fakeClose"></div>' +
236
- '<div class="terminal-fakeButtons terminal-fakeMinimize"></div>' +
237
- '<div class="terminal-fakeButtons terminal-fakeZoom"></div>' +
238
- '<span> ' +
239
- (oconf.title ?? 'Output') +
240
- ' </span>' +
241
- '</div>' +
242
- '<div class="terminal-fakeScreen">' +
243
- '<output data-lang="output">' +
244
- code +
245
- '</output>' +
246
- '</div>' +
247
- '</div>'
248
- );
249
- } else if (lang === 'mermaid') {
250
- //console.log("mermaid", this, arguments[0], arguments[1]);
251
- return (
252
- '<div class="fsmermaid">' +
253
- this.origin.code.apply(this, arguments) +
254
- '</div>'
255
- );
256
- }
257
- return this.origin.code.apply(this, arguments);
258
- },
259
- },
260
- };
261
-
262
- // ====================================== Cross Origin Links ======================================
263
-
264
- // crossOriginLinks (Array) | Default: true | prevent plugin errors from affecting docsify
265
- config.crossOriginLinks = [
266
- // 'https://example.com/cross-origin-link'
267
- ];
268
-
269
- /* requestHeaders (Object)
270
- Set request resource headers for custom configurations, e.g., caching
271
- requestHeaders: {
272
- 'x-token': 'xxx', //设置请求头
273
- 'cache-control': 'max-age=600', //设置缓存
274
- },
275
- */
276
- config.requestHeaders = {};
277
-
278
- // ====================================== Vue ======================================
279
-
280
- /* vueComponents (Object)
281
- Creates and registers global Vue components with unique data per instance
282
- Components are specified using the component name as the key with an object containing Vue options as the value.
283
- Component data is unique for each instance and will not persist as users navigate the site.
284
- */
285
- config.vueComponents = {
286
- 'button-counter': {
287
- template: `
288
- <button @click="count += 1">
289
- You clicked me {{ count }} times
290
- </button>
291
- `,
292
- data() {
293
- return { count: 0 };
294
- },
295
- }, // <button-counter></button-counter>
296
- };
297
-
298
- // vueGlobalOptions (Object) | Specifies Vue options for global content, changes persist across global references
299
- config.vueGlobalOptions = {
300
- data() {
301
- return {
302
- version: '1.0.0',
303
- };
304
- },
305
- };
306
-
307
- // vueMounts (Object) | Specifies DOM elements to mount as Vue instances with unique data per instance
308
- config.vueMounts = {
309
- '#counter': {
310
- data() {
311
- return { count: 0 };
312
- },
313
- },
314
- };
315
- // ====================================== Plugins ======================================
316
-
317
- // ~~~~~~~~~~~~~~~~~~~~~ sidebarbar ~~~~~~~~~~~~~~~~~~~~~~
318
- config.sidebarbar = {
319
- showVersion: true,
320
- };
321
-
322
- // ~~~~~~~~~~~~~~~~~~~~~ Search ~~~~~~~~~~~~~~~~~~~~~~
323
- /* search (String|String[]|Object)
324
- Default: false
325
- Usage:
326
-
327
- config. = 'auto'; //default
328
-
329
- config.search = [
330
- '/', // => /README.md
331
- '/guide', // => /guide.md
332
- '/get-started', // => /get-started.md
333
- '/zh-cn/', // => /zh-cn/README.md
334
- ]
335
- */
336
- // complete configuration parameters
337
- config.search = {
338
- maxAge: 86400000, // Expiration time, the default one day
339
- paths: 'auto', // or 'auto'
340
- placeholder: 'Type to search',
341
- // Localization
342
- noData: 'No Results!',
343
- // Headline depth, 1 - 6
344
- depth: 5,
345
-
346
- hideOtherSidebarContent: false, // whether or not to hide other sidebar content
347
-
348
- // To avoid search index collision
349
- // between multiple websites under the same domain
350
- namespace: 'fluff',
351
-
352
- // Use different indexes for path prefixes (namespaces).
353
- // NOTE: Only works in 'auto' mode.
354
- //
355
- // When initialiazing an index, we look for the first path from the sidebar.
356
- // If it matches the prefix from the list, we switch to the corresponding index.
357
- pathNamespaces: ['/zh-cn', '/ru-ru', '/ru-ru/v1'],
358
-
359
- // You can provide a regexp to match prefixes. In this case,
360
- // the matching substring will be used to identify the index
361
- pathNamespaces: /^(\/(zh-cn|ru-ru))?(\/(v1|v2))?/,
362
-
363
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Custom search ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
364
-
365
- // exclude (Stirng("\.html$")|String[]) | Default: '' | Exclude files from search index (.html means exclude all html files)
366
- exclude: ['.html', '.png', '.zip'],
367
- // debug (Boolean) | Default: false | Enable debug mode
368
- debug: false,
369
- };
370
-
371
- /* docsify-copy-code
372
- A docsify plugin that adds a button to easily copy code blocks to your clipboard.
373
- <script src="https://unpkg.com/docsify-copy-code@2"></script>
374
- copyCode: {
375
- buttonText : 'Copy to clipboard',
376
- errorText : 'Error',
377
- successText: 'Copied'
378
- }
379
-
380
- copyCode: {
381
- buttonText: {
382
- '/zh-cn/': '点击复制',
383
- '/' : 'Copy to clipboard'
384
- },
385
- errorText: {
386
- '/zh-cn/': '错误',
387
- '/' : 'Error'
388
- },
389
- successText: {
390
- '/zh-cn/': '复制',
391
- '/' : 'Copied'
392
- }
393
- }
394
- */
395
- config.copyCode = {
396
- buttonText: 'Copy to clipboard',
397
- errorText: 'Error',
398
- successText: 'Copied',
399
- };
400
-
401
- // https://jhildenbiddle.github.io/docsify-tabs/
402
- config.tabs = {
403
- persist: true, // default
404
- sync: true, // default
405
- theme: 'Material', // Classic/material/No Theme
406
- tabComments: true, // default
407
- tabHeadings: true, // default
408
- };
409
-
410
- config.latex = {
411
- inlineMath: [
412
- ['$', '$'],
413
- ['\\(', '\\)'],
414
- ], // default
415
- displayMath: [['$$', '$$']], // default
416
- };
417
-
418
- config['flexible-alerts'] = {
419
- style: 'callout',
420
- note: {
421
- label: {
422
- '/zh-cn/': '提示',
423
- '/': 'Note',
424
- },
425
- },
426
- tip: {
427
- label: {
428
- '/zh-cn/': '小窍门',
429
- '/': 'Tip',
430
- },
431
- },
432
- warning: {
433
- label: {
434
- '/zh-cn/': '注意',
435
- '/': 'Warning',
436
- },
437
- },
438
- attention: {
439
- label: {
440
- '/zh-cn/': '警告',
441
- '/': 'Attention',
442
- },
443
- },
444
- };
445
-
446
- config.mermaidConfig = {
447
- querySelector: '.mermaid',
448
- };
1
+ // variableName (Type) | Default: defaultValue | Brief description
2
+ /* variableName (Type)
3
+ Default: defaultValue
4
+ Brief description
5
+ */
6
+
7
+ config = {};
8
+
9
+ // ====================================== Basic ======================================
10
+
11
+ // name (String) | Website name in the sidebar, can include custom HTML for customization
12
+ config.name = 'visualify.js';
13
+
14
+ // repo (String) | Configure repository URL or username/repo for GitHub Corner widget in the top right corner
15
+ config.repo = 'https://github.com/usleolihao';
16
+
17
+ /*
18
+ config.corner = {
19
+ // the icon link url to another site
20
+ url: "https://github.com/usleolihao",
21
+ // the default preset icon in docsify-corner
22
+ //icon: "static/avatar/corner-unscreen.gif",
23
+ //background: "#091a28",
24
+ //width: 50,
25
+ //height: 50,
26
+ };
27
+ */
28
+
29
+ /* auto2top (Boolean)
30
+ Default: false
31
+ Scrolls to the top when the route is changed
32
+ */
33
+ config.auto2top = true;
34
+
35
+ // basePath (String) | Base path of the website. You can set it to another directory or another domain name.
36
+ // config.basePath = '/docs/';
37
+
38
+ // autoHeader (Boolean) | Default: false | prepend a header to the page before converting it to HTML.
39
+ config.autoHeader = false;
40
+
41
+ // catchPluginErrors (Boolean) | Default: true | prevent plugin errors from affecting docsify
42
+ config.catchPluginErrors = true;
43
+
44
+ /* coverpage (Boolean|String|String[]|Object)
45
+ Default: false
46
+ Activate the cover feature. If true, it will load from _coverpage.md.
47
+ */
48
+ config.coverpage = true;
49
+
50
+ // el (String) | Default: '#app' | The DOM element to be mounted on initialization.
51
+ config.el = '#docsify';
52
+
53
+ /* executeScript (Boolean)
54
+ Default: null
55
+ Execute the script on the page. Only parses the first script tag (demo).
56
+ If Vue is detected, this is true by default.
57
+ <script>
58
+ console.log(2333)
59
+ </script>
60
+ */
61
+ config.executeScript = true;
62
+
63
+ /* formatUpdated (String|Function)
64
+ Default: null
65
+ display the file update date through {docsify-updated} variable.
66
+ window.$docsify = {
67
+ formatUpdated: '{MM}/{DD} {HH}:{mm}',
68
+
69
+ formatUpdated: function (time) {
70
+ // ...
71
+
72
+ return time;
73
+ },
74
+ };
75
+ */
76
+ config.formatUpdated =
77
+ '<hr>\
78
+ <footer><strong>Last modified</strong>: {MM}/{DD}/{YYYY} {HH}:{mm} <br>\
79
+ <div style="text-align: center;margin-top: 50px;">\
80
+ <span>Fluff & Stuff</a> © 2023. Power by <a href="https://docsify.js.org/#/" target="_blank">docsify</a></span>\
81
+ </div>\
82
+ </footer>';
83
+
84
+ // homepage (String) | Default: 'README.md' | serve another file as homepage
85
+ // config.homepage = "home.md"
86
+
87
+ // loadNavbar (Boolean|String) | Default: false | Loads navbar from _navbar.md if true, else from specified path
88
+ config.loadNavbar = false;
89
+
90
+ // logo (String) | Website logo in the sidebar, can be resized using CSS
91
+ config.logo = './static/logo/logo_128x128.png';
92
+
93
+ // maxLevel (Number) | Default: 6 | Maximum Table of Contents level
94
+ config.maxLevel = 3;
95
+
96
+ // mergeNavbar (Boolean) | Default: false | Navbar merges with the sidebar on smaller screens
97
+ config.mergeNavbar = true;
98
+
99
+ // noCompileLinks (Array<string>) | Skips compiling of specified links using regex patterns
100
+ config.noCompileLinks = ['/_media/', '/_social/'];
101
+
102
+ // noEmoji (Boolean) | Default: false | Disables emoji parsing and renders all emoji shorthand as text
103
+ config.noEmoji = false;
104
+
105
+ // notFoundPage (Boolean | String | Object) | Default: false | Configures 404 page display or custom 404 page path
106
+ config.notFoundPage = true;
107
+
108
+ // onlyCover (Boolean) | Default: false | Only cover page is loaded when visiting the home page
109
+ config.onlyCover = false;
110
+
111
+ // relativePath (Boolean) | Default: false | If true, links are relative to the current context
112
+ config.relativePath = true;
113
+
114
+ // routerMode (String) | Default: 'hash' | Set router mode for navigation, can be 'hash' or 'history'
115
+ config.routerMode = 'hash';
116
+
117
+ // loadSidebar (Boolean|String) | Default: false | Loads sidebar from _sidebar.md if true, else from specified path
118
+ config.loadSidebar = true;
119
+
120
+ // subMaxLevel (Number) | Default: 0 | Add table of contents
121
+ // 自定义侧边栏后默认不会再生成目录,你也可以通过设置生成目录的最大层级开启这个功能。
122
+ config.subMaxLevel = 2;
123
+ // set sidebar display level
124
+ config.sidebarDisplayLevel = 3;
125
+
126
+ // ====================================== Theme ======================================
127
+
128
+ // themeColor (String) | Customize theme color using CSS3 variables feature and polyfill in older browsers
129
+ config.themeColor = '#3F51B5';
130
+
131
+ // topMargin (Number) | Default: 0 | Add space on top when scrolling content page to align anchors with sticky-header
132
+ config.topMargin = 90;
133
+
134
+ // ====================================== Router ======================================
135
+
136
+ config.alias = {
137
+ '/.*/_navbar.md': '/_navbar.md',
138
+ '/.*/_sidebar.md': '/_sidebar.md',
139
+ // "/_contents/fluffy/_sidebar.md"
140
+ // "/_projs/_IoT/_sidebar.md"
141
+ };
142
+
143
+ // routes (Object) | Define virtual routes for dynamic content, map path to string or function returning markdown
144
+ config.routes = {
145
+ // ... existing routes ...
146
+ // Basic match w/ return string
147
+ '/foo': '# Custom Markdown',
148
+ // RegEx match w/ synchronous function
149
+ '/bar/(.*)': function (route, matched) {
150
+ return '# Custom Markdown bar ' + matched[1];
151
+ },
152
+ // RegEx match w/ asynchronous function
153
+ '/baz/(.*)': function (route, matched, next) {
154
+ // Requires `fetch` polyfill for legacy browsers (https://github.github.io/fetch/)
155
+ fetch('/api/users?id=12345')
156
+ .then(function (response) {
157
+ next(
158
+ '# Custom Markdown baz\n' +
159
+ matched[1] +
160
+ ' ' +
161
+ response.json(),
162
+ );
163
+ })
164
+ .catch(function (err) {
165
+ // Handle error...
166
+ });
167
+ },
168
+ // accepts everything other than dogs (synchronous)
169
+ '/pets/(.+)': function (route, matched) {
170
+ if (matched[0] === 'dogs') {
171
+ return null;
172
+ } else {
173
+ return 'I like all pets but dogs';
174
+ }
175
+ },
176
+
177
+ // accepts everything other than cats (asynchronous)
178
+ '/pets/(.*)': function (route, matched, next) {
179
+ if (matched[0] === 'cats') {
180
+ next();
181
+ } else {
182
+ // Async task(s)...
183
+ next('I like all pets but cats');
184
+ }
185
+ },
186
+
187
+ // explicit false value to load real markdown file
188
+ '/petss/cats': function (route, matched) {
189
+ return false;
190
+ },
191
+
192
+ // generate dynamic content for other pets
193
+ '/petss/(.+)': function (route, matched) {
194
+ const pet = matched[0];
195
+ return `your pet is ${pet} (but not a cat)`;
196
+ },
197
+ };
198
+
199
+ // ====================================== Markdown ======================================
200
+
201
+ // markdown (Function) | Allows Markdown configuration and customization
202
+ config.debug = false;
203
+
204
+ config.markdown = {
205
+ renderer: {
206
+ code: function (code, lang) {
207
+ if (typeof lang === 'string' && lang.startsWith('output')) {
208
+ const conf = lang.split(',');
209
+ let oconf = {};
210
+ // iterate over the rest of the elements
211
+ for (let i = 0; i < conf.length; i++) {
212
+ //skip if not a key-value pair
213
+ if (conf[i].indexOf('=') === -1) continue;
214
+ // split the element into key and value
215
+ const [key, value] = conf[i].split('=');
216
+ // set the key-value pair in the config object
217
+ oconf[key] = value;
218
+ }
219
+ if (config.debug) {
220
+ console.log(oconf);
221
+ }
222
+
223
+ // add line numbers if linenums attribute is true
224
+ if (oconf.linenums === 'true') {
225
+ let lines = code.split(/(?:<br>)|(?:\n)/);
226
+ for (let i = 0; i < lines.length; i++) {
227
+ lines[i] = i + 1 + ': ' + lines[i];
228
+ }
229
+ code = lines.join('<br>');
230
+ }
231
+
232
+ return (
233
+ '<div class="terminal">' +
234
+ '<div class="terminal-fakeMenu">' +
235
+ '<div class="terminal-fakeButtons terminal-fakeClose"></div>' +
236
+ '<div class="terminal-fakeButtons terminal-fakeMinimize"></div>' +
237
+ '<div class="terminal-fakeButtons terminal-fakeZoom"></div>' +
238
+ '<span> ' +
239
+ (oconf.title ?? 'Output') +
240
+ ' </span>' +
241
+ '</div>' +
242
+ '<div class="terminal-fakeScreen">' +
243
+ '<output data-lang="output">' +
244
+ code +
245
+ '</output>' +
246
+ '</div>' +
247
+ '</div>'
248
+ );
249
+ } else if (lang === 'mermaid') {
250
+ //console.log("mermaid", this, arguments[0], arguments[1]);
251
+ return (
252
+ '<div class="fsmermaid">' +
253
+ this.origin.code.apply(this, arguments) +
254
+ '</div>'
255
+ );
256
+ }
257
+ return this.origin.code.apply(this, arguments);
258
+ },
259
+ },
260
+ };
261
+
262
+ // ====================================== Cross Origin Links ======================================
263
+
264
+ // crossOriginLinks (Array) | Default: true | prevent plugin errors from affecting docsify
265
+ config.crossOriginLinks = [
266
+ // 'https://example.com/cross-origin-link'
267
+ ];
268
+
269
+ /* requestHeaders (Object)
270
+ Set request resource headers for custom configurations, e.g., caching
271
+ requestHeaders: {
272
+ 'x-token': 'xxx', //设置请求头
273
+ 'cache-control': 'max-age=600', //设置缓存
274
+ },
275
+ */
276
+ config.requestHeaders = {};
277
+
278
+ // ====================================== Vue ======================================
279
+
280
+ /* vueComponents (Object)
281
+ Creates and registers global Vue components with unique data per instance
282
+ Components are specified using the component name as the key with an object containing Vue options as the value.
283
+ Component data is unique for each instance and will not persist as users navigate the site.
284
+ */
285
+ config.vueComponents = {
286
+ 'button-counter': {
287
+ template: `
288
+ <button @click="count += 1">
289
+ You clicked me {{ count }} times
290
+ </button>
291
+ `,
292
+ data() {
293
+ return { count: 0 };
294
+ },
295
+ }, // <button-counter></button-counter>
296
+ };
297
+
298
+ // vueGlobalOptions (Object) | Specifies Vue options for global content, changes persist across global references
299
+ config.vueGlobalOptions = {
300
+ data() {
301
+ return {
302
+ version: '1.0.0',
303
+ };
304
+ },
305
+ };
306
+
307
+ // vueMounts (Object) | Specifies DOM elements to mount as Vue instances with unique data per instance
308
+ config.vueMounts = {
309
+ '#counter': {
310
+ data() {
311
+ return { count: 0 };
312
+ },
313
+ },
314
+ };
315
+ // ====================================== Plugins ======================================
316
+
317
+ // ~~~~~~~~~~~~~~~~~~~~~ sidebarbar ~~~~~~~~~~~~~~~~~~~~~~
318
+ config.sidebarbar = {
319
+ showVersion: true,
320
+ };
321
+
322
+ // ~~~~~~~~~~~~~~~~~~~~~ Search ~~~~~~~~~~~~~~~~~~~~~~
323
+ /* search (String|String[]|Object)
324
+ Default: false
325
+ Usage:
326
+
327
+ config. = 'auto'; //default
328
+
329
+ config.search = [
330
+ '/', // => /README.md
331
+ '/guide', // => /guide.md
332
+ '/get-started', // => /get-started.md
333
+ '/zh-cn/', // => /zh-cn/README.md
334
+ ]
335
+ */
336
+ // complete configuration parameters
337
+ config.search = {
338
+ maxAge: 86400000, // Expiration time, the default one day
339
+ paths: 'auto', // or 'auto'
340
+ placeholder: 'Type to search',
341
+ // Localization
342
+ noData: 'No Results!',
343
+ // Headline depth, 1 - 6
344
+ depth: 5,
345
+
346
+ hideOtherSidebarContent: false, // whether or not to hide other sidebar content
347
+
348
+ // To avoid search index collision
349
+ // between multiple websites under the same domain
350
+ namespace: 'fluff',
351
+
352
+ // Use different indexes for path prefixes (namespaces).
353
+ // NOTE: Only works in 'auto' mode.
354
+ //
355
+ // When initialiazing an index, we look for the first path from the sidebar.
356
+ // If it matches the prefix from the list, we switch to the corresponding index.
357
+ pathNamespaces: ['/zh-cn', '/ru-ru', '/ru-ru/v1'],
358
+
359
+ // You can provide a regexp to match prefixes. In this case,
360
+ // the matching substring will be used to identify the index
361
+ pathNamespaces: /^(\/(zh-cn|ru-ru))?(\/(v1|v2))?/,
362
+
363
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Custom search ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
364
+
365
+ // exclude (Stirng("\.html$")|String[]) | Default: '' | Exclude files from search index (.html means exclude all html files)
366
+ exclude: ['.html', '.png', '.zip'],
367
+ // debug (Boolean) | Default: false | Enable debug mode
368
+ debug: false,
369
+ };
370
+
371
+ /* docsify-copy-code
372
+ A docsify plugin that adds a button to easily copy code blocks to your clipboard.
373
+ <script src="https://unpkg.com/docsify-copy-code@2"></script>
374
+ copyCode: {
375
+ buttonText : 'Copy to clipboard',
376
+ errorText : 'Error',
377
+ successText: 'Copied'
378
+ }
379
+
380
+ copyCode: {
381
+ buttonText: {
382
+ '/zh-cn/': '点击复制',
383
+ '/' : 'Copy to clipboard'
384
+ },
385
+ errorText: {
386
+ '/zh-cn/': '错误',
387
+ '/' : 'Error'
388
+ },
389
+ successText: {
390
+ '/zh-cn/': '复制',
391
+ '/' : 'Copied'
392
+ }
393
+ }
394
+ */
395
+ config.copyCode = {
396
+ buttonText: 'Copy to clipboard',
397
+ errorText: 'Error',
398
+ successText: 'Copied',
399
+ };
400
+
401
+ // https://jhildenbiddle.github.io/docsify-tabs/
402
+ config.tabs = {
403
+ persist: true, // default
404
+ sync: true, // default
405
+ theme: 'Material', // Classic/material/No Theme
406
+ tabComments: true, // default
407
+ tabHeadings: true, // default
408
+ };
409
+
410
+ config.latex = {
411
+ inlineMath: [
412
+ ['$', '$'],
413
+ ['\\(', '\\)'],
414
+ ], // default
415
+ displayMath: [['$$', '$$']], // default
416
+ };
417
+
418
+ config['flexible-alerts'] = {
419
+ style: 'callout',
420
+ note: {
421
+ label: {
422
+ '/zh-cn/': '提示',
423
+ '/': 'Note',
424
+ },
425
+ },
426
+ tip: {
427
+ label: {
428
+ '/zh-cn/': '小窍门',
429
+ '/': 'Tip',
430
+ },
431
+ },
432
+ warning: {
433
+ label: {
434
+ '/zh-cn/': '注意',
435
+ '/': 'Warning',
436
+ },
437
+ },
438
+ attention: {
439
+ label: {
440
+ '/zh-cn/': '警告',
441
+ '/': 'Attention',
442
+ },
443
+ },
444
+ };
445
+
446
+ config.mermaidConfig = {
447
+ querySelector: '.mermaid',
448
+ };