@electerm/electerm-react 1.34.30

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 (273) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +31 -0
  3. package/client/common/auto-complete-data-mapper.js +6 -0
  4. package/client/common/byte-format.js +14 -0
  5. package/client/common/class.js +52 -0
  6. package/client/common/clipboard.js +49 -0
  7. package/client/common/constants.js +308 -0
  8. package/client/common/create-lang-edit-link.js +7 -0
  9. package/client/common/create-title.js +29 -0
  10. package/client/common/db-fix.js +24 -0
  11. package/client/common/db.js +155 -0
  12. package/client/common/download-mirrors.js +10 -0
  13. package/client/common/download.js +16 -0
  14. package/client/common/error-handler.jsx +27 -0
  15. package/client/common/fetch-from-server.js +47 -0
  16. package/client/common/fetch.jsx +71 -0
  17. package/client/common/find-bookmark-group-id.js +15 -0
  18. package/client/common/find-parent.js +30 -0
  19. package/client/common/form-layout.js +27 -0
  20. package/client/common/fs.js +21 -0
  21. package/client/common/get-proxy.js +8 -0
  22. package/client/common/id-with-stamp.js +10 -0
  23. package/client/common/index-sorter.js +4 -0
  24. package/client/common/init-setting-item.js +32 -0
  25. package/client/common/is-absolute-path.js +3 -0
  26. package/client/common/is-ip.js +16 -0
  27. package/client/common/is-valid-path.js +7 -0
  28. package/client/common/key-control-pressed.js +13 -0
  29. package/client/common/key-pressed.js +13 -0
  30. package/client/common/key-shift-pressed.js +7 -0
  31. package/client/common/mode2permission.js +81 -0
  32. package/client/common/new-terminal.js +31 -0
  33. package/client/common/parse-int10.js +3 -0
  34. package/client/common/parse-json-safe.js +11 -0
  35. package/client/common/pass-enc.js +25 -0
  36. package/client/common/post-msg.js +3 -0
  37. package/client/common/pre.js +156 -0
  38. package/client/common/promise-timeout.js +27 -0
  39. package/client/common/resolve.js +31 -0
  40. package/client/common/run-idle.js +1 -0
  41. package/client/common/safe-local-storage.js +35 -0
  42. package/client/common/safe-name.js +19 -0
  43. package/client/common/sftp.js +74 -0
  44. package/client/common/terminal-theme.js +158 -0
  45. package/client/common/test-connection.js +12 -0
  46. package/client/common/time.js +30 -0
  47. package/client/common/to-simple-obj.js +5 -0
  48. package/client/common/track.js +7 -0
  49. package/client/common/transfer.js +76 -0
  50. package/client/common/trzsz.js +62 -0
  51. package/client/common/ui-theme.js +44 -0
  52. package/client/common/uid.js +5 -0
  53. package/client/common/update-check.js +79 -0
  54. package/client/common/upgrade.js +68 -0
  55. package/client/common/wait.js +8 -0
  56. package/client/common/ws.js +161 -0
  57. package/client/components/batch-op/batch-op.jsx +650 -0
  58. package/client/components/bookmark-form/bookmark-form.styl +8 -0
  59. package/client/components/bookmark-form/bookmark-group-tree-format.js +39 -0
  60. package/client/components/bookmark-form/encodes.js +44 -0
  61. package/client/components/bookmark-form/form-ssh-common.jsx +208 -0
  62. package/client/components/bookmark-form/form-tabs.jsx +69 -0
  63. package/client/components/bookmark-form/index.jsx +159 -0
  64. package/client/components/bookmark-form/local-form-ui.jsx +152 -0
  65. package/client/components/bookmark-form/local-form.jsx +16 -0
  66. package/client/components/bookmark-form/proxy.jsx +49 -0
  67. package/client/components/bookmark-form/quick-command-list.jsx +31 -0
  68. package/client/components/bookmark-form/quick-command.jsx +228 -0
  69. package/client/components/bookmark-form/render-auth-ssh.jsx +104 -0
  70. package/client/components/bookmark-form/render-connection-hopping.jsx +229 -0
  71. package/client/components/bookmark-form/render-delayed-scripts.jsx +88 -0
  72. package/client/components/bookmark-form/render-ssh-tunnel.jsx +116 -0
  73. package/client/components/bookmark-form/serial-form-ui.jsx +311 -0
  74. package/client/components/bookmark-form/serial-form.jsx +20 -0
  75. package/client/components/bookmark-form/sftp-enable.jsx +33 -0
  76. package/client/components/bookmark-form/ssh-form-ui.jsx +100 -0
  77. package/client/components/bookmark-form/ssh-form.jsx +348 -0
  78. package/client/components/bookmark-form/telnet-form-ui.jsx +154 -0
  79. package/client/components/bookmark-form/telnet-form.jsx +16 -0
  80. package/client/components/bookmark-form/tree-delete.jsx +87 -0
  81. package/client/components/bookmark-form/use-form-funcs.jsx +50 -0
  82. package/client/components/bookmark-form/use-quick-commands.jsx +83 -0
  83. package/client/components/bookmark-form/use-submit.jsx +77 -0
  84. package/client/components/bookmark-form/use-ui.jsx +82 -0
  85. package/client/components/bookmark-form/x11.jsx +23 -0
  86. package/client/components/common/animate-text.jsx +37 -0
  87. package/client/components/common/animate-text.styl +54 -0
  88. package/client/components/common/external-link.jsx +28 -0
  89. package/client/components/common/help-icon.jsx +25 -0
  90. package/client/components/common/highlight.jsx +23 -0
  91. package/client/components/common/highlight.styl +3 -0
  92. package/client/components/common/input-auto-focus.jsx +68 -0
  93. package/client/components/common/input-confirm.jsx +66 -0
  94. package/client/components/common/logo-elem.jsx +22 -0
  95. package/client/components/common/markdown.jsx +27 -0
  96. package/client/components/common/react-subx.jsx +1 -0
  97. package/client/components/common/resize-wrap.jsx +222 -0
  98. package/client/components/common/resize-wrap.styl +9 -0
  99. package/client/components/common/search.jsx +9 -0
  100. package/client/components/common/show-item.jsx +27 -0
  101. package/client/components/context-menu/boomarks.jsx +15 -0
  102. package/client/components/context-menu/context-menu.jsx +340 -0
  103. package/client/components/context-menu/context-menu.styl +90 -0
  104. package/client/components/context-menu/history.jsx +27 -0
  105. package/client/components/context-menu/icon-holder.jsx +5 -0
  106. package/client/components/context-menu/menu-btn.jsx +224 -0
  107. package/client/components/context-menu/sub-tab-menu.jsx +23 -0
  108. package/client/components/context-menu/tabs.jsx +22 -0
  109. package/client/components/context-menu/zoom.jsx +40 -0
  110. package/client/components/footer/batch-input.jsx +177 -0
  111. package/client/components/footer/footer-entry.jsx +141 -0
  112. package/client/components/footer/footer.styl +47 -0
  113. package/client/components/icons/match-case.jsx +10 -0
  114. package/client/components/icons/match-whole-word.jsx +13 -0
  115. package/client/components/icons/regular-exp.jsx +10 -0
  116. package/client/components/main/css-overwrite.jsx +92 -0
  117. package/client/components/main/error-wrapper.jsx +59 -0
  118. package/client/components/main/index.jsx +11 -0
  119. package/client/components/main/loading.jsx +25 -0
  120. package/client/components/main/main.jsx +149 -0
  121. package/client/components/main/term-fullscreen-control.jsx +21 -0
  122. package/client/components/main/term-fullscreen.styl +27 -0
  123. package/client/components/main/ui-theme.jsx +31 -0
  124. package/client/components/main/upgrade.jsx +351 -0
  125. package/client/components/main/upgrade.styl +27 -0
  126. package/client/components/main/wrapper.styl +41 -0
  127. package/client/components/quick-commands/qm.styl +29 -0
  128. package/client/components/quick-commands/quick-command-item.jsx +36 -0
  129. package/client/components/quick-commands/quick-command-transport-mod.jsx +54 -0
  130. package/client/components/quick-commands/quick-command-transport.jsx +12 -0
  131. package/client/components/quick-commands/quick-commands-box.jsx +233 -0
  132. package/client/components/quick-commands/quick-commands-form-elem.jsx +119 -0
  133. package/client/components/quick-commands/quick-commands-form.jsx +33 -0
  134. package/client/components/quick-commands/quick-commands-list.jsx +128 -0
  135. package/client/components/quick-commands/quick-commands-select.jsx +38 -0
  136. package/client/components/session/session.jsx +533 -0
  137. package/client/components/session/session.styl +53 -0
  138. package/client/components/session/sessions.jsx +445 -0
  139. package/client/components/setting-panel/bookmark-transport.jsx +148 -0
  140. package/client/components/setting-panel/bookmark-tree-list.jsx +14 -0
  141. package/client/components/setting-panel/col.jsx +18 -0
  142. package/client/components/setting-panel/list.jsx +186 -0
  143. package/client/components/setting-panel/list.styl +33 -0
  144. package/client/components/setting-panel/on-tree-drop.js +222 -0
  145. package/client/components/setting-panel/setting-modal.jsx +163 -0
  146. package/client/components/setting-panel/setting-wrap.jsx +37 -0
  147. package/client/components/setting-panel/setting-wrap.styl +52 -0
  148. package/client/components/setting-panel/setting.jsx +858 -0
  149. package/client/components/setting-panel/setting.styl +4 -0
  150. package/client/components/setting-panel/start-session-select.jsx +91 -0
  151. package/client/components/setting-panel/tab-bookmarks.jsx +37 -0
  152. package/client/components/setting-panel/tab-history.jsx +44 -0
  153. package/client/components/setting-panel/tab-quick-commands.jsx +38 -0
  154. package/client/components/setting-panel/tab-settings.jsx +42 -0
  155. package/client/components/setting-panel/tab-themes.jsx +34 -0
  156. package/client/components/setting-panel/tree-list.jsx +978 -0
  157. package/client/components/setting-panel/tree-list.styl +57 -0
  158. package/client/components/setting-sync/data-import.jsx +65 -0
  159. package/client/components/setting-sync/setting-sync-form.jsx +271 -0
  160. package/client/components/setting-sync/setting-sync.jsx +81 -0
  161. package/client/components/setting-sync/sync.styl +7 -0
  162. package/client/components/sftp/address-bar.jsx +139 -0
  163. package/client/components/sftp/address-bookmark-item.jsx +47 -0
  164. package/client/components/sftp/address-bookmark.jsx +81 -0
  165. package/client/components/sftp/address-bookmark.styl +8 -0
  166. package/client/components/sftp/confirm-modal.jsx +184 -0
  167. package/client/components/sftp/file-icon.jsx +22 -0
  168. package/client/components/sftp/file-item.jsx +1226 -0
  169. package/client/components/sftp/file-mode-modal.jsx +205 -0
  170. package/client/components/sftp/file-props-modal.jsx +211 -0
  171. package/client/components/sftp/file-read.js +81 -0
  172. package/client/components/sftp/list-table-ui.jsx +547 -0
  173. package/client/components/sftp/owner-list.js +97 -0
  174. package/client/components/sftp/paged-list.jsx +60 -0
  175. package/client/components/sftp/permission-render.jsx +42 -0
  176. package/client/components/sftp/sftp-entry.jsx +1069 -0
  177. package/client/components/sftp/sftp.styl +217 -0
  178. package/client/components/sftp/transfer-common.js +9 -0
  179. package/client/components/sftp/transfer-conflict.jsx +315 -0
  180. package/client/components/sftp/transfer-speed-format.js +60 -0
  181. package/client/components/sftp/transfer-tag.jsx +40 -0
  182. package/client/components/sftp/transfer-tag.styl +11 -0
  183. package/client/components/sftp/transfer.styl +55 -0
  184. package/client/components/sftp/transport-action.jsx +410 -0
  185. package/client/components/sftp/transport-entry.jsx +108 -0
  186. package/client/components/sftp/transport-types.js +8 -0
  187. package/client/components/sftp/transports-action.jsx +111 -0
  188. package/client/components/sftp/transports-ui.jsx +93 -0
  189. package/client/components/sftp/zip.js +42 -0
  190. package/client/components/sidebar/bookmark-select.jsx +48 -0
  191. package/client/components/sidebar/bookmark.jsx +82 -0
  192. package/client/components/sidebar/history.jsx +66 -0
  193. package/client/components/sidebar/index.jsx +230 -0
  194. package/client/components/sidebar/info-modal.jsx +250 -0
  195. package/client/components/sidebar/info.styl +27 -0
  196. package/client/components/sidebar/side-icon.jsx +25 -0
  197. package/client/components/sidebar/sidebar.styl +128 -0
  198. package/client/components/sidebar/transfer-history-modal.jsx +110 -0
  199. package/client/components/sidebar/transfer-history.styl +3 -0
  200. package/client/components/sidebar/transfer-list-control.jsx +205 -0
  201. package/client/components/sidebar/transfer-list.jsx +55 -0
  202. package/client/components/sidebar/transfer-modal.jsx +76 -0
  203. package/client/components/sidebar/transfer.styl +8 -0
  204. package/client/components/sidebar/transport-ui.jsx +109 -0
  205. package/client/components/tabs/index.jsx +320 -0
  206. package/client/components/tabs/tab.jsx +427 -0
  207. package/client/components/tabs/tabs.styl +220 -0
  208. package/client/components/tabs/window-control.jsx +55 -0
  209. package/client/components/terminal/attach-addon-custom.js +70 -0
  210. package/client/components/terminal/build-ls-term-id.js +5 -0
  211. package/client/components/terminal/index.jsx +1358 -0
  212. package/client/components/terminal/normal-buffer.jsx +33 -0
  213. package/client/components/terminal/term-search.jsx +224 -0
  214. package/client/components/terminal/term-search.styl +15 -0
  215. package/client/components/terminal/terminal-apis.js +31 -0
  216. package/client/components/terminal/terminal-interactive.jsx +148 -0
  217. package/client/components/terminal/terminal.styl +96 -0
  218. package/client/components/terminal/xterm-zmodem.js +48 -0
  219. package/client/components/terminal/zmodem-transfer.jsx +98 -0
  220. package/client/components/terminal/zmodem.styl +14 -0
  221. package/client/components/terminal-info/activity.jsx +54 -0
  222. package/client/components/terminal-info/base.jsx +25 -0
  223. package/client/components/terminal-info/content.jsx +101 -0
  224. package/client/components/terminal-info/data-cols-parser.jsx +50 -0
  225. package/client/components/terminal-info/disk.jsx +29 -0
  226. package/client/components/terminal-info/index.jsx +25 -0
  227. package/client/components/terminal-info/network.jsx +114 -0
  228. package/client/components/terminal-info/resource.jsx +80 -0
  229. package/client/components/terminal-info/run-cmd.jsx +273 -0
  230. package/client/components/terminal-info/terminal-info.styl +29 -0
  231. package/client/components/terminal-info/up.jsx +15 -0
  232. package/client/components/terminal-theme/index.jsx +264 -0
  233. package/client/components/terminal-theme/terminal-theme-list.styl +3 -0
  234. package/client/components/terminal-theme/theme-list.jsx +146 -0
  235. package/client/components/text-editor/text-editor-form.jsx +97 -0
  236. package/client/components/text-editor/text-editor.jsx +182 -0
  237. package/client/css/antd-overwrite.styl +14 -0
  238. package/client/css/basic.styl +38 -0
  239. package/client/css/includes/box.styl +154 -0
  240. package/client/css/includes/font-size.styl +6 -0
  241. package/client/css/includes/index.styl +3 -0
  242. package/client/css/includes/text.styl +31 -0
  243. package/client/css/includes/theme-default.styl +20 -0
  244. package/client/entry/basic.js +58 -0
  245. package/client/entry/index.jsx +15 -0
  246. package/client/entry/worker.js +137 -0
  247. package/client/store/address-bookmark.js +25 -0
  248. package/client/store/app-upgrade.js +23 -0
  249. package/client/store/batch-input-history.js +26 -0
  250. package/client/store/bookmark-group.js +128 -0
  251. package/client/store/bookmark.js +22 -0
  252. package/client/store/common.js +140 -0
  253. package/client/store/context-menu.js +23 -0
  254. package/client/store/db-upgrade.js +43 -0
  255. package/client/store/event.js +70 -0
  256. package/client/store/index.js +335 -0
  257. package/client/store/init-state.js +191 -0
  258. package/client/store/item.js +120 -0
  259. package/client/store/load-data.js +198 -0
  260. package/client/store/quick-command.js +43 -0
  261. package/client/store/session.js +54 -0
  262. package/client/store/setting.js +208 -0
  263. package/client/store/sidebar.js +48 -0
  264. package/client/store/sync.js +390 -0
  265. package/client/store/system-menu.js +120 -0
  266. package/client/store/tab.js +74 -0
  267. package/client/store/terminal-theme.js +116 -0
  268. package/client/store/transfer-history.js +27 -0
  269. package/client/store/transfer-list.js +20 -0
  270. package/client/store/ui-theme.js +71 -0
  271. package/client/store/watch.js +116 -0
  272. package/client/views/index.pug +58 -0
  273. package/package.json +34 -0
