diff --git a/src/main/dda/masto_embed/render_bootstrap.cljs b/src/main/dda/masto_embed/account_mode.cljs similarity index 61% rename from src/main/dda/masto_embed/render_bootstrap.cljs rename to src/main/dda/masto_embed/account_mode.cljs index 9c47eba..e12135e 100644 --- a/src/main/dda/masto_embed/render_bootstrap.cljs +++ b/src/main/dda/masto_embed/account_mode.cljs @@ -13,11 +13,16 @@ ; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ; See the License for the specific language governing permissions and ; limitations under the License. -(ns dda.masto-embed.render-bootstrap +(ns dda.masto-embed.account-mode (:require + [cljs.core.async :refer [go close! put! take! timeout chan !]] + [cljs.core.async.interop :refer-macros [html [card] (when (some? card) @@ -30,7 +35,7 @@ (defn masto->html [statuses] [:ul {:class "list-group"} - (map (fn [status] + (map (fn [status] (let [{:keys [created_at card]} status date (t/parse created_at)] [:li {:class "list-group-item, card"} @@ -41,5 +46,30 @@ (t/unparse (t/formatters :hour-minute-second) date)]] [:p {:class "card-text"} (:content status) - (mastocard->html card)]]])) + (mastocard->html card)]]])) statuses)]) + +(defn find-account-id [host-url account-name] + (let [out (chan)] + (go + (>! out + (->> + (edn + (filter #(= account-name (:acct %))) + (infra/debug) + (map :id) + first))) + out)) + +(defn account-mode [host-url account-name] + (go + (let [account-id ( + (edn)] + (->> statuus + (take 4) + (masto->html) + (render-html) + (b/render-to-document))))) diff --git a/src/main/dda/masto_embed/app.cljs b/src/main/dda/masto_embed/app.cljs index b832ef3..8ef969a 100644 --- a/src/main/dda/masto_embed/app.cljs +++ b/src/main/dda/masto_embed/app.cljs @@ -15,115 +15,15 @@ ; limitations under the License. (ns dda.masto-embed.app (:require - [cljs.core.async :refer [go close! put! take! timeout chan !]] - [cljs.core.async.interop :refer-macros [ js/document - (.getElementById masto-embed) - (.getAttribute name))) - -(defn host-url-from-document [] - (element-from-document-by-name "host_url")) - -(defn account-name-from-document [] - (element-from-document-by-name "account_name")) - -(defn account-id-from-document [] - (element-from-document-by-name "account_id")) - -(defn replies-to-from-document [] - (element-from-document-by-name "replies_to")) - -(defn filter-favorited-from-document [] - (element-from-document-by-name "filter_favorited")) - -(defn render-to-document - [input] - (-> js/document - (.getElementById masto-embed) - (.-innerHTML) - (set! input))) - -(defn find-account-id [host-url account-name] - (let [out (chan)] - (go - (>! out - (->> - (edn - (filter #(= account-name (:acct %))) - (infra/debug) - (map :id) - first))) - out)) - -(defn favorited-replies? [host-url account-name reply-id] - (let [out (chan)] - (go - (>! out - (->> - (edn - (filter #(= account-name (:acct %))) - (empty?) - (not)))) - out)) - -(defn favorited? [host-url account-name replies] - (let [out (chan)] - (go - (>! out - (loop [loc-replies replies - result []] - (if (empty? loc-replies) - result - (recur (rest loc-replies) - (conj result ( - (edn)] - (->> statuus - (take 4) - (rb/masto->html) - (render-html) - (render-to-document))))) - -(defn replies-mode [host-url account-name post-id filter-favorited] - (go - (let [replies (-> - (edn) - favorited (> combined - (filter #(infra/debug (or (not filter-favorited) (:favorited %)))) - (map :status) - (infra/debug) - (rb/masto->html) - (render-html) - (render-to-document))))) + [dda.masto-embed.browser :as b] + [dda.masto-embed.reply-mode :as rm] + [dda.masto-embed.account-mode :as am])) (defn init [] - (let [host-url (host-url-from-document) - account-name (account-name-from-document) - replies-to (replies-to-from-document) - filter-favorited (filter-favorited-from-document)] + (let [host-url (b/host-url-from-document) + account-name (b/account-name-from-document) + replies-to (b/replies-to-from-document) + filter-favorited (b/filter-favorited-from-document)] (if (nil? replies-to) - (account-mode host-url account-name) - (replies-mode host-url account-name replies-to filter-favorited)) - )) \ No newline at end of file + (am/account-mode host-url account-name) + (rm/replies-mode host-url account-name replies-to filter-favorited)))) \ No newline at end of file diff --git a/src/main/dda/masto_embed/browser.cljs b/src/main/dda/masto_embed/browser.cljs new file mode 100644 index 0000000..2691c1c --- /dev/null +++ b/src/main/dda/masto_embed/browser.cljs @@ -0,0 +1,42 @@ +; Licensed to the Apache Software Foundation (ASF) under one +; or more contributor license agreements. See the NOTICE file +; distributed with this work for additional information +; regarding copyright ownership. The ASF licenses this file +; to you under the Apache License, Version 2.0 (the +; "License"); you may not use this file except in compliance +; with the License. You may obtain a copy of the License at +; +; http://www.apache.org/licenses/LICENSE-2.0 +; +; Unless required by applicable law or agreed to in writing, software +; distributed under the License is distributed on an "AS IS" BASIS, +; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; See the License for the specific language governing permissions and +; limitations under the License. +(ns dda.masto-embed.browser) + +(def masto-embed "masto-embed") + +(defn element-from-document-by-name [name] + (-> js/document + (.getElementById masto-embed) + (.getAttribute name))) + +(defn host-url-from-document [] + (element-from-document-by-name "host_url")) + +(defn account-name-from-document [] + (element-from-document-by-name "account_name")) + +(defn replies-to-from-document [] + (element-from-document-by-name "replies_to")) + +(defn filter-favorited-from-document [] + (element-from-document-by-name "filter_favorited")) + +(defn render-to-document + [input] + (-> js/document + (.getElementById masto-embed) + (.-innerHTML) + (set! input))) diff --git a/src/main/dda/masto_embed/reply_mode.cljs b/src/main/dda/masto_embed/reply_mode.cljs new file mode 100644 index 0000000..ba49789 --- /dev/null +++ b/src/main/dda/masto_embed/reply_mode.cljs @@ -0,0 +1,90 @@ +; Licensed to the Apache Software Foundation (ASF) under one +; or more contributor license agreements. See the NOTICE file +; distributed with this work for additional information +; regarding copyright ownership. The ASF licenses this file +; to you under the Apache License, Version 2.0 (the +; "License"); you may not use this file except in compliance +; with the License. You may obtain a copy of the License at +; +; http://www.apache.org/licenses/LICENSE-2.0 +; +; Unless required by applicable law or agreed to in writing, software +; distributed under the License is distributed on an "AS IS" BASIS, +; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; See the License for the specific language governing permissions and +; limitations under the License. +(ns dda.masto-embed.reply-mode + (:require + [cljs.core.async :refer [go close! put! take! timeout chan !]] + [cljs.core.async.interop :refer-macros [html [card] + (when (some? card) + (let [{:keys [title description image url]} card] + [:div {:class "card" :url url} + (when (some? image) + [:img {:class "card-img-top" :src image}]) + [:h3 {:class "card-title"} title] + [:p {:class "card-body"} description]]))) + +(defn masto->html [statuses] + [:ul {:class "list-group"} + (map (fn [status] + (let [{:keys [created_at card]} status + date (t/parse created_at)] + [:li {:class "list-group-item, card"} + [:div {:class "card-body"} + [:h2 {:class "card-title"} + [:a {:href (get-in status [:account :url])} + (t/unparse (t/formatters :date) date) " " + (t/unparse (t/formatters :hour-minute-second) date)]] + [:p {:class "card-text"} + (:content status) + (mastocard->html card)]]])) + statuses)]) + +(defn favorited-replies? [host-url account-name reply-id] + (let [out (chan)] + (go + (>! out + (->> + (edn + (filter #(= account-name (:acct %))) + (empty?) + (not)))) + out)) + +(defn favorited? [host-url account-name replies] + (let [out (chan)] + (go + (>! out + (loop [loc-replies replies + result []] + (if (empty? loc-replies) + result + (recur (rest loc-replies) + (conj result ( + (edn) + favorited (> combined + (filter #(infra/debug (or (not filter-favorited) (:favorited %)))) + (map :status) + (infra/debug) + (masto->html) + (render-html) + (b/render-to-document))))) diff --git a/src/test/dda/masto_embed/render_bootstrap_test.cljs b/src/test/dda/masto_embed/account_mode_test.cljs similarity index 98% rename from src/test/dda/masto_embed/render_bootstrap_test.cljs rename to src/test/dda/masto_embed/account_mode_test.cljs index 675765a..a91f192 100644 --- a/src/test/dda/masto_embed/render_bootstrap_test.cljs +++ b/src/test/dda/masto_embed/account_mode_test.cljs @@ -14,10 +14,10 @@ ; See the License for the specific language governing permissions and ; limitations under the License. -(ns dda.masto-embed.render-bootstrap-test +(ns dda.masto-embed.account-mode-test (:require [cljs.test :refer (deftest is)] - [dda.masto-embed.render-bootstrap :as sut])) + [dda.masto-embed.account-mode :as sut])) (def statuses [{:mentions [] :emojis []