Improve serialisation + loading of bookmarlets

- Drop bookmark link on textarea to edit
This commit is contained in:
Jeroen van Dijk 2021-05-27 13:03:44 +03:00
parent 470238bdbc
commit 085dcd326b

View file

@ -13,12 +13,21 @@
(str ";s.onerror=" onerror))
";document.body.appendChild(s);"))
(defn pr-code [code-str]
(let [s (pr-str (str "#_CODE_" code-str "#_CODE_"))]
(subs s 1 (dec (count s)))))
(defn bookmarklet-href [code]
(defn read-code [code]
(read-string (str "\"" code "\"")))
(defn extract-code [code-str]
(second (re-find #"#_CODE_(.+)#_CODE_" code-str)))
(defn bookmarklet-href [code-str]
(str "javascript:(function(){"
"var runCode = function() {
try {
scittle.core.eval_string('" code "')
scittle.core.eval_string(\"" (pr-code code-str) "\")
} catch (error) {
console.log('Error in code', error);
alert('Error running code, see console')
@ -33,6 +42,7 @@
runCode() }"
"})();"))
(defn workspace []
(let [value (str "; This is the code of your bookmarklet\n"
(pr-str '(js/alert "Hello")))
@ -51,6 +61,17 @@
v))))}]
[:br]
[:textarea {:rows 10 :cols 80
:on-drop (fn [e]
(let [bookmarklet (js/decodeURIComponent (.. e -dataTransfer (getData "text")))
cljs-snippet (some-> (extract-code bookmarklet)
read-code)
new-code (if cljs-snippet
(str "; Extracted snippet\n" cljs-snippet)
(str "; Failed to extract snippet\n" bookmarklet))]
(js/console.log "Dropped" bookmarklet)
(set! (.. e -target -value) new-code)
(reset! *code new-code)
(.preventDefault e)))
:on-change (fn [e] (reset! *code (.. e -target -value)))}
value]
[:br]
@ -59,10 +80,8 @@
"or"[:br]
"Drag the link to the bookmarks bar" [:br]
[(fn []
(let [sanitized (->> (clojure.string/split-lines @*code) (remove #(re-find #"\s*;"%)) (clojure.string/join "\n"))]
(js/console.log "Loaded", sanitized)
[(fn [] [:a {:href (bookmarklet-href sanitized)} @*bookmark-name])]
)) *code]]))
(js/console.log "Loaded", @*code)
[(fn [] [:a {:href (bookmarklet-href @*code)} @*bookmark-name])])
*code]]))
(rdom/render [workspace] (.getElementById js/document "app"))