|
|
|
|
(ns NoteHub.views.common
|
|
|
|
|
(:use
|
|
|
|
|
[NoteHub.settings :only [get-message]]
|
|
|
|
|
[NoteHub.views.css-generator]
|
|
|
|
|
[noir.core :only [defpartial]]
|
|
|
|
|
[noir.options :only [dev-mode?]]
|
|
|
|
|
[hiccup.util :only [escape-html]]
|
|
|
|
|
[hiccup.core]
|
|
|
|
|
[hiccup.page :only [include-js html5]]
|
|
|
|
|
[hiccup.element :only [javascript-tag]]))
|
|
|
|
|
|
|
|
|
|
(defn url
|
|
|
|
|
"Creates a local url from the given substrings"
|
|
|
|
|
[& args]
|
|
|
|
|
(apply str (interpose "/" (cons "" args))))
|
|
|
|
|
|
|
|
|
|
; Creates the main html layout
|
|
|
|
|
(defpartial generate-layout
|
|
|
|
|
[params title & content]
|
|
|
|
|
; for the sake of security: escape all symbols of the param values
|
|
|
|
|
(let [params (into {} (for [[k v] params] [k (escape-html v)]))]
|
|
|
|
|
(html5
|
|
|
|
|
[:head
|
|
|
|
|
[:title (print-str (get-message :name) "—" title)]
|
|
|
|
|
[:meta {:charset "UTF-8"}]
|
|
|
|
|
; generating a link to google's webfonts
|
|
|
|
|
[:link {:href
|
|
|
|
|
(clojure.string/replace
|
|
|
|
|
(str "http://fonts.googleapis.com/css?family="
|
|
|
|
|
(apply
|
|
|
|
|
str
|
|
|
|
|
(interpose "|"
|
|
|
|
|
; ugly thing, but it cannot be avoided since these
|
|
|
|
|
; fonts have to be loaded (independently of CSS)
|
|
|
|
|
(concat ["PT+Serif:700" "Noticia+Text:700"]
|
|
|
|
|
(vals (select-keys params
|
|
|
|
|
[:header-font :text-font])))))
|
|
|
|
|
"&subset=latin,cyrillic") " " "+")
|
|
|
|
|
:rel "stylesheet"
|
|
|
|
|
:type "text/css"}]
|
|
|
|
|
; generating the global CSS
|
|
|
|
|
[:style {:type "text/css"} (global-css params)]
|
|
|
|
|
; google analytics code should appear in prod mode only
|
|
|
|
|
(if-not (dev-mode?) (include-js "/js/google-analytics.js"))]
|
|
|
|
|
[:body content
|
|
|
|
|
; we only need JS during a new note creation, so don't render it otherwise
|
|
|
|
|
(when (params :js)
|
|
|
|
|
(html
|
|
|
|
|
(javascript-tag "var CLOSURE_NO_DEPS = true;")
|
|
|
|
|
(include-js "https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js")
|
|
|
|
|
(include-js "/js/pagedown/Markdown.Converter.js")
|
|
|
|
|
(include-js "/js/pagedown/Markdown.Sanitizer.js")
|
|
|
|
|
(include-js "/cljs/main.js")))])))
|
|
|
|
|
|
|
|
|
|
(defn layout
|
|
|
|
|
"Generates the main html layout"
|
|
|
|
|
[& args]
|
|
|
|
|
; if some parameter weren't added we provide an empty map
|
|
|
|
|
(if (map? (first args))
|
|
|
|
|
(apply generate-layout args)
|
|
|
|
|
(apply generate-layout {} args)))
|