refactor rendering out
This commit is contained in:
parent
ed8f26ec50
commit
431df76787
5 changed files with 65 additions and 83 deletions
|
@ -27,32 +27,6 @@
|
||||||
(defn mastojs->edn [response]
|
(defn mastojs->edn [response]
|
||||||
(-> response .-data infra/js->edn))
|
(-> response .-data infra/js->edn))
|
||||||
|
|
||||||
(defn mastocard->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-spec mastodon-client any?
|
(defn-spec mastodon-client any?
|
||||||
[host-url ::host-url]
|
[host-url ::host-url]
|
||||||
(let [mastodon-config
|
(let [mastodon-config
|
||||||
|
|
|
@ -15,11 +15,13 @@
|
||||||
; limitations under the License.
|
; limitations under the License.
|
||||||
(ns dda.masto-embed.app
|
(ns dda.masto-embed.app
|
||||||
(:require
|
(:require
|
||||||
[dda.masto-embed.api :as api]
|
|
||||||
[dda.masto-embed.infra :as infra]
|
|
||||||
[cljs.core.async :refer [go close! put! take! timeout chan <! >!]]
|
[cljs.core.async :refer [go close! put! take! timeout chan <! >!]]
|
||||||
[cljs.core.async.interop :refer-macros [<p!]]
|
[cljs.core.async.interop :refer-macros [<p!]]
|
||||||
[hiccups.runtime :refer [render-html]]))
|
[hiccups.runtime :refer [render-html]]
|
||||||
|
[dda.masto-embed.api :as api]
|
||||||
|
[dda.masto-embed.infra :as infra]
|
||||||
|
[dda.masto-embed.render-bootstrap :as rb]
|
||||||
|
))
|
||||||
|
|
||||||
(def masto-embed "masto-embed")
|
(def masto-embed "masto-embed")
|
||||||
|
|
||||||
|
@ -71,7 +73,7 @@
|
||||||
]
|
]
|
||||||
(->> statuus
|
(->> statuus
|
||||||
(take 4)
|
(take 4)
|
||||||
(api/masto->html)
|
(rb/masto->html)
|
||||||
(render-html)
|
(render-html)
|
||||||
(render-to-document))
|
(render-to-document))
|
||||||
)))
|
)))
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
; 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.js-api
|
|
||||||
(:require
|
|
||||||
["mastodon-api" :as Mastodon]
|
|
||||||
[clojure.pprint :as pprint :refer [pprint]]
|
|
||||||
[cljs.core.async :refer [go]]
|
|
||||||
[cljs.core.async.interop :refer-macros [<p!]]))
|
|
||||||
|
|
||||||
(defn get-content-seq [response]
|
|
||||||
(map
|
|
||||||
#(aget % "content")
|
|
||||||
(array-seq
|
|
||||||
(aget response "data"))))
|
|
||||||
|
|
||||||
(defn luccas-fn []
|
|
||||||
(let [config (js-obj "api_url" "https://social.meissa-gmbh.de/api/v1/" "access_token" "...")
|
|
||||||
masto (new Mastodon config)
|
|
||||||
rest-endpoint "accounts/:id/statuses"
|
|
||||||
id-config (js-obj "id" "2")
|
|
||||||
result (go
|
|
||||||
(let [response (<p! (.get masto rest-endpoint id-config))]
|
|
||||||
(get-content-seq response)))]
|
|
||||||
(pprint result)
|
|
||||||
result))
|
|
45
src/main/dda/masto_embed/render_bootstrap.cljs
Normal file
45
src/main/dda/masto_embed/render_bootstrap.cljs
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
; 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.render-bootstrap
|
||||||
|
(:require
|
||||||
|
[cljs-time.format :as t]
|
||||||
|
[clojure.spec.alpha :as s]
|
||||||
|
[orchestra.core :refer-macros [defn-spec]]))
|
||||||
|
|
||||||
|
(defn mastocard->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)])
|
|
@ -14,10 +14,10 @@
|
||||||
; See the License for the specific language governing permissions and
|
; See the License for the specific language governing permissions and
|
||||||
; limitations under the License.
|
; limitations under the License.
|
||||||
|
|
||||||
(ns dda.masto-embed.api-test
|
(ns dda.masto-embed.render-bootstrap-test
|
||||||
(:require
|
(:require
|
||||||
[cljs.test :refer (deftest is)]
|
[cljs.test :refer (deftest is)]
|
||||||
[dda.masto-embed.api :as sut]))
|
[dda.masto-embed.render-bootstrap :as sut]))
|
||||||
|
|
||||||
(def statuses [{:mentions []
|
(def statuses [{:mentions []
|
||||||
:emojis []
|
:emojis []
|
||||||
|
@ -154,12 +154,12 @@
|
||||||
:spoiler_text ""}])
|
:spoiler_text ""}])
|
||||||
|
|
||||||
(deftest test-mastodon->html
|
(deftest test-mastodon->html
|
||||||
(is (= [:ul
|
(is (= [:ul {:class "list-group"}
|
||||||
'([:li
|
'([:li {:class "list-group-item, card"}
|
||||||
[:h2 [:a {:href "https://social.meissa-gmbh.de/@team"}
|
[:div {:class "card-body"}
|
||||||
"2020-05-17" "10:12:10"]]
|
[:h2 {:class "card-title"} [:a {:href "https://social.meissa-gmbh.de/@team"} "2020-05-17" " " "10:12:10"]]
|
||||||
"<p>We've a new asciicast ... </p>"
|
[:p {:class "card-text"} "<p>We've a new asciicast ... </p>"
|
||||||
nil])]
|
nil]]])]
|
||||||
(sut/masto->html statuses))))
|
(sut/masto->html statuses))))
|
||||||
|
|
||||||
|
|
||||||
|
@ -175,10 +175,9 @@
|
||||||
:author_name "", :image nil, :provider_url "", :height 0, :html ""})
|
:author_name "", :image nil, :provider_url "", :height 0, :html ""})
|
||||||
|
|
||||||
(deftest link-card-should-show-desc-and-link
|
(deftest link-card-should-show-desc-and-link
|
||||||
(is (= [:div {:class "card", :url "https://www.ssllabs.com/ssltest/"}
|
(is (= [:div {:class "card", :url "https://www.ssllabs.com/ssltest/"} nil
|
||||||
nil
|
[:h3 {:class "card-title"} "SSL Server Test (Powered by Qualys SSL Labs)"]
|
||||||
[:h1 "SSL Server Test (Powered by Qualys SSL Labs)"]
|
[:p {:class "card-body"} "A comprehensive free SSL test for your public web servers."]]
|
||||||
[:p "A comprehensive free SSL test for your public web servers."]]
|
|
||||||
(sut/mastocard->html link-card))))
|
(sut/mastocard->html link-card))))
|
||||||
|
|
||||||
(def link-card-with-image
|
(def link-card-with-image
|
||||||
|
@ -190,7 +189,7 @@
|
||||||
|
|
||||||
(deftest link-card-should-show-image-and-desc-and-link
|
(deftest link-card-should-show-image-and-desc-and-link
|
||||||
(is (= [:div {:class "card", :url "https://github.com/DomainDrivenArchitecture/cryogen-core"}
|
(is (= [:div {:class "card", :url "https://github.com/DomainDrivenArchitecture/cryogen-core"}
|
||||||
[:img {:src "https://cf.mastohost.com/v1/AUTH_91eb37814936490c95da7b85993cc2ff/socialmeissagmbhde/cache/preview_cards/images/000/017/635/original/5634071238f1f91f.png"}]
|
[:img {:class "card-img-top", :src "https://cf.mastohost.com/v1/AUTH_91eb37814936490c95da7b85993cc2ff/socialmeissagmbhde/cache/preview_cards/images/000/017/635/original/5634071238f1f91f.png"}]
|
||||||
[:h1 "DomainDrivenArchitecture/cryogen-core"]
|
[:h3 {:class "card-title"} "DomainDrivenArchitecture/cryogen-core"]
|
||||||
[:p "Cryogen's core. Contribute to DomainDrivenArchitecture/cryogen-core development by creating an account on GitHub."]]
|
[:p {:class "card-body"} "Cryogen's core. Contribute to DomainDrivenArchitecture/cryogen-core development by creating an account on GitHub."]]
|
||||||
(sut/mastocard->html link-card-with-image))))
|
(sut/mastocard->html link-card-with-image))))
|
Loading…
Reference in a new issue