             [om.dom :as dom]
             [cljs.core.async :refer [put! chan <!]]
             [clojure.string]
-            [cljs.reader]))
+            [cljs.reader]
+            [cljs.pprint :refer [write]])
+  (:import  [goog.string StringBuffer]))
 
 (enable-console-print!)
 

      (let [{:keys [json-chan edn-chan]} state
            editor (first (:editor app))]
        (dom/div #js {:className "container"}
          (dom/h2 nil "JSON <-> EDN")
          (markdown->om "resources/public/md/description.md" :container-opts #js {:className "row"})
          (dom/div #js {:className "row"}

            (om/build source-code {:is-editor? (= editor :json)

    (let [source-code (first (:code source))
          syntax-checker (source-key syntax-checkers)
          syntax-error (syntax-checker source-code)]
      (dom/div #js {:className "source-header"}
        (dom/span #js {:className (css-classes "source-title" (if syntax-error "text-danger"))} 
          (to-title source-key))
          (if syntax-error (dom/span #js {:className "badge"} "!"))))))

(defn source-code 
  [{:keys [source is-editor?]} owner {:keys [source-key translation-fn translation-source translation-target] :as opts}]
  (reify
    om/IWillMount
    (will-mount [_]
