@docmd/ui 0.5.2 → 0.5.4

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.
@@ -355,16 +355,18 @@
355
355
 
356
356
  document.querySelectorAll('.theme-toggle-button').forEach(btn => {
357
357
  btn.addEventListener('click', () => {
358
- const t = document.documentElement.getAttribute('data-theme') === 'light' ? 'dark' : 'light';
359
- document.documentElement.setAttribute('data-theme', t);
360
- document.body.setAttribute('data-theme', t);
361
- localStorage.setItem('docmd-theme', t);
358
+ const currentTheme = document.documentElement.getAttribute('data-theme');
359
+ const nextTheme = currentTheme === 'light' ? 'dark' : 'light';
360
+
361
+ document.documentElement.setAttribute('data-theme', nextTheme);
362
+ document.body.setAttribute('data-theme', nextTheme);
363
+ localStorage.setItem('docmd-theme', nextTheme);
362
364
 
363
365
  const lightLink = document.getElementById('hljs-light');
364
366
  const darkLink = document.getElementById('hljs-dark');
365
367
  if (lightLink && darkLink) {
366
- lightLink.disabled = t === 'dark';
367
- darkLink.disabled = t === 'light';
368
+ lightLink.disabled = nextTheme === 'dark';
369
+ darkLink.disabled = nextTheme === 'light';
368
370
  }
369
371
  });
370
372
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@docmd/ui",
3
- "version": "0.5.2",
3
+ "version": "0.5.4",
4
4
  "description": "Base UI templates and assets for docmd.",
5
5
  "main": "index.js",
6
6
  "files": [
@@ -10,223 +10,208 @@
10
10
  <html lang="en">
11
11
 
12
12
  <head>
13
- <meta charset="UTF-8">
14
- <meta name="generator" content="docmd v0.5.x">
15
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
13
+ <meta charset="UTF-8">
14
+ <meta name="generator" content="docmd v0.5.x">
15
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
16
+ <%- themeInitScript %>
17
+ <style>
18
+ html {
19
+ visibility: hidden;
20
+ }
21
+ </style>
16
22
  <% let versionRoot='/' ; let siteRoot=relativePathToRoot; if (config.versions?.current && config._activeVersion?.id)
17
- { const isSubVersion=config.versions.current !==config._activeVersion.id; versionRoot=isSubVersion ? '/' +
18
- config._activeVersion.id + '/' : '/' ; if (isSubVersion) { siteRoot=(relativePathToRoot==='./' ? '' :
19
- relativePathToRoot) + '../' ; } } if (locals.isOfflineMode) { versionRoot='' ; } %>
20
- <script>
21
- var root = "<%= relativePathToRoot %>";
22
- if (root && !root.endsWith('/')) root += '/';
23
- if (root === '') root = './';
24
- window.DOCMD_ROOT = root;
25
-
26
- var siteRoot = "<%= siteRoot %>";
27
- if (siteRoot && !siteRoot.endsWith('/')) siteRoot += '/';
28
- if (siteRoot === '') siteRoot = './';
29
- window.DOCMD_SITE_ROOT = siteRoot;
30
-
31
- window.DOCMD_DEFAULT_MODE = "<%= defaultMode %>";
32
- window.DOCMD_VERSION_ROOT = "<%- versionRoot %>";
33
- </script>
34
- <title>
35
- <%= pageTitle %>
36
- </title>
37
- <%- faviconLinkHtml || '' %>
38
- <link rel="stylesheet" href="<%= relativePathToRoot %>assets/css/docmd-main.css?v=<%= buildHash %>">
39
- <% if (config.theme?.codeHighlight !==false) { const isDarkDefault=defaultMode==='dark' ; %>
23
+ { const isSubVersion=config.versions.current !==config._activeVersion.id; versionRoot=isSubVersion ? '/' +
24
+ config._activeVersion.id + '/' : '/' ; if (isSubVersion) { siteRoot=(relativePathToRoot==='./' ? '' :
25
+ relativePathToRoot) + '../' ; } } if (locals.isOfflineMode) { versionRoot='' ; } %>
26
+ <script>
27
+ var root = "<%= relativePathToRoot %>";
28
+ if (root && !root.endsWith('/')) root += '/';
29
+ if (root === '') root = './';
30
+ window.DOCMD_ROOT = root;
31
+
32
+ var siteRoot = "<%= siteRoot %>";
33
+ if (siteRoot && !siteRoot.endsWith('/')) siteRoot += '/';
34
+ if (siteRoot === '') siteRoot = './';
35
+ window.DOCMD_SITE_ROOT = siteRoot;
36
+
37
+ window.DOCMD_APPEARANCE = "<%= appearance %>";
38
+ window.DOCMD_VERSION_ROOT = "<%- versionRoot %>";
39
+ </script>
40
+ <title>
41
+ <%= pageTitle %>
42
+ </title>
43
+ <%- faviconLinkHtml || '' %>
44
+ <link rel="stylesheet" href="<%= relativePathToRoot %>assets/css/docmd-main.css?v=<%= buildHash %>">
45
+ <% if (config.theme?.codeHighlight !==false) { const isDarkDefault=appearance==='dark' ; %>
46
+ <link rel="stylesheet" href="<%= relativePathToRoot %>assets/css/docmd-highlight-light.css?v=<%= buildHash %>"
47
+ id="hljs-light" <%=isDarkDefault ? 'disabled' : '' %>>
48
+
49
+ <link rel="stylesheet" href="<%= relativePathToRoot %>assets/css/docmd-highlight-dark.css?v=<%= buildHash %>"
50
+ id="hljs-dark" <%=isDarkDefault ? '' : 'disabled' %>>
51
+ <% } %>
52
+ <%- pluginHeadScriptsHtml || '' %>
53
+ <% (customCssFiles || []).forEach(cssFile=> { %>
40
54
  <link rel="stylesheet"
41
- href="<%= relativePathToRoot %>assets/css/docmd-highlight-light.css?v=<%= buildHash %>"
42
- id="hljs-light" <%=isDarkDefault ? 'disabled' : '' %>>
43
-
44
- <link rel="stylesheet"
45
- href="<%= relativePathToRoot %>assets/css/docmd-highlight-dark.css?v=<%= buildHash %>"
46
- id="hljs-dark" <%=isDarkDefault ? '' : 'disabled' %>>
47
- <% } %>
48
- <%- pluginHeadScriptsHtml || '' %>
49
- <% (customCssFiles || []).forEach(cssFile=> { %>
50
- <link rel="stylesheet"
51
- href="<%= relativePathToRoot %><%- cssFile.startsWith('/') ? cssFile.substring(1) : cssFile %>?v=<%= buildHash %>">
52
- <% }); %>
53
- <%- themeInitScript %>
55
+ href="<%= relativePathToRoot %><%- cssFile.startsWith('/') ? cssFile.substring(1) : cssFile %>?v=<%= buildHash %>">
56
+ <% }); %>
57
+ <%- themeInitScript %>
54
58
  </head>
55
59
 
56
60
  <body
57
- class="<%= sidebarConfig?.enabled === false ? 'no-sidebar' : (sidebarConfig?.collapsible ? 'sidebar-collapsible' : 'sidebar-not-collapsible') %><%= (locals.menubarConfig && menubarConfig?.enabled !== false) ? ' has-menubar has-menubar-' + (menubarConfig.position || 'top') : '' %><%= headerConfig?.enabled === false ? ' no-header' : '' %>"
58
- data-default-collapsed="<%= sidebarConfig?.defaultCollapsed %>"
59
- data-copy-code-enabled="<%= config.copyCode === true %>" data-spa-enabled="<%= config.layout?.spa !== false %>">
60
-
61
- <a href="#main-content" class="skip-link">Skip to main content</a>
62
-
63
- <% if (locals.menubarConfig && menubarConfig?.enabled !==false && menubarConfig.position !=='header' ) { %>
64
- <%- include('partials/menubar', { menubarConfig, relativePathToRoot, renderIcon, optionsMenu: locals.optionsMenu
65
- }) %>
66
- <% } %>
67
-
68
- <% if (sidebarConfig?.enabled !==false) { %>
69
- <aside class="sidebar">
70
- <div class="sidebar-header">
71
- <% if (logo && logo.light && logo.dark) { %>
72
- <a href="<%= logo.href || relativePathToRoot %>" class="logo-link">
73
- <img src="<%= relativePathToRoot %><%- logo.light.startsWith('/') ? logo.light.substring(1) : logo.light %>"
74
- alt="<%= logo.alt || siteTitle %>" class="logo-light" <% if (logo.height) {
75
- %>style="height: <%= logo.height %>;"<% } %>>
76
- <img src="<%= relativePathToRoot %><%- logo.dark.startsWith('/') ? logo.dark.substring(1) : logo.dark %>"
77
- alt="<%= logo.alt || siteTitle %>" class="logo-dark" <% if (logo.height)
78
- { %>style="height: <%= logo.height %>;"<% } %>>
79
- </a>
80
- <% } else { %>
81
- <h1><a href="<%= relativePathToRoot %>index.html">
82
- <%= siteTitle %>
83
- </a></h1>
84
- <% } %>
85
- <span class="mobile-view sidebar-menu-button float-right">
86
- <%- renderIcon("menu") %>
87
- </span>
61
+ class="<%= sidebarConfig?.enabled === false ? 'no-sidebar' : (sidebarConfig?.collapsible ? 'sidebar-collapsible' : 'sidebar-not-collapsible') %><%= (locals.menubarConfig && menubarConfig?.enabled !== false) ? ' has-menubar has-menubar-' + (menubarConfig.position || 'top') : '' %><%= headerConfig?.enabled === false ? ' no-header' : '' %>"
62
+ data-default-collapsed="<%= sidebarConfig?.defaultCollapsed %>"
63
+ data-copy-code-enabled="<%= config.copyCode === true %>" data-spa-enabled="<%= config.layout?.spa !== false %>">
64
+
65
+ <a href="#main-content" class="skip-link">Skip to main content</a>
66
+
67
+ <% if (locals.menubarConfig && menubarConfig?.enabled !==false && menubarConfig.position !=='header' ) { %>
68
+ <%- include('partials/menubar', { menubarConfig, relativePathToRoot, renderIcon, optionsMenu: locals.optionsMenu })
69
+ %>
70
+ <% } %>
71
+
72
+ <% if (sidebarConfig?.enabled !==false) { %>
73
+ <aside class="sidebar">
74
+ <div class="sidebar-header">
75
+ <% if (logo && logo.light && logo.dark) { %>
76
+ <a href="<%= logo.href || relativePathToRoot %>" class="logo-link">
77
+ <img
78
+ src="<%= relativePathToRoot %><%- logo.light.startsWith('/') ? logo.light.substring(1) : logo.light %>"
79
+ alt="<%= logo.alt || siteTitle %>" class="logo-light" <% if (logo.height) { %>style="height: <%=
80
+ logo.height %>;"<% } %>>
81
+ <img
82
+ src="<%= relativePathToRoot %><%- logo.dark.startsWith('/') ? logo.dark.substring(1) : logo.dark %>"
83
+ alt="<%= logo.alt || siteTitle %>" class="logo-dark" <% if (logo.height) { %>style="height: <%=
84
+ logo.height %>;"<% } %>>
85
+ </a>
86
+ <% } else { %>
87
+ <h1><a href="<%= relativePathToRoot %>index.html">
88
+ <%= siteTitle %>
89
+ </a></h1>
90
+ <% } %>
91
+ <span class="mobile-view sidebar-menu-button float-right">
92
+ <%- renderIcon("menu") %>
93
+ </span>
94
+ </div>
95
+
96
+ <div class="sidebar-top-group">
97
+ <% if (locals.optionsMenu && optionsMenu.position==='sidebar-top' ) { %>
98
+ <div class="sidebar-options-wrapper">
99
+ <%- include('partials/options-menu', { optionsMenu }) %>
100
+ </div>
101
+ <% } %>
102
+ <% if (config.versions && config.versions.position==='sidebar-top' ) { %>
103
+ <div class="sidebar-version-wrapper">
104
+ <%- include('partials/version-dropdown', { versions: config.versions, activeVersion:
105
+ config._activeVersion, relativePathToRoot }) %>
106
+ </div>
107
+ <% } %>
108
+ </div>
109
+
110
+ <%- navigationHtml %>
111
+
112
+ <div class="sidebar-bottom-group mt-auto">
113
+ <% if (config.versions && config.versions.position==='sidebar-bottom' ) { %>
114
+ <div class="sidebar-version-wrapper">
115
+ <%- include('partials/version-dropdown', { versions: config.versions, activeVersion:
116
+ config._activeVersion, relativePathToRoot }) %>
117
+ </div>
118
+ <% } %>
119
+ <% if (locals.optionsMenu && optionsMenu.position==='sidebar-bottom' ) { %>
120
+ <div class="sidebar-options-wrapper">
121
+ <%- include('partials/options-menu', { optionsMenu }) %>
122
+ </div>
123
+ <% } %>
124
+ </div>
125
+ </aside>
126
+ <% } %>
127
+ <div class="main-content-wrapper">
128
+ <% if (locals.menubarConfig && menubarConfig?.enabled !==false && menubarConfig.position==='header' ) { %>
129
+ <%- include('partials/menubar', { menubarConfig, relativePathToRoot, renderIcon, optionsMenu:
130
+ locals.optionsMenu }) %>
131
+ <% } %>
132
+ <% if (headerConfig?.enabled !==false) { %>
133
+ <header class="page-header">
134
+ <div class="header-left">
135
+ <% if (sidebarConfig?.collapsible) { %>
136
+ <button id="sidebar-toggle-button" class="sidebar-toggle-button"
137
+ aria-label="Toggle Sidebar">
138
+ <%- renderIcon('panel-left-close') %>
139
+ </button>
140
+ <% } %>
141
+ <span class="header-title">
142
+ <%= pageTitle %>
143
+ </span>
88
144
  </div>
89
145
 
90
- <div class="sidebar-top-group">
91
- <% if (locals.optionsMenu && optionsMenu.position==='sidebar-top' ) { %>
92
- <div class="sidebar-options-wrapper">
93
- <%- include('partials/options-menu', { optionsMenu }) %>
94
- </div>
95
- <% } %>
96
-
97
- <% if (config.versions && config.versions.position==='sidebar-top' ) { %>
98
- <div class="sidebar-version-wrapper">
99
- <%- include('partials/version-dropdown', { versions: config.versions,
100
- activeVersion: config._activeVersion, relativePathToRoot }) %>
146
+ <div class="header-right">
147
+ <% if (optionsMenu?.position==='header' ) { %>
148
+ <%- include('partials/options-menu', { optionsMenu }) %>
149
+ <% } %>
150
+ </div>
151
+ </header>
152
+ <% } %>
153
+ <div class="content-theme-cover">
154
+ <main class="content-area" id="main-content">
155
+ <div class="content-layout">
156
+ <div class="main-content">
157
+ <% if (headerConfig?.enabled===false) { %>
158
+ <h1>
159
+ <%= pageTitle %>
160
+ </h1>
161
+ <% } %>
162
+ <%- content %>
163
+ <% if (config.pageNavigation && (prevPage || nextPage)) { %>
164
+ <div class="page-navigation">
165
+ <% if (prevPage) { %>
166
+ <a href="<%= prevPage.url %>" class="prev-page">
167
+ <%- renderIcon('arrow-left', { class: 'page-nav-icon' }) %>
168
+ <span><small>Previous</small><strong>
169
+ <%= prevPage.title %>
170
+ </strong></span>
171
+ </a>
172
+ <% } else { %>
173
+ <div class="prev-page-placeholder">
174
+ </div>
175
+ <% } %>
176
+ <% if (nextPage) { %>
177
+ <a href="<%= nextPage.url %>" class="next-page">
178
+ <span><small>Next</small>
179
+ <strong>
180
+ <%= nextPage.title %>
181
+ </strong></span>
182
+ <%- renderIcon('arrow-right', { class: 'page-nav-icon' }) %>
183
+ </a>
184
+ <% } else { %>
185
+ <div class="next-page-placeholder">
186
+ </div>
187
+ <% } %>
101
188
  </div>
102
189
  <% } %>
103
- </div>
104
-
105
- <%- navigationHtml %>
106
-
107
- <div class="sidebar-bottom-group mt-auto">
108
- <% if (config.versions && config.versions.position==='sidebar-bottom' ) { %>
109
- <div class="sidebar-version-wrapper">
110
- <%- include('partials/version-dropdown', { versions: config.versions,
111
- activeVersion: config._activeVersion, relativePathToRoot }) %>
112
- </div>
113
- <% } %>
114
-
115
- <% if (locals.optionsMenu && optionsMenu.position==='sidebar-bottom' ) { %>
116
- <div class="sidebar-options-wrapper">
117
- <%- include('partials/options-menu', { optionsMenu }) %>
118
- </div>
119
- <% } %>
190
+ </div>
191
+ <div class="toc-sidebar">
192
+ <%- include('toc', { content, headings, navigationHtml, isActivePage }) %>
193
+ </div>
120
194
  </div>
121
- </aside>
122
- <% } %>
123
-
124
- <div class="main-content-wrapper">
125
- <% if (locals.menubarConfig && menubarConfig?.enabled !==false &&
126
- menubarConfig.position==='header' ) { %>
127
- <%- include('partials/menubar', { menubarConfig, relativePathToRoot, renderIcon,
128
- optionsMenu: locals.optionsMenu }) %>
129
- <% } %>
130
- <% if (headerConfig?.enabled !==false) { %>
131
- <header class="page-header">
132
- <div class="header-left">
133
- <% if (sidebarConfig?.collapsible) { %>
134
- <button id="sidebar-toggle-button" class="sidebar-toggle-button"
135
- aria-label="Toggle Sidebar">
136
- <%- renderIcon('panel-left-close') %>
137
- </button>
138
- <% } %>
139
- <span class="header-title">
140
- <%= pageTitle %>
141
- </span>
142
- </div>
143
-
144
- <div class="header-right">
145
- <% if (optionsMenu?.position==='header' ) { %>
146
- <%- include('partials/options-menu', { optionsMenu }) %>
147
- <% } %>
148
- </div>
149
- </header>
150
- <% } %>
151
-
152
- <main class="content-area" id="main-content">
153
- <div class="content-layout">
154
- <div class="main-content">
155
- <% if (headerConfig?.enabled===false) { %>
156
- <h1>
157
- <%= pageTitle %>
158
- </h1>
159
- <% } %>
160
-
161
- <%- content %>
162
-
163
- <% if (config.pageNavigation && (prevPage ||
164
- nextPage)) { %>
165
- <div class="page-navigation">
166
- <% if (prevPage) { %>
167
- <a href="<%= prevPage.url %>"
168
- class="prev-page">
169
- <%- renderIcon('arrow-left', {
170
- class: 'page-nav-icon' }) %>
171
- <span><small>Previous</small><strong>
172
- <%= prevPage.title
173
- %>
174
- </strong></span>
175
- </a>
176
- <% } else { %>
177
- <div
178
- class="prev-page-placeholder">
179
- </div>
180
- <% } %>
181
- <% if (nextPage) { %>
182
- <a href="<%= nextPage.url %>"
183
- class="next-page">
184
- <span><small>Next</small><strong>
185
- <%= nextPage.title
186
- %>
187
- </strong></span>
188
- <%- renderIcon('arrow-right',
189
- {
190
- class: 'page-nav-icon'
191
- }) %>
192
- </a>
193
- <% } else { %>
194
- <div
195
- class="next-page-placeholder">
196
- </div>
197
- <% } %>
198
- </div>
199
- <% } %>
200
- </div>
201
-
202
- <div class="toc-sidebar">
203
- <%- include('toc', { content, headings, navigationHtml,
204
- isActivePage }) %>
205
- </div>
206
- </div>
207
-
208
- <div class="page-footer-actions">
209
- <% if (locals.editUrl) { %>
210
- <a href="<%= editUrl %>" target="_blank"
211
- rel="noopener noreferrer" class="edit-link">
212
- <%- renderIcon('pencil') %>
213
- <%= editLinkText %>
214
- </a>
215
- <% } %>
216
- </div>
217
- </main>
218
-
219
- <%- include('partials/footer', { footerConfig, config,
220
- relativePathToRoot, logo, siteTitle, footerHtml }) %>
195
+ <div class="page-footer-actions">
196
+ <% if (locals.editUrl) { %>
197
+ <a href="<%= editUrl %>" target="_blank" rel="noopener noreferrer" class="edit-link">
198
+ <%- renderIcon('pencil') %>
199
+ <%= editLinkText %>
200
+ </a>
201
+ <% } %>
202
+ </div>
203
+ </main>
204
+ <%- include('partials/footer', { footerConfig, config, relativePathToRoot, logo, siteTitle,
205
+ footerHtml }) %>
221
206
  </div>
222
-
223
- <script src="<%= relativePathToRoot %>assets/js/docmd-main.js?v=<%= buildHash %>"></script>
224
- <%- pluginBodyScriptsHtml || '' %>
225
- <% (customJsFiles || []).forEach(jsFile=> {
226
- if (jsFile && jsFile.trim() !== '') { %>
227
- <script
228
- src="<%= relativePathToRoot %><%- jsFile.startsWith('/') ? jsFile.substring(1) : jsFile %>?v=<%= buildHash %>"></script>
229
- <% } }); %>
207
+ </div>
208
+ <script src="<%= relativePathToRoot %>assets/js/docmd-main.js?v=<%= buildHash %>"></script>
209
+ <%- pluginBodyScriptsHtml || '' %>
210
+ <% (customJsFiles || []).forEach(jsFile=> {
211
+ if (jsFile && jsFile.trim() !== '') { %>
212
+ <script
213
+ src="<%= relativePathToRoot %><%- jsFile.startsWith('/') ? jsFile.substring(1) : jsFile %>?v=<%= buildHash %>"></script>
214
+ <% } }); %>
230
215
  </body>
231
216
 
232
217
  </html>