From aff1e90ceb5d6b82e3f8c6e6dbe5a7ff34ce1a05 Mon Sep 17 00:00:00 2001
From: Simon Brooke <simon@journeyman.cc>
Date: Mon, 18 Feb 2019 14:38:53 +0000
Subject: [PATCH] Small cosmetic improvements

---
 resources/html/home.html         | 64 +++++++++++++++++---------------
 src/cljs/ireadit/events.cljs     | 21 +++++++----
 src/cljs/ireadit/views/form.cljs | 15 ++++++--
 3 files changed, 59 insertions(+), 41 deletions(-)

diff --git a/resources/html/home.html b/resources/html/home.html
index 886c337..1cccca7 100644
--- a/resources/html/home.html
+++ b/resources/html/home.html
@@ -1,36 +1,42 @@
 <!DOCTYPE html>
 <html>
-  <head>
-      <meta charset="UTF-8"/>
-      <meta name="viewport" content="width=device-width, initial-scale=1">
-      <title>Welcome to ireadit</title>
-  </head>
-  <body>
+    <head>
+        <meta charset="UTF-8"/>
+        <meta name="viewport" content="width=device-width, initial-scale=1">
+        <title>Welcome to ireadit</title>
+        <style>
+            .row { padding: 0.25em; }
+            div.hidden { display: none; }
+        </style>
+    </head>
+    <body>
 
-    <div id="app">
-        <h1>
-            I Read It <em>is loading</em>
-        </h1>
-      <div class="splash-screen">
-        <div class="sk-fading-circle">
-          <div class="sk-circle1 sk-circle"></div>
-          <div class="sk-circle2 sk-circle"></div>
-          <div class="sk-circle3 sk-circle"></div>
-          <div class="sk-circle4 sk-circle"></div>
-          <div class="sk-circle5 sk-circle"></div>
-          <div class="sk-circle6 sk-circle"></div>
-          <div class="sk-circle7 sk-circle"></div>
-          <div class="sk-circle8 sk-circle"></div>
-          <div class="sk-circle9 sk-circle"></div>
-          <div class="sk-circle10 sk-circle"></div>
-          <div class="sk-circle11 sk-circle"></div>
-          <div class="sk-circle12 sk-circle"></div>
+        <div id="app">
+            <div id="main-container" class="container-fluid">
+                <h1>
+                    I Read It <em>is loading</em>
+                </h1>
+                <div class="splash-screen row">
+                    <div class="sk-fading-circle">
+                        <div class="sk-circle1 sk-circle"></div>
+                        <div class="sk-circle2 sk-circle"></div>
+                        <div class="sk-circle3 sk-circle"></div>
+                        <div class="sk-circle4 sk-circle"></div>
+                        <div class="sk-circle5 sk-circle"></div>
+                        <div class="sk-circle6 sk-circle"></div>
+                        <div class="sk-circle7 sk-circle"></div>
+                        <div class="sk-circle8 sk-circle"></div>
+                        <div class="sk-circle9 sk-circle"></div>
+                        <div class="sk-circle10 sk-circle"></div>
+                        <div class="sk-circle11 sk-circle"></div>
+                        <div class="sk-circle12 sk-circle"></div>
+                    </div>
+                </div>
+                <p class="footer">
+                    You must enable JavaScript to use the I Read It app.
+                </p>
+            </div>
         </div>
-      </div>
-      <p class="footer">
-        You must enable JavaScript to use the I Read It app.
-      </p>
-    </div>
 
     <!-- scripts and styles -->
     {% style "/assets/bootstrap/css/bootstrap.min.css" %}
diff --git a/src/cljs/ireadit/events.cljs b/src/cljs/ireadit/events.cljs
index 211fdfc..0a28266 100644
--- a/src/cljs/ireadit/events.cljs
+++ b/src/cljs/ireadit/events.cljs
@@ -20,12 +20,6 @@
   (fn [db [_ docs]]
     (assoc db :docs docs)))
 
-(rf/reg-event-db
-  :set-transcription
-  (fn [db [_ response]]
-    (js/console.log (str "Failed to fetch transcription data" response))
-    (assoc db :transcription response)))
-
 (rf/reg-event-fx
   :fetch-docs
   (fn [_ _]
@@ -47,7 +41,13 @@
                    :response-format (ajax/json-response-format)
                    :on-success      [:set-transcription]
                    :on-failure      [:bad-transcription]}
-      :db (dissoc (dissoc db :transcription) :common/error)})))
+      :db (assoc (dissoc (dissoc db :transcription) :common/error) :pending true)})))
+
+(rf/reg-event-db
+  :set-transcription
+  (fn [db [_ response]]
+    (js/console.log (str "Failed to fetch transcription data" response))
+    (dissoc (assoc db :transcription response) :pending)))
 
 (rf/reg-event-fx
   :bad-transcription
@@ -55,7 +55,7 @@
     [{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))
-    (assoc db :common/error response)))
+    (dissoc (assoc db :common/error response) :pending)))
 
 (rf/reg-event-db
   :common/set-error
@@ -89,3 +89,8 @@
   (fn [db _]
     (:transcription db)))
 
+(rf/reg-sub
+  :pending
+  (fn [db _]
+    (:pending db)))
+
diff --git a/src/cljs/ireadit/views/form.cljs b/src/cljs/ireadit/views/form.cljs
index d1476f6..c68e0a8 100644
--- a/src/cljs/ireadit/views/form.cljs
+++ b/src/cljs/ireadit/views/form.cljs
@@ -11,6 +11,12 @@
             [secretary.core :as secretary])
   (:import goog.History))
 
+(defn maybe-disable [m]
+  (if
+    @(rf/subscribe [:pending])
+    (assoc m :disabled "disabled")
+    m))
+
 
 (defn form-page []
   [:div.container-fluid {:id "main-container"}
@@ -21,17 +27,18 @@
       [b/Label {:for "image-url" :title "URL of the image you wish to transcribe"}"Image URL"]]
      [:div.col-sm-9
       [b/Input {:id "image-url" :type "text" :size "80"
-                :on-change #(rf/dispatch [:set-url (.-value (.-target %))])}]]]
+                :on-change #(rf/dispatch [:set-url (.-value (.-target %))])
+                }]]]
     [b/Row
      [:div.col-sm-3
       [b/Label {:for "send"} "To transcribe the image"]]
      [:div.col-sm-9
-      [b/Button {:id "send" :on-click #(rf/dispatch [:fetch-transcription])} "Transcribe!"]]]
+      [b/Button (maybe-disable {:id "send" :on-click #(rf/dispatch [:fetch-transcription])}) "Transcribe!"]]]
     [b/Row]
     [b/Row
-     [:div.col-sm-12
+     [:div.col-sm-12 {:class (if @(rf/subscribe [:transcription]) "visible" "hidden")}
       [b/Alert {:color "success"} @(rf/subscribe [:transcription])]]]
     [b/Row
-     [:div.col-sm-12
+     [:div.col-sm-12 {:class (if @(rf/subscribe [:common/error]) "visible" "hidden")}
       [b/Alert {:color "warning"} @(rf/subscribe [:common/error])]]]]])