@@ -0,0 +1,70 @@
1
+ /**
2
+ * extend store
3
+ */
4
+
5
+ import postMessage from '../common/post-msg'
6
+ import { commonActions } from '../common/constants'
7
+
8
+ export default Store => {
9
+ Store.prototype.initStoreEvents = function () {
10
+ window.addEventListener('message', window.store.onStoreEvent)
11
+ }
12
+
13
+ Store.prototype.onStoreEvent = function (e) {
14
+ const { store } = window
15
+ const {
16
+ action
17
+ } = e.data || {}
18
+ if (action !== commonActions.updateStore) {
19
+ return false
20
+ }
21
+ const {
22
+ func,
23
+ prop,
24
+ value,
25
+ args = []
26
+ } = e.data || {}
27
+ if (func) {
28
+ store[func](...args)
29
+ } else if (prop) {
30
+ store[prop] = value
31
+ }
32
+ }
33
+
34
+ Store.prototype.focus = function () {
35
+ window.focused = true
36
+ postMessage({
37
+ type: 'focus'
38
+ })
39
+ }
40
+
41
+ Store.prototype.blur = function () {
42
+ window.focused = false
43
+ postMessage({
44
+ type: 'blur'
45
+ })
46
+ }
47
+
48
+ Store.prototype.onBlur = function () {
49
+ window.focused = false
50
+ }
51
+
52
+ Store.prototype.selectall = function () {
53
+ document.activeElement &&
54
+ document.activeElement.select &&
55
+ document.activeElement.select()
56
+ postMessage({
57
+ event: 'selectall',
58
+ id: window.store.activeTerminalId
59
+ })
60
+ }
61
+
62
+ Store.prototype.triggerResize = function () {
63
+ window.dispatchEvent(new window.Event('resize'))
64
+ }
65
+
66
+ Store.prototype.toggleTermFullscreen = function (terminalFullScreen) {
67
+ window.store.terminalFullScreen = terminalFullScreen
68
+ setTimeout(window.store.triggerResize, 500)
69
+ }
70
+ }
@@ -0,0 +1,335 @@
1
+ /**
2
+ * central state store powered by manate - https://github.com/tylerlong/manate
3
+ */
4
+
5
+ import { manage } from 'manate'
6
+ import initState from './init-state'
7
+ import loadDataExtend from './load-data'
8
+ import dbUpgradeExtend from './db-upgrade'
9
+ import eventExtend from './event'
10
+ import syncExtend from './sync'
11
+ import appUpgrdeExtend from './app-upgrade'
12
+ import bookmarkGroupExtend from './bookmark-group'
13
+ import bookmarkExtend from './bookmark'
14
+ import commonExtend from './common'
15
+ import contextMenuExtend from './context-menu'
16
+ import itemExtend from './item'
17
+ import quickCommandExtend from './quick-command'
18
+ import sessionExtend from './session'
19
+ import settingExtend from './setting'
20
+ import sidebarExtend from './sidebar'
21
+ import sysMenuExtend from './system-menu'
22
+ import tabExtend from './tab'
23
+ import uiThemeExtend from './ui-theme'
24
+ import terminalThemeExtend from './terminal-theme'
25
+ import transferHistoryExtend from './transfer-history'
26
+ import batchInputHistory from './batch-input-history'
27
+ import transferExtend from './transfer-list'
28
+ import addressBookmarkExtend from './address-bookmark'
29
+
30
+ import { uniq } from 'lodash-es'
31
+ import copy from 'json-deep-copy'
32
+ import {
33
+ settingMap,
34
+ sidebarWidth,
35
+ sidebarPanelWidth,
36
+ paneMap
37
+ } from '../common/constants'
38
+ import getInitItem from '../common/init-setting-item'
39
+ import {
40
+ theme
41
+ } from 'antd'
42
+
43
+ function getReverseColor (hex) {
44
+ // Check if the input is a valid hex color code
45
+ if (!/^#[0-9a-fA-F]{6}$/.test(hex)) {
46
+ return '#0088cc'
47
+ }
48
+ // Convert the hex color code to an integer
49
+ const num = parseInt(hex.slice(1), 16)
50
+ // Bitwise XOR the integer with 0xFFFFFF to get the reverse color
51
+ const reverse = num ^ 0xFFFFFF
52
+ // Convert the reverse color to a hex string and pad with zeros if needed
53
+ return '#' + reverse.toString(16).padStart(6, '0')
54
+ }
55
+
56
+ function expandShorthandColor (color) {
57
+ if (color.length === 4) {
58
+ return '#' + color[1] + color[1] + color[2] + color[2] + color[3] + color[3]
59
+ }
60
+ return color
61
+ }
62
+
63
+ function isColorDark (_color) {
64
+ let color = expandShorthandColor(_color)
65
+ if (color.charAt(0) === '#') {
66
+ color = color.slice(1) // Remove the '#' if present
67
+ }
68
+ const r = parseInt(color.substr(0, 2), 16)
69
+ const g = parseInt(color.substr(2, 2), 16)
70
+ const b = parseInt(color.substr(4, 2), 16)
71
+
72
+ // Formula to determine brightness
73
+ const brightness = (r * 299 + g * 587 + b * 114) / 1000
74
+
75
+ // Decide based on brightness threshold
76
+ return brightness < 128 // You can adjust this threshold as needed
77
+ }
78
+
79
+ class Store {
80
+ constructor () {
81
+ Object.assign(
82
+ this,
83
+ initState
84
+ )
85
+ }
86
+
87
+ get width () {
88
+ return window.store.innerWidth - sidebarWidth -
89
+ (window.store.pinned ? sidebarPanelWidth : 0)
90
+ }
91
+
92
+ get currentQuickCommands () {
93
+ const { currentTab } = this
94
+ const quickCommands = window.store.getQuickCommands()
95
+ const currentTabQuickCommands = (
96
+ currentTab.quickCommands || []
97
+ ).map((d, i) => {
98
+ return {
99
+ ...d,
100
+ id: 'tab-qm-' + currentTab.id + '#' + i
101
+ }
102
+ })
103
+ return [
104
+ ...currentTabQuickCommands,
105
+ ...quickCommands
106
+ ]
107
+ }
108
+
109
+ get currentTab () {
110
+ const {
111
+ currentTabId
112
+ } = this
113
+ const tabs = window.store.getTabs()
114
+ const tab = tabs.find(t => t.id === currentTabId)
115
+ if (!tab) {
116
+ return false
117
+ }
118
+ return tab
119
+ }
120
+
121
+ get inActiveTerminal () {
122
+ const { store } = window
123
+ return !store.showModal &&
124
+ store.termFocused &&
125
+ store.currentTab &&
126
+ (
127
+ store.currentTab.pane === paneMap.ssh ||
128
+ store.currentTab.pane === paneMap.terminal
129
+ )
130
+ }
131
+
132
+ get quickCommandTags () {
133
+ const quickCommands = window.store.getQuickCommands()
134
+ return uniq(
135
+ quickCommands.reduce((p, q) => {
136
+ return [
137
+ ...p,
138
+ ...(q.labels || [])
139
+ ]
140
+ }, [])
141
+ )
142
+ }
143
+
144
+ get expandedKeys () {
145
+ return JSON.parse(window.store._expandedKeys || '[]')
146
+ }
147
+
148
+ get checkedKeys () {
149
+ return JSON.parse(window.store._checkedKeys || '[]')
150
+ }
151
+
152
+ get isTransporting () {
153
+ return window.store.getTabs().some(t => t.isTransporting)
154
+ }
155
+
156
+ get addressBookmarks () {
157
+ return JSON.parse(window.store._addressBookmarks || '[]')
158
+ }
159
+
160
+ get addressBookmarksLocal () {
161
+ return JSON.parse(window.store._addressBookmarksLocal || '[]')
162
+ }
163
+
164
+ get settingSidebarList () {
165
+ const {
166
+ settingTab
167
+ } = this
168
+ const arr = window.store.getSidebarList(settingTab)
169
+ const initItem = getInitItem(arr, settingTab)
170
+ return settingTab === settingMap.history
171
+ ? arr
172
+ : [
173
+ copy(initItem),
174
+ ...arr
175
+ ]
176
+ }
177
+
178
+ get termSearchOptions () {
179
+ const {
180
+ store
181
+ } = window
182
+ const theme = store.getThemeConfig()
183
+ return {
184
+ ...JSON.parse(window.store._termSearchOptions),
185
+ decorations: {
186
+ activeMatchColorOverviewRuler: theme.selectionBackground,
187
+ matchBackground: theme.background,
188
+ matchOverviewRuler: theme.selectionBackground,
189
+ matchBorder: getReverseColor(theme.background)
190
+ }
191
+ }
192
+ }
193
+
194
+ get tabTitles () {
195
+ return window.store.getTabs().map(d => d.title).join('#')
196
+ }
197
+
198
+ get sshConfigItems () {
199
+ return JSON.parse(window.store._sshConfigItems || '[]')
200
+ }
201
+
202
+ get itermThemes () {
203
+ return JSON.parse(window.store._itermThemes || '[]')
204
+ }
205
+
206
+ get history () {
207
+ return JSON.parse(window.store._history || '[]')
208
+ }
209
+
210
+ get bookmarks () {
211
+ return JSON.parse(window.store._bookmarks || '[]')
212
+ }
213
+
214
+ get bookmarkGroups () {
215
+ return JSON.parse(window.store._bookmarkGroups || '[]')
216
+ }
217
+
218
+ get tabs () {
219
+ return JSON.parse(window.store._tabs || '[]')
220
+ }
221
+
222
+ get fileTransfers () {
223
+ return JSON.parse(window.store._fileTransfers || '[]')
224
+ }
225
+
226
+ get transferHistory () {
227
+ return JSON.parse(window.store._transferHistory || '[]')
228
+ }
229
+
230
+ get quickCommands () {
231
+ return JSON.parse(window.store._quickCommands || '[]')
232
+ }
233
+
234
+ get terminalThemes () {
235
+ return JSON.parse(window.store._terminalThemes || '[]')
236
+ }
237
+
238
+ get serials () {
239
+ return JSON.parse(window.store._serials || '[]')
240
+ }
241
+
242
+ get setting () {
243
+ return JSON.parse(window.store._setting || '[]')
244
+ }
245
+
246
+ get config () {
247
+ return JSON.parse(window.store._config || '{}')
248
+ }
249
+
250
+ get sftpSortSetting () {
251
+ return JSON.parse(window.store._sftpSortSetting)
252
+ }
253
+
254
+ get fonts () {
255
+ return JSON.parse(window.store._fonts || '[]')
256
+ }
257
+
258
+ get onOperation () {
259
+ const {
260
+ store
261
+ } = window
262
+ return store.showModal ||
263
+ store.termSearchOpen ||
264
+ store.showInfoModal ||
265
+ store.showEditor ||
266
+ store.showFileModal
267
+ }
268
+
269
+ get topMenuHeight () {
270
+ return window.store.config.useSystemTitleBar ? 0 : 15
271
+ }
272
+
273
+ get tabsHeight () {
274
+ return window.store.config.useSystemTitleBar ? 45 : 56
275
+ }
276
+
277
+ get langs () {
278
+ return JSON.parse(window.store._langs)
279
+ }
280
+
281
+ get upgradeInfo () {
282
+ return JSON.parse(window.store._upgradeInfo)
283
+ }
284
+
285
+ get settingItem () {
286
+ return JSON.parse(window.store._settingItem)
287
+ }
288
+
289
+ get uiThemeConfig () {
290
+ const { store } = window
291
+ const themeConf = store.getUiThemeConfig()
292
+ return {
293
+ token: {
294
+ borderRadius: 3,
295
+ colorPrimary: themeConf.primary,
296
+ colorBgBase: themeConf.main,
297
+ colorError: themeConf.error,
298
+ colorInfo: themeConf.info,
299
+ colorSuccess: themeConf.success,
300
+ colorWarning: themeConf.warn,
301
+ colorTextBase: themeConf.text,
302
+ colorLink: themeConf['text-light']
303
+ },
304
+ algorithm: isColorDark(themeConf.main) ? theme.darkAlgorithm : theme.defaultAlgorithm
305
+ }
306
+ }
307
+ }
308
+
309
+ loadDataExtend(Store)
310
+ eventExtend(Store)
311
+ dbUpgradeExtend(Store)
312
+ syncExtend(Store)
313
+ appUpgrdeExtend(Store)
314
+ bookmarkGroupExtend(Store)
315
+ bookmarkExtend(Store)
316
+ commonExtend(Store)
317
+ contextMenuExtend(Store)
318
+ itemExtend(Store)
319
+ quickCommandExtend(Store)
320
+ sessionExtend(Store)
321
+ settingExtend(Store)
322
+ sidebarExtend(Store)
323
+ sysMenuExtend(Store)
324
+ tabExtend(Store)
325
+ terminalThemeExtend(Store)
326
+ uiThemeExtend(Store)
327
+ transferHistoryExtend(Store)
328
+ batchInputHistory(Store)
329
+ transferExtend(Store)
330
+ addressBookmarkExtend(Store)
331
+
332
+ const store = manage(new Store())
333
+
334
+ window.store = store
335
+ export default store
@@ -0,0 +1,191 @@
1
+ /**
2
+ * init static state
3
+ */
4
+
5
+ import {
6
+ settingMap,
7
+ defaultBookmarkGroupId,
8
+ newBookmarkIdPrefix,
9
+ fileOperationsMap,
10
+ syncTypes,
11
+ settingSyncId,
12
+ infoTabs,
13
+ openedSidebarKey,
14
+ sidebarPinnedKey,
15
+ sftpDefaultSortSettingKey,
16
+ batchInputLsKey,
17
+ expandedKeysLsKey,
18
+ checkedKeysLsKey,
19
+ localAddrBookmarkLsKey
20
+ } from '../common/constants'
21
+ import { buildDefaultThemes, buildNewTheme } from '../common/terminal-theme'
22
+ import * as ls from '../common/safe-local-storage'
23
+
24
+ const { prefix } = window
25
+ const t = prefix('terminalThemes')
26
+ const e = prefix('control')
27
+ const newQuickCommand = 'newQuickCommand'
28
+ const q = prefix('quickCommands')
29
+ const ss = prefix('settingSync')
30
+
31
+ function getDefaultBookmarkGroups (bookmarks) {
32
+ return [
33
+ JSON.stringify({
34
+ title: t(defaultBookmarkGroupId),
35
+ id: defaultBookmarkGroupId,
36
+ bookmarkIds: bookmarks.map(d => d.id)
37
+ })
38
+ ]
39
+ }
40
+
41
+ export const getInitItem = (arr, tab) => {
42
+ if (tab === settingMap.history) {
43
+ return arr[0] || {}
44
+ } else if (tab === settingMap.bookmarks) {
45
+ return { id: newBookmarkIdPrefix + ':' + (Date.now()), title: '' }
46
+ } else if (tab === settingMap.setting) {
47
+ return { id: '', title: e('common') }
48
+ } else if (tab === settingMap.terminalThemes) {
49
+ return buildNewTheme()
50
+ } else if (tab === settingMap.quickCommands) {
51
+ return {
52
+ id: '',
53
+ name: q(newQuickCommand)
54
+ }
55
+ }
56
+ }
57
+
58
+ export default {
59
+ // common
60
+ wsInited: false,
61
+ configLoaded: false,
62
+ loadTime: 0,
63
+ lastDataUpdateTime: 0,
64
+ _tabs: '[]',
65
+ currentTabId: '',
66
+ termFocused: false,
67
+ _history: '[]',
68
+ _bookmarks: '[]',
69
+ _bookmarkGroups: JSON.stringify(
70
+ getDefaultBookmarkGroups([])
71
+ ),
72
+ _config: '{}',
73
+ _terminalThemes: JSON.stringify([
74
+ buildDefaultThemes()
75
+ ]),
76
+ _itermThemes: '[]',
77
+ currentBookmarkGroupId: defaultBookmarkGroupId,
78
+ _expandedKeys: ls.getItem(expandedKeysLsKey) || JSON.stringify([
79
+ defaultBookmarkGroupId
80
+ ]),
81
+ bookmarkSelectMode: false,
82
+ _checkedKeys: ls.getItem(checkedKeysLsKey) || '[]',
83
+ _addressBookmarks: '[]',
84
+ _addressBookmarksLocal: ls.getItem(localAddrBookmarkLsKey) || '[]',
85
+
86
+ // init session control
87
+ selectedSessions: [],
88
+ sessionModalVisible: false,
89
+
90
+ // sftp
91
+ fileOperation: fileOperationsMap.cp, // cp or mv
92
+ transferTab: 'transfer',
93
+ _transferHistory: '[]',
94
+ _fileTransfers: '[]',
95
+ _sftpSortSetting: ls.getItem(sftpDefaultSortSettingKey) || JSON.stringify({
96
+ local: {
97
+ prop: 'modifyTime',
98
+ direction: 'asc'
99
+ },
100
+ remote: {
101
+ prop: 'modifyTime',
102
+ direction: 'desc'
103
+ }
104
+ }),
105
+
106
+ // for settings related
107
+ _setting: JSON.stringify([
108
+ {
109
+ id: settingSyncId,
110
+ title: ss('settingSync')
111
+ }
112
+ ]),
113
+ _settingItem: JSON.stringify(getInitItem([], settingMap.bookmarks)),
114
+ settingTab: settingMap.bookmarks, // setting tab
115
+ autofocustrigger: Date.now(),
116
+ bookmarkId: undefined,
117
+ showModal: 0,
118
+ activeTerminalId: '',
119
+
120
+ // setting sync related
121
+ isSyncingSetting: false,
122
+ isSyncUpload: false,
123
+ isSyncDownload: false,
124
+ syncSetting: {},
125
+ syncType: syncTypes.github,
126
+ _fonts: '[]',
127
+
128
+ // term search
129
+ termSearchOpen: false,
130
+ termSearch: '',
131
+ termSearchMatchCount: 0,
132
+ termSearchMatchIndex: 0,
133
+ _termSearchOptions: JSON.stringify({
134
+ caseSensitive: false,
135
+ wholeWord: false,
136
+ regex: false,
137
+ decorations: {
138
+ activeMatchColorOverviewRuler: 'yellow'
139
+ }
140
+ }),
141
+
142
+ // quick commands
143
+ _quickCommands: '[]',
144
+ quickCommandId: '',
145
+ openQuickCommandBar: false,
146
+ pinnedQuickCommandBar: false,
147
+
148
+ // sidebar
149
+ openedSideBar: ls.getItem(openedSidebarKey),
150
+ menuOpened: false,
151
+ pinned: ls.getItem(sidebarPinnedKey) === 'true',
152
+
153
+ // info/help modal
154
+ showInfoModal: false,
155
+ infoModalTab: infoTabs.info,
156
+ commandLineHelp: '',
157
+
158
+ // editor
159
+ showEditor: false,
160
+
161
+ // file/info modal
162
+ showFileModal: false,
163
+
164
+ // update
165
+ _upgradeInfo: '{}',
166
+
167
+ // serial list related
168
+ _serials: '[]',
169
+ loaddingSerials: false,
170
+
171
+ // transfer list
172
+ transports: [],
173
+
174
+ _sshConfigItems: '[]',
175
+
176
+ appPath: '',
177
+ exePath: '',
178
+ isPortable: false,
179
+ installSrc: '',
180
+
181
+ _langs: '[]',
182
+
183
+ // batch inputs
184
+ batchInputs: ls.getItemJSON(batchInputLsKey, []),
185
+
186
+ // ui
187
+ innerWidth: window.innerWidth,
188
+ height: 500,
189
+ isMaximized: window.pre.runSync('isMaximized'),
190
+ terminalFullScreen: false
191
+ }
@@ -0,0 +1,120 @@
1
+ /**
2
+ * common db op
3
+ */
4
+
5
+ import { find } from 'lodash-es'
6
+ import {
7
+ maxHistory,
8
+ settingMap
9
+ } from '../common/constants'
10
+ import getInitItem from '../common/init-setting-item'
11
+ import { update, remove, dbNames } from '../common/db'
12
+ import copy from 'json-deep-copy'
13
+
14
+ export default Store => {
15
+ Store.prototype.removeOldHistoryFromDb = function (items) {
16
+ const arr = items.slice(maxHistory).map(k => {
17
+ return {
18
+ db: 'history',
19
+ id: k.id
20
+ }
21
+ })
22
+ window.store.batchDbDel(arr)
23
+ }
24
+
25
+ Store.prototype.addItem = function (item, type) {
26
+ return window.store.addItems([item], type)
27
+ }
28
+
29
+ Store.prototype.addItems = function (objs, type) {
30
+ const { store } = window
31
+ let items = store.getItems(type)
32
+ items = [
33
+ ...objs,
34
+ ...items
35
+ ]
36
+ if (type === settingMap.history && items.length > maxHistory) {
37
+ store.removeOldHistoryFromDb(
38
+ copy(items)
39
+ )
40
+ items.slice(0, maxHistory)
41
+ }
42
+ store.setItems(type, items)
43
+ if (dbNames.includes(type)) {
44
+ store.batchDbAdd(
45
+ objs.map(obj => {
46
+ return {
47
+ db: type,
48
+ obj
49
+ }
50
+ })
51
+ )
52
+ }
53
+ }
54
+
55
+ Store.prototype.editItem = function (id, updates, type) {
56
+ const { store } = window
57
+ const items = store.getItems(type)
58
+ const item = find(items, t => t.id === id)
59
+ if (!item) {
60
+ return
61
+ }
62
+ // let index = findIndex(items, t => t.id === id)
63
+ Object.assign(item, updates)
64
+ store.setItems(type, items)
65
+ if (dbNames.includes(type)) {
66
+ update(id, updates, type, false)
67
+ }
68
+ }
69
+
70
+ Store.prototype.delItem = function ({ id }, type) {
71
+ const { store } = window
72
+ const items = store.getItems(type).filter(t => {
73
+ return t.id !== id
74
+ })
75
+ store.setItems(type, items)
76
+ if (dbNames.includes(type)) {
77
+ remove(type, id)
78
+ }
79
+ }
80
+
81
+ Store.prototype.delItems = function (ids, type) {
82
+ const { store } = window
83
+ const items = store.getItems(type).filter(t => {
84
+ return !ids.includes(t.id)
85
+ })
86
+ store.setItems(type, items)
87
+ if (dbNames.includes(type)) {
88
+ ids.map(id => remove(type, id))
89
+ }
90
+ }
91
+
92
+ Store.prototype.onDelItem = function (item, type) {
93
+ const { store } = window
94
+ if (item.id === store.settingItem.id) {
95
+ store.setSettingItem(getInitItem(
96
+ store.getItems(type),
97
+ type
98
+ ))
99
+ }
100
+ }
101
+
102
+ Store.prototype.getSidebarList = function (type) {
103
+ const { store } = window
104
+ if (type === settingMap.terminalThemes) {
105
+ return [
106
+ ...store.getTerminalThemes(),
107
+ ...store.itermThemes
108
+ ].sort(window.store.sortTheme)
109
+ }
110
+ return store.getItems(type)
111
+ }
112
+
113
+ Store.prototype.getItems = function (type) {
114
+ return JSON.parse(this['_' + type] || [])
115
+ }
116
+
117
+ Store.prototype.setItems = function (type, items) {
118
+ this['_' + type] = JSON.stringify(items)
119
+ }
120
+ }