Merge branch 'master' into enhance/graph-parser-part-trois

This commit is contained in:
Gabriel Horner
2022-05-13 16:36:32 -04:00
13 changed files with 145 additions and 70 deletions

View File

@@ -266,9 +266,15 @@
href (config/get-local-asset-absolute-path href)]
(when (or granted? (util/electron?) (mobile-util/is-native-platform?))
(p/then (editor-handler/make-asset-url href) #(reset! src %)))
(when @src
(let [ext (keyword (util/get-file-ext @src))]
(let [ext (keyword (util/get-file-ext @src))
share-fn (fn [event]
(util/stop event)
(when (mobile-util/is-native-platform?)
(p/let [url (str (config/get-repo-dir (state/get-current-repo)) href)]
(.share Share #js {:url url
:title "Open file with your favorite app"}))))]
(cond
(contains? config/audio-formats ext)
(audio-cp @src)
@@ -277,19 +283,14 @@
(resizable-image config title @src metadata full_text true)
(= ext :pdf)
[:a.asset-ref.is-pdf
{:href @src
:on-click
(fn [event]
(util/stop event)
(when (mobile-util/is-native-platform?)
(p/let [url (str (config/get-repo-dir (state/get-current-repo)) href)]
(.share Share #js {:url url
:title "Open PDF fils with your favorite app"}))))}
[:a.asset-ref.is-pdf {:href @src
:on-click share-fn}
title]
:else
[:a.asset-ref {:ref @src} title])))))
[:a.asset-ref.is-doc {:ref @src
:on-click share-fn}
title])))))
(defn ar-url->http-url
[href]
@@ -660,7 +661,7 @@
(and (= 1 (count label))
(let [label (first label)]
(string? (last label))
(last label))))
(js/decodeURIComponent (last label)))))
(defn- get-page
[label]
@@ -842,28 +843,31 @@
(defn- media-link
[config url s label metadata full_text]
(let [ext (util/get-file-ext s)]
(let [ext (keyword (util/get-file-ext s))
label-text (get-label-text label)]
(cond
(contains? (set (map name config/audio-formats)) ext)
(contains? config/audio-formats ext)
(audio-link config url s label metadata full_text)
(not (contains? #{"pdf" "mp4" "webm" "mov"} ext))
(contains? (config/doc-formats) ext)
(asset-link config label-text s metadata full_text)
(= ext :pdf)
(cond
(util/electron?)
[:a.asset-ref.is-pdf
{:href "javascript:void(0);"
:on-mouse-down (fn [_event]
(when-let [current (pdf-assets/inflate-asset s)]
(state/set-state! :pdf/current current)))}
label-text]
(mobile-util/is-native-platform?)
(asset-link config label-text s metadata full_text))
(not (contains? #{:mp4 :webm :mov} ext))
(image-link config url s label metadata full_text)
(= (util/get-file-ext s) "pdf")
(let [label-text (get-label-text label)]
(cond
(util/electron?)
[:a.asset-ref.is-pdf
{:href "javascript:void(0);"
:on-mouse-down (fn [_event]
(when-let [current (pdf-assets/inflate-asset s)]
(state/set-state! :pdf/current current)))}
label-text]
(mobile-util/is-native-platform?)
(asset-link config label-text s metadata full_text)))
:else
(asset-reference config label s))))
@@ -2403,14 +2407,13 @@
[state config block]
(let [repo (state/get-current-repo)
ref? (:ref? config)
custom-query? (boolean (:custom-query? config))
ref-or-custom-query? (or ref? custom-query?)]
(if (and ref-or-custom-query? (not (:ref-query-child? config)))
custom-query? (boolean (:custom-query? config))]
(if (and ref? (not custom-query?) (not (:ref-query-child? config)))
(ui/lazy-visible
nil
(fn []
(block-container-inner state repo config block))
nil)
nil
false)
(block-container-inner state repo config block))))
(defn divide-lists
@@ -2738,9 +2741,9 @@
(ui/catch-error
(ui/block-error "Query Error:" {:content (:query q)})
(ui/lazy-visible
"loading ..."
(fn [] (custom-query* config q))
nil)))
nil
true)))
(defn admonition
[config type result]

View File

@@ -240,6 +240,19 @@ html.is-native-android {
align-items: center;
}
}
&.is-doc {
&:before {
content: "[[📜";
opacity: .7;
margin-right: 4px;
}
&:after {
content: "]]";
opacity: .7;
}
}
}
.embed-page {

View File

@@ -61,12 +61,12 @@
(page/today-queries repo today? false)
(rum/with-key
(reference/references title false)
(reference/references title)
(str title "-refs"))]))
(rum/defc journal-cp
[journal]
(ui/lazy-visible nil (fn [] (journal-cp-inner journal)) nil))
(ui/lazy-visible (fn [] (journal-cp-inner journal)) nil true))
(rum/defc journals < rum/reactive
[latest-journals]

View File

@@ -394,7 +394,7 @@
;; referenced blocks
[:div {:key "page-references"}
(rum/with-key
(reference/references route-page-name sidebar?)
(reference/references route-page-name)
(str route-page-name "-refs"))]
(when-not block?

View File

@@ -165,16 +165,14 @@
:title-trigger? true}))]]))))
(rum/defc references
[page-name sidebar?]
[page-name]
(ui/catch-error
(ui/component-error "Linked References: Unexpected error")
(ui/lazy-visible
(if (or sidebar? (util/uuid-string? page-name))
nil
"loading references...")
(fn []
(references* page-name))
nil)))
nil
false)))
(rum/defcs unlinked-references-aux
< rum/reactive db-mixins/query

View File

@@ -85,6 +85,15 @@
config-formats
#{:gif :svg :jpeg :ico :png :jpg :bmp :webp})))
(defn doc-formats
[]
(let [config-formats (some->> (get-in @state/state [:config :document-formats])
(map :keyword)
(set))]
(set/union
config-formats
#{:doc :docx :xls :xlsx :ppt :pptx :one :epub})))
(def audio-formats #{:mp3 :ogg :mpeg :wav :m4a :flac :wma :aac})
(def media-formats (set/union (img-formats) audio-formats))

View File

@@ -52,7 +52,12 @@
;; and re-produce a new same-file-delete diff.
;;; ### specs
(s/def ::state #{::idle
(s/def ::state #{;; do following jobs when ::starting:
;; - wait seconds for file-change-events from file-watcher
;; - drop redundant file-change-events
;; - setup states in `frontend.state`
::starting
::idle
;; sync local-changed files
::local->remote
;; sync remote latest-transactions
@@ -847,7 +852,7 @@
"create a new sync-state"
[]
{:post [(s/valid? ::sync-state %)]}
{:state ::idle
{:state ::starting
:current-local->remote-files #{}
:current-remote->local-files #{}
:queued-local->remote-files #{}
@@ -1417,24 +1422,34 @@
;; 1. if remote graph has been deleted, clear graphs-txid.edn
;; 2. if graphs-txid.edn's content isn't [user-uuid graph-uuid txid], clear it
(if (not= 3 (count @graphs-txid))
(clear-graphs-txid! repo)
(do (clear-graphs-txid! repo)
(state/set-file-sync-state nil))
(when (check-graph-belong-to-current-user current-user-uuid user-uuid)
(if-not (<! (check-remote-graph-exists graph-uuid))
(clear-graphs-txid! repo)
(do
;; set-env
(set-env rsapi config/FILE-SYNC-PROD?)
(state/set-file-sync-state @*sync-state)
(state/set-file-sync-manager sm)
;; wait seconds to receive all file change events,
;; and then drop all of them.
;; WHY: when opening a graph(or switching to another graph),
;; file-watcher will send a lot of file-change-events,
;; actually, each file corresponds to a file-change-event,
;; we need to ignore all of them.
(<! (timeout 5000))
(drain-chan local-changes-chan)
(poll! stop-sync-chan)
(poll! remote->local-sync-chan)
;; update global state when *sync-state changes
(add-watch *sync-state ::update-global-state
(fn [_ _ _ n]
(state/set-file-sync-state n)))
(.start sm)
(state/set-file-sync-manager sm)
(offer! remote->local-sync-chan true)
(offer! full-sync-chan true)

View File

@@ -59,8 +59,8 @@
(defn- file-sync-stop-when-switch-graph []
(p/do! (persist-var/load-vars)
(sync/sync-stop)
;; trigger rerender file-sync-header
(state/set-file-sync-state nil)))
(sync/sync-start)
))
(defn- graph-switch [graph]
(state/set-current-repo! graph)
@@ -98,7 +98,6 @@
(graph-switch graph))))
(defmethod handle :graph/switch [[_ graph]]
(file-sync-stop-when-switch-graph)
(if (outliner-file/writes-finished?)
(graph-switch-on-persisted graph)
(notification/show!

View File

@@ -113,7 +113,8 @@
(gp-config/mldoc-support? application-type)
(embed-text-file url title)
(contains? (set/union #{:pdf} config/media-formats) (keyword application-type))
(contains? (set/union (config/doc-formats) config/media-formats)
(keyword application-type))
(embed-asset-file url format)
:else

View File

@@ -1667,6 +1667,7 @@
(defn get-file-sync-manager []
(:file-sync/sync-manager @state))
(defn get-file-sync-state []
(:file-sync/sync-state @state))

View File

@@ -911,23 +911,51 @@
label-right]]
(progress-bar width)])
(rum/defc lazy-visible-inner
[visible? content-fn loading-label]
[:div.lazy-visibility
(rum/defcs lazy-visible-inner <
{:init (fn [state]
(assoc state
::ref (atom nil)
::height (atom 26)))
:did-mount (fn [state]
(when (last (:rum/args state))
(let [observer (js/ResizeObserver. (fn [entries]
(let [entry (first entries)
*height (::height state)
height' (.-height (.-contentRect entry))]
(when (and (> height' @*height)
(not= height' 64))
(reset! *height height')))))]
(.observe observer @(::ref state))))
state)}
[state visible? content-fn _reset-height?]
[:div.lazy-visibility {:ref #(reset! (::ref state) %)
:style {:min-height @(::height state)}}
(if visible?
(when (fn? content-fn) (content-fn))
(when loading-label [:span.text-sm.font-medium
loading-label]))])
[:div.shadow.rounded-md.p-4.w-full.mx-auto {:style {:height 64}}
[:div.animate-pulse.flex.space-x-4
[:div.flex-1.space-y-3.py-1
[:div.h-2.bg-base-4.rounded]
[:div.space-y-3
[:div.grid.grid-cols-3.gap-4
[:div.h-2.bg-base-4.rounded.col-span-2]
[:div.h-2.bg-base-4.rounded.col-span-1]]
[:div.h-2.bg-base-4.rounded]]]]])])
(rum/defcs lazy-visible <
(rum/local false ::visible?)
[state loading-label content-fn sensor-opts]
(let [*visible? (::visible? state)]
(visibility-sensor
(merge
{:on-change #(reset! *visible? %)
:partialVisibility true
:offset {:top -300
:bottom -300}}
sensor-opts)
(lazy-visible-inner @*visible? content-fn loading-label))))
[state content-fn sensor-opts reset-height?]
(if (or (util/mobile?) (mobile-util/is-native-platform?))
(content-fn)
(let [*visible? (::visible? state)]
(visibility-sensor
(merge
{:on-change #(reset! *visible? %)
:partialVisibility true
:offset {:top -300
:bottom -300}
:scrollCheck true
:scrollThrottle 1}
sensor-opts)
(lazy-visible-inner @*visible? content-fn reset-height?)))))