diff --git a/.gitignore b/.gitignore index 00f42c8..1507fee 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,7 @@ profiles.clj /.env .nrepl-port /log + +\.rebel_readline_history + +[0-9a-f]*-init\.clj diff --git a/project.clj b/project.clj index 4d35bf4..e246c14 100644 --- a/project.clj +++ b/project.clj @@ -4,6 +4,8 @@ :url "http://example.com/FIXME" :dependencies [[baking-soda "0.2.0" :exclusions [cljsjs/react-bootstrap]] + [binaryage/devtools "0.9.10"] + [com.cemerick/url "0.1.1"] [cheshire "5.8.1"] [clj-commons/secretary "1.2.4"] [clj-oauth "1.5.5"] @@ -41,7 +43,7 @@ [selmer "1.12.6"]] :min-lein-version "2.0.0" - + :source-paths ["src/clj" "src/cljs" "src/cljc"] :test-paths ["test/clj"] :resource-paths ["resources" "target/cljsbuild"] @@ -58,7 +60,7 @@ :nrepl-port 7002 :css-dirs ["resources/public/css"] :nrepl-middleware [cider.piggieback/wrap-cljs-repl]} - + :profiles {:uberjar {:omit-source true @@ -77,8 +79,8 @@ :closure-warnings {:externs-validation :off :non-standard-jsdoc :off} :externs ["react/externs/react.js"]}}}} - - + + :aot :all :uberjar-name "ireadit.jar" :source-paths ["env/prod/clj"] @@ -116,9 +118,9 @@ :pretty-print true :closure-defines {"re_frame.trace.trace_enabled_QMARK_" true} :preloads [re-frisk.preload]}}}} - - - + + + :doo {:build "test"} :source-paths ["env/dev/clj"] :resource-paths ["env/dev/resources"] @@ -136,7 +138,7 @@ :main "ireadit.doo-runner" :optimizations :whitespace :pretty-print true}}}} - + } :profiles/dev {} :profiles/test {}}) diff --git a/resources/html/testform.html b/resources/html/testform.html index c5b09da..bd2ffd2 100644 --- a/resources/html/testform.html +++ b/resources/html/testform.html @@ -7,14 +7,14 @@
- diff --git a/src/cljs/ireadit/core.cljs b/src/cljs/ireadit/core.cljs index 9161c4a..e2e6513 100644 --- a/src/cljs/ireadit/core.cljs +++ b/src/cljs/ireadit/core.cljs @@ -8,6 +8,7 @@ [markdown.core :refer [md->html]] [ireadit.ajax :as ajax] [ireadit.events] + [ireadit.views.form :as form] [secretary.core :as secretary]) (:import goog.History)) @@ -34,7 +35,8 @@ [b/Collapse {:is-open @expanded? :navbar true} [b/Nav {:class-name "mr-auto" :navbar true} [nav-link "#/" "Home" :home] - [nav-link "#/about" "About" :about]]]])) + [nav-link "#/about" "About" :about] + [nav-link "#/transcribe" "Transcribe" :transcribe]]]])) (defn about-page [] [:div.container @@ -51,7 +53,8 @@ (def pages {:home #'home-page - :about #'about-page}) + :about #'about-page + :transcribe #'form/form-page}) (defn page [] [:div @@ -69,6 +72,9 @@ (secretary/defroute "/about" [] (rf/dispatch [:navigate :about])) +(secretary/defroute "/transcribe" [] + (rf/dispatch [:navigate :transcribe])) + ;; ------------------------- ;; History ;; must be called after routes have been defined diff --git a/src/cljs/ireadit/events.cljs b/src/cljs/ireadit/events.cljs index 18b8ef9..95a123e 100644 --- a/src/cljs/ireadit/events.cljs +++ b/src/cljs/ireadit/events.cljs @@ -1,9 +1,15 @@ (ns ireadit.events (:require [re-frame.core :as rf] - [ajax.core :as ajax])) + [ajax.core :as ajax] + [cemerick.url :refer (url-encode)])) ;;dispatchers +(rf/reg-event-db + :set-url + (fn [db [_ url]] + (assoc db :url url))) + (rf/reg-event-db :navigate (fn [db [_ page]] @@ -14,6 +20,11 @@ (fn [db [_ docs]] (assoc db :docs docs))) +(rf/reg-event-db + :set-transcription + (fn [db [_ transcription]] + (assoc db :transcription transcription))) + (rf/reg-event-fx :fetch-docs (fn [_ _] @@ -22,6 +33,27 @@ :response-format (ajax/raw-response-format) :on-success [:set-docs]}})) +(rf/reg-event-fx + :fetch-transcription + (fn [{db :db} _] + (let [uri (str "http://loriner.journeyman.cc:8888/v1/tesseract/" (url-encode (:url db)))] + (js/console.log + (str + "Fetching transcription data: " uri)) + {:http-xhrio {:method :post + :uri uri + :format (ajax/json-request-format) + :response-format (ajax/json-response-format {:keywords? true}) + :on-success [:set-transcription] + :on-failure [:bad-transcription]}}))) + +(rf/reg-event-fx + :bad-transcription + (fn + [{db :db} [_ response]] + ;; TODO: signal something has failed? It doesn't matter very much, unless it keeps failing. + (js/console.log (str "Failed to fetch transcription data" response)))) + (rf/reg-event-db :common/set-error (fn [db [_ error]] @@ -43,3 +75,14 @@ :common/error (fn [db _] (:common/error db))) + +(rf/reg-sub + :url + (fn [db _] + (:url db))) + +(rf/reg-sub + :transcription + (fn [db _] + (:transcription db))) + diff --git a/src/cljs/ireadit/views/form.cljs b/src/cljs/ireadit/views/form.cljs new file mode 100644 index 0000000..a622a3c --- /dev/null +++ b/src/cljs/ireadit/views/form.cljs @@ -0,0 +1,29 @@ +(ns ireadit.views.form + (:require [baking-soda.core :as b] + [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]] + [ireadit.ajax :as ajax] + [ireadit.events] + [secretary.core :as secretary]) + (:import goog.History)) + + +(defn form-page [] + [:div + [:h1 "Transcribe the text of an image"] + [:div.container {:id "main-container"} + [:div + [:p.widget + [b/Label {:for "image-url" :title "URL of the image you wish to transcribe"}"Image URL"] + [b/Input {:id "image-url" :type "text" :size "80" + :on-change #(rf/dispatch [:set-url (.-value (.-target %))])}]] + [:p.widget + [b/Label {:for "send"} "To transcribe the image"] + [b/Button {:id "send" :on-click #(rf/dispatch [:fetch-transcription])} "Transcribe!"]]] + [:div.transcription @(rf/subscribe [:transcription])] + ]]) +