pinkblackrose/src/cljs/pinkblackrose/core.cljs

80 lines
2.1 KiB
Clojure

(ns pinkblackrose.core
(:require
[day8.re-frame.http-fx]
[reagent.core :as r]
[re-frame.core :as rf]
[goog.events :as events]
[goog.history.EventType :as HistoryEventType]
[markdown.core :refer [md->html]]
[pinkblackrose.ajax :as ajax]
[pinkblackrose.events]
[reitit.core :as reitit]
[reitit.frontend.easy :as rfe]
[clojure.string :as string])
(:import goog.History))
(defn nav-link [uri title page]
[:a.navbar-item
{:href uri
:class (when (= page @(rf/subscribe [:page])) :is-active)}
title])
(defn navbar []
(r/with-let [expanded? (r/atom false)]
[:nav.navbar.is-info>div.container
[:div.navbar-brand
[:a.navbar-item {:href "/" :style {:font-weight :bold}} "pinkblackrose"]
[:span.navbar-burger.burger
{:data-target :nav-menu
:on-click #(swap! expanded? not)
:class (when @expanded? :is-active)}
[:span][:span][:span]]]
[:div#nav-menu.navbar-menu
{:class (when @expanded? :is-active)}
[:div.navbar-start
[nav-link "#/" "Home" :home]
[nav-link "#/about" "About" :about]]]]))
(defn about-page []
[:section.section>div.container>div.content
[:img {:src "/img/warning_clojure.png"}]])
(defn home-page []
[:section.section>div.container>div.content
(when-let [docs @(rf/subscribe [:docs])]
[:div {:dangerouslySetInnerHTML {:__html (md->html docs)}}])])
(defn page []
(if-let [page @(rf/subscribe [:page])]
[:div
[navbar]
[page]]))
(defn navigate! [match _]
(rf/dispatch [:navigate match]))
(def router
(reitit/router
[["/" {:name :home
:view #'home-page
:controllers [{:start (fn [_] (rf/dispatch [:page/init-home]))}]}]
["/about" {:name :about
:view #'about-page}]]))
(defn start-router! []
(rfe/start!
router
navigate!
{}))
;; -------------------------
;; Initialize app
(defn ^:dev/after-load mount-components []
(rf/clear-subscription-cache!)
(r/render [#'page] (.getElementById js/document "app")))
(defn init! []
(start-router!)
(ajax/load-interceptors!)
(mount-components))