diff --git a/src/clj/daisyproducer2/words.clj b/src/clj/daisyproducer2/words.clj index 36f884d..37026e0 100644 --- a/src/clj/daisyproducer2/words.clj +++ b/src/clj/daisyproducer2/words.clj @@ -69,11 +69,17 @@ untranslated (if (is-homograph? word) (str/replace homograph-disambiguation "|" braille-dummy-text) untranslated)] - (cond-> word - (and (contains? word :uncontracted) (nil? (:uncontracted word))) - (assoc :uncontracted (louis/translate untranslated (louis/translator (louis/get-tables 1 params)))) - (and (contains? word :contracted) (nil? (:contracted word))) - (assoc :contracted (louis/translate untranslated (louis/translator (louis/get-tables 2 params))))))) + (try + (cond-> word + (and (contains? word :uncontracted) (nil? (:uncontracted word))) + (assoc :uncontracted (louis/translate untranslated (louis/translator (louis/get-tables 1 params)))) + (and (contains? word :contracted) (nil? (:contracted word))) + (assoc :contracted (louis/translate untranslated (louis/translator (louis/get-tables 2 params))))) + ;; if there was a problem with translating the word, simply return the + ;; word without the braille added. That will serve as an indication that + ;; the braille translation failed + (catch clojure.lang.ExceptionInfo e + word)))) (defn grades [grade] (case (int grade) ; convert grade into a list of grades diff --git a/src/cljs/daisyproducer2/words/input_fields.cljs b/src/cljs/daisyproducer2/words/input_fields.cljs index 924b4d3..061f27c 100644 --- a/src/cljs/daisyproducer2/words/input_fields.cljs +++ b/src/cljs/daisyproducer2/words/input_fields.cljs @@ -59,3 +59,7 @@ (defn disabled-field [value] [:div.field [:input.input {:type "text" :value value :disabled "disabled"}]]) + +(defn invalid-field [] + [:div.field + [:input.input.is-danger {:type "text" :disabled "disabled"}]]) diff --git a/src/cljs/daisyproducer2/words/unknown.cljs b/src/cljs/daisyproducer2/words/unknown.cljs index d63800c..fab84ca 100644 --- a/src/cljs/daisyproducer2/words/unknown.cljs +++ b/src/cljs/daisyproducer2/words/unknown.cljs @@ -217,23 +217,26 @@ (let [grade @(rf/subscribe [::grade/grade]) {:keys [uuid untranslated uncontracted contracted type homograph-disambiguation hyphenated invalid-hyphenated]} @(rf/subscribe [::word id])] - [:tr - [:td untranslated] - (when (#{0 1} grade) - (if uncontracted - [:td [fields/input-field :unknown uuid :uncontracted validation/braille-valid?]] - [:td])) - (when (#{0 2} grade) - (if contracted - [:td [fields/input-field :unknown uuid :contracted validation/braille-valid?]] - [:td])) - [:td (if hyphenated - [fields/input-field :unknown uuid :hyphenated #(validation/hyphenation-valid? % untranslated)] - [fields/disabled-field invalid-hyphenated])] - [:td {:width "8%"} (get words/type-mapping type (tr [:unknown]))] - [:td {:width "8%"} homograph-disambiguation] - [:td [fields/local-field :unknown uuid]] - [:td {:width "8%"} [buttons uuid]]])) + ;; if we have neither the uncontracted nor the contracted field, + ;; most likely the braille translation failed + (let [valid (or uncontracted contracted)] + [:tr + [:td untranslated] + (when (#{0 1} grade) + (if uncontracted + [:td [fields/input-field :unknown uuid :uncontracted validation/braille-valid?]] + [:td [fields/invalid-field]])) + (when (#{0 2} grade) + (if contracted + [:td [fields/input-field :unknown uuid :contracted validation/braille-valid?]] + [:td [fields/invalid-field]])) + [:td (if hyphenated + [fields/input-field :unknown uuid :hyphenated #(validation/hyphenation-valid? % untranslated)] + [fields/disabled-field invalid-hyphenated])] + [:td {:width "8%"} (get words/type-mapping type (tr [:unknown]))] + [:td {:width "8%"} homograph-disambiguation] + [:td (when valid [fields/local-field :unknown uuid])] + [:td {:width "8%"} (when valid [buttons uuid])]]))) (defn unknown-words [] (let [words @(rf/subscribe [::words-sorted])