|  | @@ -142,6 +142,7 @@
 | 
	
		
			
				|  |  |     :page/name       {:db/unique      :db.unique/identity}
 | 
	
		
			
				|  |  |     :page/file       {:db/valueType   :db.type/ref}
 | 
	
		
			
				|  |  |     :page/directives {}
 | 
	
		
			
				|  |  | +   :page/links      {}
 | 
	
		
			
				|  |  |     :page/alias      {:db/valueType   :db.type/ref
 | 
	
		
			
				|  |  |                       :db/cardinality :db.cardinality/many}
 | 
	
		
			
				|  |  |     :page/tags       {:db/valueType   :db.type/ref
 | 
	
	
		
			
				|  | @@ -318,6 +319,7 @@
 | 
	
		
			
				|  |  |        :heading/change
 | 
	
		
			
				|  |  |        (when (seq data)
 | 
	
		
			
				|  |  |          (let [headings data
 | 
	
		
			
				|  |  | +              pre-heading? (:heading/pre-heading? (first headings))
 | 
	
		
			
				|  |  |                current-priority (get-current-priority)
 | 
	
		
			
				|  |  |                current-marker (get-current-marker)
 | 
	
		
			
				|  |  |                current-page-id (:page/id (get-current-page))
 | 
	
	
		
			
				|  | @@ -332,6 +334,9 @@
 | 
	
		
			
				|  |  |                                     [:page/ref-pages page-id]]))
 | 
	
		
			
				|  |  |                                headings)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +                             (when pre-heading?
 | 
	
		
			
				|  |  | +                               [[:contents]])
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                               ;; affected priority
 | 
	
		
			
				|  |  |                               (when current-priority
 | 
	
		
			
				|  |  |                                 [[:priority/headings current-priority]])
 | 
	
	
		
			
				|  | @@ -565,7 +570,7 @@
 | 
	
		
			
				|  |  |            (let [handler-key (vec (cons repo-url handler-key))]
 | 
	
		
			
				|  |  |              (when-let [cache (get @query-state handler-key)]
 | 
	
		
			
				|  |  |                (let [{:keys [query inputs transform-fn query-fn]} cache]
 | 
	
		
			
				|  |  | -                (when (or (and query inputs) query-fn)
 | 
	
		
			
				|  |  | +                (when (or query query-fn)
 | 
	
		
			
				|  |  |                    (let [new-result (->
 | 
	
		
			
				|  |  |                                      (cond
 | 
	
		
			
				|  |  |                                        query-fn
 | 
	
	
		
			
				|  | @@ -576,8 +581,11 @@
 | 
	
		
			
				|  |  |                                        (keyword? query)
 | 
	
		
			
				|  |  |                                        (get-key-value repo-url query)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +                                      (seq inputs)
 | 
	
		
			
				|  |  | +                                      (apply d/q query db inputs)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                                        :else
 | 
	
		
			
				|  |  | -                                      (apply d/q query db inputs))
 | 
	
		
			
				|  |  | +                                      (d/q query db))
 | 
	
		
			
				|  |  |                                      transform-fn)]
 | 
	
		
			
				|  |  |                      (set-new-result! handler-key new-result)))))))))))
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -647,31 +655,31 @@
 | 
	
		
			
				|  |  |    [repo]
 | 
	
		
			
				|  |  |    (let [now-long (tc/to-long (t/now))]
 | 
	
		
			
				|  |  |      (->> (q repo [:pages] {:use-cache? false}
 | 
	
		
			
				|  |  | -          '[:find ?page-name ?modified-at
 | 
	
		
			
				|  |  | -            :where
 | 
	
		
			
				|  |  | -            [?page :page/name ?page-name]
 | 
	
		
			
				|  |  | -            [(get-else $ ?page :page/journal? false) ?journal]
 | 
	
		
			
				|  |  | -            [(get-else $ ?page :page/last-modified-at 0) ?modified-at]
 | 
	
		
			
				|  |  | -            ;; (or
 | 
	
		
			
				|  |  | -            ;;  ;; journal pages, can't be empty
 | 
	
		
			
				|  |  | -            ;;  (and [(true? ?journal)]
 | 
	
		
			
				|  |  | -            ;;       [?h :heading/page ?page]
 | 
	
		
			
				|  |  | -            ;;       [?h :heading/level ?level]
 | 
	
		
			
				|  |  | -            ;;       [(> ?level 1)])
 | 
	
		
			
				|  |  | -            ;;  ;; non-journals, might be empty pages
 | 
	
		
			
				|  |  | -            ;;  (and [(false? ?journal)]
 | 
	
		
			
				|  |  | -            ;;       [?h :heading/page]
 | 
	
		
			
				|  |  | -            ;;       [?h :heading/level ?level]))
 | 
	
		
			
				|  |  | -            ])
 | 
	
		
			
				|  |  | -        (react)
 | 
	
		
			
				|  |  | -        (seq)
 | 
	
		
			
				|  |  | -        (sort-by (fn [[page modified-at]]
 | 
	
		
			
				|  |  | -                   [modified-at page]))
 | 
	
		
			
				|  |  | -        (reverse)
 | 
	
		
			
				|  |  | -        (remove (fn [[page modified-at]]
 | 
	
		
			
				|  |  | -                  (or (util/file-page? page)
 | 
	
		
			
				|  |  | -                      (and modified-at
 | 
	
		
			
				|  |  | -                           (> modified-at now-long))))))))
 | 
	
		
			
				|  |  | +           '[:find ?page-name ?modified-at
 | 
	
		
			
				|  |  | +             :where
 | 
	
		
			
				|  |  | +             [?page :page/name ?page-name]
 | 
	
		
			
				|  |  | +             [(get-else $ ?page :page/journal? false) ?journal]
 | 
	
		
			
				|  |  | +             [(get-else $ ?page :page/last-modified-at 0) ?modified-at]
 | 
	
		
			
				|  |  | +             ;; (or
 | 
	
		
			
				|  |  | +             ;;  ;; journal pages, can't be empty
 | 
	
		
			
				|  |  | +             ;;  (and [(true? ?journal)]
 | 
	
		
			
				|  |  | +             ;;       [?h :heading/page ?page]
 | 
	
		
			
				|  |  | +             ;;       [?h :heading/level ?level]
 | 
	
		
			
				|  |  | +             ;;       [(> ?level 1)])
 | 
	
		
			
				|  |  | +             ;;  ;; non-journals, might be empty pages
 | 
	
		
			
				|  |  | +             ;;  (and [(false? ?journal)]
 | 
	
		
			
				|  |  | +             ;;       [?h :heading/page]
 | 
	
		
			
				|  |  | +             ;;       [?h :heading/level ?level]))
 | 
	
		
			
				|  |  | +             ])
 | 
	
		
			
				|  |  | +         (react)
 | 
	
		
			
				|  |  | +         (seq)
 | 
	
		
			
				|  |  | +         (sort-by (fn [[page modified-at]]
 | 
	
		
			
				|  |  | +                    [modified-at page]))
 | 
	
		
			
				|  |  | +         (reverse)
 | 
	
		
			
				|  |  | +         (remove (fn [[page modified-at]]
 | 
	
		
			
				|  |  | +                   (or (util/file-page? page)
 | 
	
		
			
				|  |  | +                       (and modified-at
 | 
	
		
			
				|  |  | +                            (> modified-at now-long))))))))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  (defn get-page-alias
 | 
	
		
			
				|  |  |    [repo page-name]
 | 
	
	
		
			
				|  | @@ -1079,6 +1087,15 @@
 | 
	
		
			
				|  |  |        (utf8/substring utf8-content
 | 
	
		
			
				|  |  |                        (:pos meta)))))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +(defn extract-page-list
 | 
	
		
			
				|  |  | +  [content]
 | 
	
		
			
				|  |  | +  (when-not (string/blank? content)
 | 
	
		
			
				|  |  | +    (->> (re-seq #"\[\[([^\]]+)]]" content)
 | 
	
		
			
				|  |  | +         (map last)
 | 
	
		
			
				|  |  | +         (remove nil?)
 | 
	
		
			
				|  |  | +         (map string/lower-case)
 | 
	
		
			
				|  |  | +         (distinct))))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  ;; file
 | 
	
		
			
				|  |  |  (defn extract-pages-and-headings
 | 
	
		
			
				|  |  |    [format ast directives file content utf8-content journal? pages-fn]
 | 
	
	
		
			
				|  | @@ -1119,20 +1136,25 @@
 | 
	
		
			
				|  |  |                                                (conj other-alias (string/lower-case file)))
 | 
	
		
			
				|  |  |                                              (remove nil?)))
 | 
	
		
			
				|  |  |                            journal-date-long (if journal?
 | 
	
		
			
				|  |  | -                                              (date/journal-title->long (string/capitalize page)))]
 | 
	
		
			
				|  |  | +                                              (date/journal-title->long (string/capitalize page)))
 | 
	
		
			
				|  |  | +                          page-list (when-let [list-content (:list directives)]
 | 
	
		
			
				|  |  | +                                      (extract-page-list list-content))]
 | 
	
		
			
				|  |  |                        (cond->
 | 
	
		
			
				|  |  | -                        (util/remove-nils
 | 
	
		
			
				|  |  | -                         {:page/name page
 | 
	
		
			
				|  |  | -                          :page/file [:file/path file]
 | 
	
		
			
				|  |  | -                          :page/journal? journal?
 | 
	
		
			
				|  |  | -                          :page/journal-day (if journal?
 | 
	
		
			
				|  |  | -                                              (date/journal-title->int (string/capitalize page))
 | 
	
		
			
				|  |  | -                                              0)
 | 
	
		
			
				|  |  | -                          :page/created-at journal-date-long
 | 
	
		
			
				|  |  | -                          :page/last-modified-at journal-date-long})
 | 
	
		
			
				|  |  | +                          (util/remove-nils
 | 
	
		
			
				|  |  | +                           {:page/name page
 | 
	
		
			
				|  |  | +                            :page/file [:file/path file]
 | 
	
		
			
				|  |  | +                            :page/journal? journal?
 | 
	
		
			
				|  |  | +                            :page/journal-day (if journal?
 | 
	
		
			
				|  |  | +                                                (date/journal-title->int (string/capitalize page))
 | 
	
		
			
				|  |  | +                                                0)
 | 
	
		
			
				|  |  | +                            :page/created-at journal-date-long
 | 
	
		
			
				|  |  | +                            :page/last-modified-at journal-date-long})
 | 
	
		
			
				|  |  |                          (seq directives)
 | 
	
		
			
				|  |  |                          (assoc :page/directives directives)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +                        (seq page-list)
 | 
	
		
			
				|  |  | +                        (assoc :page/list page-list)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                          other-alias
 | 
	
		
			
				|  |  |                          (assoc :page/alias
 | 
	
		
			
				|  |  |                                 (map
 | 
	
	
		
			
				|  | @@ -1255,10 +1277,10 @@
 | 
	
		
			
				|  |  |                 file-content)
 | 
	
		
			
				|  |  |            tx (concat tx [(let [t (tc/to-long (t/now))]
 | 
	
		
			
				|  |  |                             (cond->
 | 
	
		
			
				|  |  | -                              {:file/path file
 | 
	
		
			
				|  |  | -                               :file/last-modified-at t}
 | 
	
		
			
				|  |  | -                            new?
 | 
	
		
			
				|  |  | -                            (assoc :file/created-at t)))])]
 | 
	
		
			
				|  |  | +                               {:file/path file
 | 
	
		
			
				|  |  | +                                :file/last-modified-at t}
 | 
	
		
			
				|  |  | +                             new?
 | 
	
		
			
				|  |  | +                             (assoc :file/created-at t)))])]
 | 
	
		
			
				|  |  |        (transact! repo-url tx))))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  (defn get-current-journal-path
 | 
	
	
		
			
				|  | @@ -1876,9 +1898,34 @@
 | 
	
		
			
				|  |  |          new-pages (take 12 (distinct (cons page pages)))]
 | 
	
		
			
				|  |  |      (set-key-value repo :recent/pages new-pages)))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -(comment
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +(defn build-content-list
 | 
	
		
			
				|  |  | +  [m l]
 | 
	
		
			
				|  |  | +  (map
 | 
	
		
			
				|  |  | +    (fn [page]
 | 
	
		
			
				|  |  | +      (if-let [page-list (get m page)]
 | 
	
		
			
				|  |  | +        {:page page
 | 
	
		
			
				|  |  | +         :list (build-content-list m page-list)}
 | 
	
		
			
				|  |  | +        {:page page}))
 | 
	
		
			
				|  |  | +    l))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +(defn get-contents
 | 
	
		
			
				|  |  | +  ([]
 | 
	
		
			
				|  |  | +   (get-contents (state/get-current-repo)))
 | 
	
		
			
				|  |  | +  ([repo]
 | 
	
		
			
				|  |  | +   (when-let [conn (get-conn repo)]
 | 
	
		
			
				|  |  | +     (let [lists (some->>
 | 
	
		
			
				|  |  | +                  (q repo [:contents] {}
 | 
	
		
			
				|  |  | +                    '[:find ?page-name ?list
 | 
	
		
			
				|  |  | +                      :where
 | 
	
		
			
				|  |  | +                      [?page :page/list ?list]
 | 
	
		
			
				|  |  | +                      [?page :page/name ?page-name]])
 | 
	
		
			
				|  |  | +                  react
 | 
	
		
			
				|  |  | +                  (into {}))]
 | 
	
		
			
				|  |  | +       (when (seq lists)
 | 
	
		
			
				|  |  | +         (when-let [l (get lists "contents")]
 | 
	
		
			
				|  |  | +           (build-content-list lists l)))))))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +(comment
 | 
	
		
			
				|  |  |    (defn debug!
 | 
	
		
			
				|  |  |      []
 | 
	
		
			
				|  |  |      (let [repos (->> (get-in @state/state [:me :repos])
 |