From 09ee70d3f29579aaf28623a9887ff5fe05155f07 Mon Sep 17 00:00:00 2001 From: Nicolas Barrera Date: Fri, 10 May 2019 17:59:29 +0200 Subject: [PATCH] Refactor string encoder generation --- cljs-shared/cljs_cheatsheet/util.cljs | 41 ++++++++++++++++----------- public/index.html | 2 +- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/cljs-shared/cljs_cheatsheet/util.cljs b/cljs-shared/cljs_cheatsheet/util.cljs index 97c0453..a7b48f3 100644 --- a/cljs-shared/cljs_cheatsheet/util.cljs +++ b/cljs-shared/cljs_cheatsheet/util.cljs @@ -22,23 +22,30 @@ (def uri-encode js/encodeURIComponent) -(defn- encode-symbol-url-clojuredocs - "Encode URL for clojuredocs.org" - [s] - (-> s - (replace "/" "_fs") ;; divide symbol - "/" - (replace "?" "_q"))) - -(defn- encode-symbol-url-cljs - "Encode URL for cljs.github.io" - [s] - (-> s - (replace "/" "SLASH") - (replace "?" "QMARK") - (replace "!" "BANG") - (replace ">" "GT") - (replace "<" "LT") - (replace "=" "EQ"))) +(def encode-clojuredocs + {"/" "_fs" + "?" "_q"}) + +(def encode-cljs + {"/" "SLASH" + "?" "QMARK" + "!" "BANG" + ">" "GT" + "<" "LT" + "=" "EQ"}) + +(defn encoder-gen [mapping] + (fn [s] + (reduce-kv + replace + s + mapping))) + +(def encode-symbol-url-clojuredocs + (encoder-gen encode-clojuredocs)) + +(def encode-symbol-url-cljs + (encoder-gen encode-cljs)) (defn docs-href [name name-space] (let [cljsns? (= name-space "cljs.core") diff --git a/public/index.html b/public/index.html index 9f17a27..564c750 100644 --- a/public/index.html +++ b/public/index.html @@ -1,4 +1,4 @@ -ClojureScript Cheatsheet

ClojureScript LogoClojureScript Cheatsheet

Basics

" " Strings

Create"abc"strname
Use(.-length my-str)countgetsubs(clojure.string/)joinescapesplitsplit-linesreplacereplace-firstreverse
Regex#"pattern"re-findre-seqre-matchesre-pattern(clojure.string/)replacereplace-first
Letters(clojure.string/)capitalizelower-caseupper-case
Trim(clojure.string/)trimtrim-newlinetrimltrimr
Testcharstring?(clojure.string/)includes?blank?

Atoms / State

Createatom
Get Value@my-atom → (deref my-atom)
Set Valueswap!reset!compare-and-set!
Watchadd-watchremove-watch
Validatorsset-validator!get-validator

JavaScript Interop

Create Object#js {}js-obj
Create Array#js []arraymake-arrayaclone
Get Property
(.-innerHTML el)
Using cljs-oops library:
(oget el "innerHTML")
Set Property
(set! (.-innerHTML el) "Hi!")
Using cljs-oops library:
(oset! el "innerHTML" "Hi!")
Delete Propertyjs-delete
Convert Betweenclj->jsjs->clj
Type Testsarray?fn?number?object?string?
Exceptionstrycatchfinallythrow
External Library
(js/alert "Hello world!")
(js/console.log my-obj)
(.html (js/jQuery "#myDiv") "Hi!")

JavaScript Interop

Create Object#js {}js-obj
Create Array#js []arraymake-arrayaclone
Get Property
(.-innerHTML el)
Using cljs-oops library:
(oget el "innerHTML")
Set Property
(set! (.-innerHTML el) "Hi!")
Using cljs-oops library:
(oset! el "innerHTML" "Hi!")
Delete Propertyjs-delete
Convert Betweenclj->jsjs->clj
Type Testsarray?fn?number?object?string?
Exceptionstrycatchfinallythrow
External Library
(js/alert "Hello world!")
(js/console.log my-obj)
(.html (js/jQuery "#myDiv") "Hi!")

" " Strings

Create"abc"strname
Use(.-length my-str)countgetsubs(clojure.string/)joinescapesplitsplit-linesreplacereplace-firstreverse
Regex#"pattern"re-findre-seqre-matchesre-pattern(clojure.string/)replacereplace-first
Letters(clojure.string/)capitalizelower-caseupper-case
Trim(clojure.string/)trimtrim-newlinetrimltrimr
Testcharstring?(clojure.string/)includes?blank?

Atoms / State

Createatom
Get Value@my-atom → (deref my-atom)
Set Valueswap!reset!compare-and-set!
Watchadd-watchremove-watch
Validatorsset-validator!get-validator

Collections

[ ] Vectors

Create[]vectorvec
Examine
(my-vec idx) → (nth my-vec idx)
getpeek
'Change'assocpopsubvecreplaceconjrseq
Loopmapvfiltervreduce-kv

#{ } Sets

Create#{}sethash-setsorted-setsorted-set-by
Examine
(my-set itm) → (get my-set itm)
contains?
'Change'conjdisj
Set Ops(clojure.set/)uniondifferenceintersectionselect
Test(clojure.set/)subset?superset?

[ ] Vectors

Create[]vectorvec
Examine
(my-vec idx) → (nth my-vec idx)
getpeek
'Change'assocpopsubvecreplaceconjrseq
Loopmapvfiltervreduce-kv

#{ } Sets

Create#{}sethash-setsorted-setsorted-set-by
Examine
(my-set itm) → (get my-set itm)
contains?
'Change'conjdisj
Set Ops(clojure.set/)uniondifferenceintersectionselect
Test(clojure.set/)subset?superset?

Sequences

Misc