config.cljs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419
  1. (ns frontend.modules.shortcut.config
  2. (:require [frontend.components.commit :as commit]
  3. [frontend.handler.config :as config-handler]
  4. [frontend.handler.editor :as editor-handler]
  5. [frontend.handler.history :as history]
  6. [frontend.handler.repo :as repo-handler]
  7. [frontend.handler.route :as route-handler]
  8. [frontend.handler.search :as search-handler]
  9. [frontend.handler.ui :as ui-handler]
  10. [frontend.handler.web.nfs :as nfs-handler]
  11. [frontend.modules.shortcut.before :as m]
  12. [frontend.state :as state]
  13. [frontend.util :refer [mac?]]))
  14. (def default-config
  15. {:shortcut.handler/date-picker
  16. {:date-picker/complete
  17. {:desc "Date picker choose selected day"
  18. :binding "enter"
  19. :fn ui-handler/shortcut-complete}
  20. :date-picker/prev-day
  21. {:desc "Date picker select previous day"
  22. :binding "left"
  23. :fn ui-handler/shortcut-prev-day}
  24. :date-picker/next-day
  25. {:desc "Date picker select next day"
  26. :binding "right"
  27. :fn ui-handler/shortcut-next-day}
  28. :date-picker/prev-week
  29. {:desc "Date picker select prev week"
  30. :binding "up"
  31. :fn ui-handler/shortcut-prev-week}
  32. :date-picker/next-week
  33. {:desc "Date picker select next week"
  34. :binding "down"
  35. :fn ui-handler/shortcut-next-week}}
  36. :shortcut.handler/auto-complete
  37. {:auto-complete/prev
  38. {:desc "Auto-complete previous selected item"
  39. :binding "up"
  40. :fn ui-handler/auto-complete-prev}
  41. :auto-complete/next
  42. {:desc "Auto-complete next selected item"
  43. :binding "down"
  44. :fn ui-handler/auto-complete-next}
  45. :auto-complete/complete
  46. {:desc "Auto-complete choose selected item"
  47. :binding "enter"
  48. :fn ui-handler/auto-complete-complete}}
  49. :shortcut.handler/block-editing-only
  50. ^{:before m/enable-when-editing-mode!}
  51. {:editor/escape-editing
  52. {:desc "Escape editing (remap to ctrl+open-square-bracket for example)"
  53. :binding false
  54. :fn (fn [_ _] (editor-handler/escape-editing))}
  55. :editor/backspace
  56. {:desc "Backspace / Delete backwards"
  57. :binding "backspace"
  58. :fn editor-handler/editor-backspace}
  59. :editor/delete
  60. {:desc "Delete / Delete forwards"
  61. :binding "delete"
  62. :fn editor-handler/editor-delete}
  63. :editor/new-block
  64. {:desc "Create new block"
  65. :binding "enter"
  66. :fn editor-handler/keydown-new-block-handler}
  67. :editor/new-line
  68. {:desc "Newline in block"
  69. :binding "shift+enter"
  70. :fn editor-handler/keydown-new-line-handler}
  71. :editor/cycle-todo
  72. {:desc "Rotate the TODO state of the current item"
  73. :binding "mod+enter"
  74. :fn editor-handler/cycle-todo!}
  75. :editor/follow-link
  76. {:desc "Follow link under cursor"
  77. :binding "mod+o"
  78. :fn editor-handler/follow-link-under-cursor!}
  79. :editor/open-link-in-sidebar
  80. {:desc "Open link in sidebar"
  81. :binding "mod+shift+o"
  82. :fn editor-handler/open-link-in-sidebar!}
  83. :editor/bold
  84. {:desc "Bold"
  85. :binding "mod+b"
  86. :fn editor-handler/bold-format!}
  87. :editor/italics
  88. {:desc "Italics"
  89. :binding "mod+i"
  90. :fn editor-handler/italics-format!}
  91. :editor/highlight
  92. {:desc "Highlight"
  93. :binding "mod+shift+h"
  94. :fn editor-handler/highlight-format!}
  95. :editor/strike-through
  96. {:desc "Strikethrough"
  97. :binding "mod+shift+s"
  98. :fn editor-handler/strike-through-format!}
  99. :editor/insert-link
  100. {:desc "Html Link"
  101. :binding "mod+k"
  102. :fn editor-handler/html-link-format!}
  103. :editor/move-block-up
  104. {:desc "Move block up"
  105. :binding (if mac? "mod+shift+up" "alt+shift+up")
  106. :fn (editor-handler/move-up-down true)}
  107. :editor/move-block-down
  108. {:desc "Move block down"
  109. :binding (if mac? "mod+shift+down" "alt+shift+down")
  110. :fn (editor-handler/move-up-down false)}
  111. :editor/clear-block
  112. {:desc "Clear entire block content"
  113. :binding (if mac? "ctrl+l" "alt+l")
  114. :fn editor-handler/clear-block-content!}
  115. :editor/kill-line-before
  116. {:desc "Kill line before cursor position"
  117. :binding (if mac? "ctrl+u" "alt+u")
  118. :fn editor-handler/kill-line-before!}
  119. :editor/kill-line-after
  120. {:desc "Kill line after cursor position"
  121. :binding (if mac? false "alt+k")
  122. :fn editor-handler/kill-line-after!}
  123. :editor/beginning-of-block
  124. {:desc "Move cursor to the beginning of block"
  125. :binding (if mac? false "alt+a")
  126. :fn editor-handler/beginning-of-block}
  127. :editor/end-of-block
  128. {:desc "Move cursor to the end of block"
  129. :binding (if mac? false "alt+e")
  130. :fn editor-handler/end-of-block}
  131. :editor/forward-word
  132. {:desc "Move cursor forward by word"
  133. :binding (if mac? "ctrl+shift+f" "alt+f")
  134. :fn editor-handler/cursor-forward-word}
  135. :editor/backward-word
  136. {:desc "Move cursor backward by word"
  137. :binding (if mac? "ctrl+shift+b" "alt+b")
  138. :fn editor-handler/cursor-backward-word}
  139. :editor/forward-kill-word
  140. {:desc "Kill a word forwards"
  141. :binding (if mac? "ctrl+w" "alt+d")
  142. :fn editor-handler/forward-kill-word}
  143. :editor/backward-kill-word
  144. {:desc "Kill a word backwards"
  145. :binding (if mac? false "alt+w")
  146. :fn editor-handler/backward-kill-word}
  147. :editor/replace-block-reference-at-point
  148. {:desc "Replace block reference with its content at point"
  149. :binding "mod+shift+r"
  150. :fn editor-handler/replace-block-reference-with-content-at-point}}
  151. :shortcut.handler/editor-global
  152. ^{:before m/enable-when-not-component-editing!}
  153. {:editor/up
  154. {:desc "Move cursor up / Select up"
  155. :binding "up"
  156. :fn (editor-handler/shortcut-up-down :up)}
  157. :editor/down
  158. {:desc "Move cursor down / Select down"
  159. :binding "down"
  160. :fn (editor-handler/shortcut-up-down :down)}
  161. :editor/left
  162. {:desc "Move cursor left / Open selected block at beginning"
  163. :binding "left"
  164. :fn (editor-handler/shortcut-left-right :left)}
  165. :editor/right
  166. {:desc "Move cursor right / Open selected block at end"
  167. :binding "right"
  168. :fn (editor-handler/shortcut-left-right :right)}
  169. ;; FIXME
  170. ;; add open edit in non-selection mode
  171. :editor/open-edit
  172. {:desc "Edit selected block"
  173. :binding "enter"
  174. :fn (partial editor-handler/open-selected-block! :right)}
  175. :editor/select-block-up
  176. {:desc "Select block above"
  177. :binding "shift+up"
  178. :fn (editor-handler/on-select-block :up)}
  179. :editor/select-block-down
  180. {:desc "Select block below"
  181. :binding "shift+down"
  182. :fn (editor-handler/on-select-block :down)}
  183. :editor/delete-selection
  184. {:desc "Delete selected blocks"
  185. :binding ["backspace" "delete"]
  186. :fn editor-handler/delete-selection}
  187. :editor/expand-block-children
  188. {:desc "Expand"
  189. :binding "mod+down"
  190. :fn editor-handler/expand!}
  191. :editor/collapse-block-children
  192. {:desc "Collapse"
  193. :binding "mod+up"
  194. :fn editor-handler/collapse!}
  195. :editor/indent
  196. {:desc "Indent block"
  197. :binding "tab"
  198. :fn (editor-handler/keydown-tab-handler :right)}
  199. :editor/outdent
  200. {:desc "Outdent block"
  201. :binding "shift+tab"
  202. :fn (editor-handler/keydown-tab-handler :left)}
  203. :editor/copy
  204. {:desc "Copy"
  205. :binding "mod+c"
  206. :fn editor-handler/shortcut-copy}
  207. :editor/cut
  208. {:desc "Cut"
  209. :binding "mod+x"
  210. :fn editor-handler/shortcut-cut}
  211. :editor/undo
  212. {:desc "Undo"
  213. :binding "mod+z"
  214. :fn history/undo!}
  215. :editor/redo
  216. {:desc "Redo"
  217. :binding ["shift+mod+z" "mod+y"]
  218. :fn history/redo!}
  219. ;; FIXME
  220. ;; save in block editing only doesn't seems needed?
  221. :editor/save
  222. {:binding "mod+s"
  223. :fn editor-handler/save!}}
  224. :shortcut.handler/global-prevent-default
  225. ^{:before m/prevent-default-behavior}
  226. {:editor/select-all-blocks
  227. {:desc "Select all blocks"
  228. :binding "mod+shift+a"
  229. :fn editor-handler/select-all-blocks!}
  230. :editor/zoom-in
  231. {:desc "Zoom in / Forward"
  232. :binding (if mac? "mod+." "alt+right")
  233. :fn editor-handler/zoom-in!}
  234. :editor/zoom-out
  235. {:desc "Zoom out / Back"
  236. :binding (if mac? "mod+," "alt+left")
  237. :fn editor-handler/zoom-out!}
  238. :ui/toggle-brackets
  239. {:desc "Toggle whether to display brackets"
  240. :binding "mod+c mod+b"
  241. :fn config-handler/toggle-ui-show-brackets!}
  242. :go/search-in-page
  243. {:desc "Search in the current page"
  244. :binding "mod+shift+u"
  245. :fn #(route-handler/go-to-search! :page)}
  246. :go/search
  247. {:desc "Full text search"
  248. :binding "mod+u"
  249. :fn route-handler/go-to-search!}
  250. :go/journals
  251. {:desc "Jump to journals"
  252. :binding (if mac? "mod+j" "alt+j")
  253. :fn route-handler/go-to-journals!}
  254. :search/re-index
  255. {:desc "Rebuild search index"
  256. :binding "mod+c mod+s"
  257. :fn search-handler/rebuild-indices!}
  258. :graph/re-index
  259. {:desc "Re-index the whole graph"
  260. :binding "mod+c mod+r"
  261. :fn #(repo-handler/re-index! nfs-handler/rebuild-index!)}}
  262. :shortcut.handler/misc
  263. ;; always overrides the copy due to "mod+c mod+s"
  264. {:misc/copy
  265. {:binding "mod+c"
  266. :fn (fn [] (js/document.execCommand "copy"))}}
  267. :shortcut.handler/global-non-editing-only
  268. ^{:before m/enable-when-not-editing-mode!}
  269. {:ui/toggle-document-mode
  270. {:desc "Toggle document mode"
  271. :binding "t d"
  272. :fn state/toggle-document-mode!}
  273. :ui/toggle-settings
  274. {:desc "Toggle settings"
  275. :binding (if mac? "t s" ["t s" "mod+,"])
  276. :fn ui-handler/toggle-settings-modal!}
  277. :ui/toggle-right-sidebar
  278. {:desc "Toggle right sidebar"
  279. :binding "t r"
  280. :fn ui-handler/toggle-right-sidebar!}
  281. :ui/toggle-help
  282. {:desc "Toggle help"
  283. :binding "shift+/"
  284. :fn ui-handler/toggle-help!}
  285. :ui/toggle-theme
  286. {:desc "Toggle between dark/light theme"
  287. :binding "t t"
  288. :fn state/toggle-theme!}
  289. :ui/toggle-new-block
  290. {:desc "Toggle newblock/newline command for inserting newline/newblock"
  291. :binding "t e"
  292. :fn state/toggle-new-block-shortcut!}
  293. :ui/toggle-contents
  294. {:desc "Toggle Contents in sidebar"
  295. :binding "t c"
  296. :fn ui-handler/toggle-contents!}
  297. :ui/toggle-wide-mode
  298. {:desc "Toggle wide mode"
  299. :binding "t w"
  300. :fn ui-handler/toggle-wide-mode!}
  301. :editor/toggle-open-blocks
  302. {:desc "Toggle open blocks, either collapse or expand all blocks"
  303. :binding "t o"
  304. :fn editor-handler/toggle-open!}
  305. ;; :ui/toggle-between-page-and-file route-handler/toggle-between-page-and-file!
  306. :git/commit
  307. {:desc "Git commit message"
  308. :binding "g c"
  309. :fn commit/show-commit-modal!}}})
  310. ;; Categories for docs purpose
  311. (def category
  312. {:shortcut.category/basics
  313. ^{:doc "Basics"}
  314. [:editor/new-block
  315. :editor/new-line
  316. :editor/indent
  317. :editor/outdent
  318. :editor/collapse-block-children
  319. :editor/expand-block-children
  320. :editor/select-all-blocks
  321. :go/search
  322. :go/search-in-page
  323. :editor/undo
  324. :editor/redo
  325. :editor/zoom-in
  326. :editor/zoom-out
  327. :editor/copy
  328. :editor/cut
  329. :editor/toggle-open-blocks
  330. :ui/toggle-wide-mode]
  331. :shortcut.category/formatting
  332. ^{:doc "Formatting"}
  333. [:editor/bold
  334. :editor/insert-link
  335. :editor/italics
  336. :editor/highlight]
  337. :shortcut.category/navigating
  338. ^{:doc "Navigation"}
  339. [:editor/up
  340. :editor/down
  341. :editor/left
  342. :editor/right]
  343. :shortcut.category/block-editing
  344. ^{:doc "Block editing general"}
  345. [:editor/backspace
  346. :editor/delete
  347. :editor/indent
  348. :editor/outdent
  349. :editor/new-block
  350. :editor/new-line
  351. :editor/zoom-in
  352. :editor/zoom-out
  353. :editor/cycle-todo
  354. :editor/follow-link
  355. :editor/open-link-in-sidebar
  356. :editor/move-block-up
  357. :editor/move-block-down
  358. :editor/escape-editing]
  359. :shortcut.category/block-command-editing
  360. ^{:doc "Block command editing"}
  361. [:editor/backspace
  362. :editor/clear-block
  363. :editor/kill-line-before
  364. :editor/kill-line-after
  365. :editor/beginning-of-block
  366. :editor/end-of-block
  367. :editor/forward-word
  368. :editor/backward-word
  369. :editor/forward-kill-word
  370. :editor/backward-kill-word
  371. :editor/replace-block-reference-at-point]
  372. :shortcut.category/block-selection
  373. ^{:doc "Block selection (press Esc to quit selection)"}
  374. [:editor/open-edit
  375. :editor/select-all-blocks
  376. :editor/select-block-up
  377. :editor/select-block-down
  378. :editor/delete-selection]
  379. :shortcut.category/toggle
  380. ^{:doc "Toggle"}
  381. [:ui/toggle-help
  382. :ui/toggle-new-block
  383. :editor/toggle-open-blocks
  384. :ui/toggle-wide-mode
  385. :ui/toggle-document-mode
  386. :ui/toggle-brackets
  387. :ui/toggle-theme
  388. :ui/toggle-right-sidebar
  389. :ui/toggle-settings
  390. :ui/toggle-contents]
  391. :shortcut.category/others
  392. ^{:doc "Others"}
  393. [:go/journals
  394. :search/re-index
  395. :graph/re-index
  396. :auto-complete/prev
  397. :auto-complete/next
  398. :auto-complete/complete
  399. :date-picker/prev-day
  400. :date-picker/next-day
  401. :date-picker/prev-week
  402. :date-picker/next-week
  403. :date-picker/complete]})