core.cljs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. (ns frontend.core
  2. "Entry ns for the mobile, browser and electron frontend apps"
  3. {:dev/always true}
  4. (:require [frontend.background-tasks]
  5. [frontend.common-keywords]
  6. [frontend.common.schema-register :as sr]
  7. [frontend.components.plugins :as plugins]
  8. [frontend.config :as config]
  9. [frontend.fs.sync :as sync]
  10. [frontend.handler :as handler]
  11. [frontend.handler.plugin :as plugin-handler]
  12. [frontend.handler.route :as route-handler]
  13. [frontend.log]
  14. [frontend.page :as page]
  15. [frontend.routes :as routes]
  16. [frontend.spec]
  17. [logseq.api]
  18. [malli.dev.cljs :as md]
  19. [reitit.frontend :as rf]
  20. [reitit.frontend.easy :as rfe]
  21. [rum.core :as rum]))
  22. (defn set-router!
  23. []
  24. (rfe/start!
  25. (rf/router (plugins/hook-custom-routes routes/routes) nil)
  26. (fn [route]
  27. (route-handler/set-route-match! route)
  28. (plugin-handler/hook-plugin-app
  29. :route-changed (select-keys route [:template :path :parameters])))
  30. ;; set to false to enable HistoryAPI
  31. {:use-fragment true}))
  32. (defn display-welcome-message
  33. []
  34. (js/console.log
  35. "
  36. Welcome to Logseq!
  37. If you encounter any problem, feel free to file an issue on GitHub (https://github.com/logseq/logseq)
  38. or join our forum (https://discuss.logseq.com).
  39. .____
  40. | | ____ ____ ______ ____ ______
  41. | | / _ \\ / ___\\/ ___// __ \\/ ____/
  42. | |__( <_> ) /_/ >___ \\\\ ___< <_| |
  43. |_______ \\____/\\___ /____ >\\___ >__ |
  44. \\/ /_____/ \\/ \\/ |__|
  45. "))
  46. (defn ^:export start []
  47. (when config/dev?
  48. (md/start!))
  49. (frontend.common.schema-register/init)
  50. (when-let [node (.getElementById js/document "root")]
  51. (set-router!)
  52. (rum/mount (page/current-page) node)
  53. (display-welcome-message)
  54. ;; NO repo state here, better not add init logic here
  55. (when config/dev?
  56. (js/setTimeout #(sync/<sync-start) 1000))))
  57. (comment
  58. (def d-entity-count (volatile! 0))
  59. (def ident->count (volatile! {}))
  60. (def time-sum (volatile! 0))
  61. (defn- setup-entity-profile!
  62. []
  63. (let [origin-d-entity d/entity]
  64. (set! d/entity (fn [& args]
  65. (let [{r :result time :time} (util/with-time (apply origin-d-entity args))
  66. k (last args)]
  67. (vswap! d-entity-count inc)
  68. (vswap! ident->count update k inc)
  69. (vswap! time-sum #(+ time %))
  70. (println @d-entity-count (:db/id r) k (get @ident->count k) @time-sum "ms")
  71. r))))))
  72. (defn ^:export init []
  73. ;; init is called ONCE when the page loads
  74. ;; this is called in the index.html and must be exported
  75. ;; so it is available even in :advanced release builds
  76. ;; (setup-entity-profile!)
  77. (plugin-handler/setup!
  78. #(handler/start! start)))
  79. (defn ^:export stop []
  80. ;; stop is called before any code is reloaded
  81. ;; this is controlled by :before-load in the config
  82. (handler/stop!)
  83. (when config/dev?
  84. (sync/<sync-stop))
  85. (js/console.log "stop"))
  86. (defn ^:export delay-remount
  87. [delay]
  88. (js/setTimeout #(start) delay))