5 changed files with 75 additions and 47 deletions
@ -1,21 +1,32 @@
@@ -1,21 +1,32 @@
|
||||
(ns NoteHub.main |
||||
(:require [clojure.browser.dom :as dom] |
||||
[goog.dom :as gdom] |
||||
[goog.style :as style] |
||||
[goog.dom.classes :as classes] |
||||
[clojure.browser.event :as event] |
||||
[goog.editor.focus :as focus])) |
||||
(:use [jayq.core :only [$ css inner val anim]]) |
||||
(:require [fetch.remotes :as remotes] |
||||
[clojure.browser.dom :as dom] |
||||
[clojure.browser.event :as event]) |
||||
(:require-macros [fetch.macros :as fm])) |
||||
|
||||
(defn $ |
||||
"The DOM-element selector." |
||||
[selector] |
||||
(dom/get-element selector)) |
||||
; frequently used selectors |
||||
(def $draft ($ :#draft)) |
||||
(def $preview ($ :#preview)) |
||||
|
||||
(if-let [draft ($ "draft")] |
||||
(focus/focusInputField draft)) |
||||
(defn scroll-to |
||||
"scrolls to the given selector" |
||||
[$id] |
||||
(anim ($ :body) {:scrollTop ((js->clj (.offset $id)) "top")} 500)) |
||||
|
||||
; Show the Preview button as soon as the user starts typing. |
||||
(event/listen ($ "draft") |
||||
:keypress |
||||
(fn [e] |
||||
(style/setStyle ($ "preview-button") "display" "block"))) |
||||
; set focus to the draft textarea (if there is one) |
||||
(.focus $draft) |
||||
|
||||
; show the preview & publish buttons as soon as the user starts typing. |
||||
(.keypress $draft |
||||
(fn [e] |
||||
(css ($ :#buttons) {:display :block}))) |
||||
|
||||
; on a preview button click, transform markdown to html, put it |
||||
; to the preview layer and scroll to it |
||||
(.click ($ :#preview-button) |
||||
(fn [e] |
||||
(do |
||||
(fm/remote (md-to-html (val $draft)) [result] |
||||
(inner $preview result) |
||||
(scroll-to $preview))))) |
||||
|
||||
@ -1,31 +1,34 @@
@@ -1,31 +1,34 @@
|
||||
(ns NoteHub.views.pages |
||||
(:require [NoteHub.views.common :as common]) |
||||
(:use |
||||
[clojure.string :rename {replace sreplace} :only [trim split replace]] |
||||
[noir.core :only [defpage]] |
||||
[hiccup.form]) |
||||
[noir.response :only [content-type]] |
||||
[clojure.string :rename {replace sreplace} :only [trim split replace]] |
||||
[noir.core :only [defpage]] |
||||
[hiccup.form] |
||||
[noir.fetch.remotes]) |
||||
(:import [org.pegdown PegDownProcessor])) |
||||
|
||||
(defpage "/" {} |
||||
(common/layout "Free Markdown Hosting" |
||||
[:div#hero |
||||
[:h1 "NoteHub"] |
||||
[:h2 "Free hosting for markdown pages."] |
||||
[:br] |
||||
[:br] |
||||
[:a.button {:href "/new"} "New Page"]])) |
||||
[:div#hero |
||||
[:h1 "NoteHub"] |
||||
[:h2 "Free hosting for markdown pages."] |
||||
[:br] |
||||
[:br] |
||||
[:a.landing-button {:href "/new"} "New Page"]])) |
||||
|
||||
(defpage "/new" {} |
||||
(common/layout "New Markdown Note" |
||||
[:div.central-body |
||||
(form-to [:post "/preview-note"] |
||||
(text-area {:class "max-width"} :draft) |
||||
(submit-button {:id "preview-button"} "Preview"))])) |
||||
[:div.central-body |
||||
(form-to [:get "/preview-note"] |
||||
(text-area {:class "max-width"} :draft) |
||||
[:div#buttons.hidden |
||||
(submit-button {:style "float: left" :class "button"} "Publish") |
||||
[:button#preview-button.button {:type :button :style "float: right"} "Preview"]])] |
||||
[:div#preview-start] |
||||
[:article#preview.central-body])) |
||||
|
||||
; Actions. |
||||
|
||||
(defpage [:post "/preview-note"] {:keys [draft]} |
||||
(let [get-title (comp trim #(sreplace % "#" "") first #(split % #"\n"))] |
||||
(common/layout (get-title draft) |
||||
[:article.central-body |
||||
(.markdownToHtml (PegDownProcessor.) draft)]))) |
||||
(defremote md-to-html [draft] |
||||
(.markdownToHtml (PegDownProcessor.) draft)) |
||||
|
||||
Loading…
Reference in new issue