@docsector/docsector-reader 0.5.7 → 0.5.9

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.
package/bin/docsector.js CHANGED
@@ -11,9 +11,9 @@
11
11
  * docsector help — Show help information
12
12
  */
13
13
 
14
- import { execSync, spawn } from 'child_process'
14
+ import { spawn } from 'child_process'
15
15
  import { existsSync, mkdirSync, writeFileSync, copyFileSync } from 'fs'
16
- import { resolve, dirname, basename } from 'path'
16
+ import { resolve, dirname } from 'path'
17
17
  import { fileURLToPath } from 'url'
18
18
 
19
19
  const __filename = fileURLToPath(import.meta.url)
@@ -23,7 +23,7 @@ const packageRoot = resolve(__dirname, '..')
23
23
  const args = process.argv.slice(2)
24
24
  const command = args[0]
25
25
 
26
- const VERSION = '0.5.4'
26
+ const VERSION = '0.5.9'
27
27
 
28
28
  const HELP = `
29
29
  Docsector Reader v${VERSION}
@@ -71,7 +71,7 @@ function getTemplatePackageJson (name) {
71
71
  serve: 'docsector serve'
72
72
  },
73
73
  dependencies: {
74
- '@docsector/docsector-reader': '^0.5.4',
74
+ '@docsector/docsector-reader': '^0.5.9',
75
75
  '@quasar/extras': '^1.16.12',
76
76
  'quasar': '^2.16.6',
77
77
  'vue': '^3.5.13',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@docsector/docsector-reader",
3
- "version": "0.5.7",
3
+ "version": "0.5.9",
4
4
  "description": "A documentation rendering engine built with Vue 3, Quasar v2 and Vite. Transform Markdown into beautiful, navigable documentation sites.",
5
5
  "productName": "Docsector Reader",
6
6
  "author": "Rodrigo de Araujo Vieira",
@@ -1,5 +1,5 @@
1
1
  <script setup>
2
- import { ref, computed, onMounted } from 'vue'
2
+ import { ref, computed, onMounted, onBeforeUnmount } from 'vue'
3
3
  import { useStore } from 'vuex'
4
4
  import { useRoute, useRouter } from 'vue-router'
5
5
  import { useQuasar } from 'quasar'
@@ -89,7 +89,82 @@ const resetPageScroll = () => {
89
89
  }
90
90
  }
91
91
 
92
+ const getPageScrollContainer = () => {
93
+ return pageScrollArea.value?.$el?.querySelector('.q-scrollarea__container') || null
94
+ }
95
+
96
+ const isEditableTarget = (target) => {
97
+ if (!(target instanceof HTMLElement)) {
98
+ return false
99
+ }
100
+
101
+ if (target.isContentEditable) {
102
+ return true
103
+ }
104
+
105
+ return ['INPUT', 'TEXTAREA', 'SELECT'].includes(target.tagName)
106
+ }
107
+
108
+ const handleMainScrollKeys = (event) => {
109
+ const handledKeys = ['Home', 'End', 'PageUp', 'PageDown', 'ArrowUp', 'ArrowDown']
110
+
111
+ if (!handledKeys.includes(event.key)) {
112
+ return
113
+ }
114
+
115
+ if (event.defaultPrevented || event.altKey || event.ctrlKey || event.metaKey) {
116
+ return
117
+ }
118
+
119
+ if (isEditableTarget(event.target)) {
120
+ return
121
+ }
122
+
123
+ const container = getPageScrollContainer()
124
+ if (!container) {
125
+ return
126
+ }
127
+
128
+ const currentTop = container.scrollTop
129
+ const maxTop = Math.max(0, container.scrollHeight - container.clientHeight)
130
+ const lineStep = Math.max(40, Math.floor(container.clientHeight * 0.08))
131
+ const pageStep = Math.max(120, Math.floor(container.clientHeight * 0.9))
132
+
133
+ let nextTop = currentTop
134
+ switch (event.key) {
135
+ case 'Home':
136
+ nextTop = 0
137
+ break
138
+ case 'End':
139
+ nextTop = maxTop
140
+ break
141
+ case 'PageUp':
142
+ nextTop = Math.max(0, currentTop - pageStep)
143
+ break
144
+ case 'PageDown':
145
+ nextTop = Math.min(maxTop, currentTop + pageStep)
146
+ break
147
+ case 'ArrowUp':
148
+ nextTop = Math.max(0, currentTop - lineStep)
149
+ break
150
+ case 'ArrowDown':
151
+ nextTop = Math.min(maxTop, currentTop + lineStep)
152
+ break
153
+ }
154
+
155
+ event.preventDefault()
156
+
157
+ if (pageScrollArea.value?.setScrollPosition) {
158
+ pageScrollArea.value.setScrollPosition('vertical', nextTop, 0)
159
+ return
160
+ }
161
+
162
+ container.scrollTop = nextTop
163
+ }
164
+
92
165
  onMounted(() => {
166
+ window.addEventListener('keydown', handleMainScrollKeys)
167
+
93
168
  router.beforeEach((to, from, next) => {
94
169
  resetPageScroll()
95
170
 
@@ -102,6 +177,10 @@ onMounted(() => {
102
177
  next()
103
178
  })
104
179
  })
180
+
181
+ onBeforeUnmount(() => {
182
+ window.removeEventListener('keydown', handleMainScrollKeys)
183
+ })
105
184
  </script>
106
185
 
107
186
  <template>