Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor: consistent alias of clojure.string
Browse files Browse the repository at this point in the history
RCmerci committed Jan 3, 2025
1 parent dd17560 commit b65a2d5
Showing 15 changed files with 409 additions and 410 deletions.
135 changes: 67 additions & 68 deletions src/main/frontend/extensions/calc.cljc
Original file line number Diff line number Diff line change
@@ -1,25 +1,24 @@
(ns frontend.extensions.calc
(:refer-clojure :exclude [eval numerator denominator])
(:require [clojure.string :as str]
[frontend.util :as util]
(:require #?(:clj [clojure.java.io :as io])
#?(:clj [instaparse.core :as insta]
:cljs [instaparse.core :as insta :refer-macros [defparser]])

[bignumber.js :as bn]
#?(:cljs [rum.core :as rum])

#?(:clj [clojure.java.io :as io])
#?(:cljs [shadow.resource :as rc])
#?(:cljs [rum.core :as rum])
#?(:clj [instaparse.core :as insta]
:cljs [instaparse.core :as insta :refer-macros [defparser]])))
[bignumber.js :as bn]
[clojure.string :as string]
[frontend.util :as util]))

;; ======================================================================
;; Interpreter

#?(:clj (def parse (insta/parser (io/resource "grammar/calc.bnf")))
:cljs (defparser parse (rc/inline "grammar/calc.bnf")))

(def constants {
"PI" (bn/BigNumber "3.14159265358979323846")
"E" (bn/BigNumber "2.71828182845904523536")})
(def constants {"PI" (bn/BigNumber "3.14159265358979323846")
"E" (bn/BigNumber "2.71828182845904523536")})

(defn exception? [e]
#?(:clj (instance? Exception e)
@@ -34,13 +33,13 @@

(defn factorial [n]
(reduce
(fn [a b] (.multipliedBy a b))
(bn/BigNumber 1)
(range 2 (inc n))))
(fn [a b] (.multipliedBy a b))
(bn/BigNumber 1)
(range 2 (inc n))))

(defn eval* [env ast]
(insta/transform
{:number (comp bn/BigNumber #(str/replace % "," ""))
{:number (comp bn/BigNumber #(string/replace % "," ""))
:percent (fn percent [a] (-> a (.dividedBy 100.00)))
:scientific bn/BigNumber
:mixed-number (fn [whole numerator denominator]
@@ -53,12 +52,12 @@
:div (fn div [a b] (-> a (.dividedBy b)))
:mod (fn mod [a b] (-> a (.modulo b)))
:pow (fn pow [a b] (if (.isInteger b)
(.exponentiatedBy a b)
#?(:clj (java.lang.Math/pow a b)
:cljs (bn/BigNumber (js/Math.pow a b)))))
(.exponentiatedBy a b)
#?(:clj (java.lang.Math/pow a b)
:cljs (bn/BigNumber (js/Math.pow a b)))))
:factorial (fn fact [a] (if (and (.isInteger a) (.isPositive a) (.isLessThan a 254))
(factorial (.toNumber a))
(bn/BigNumber 'NaN')))
(factorial (.toNumber a))
(bn/BigNumber 'NaN')))
:abs (fn abs [a] (.abs a))
:sqrt (fn sqrt [a] (.sqrt a))
:log (fn log [a]
@@ -68,24 +67,24 @@
:exp (fn exp [a]
#?(:clj (java.lang.Math/exp a) :cljs (bn/BigNumber (js/Math.exp a))))
:sin (fn sin [a]
#?(:clj (java.lang.Math/sin a) :cljs (bn/BigNumber(js/Math.sin a))))
#?(:clj (java.lang.Math/sin a) :cljs (bn/BigNumber (js/Math.sin a))))
:cos (fn cos [a]
#?(:clj (java.lang.Math/cos a) :cljs (bn/BigNumber(js/Math.cos a))))
#?(:clj (java.lang.Math/cos a) :cljs (bn/BigNumber (js/Math.cos a))))
:tan (fn tan [a]
#?(:clj (java.lang.Math/tan a) :cljs (bn/BigNumber(js/Math.tan a))))
#?(:clj (java.lang.Math/tan a) :cljs (bn/BigNumber (js/Math.tan a))))
:atan (fn atan [a]
#?(:clj (java.lang.Math/atan a) :cljs (bn/BigNumber(js/Math.atan a))))
#?(:clj (java.lang.Math/atan a) :cljs (bn/BigNumber (js/Math.atan a))))
:asin (fn asin [a]
#?(:clj (java.lang.Math/asin a) :cljs (bn/BigNumber(js/Math.asin a))))
#?(:clj (java.lang.Math/asin a) :cljs (bn/BigNumber (js/Math.asin a))))
:acos (fn acos [a]
#?(:clj (java.lang.Math/acos a) :cljs (bn/BigNumber(js/Math.acos a))))
#?(:clj (java.lang.Math/acos a) :cljs (bn/BigNumber (js/Math.acos a))))
:assignment (fn assign! [var val]
(if (contains? constants var)
(throw
(ex-info (util/format "Can't redefine constant %s" var) {:var var}))
(ex-info (util/format "Can't redefine constant %s" var) {:var var}))
(swap! env assoc var val))
val)
:toassign str/trim
:toassign string/trim
:comment (constantly nil)
:digits int
:format-fix (fn format [places]
@@ -95,21 +94,21 @@
(swap! env assoc :mode "sci" :places places)
(get @env "last"))
:format-frac (fn format [max-denominator]
(swap! env dissoc :mode :improper)
(swap! env assoc :mode "frac" :max-denominator max-denominator)
(get @env "last"))
(swap! env dissoc :mode :improper)
(swap! env assoc :mode "frac" :max-denominator max-denominator)
(get @env "last"))
:format-impf (fn format [max-denominator]
(swap! env assoc :mode "frac" :max-denominator max-denominator :improper true)
(get @env "last"))
(swap! env assoc :mode "frac" :max-denominator max-denominator :improper true)
(get @env "last"))
:format-norm (fn format [precision]
(swap! env dissoc :mode :places)
(swap! env assoc :precision precision)
(get @env "last"))
(swap! env dissoc :mode :places)
(swap! env assoc :precision precision)
(get @env "last"))
:base (fn base [b]
(swap! env assoc :base (str/lower-case b))
(swap! env assoc :base (string/lower-case b))
(get @env "last"))
:variable (fn resolve [var]
(let [var (str/trim var)]
(let [var (string/trim var)]
(or (get constants var)
(get @env var)
(throw
@@ -136,12 +135,12 @@
"Check that number can render without loss of all significant digits,
and that the absolute value is less than 1e21."
[num' places]
(or (.isZero num' )
(let [mag (.abs num')
lower-bound (-> (bn/BigNumber 0.5) (.shiftedBy (- places)))
upper-bound (bn/BigNumber 1e21)]
(and (-> mag (.isGreaterThanOrEqualTo lower-bound))
(-> mag (.isLessThan upper-bound))))))
(or (.isZero num')
(let [mag (.abs num')
lower-bound (-> (bn/BigNumber 0.5) (.shiftedBy (- places)))
upper-bound (bn/BigNumber 1e21)]
(and (-> mag (.isGreaterThanOrEqualTo lower-bound))
(-> mag (.isLessThan upper-bound))))))

(defn can-fit?
"Check that number can render normally within the given number of digits.
@@ -152,16 +151,16 @@

(defn format-base [val base]
(let [sign (.-s val)
display-val (if (neg-int? sign) (.abs val) val)]
display-val (if (neg-int? sign) (.abs val) val)]
(str
(when (neg-int? sign) "-")
(case base 2 "0b" 8 "0o" 16 "0x")
(.toString display-val base))))
(when (neg-int? sign) "-")
(case base 2 "0b" 8 "0o" 16 "0x")
(.toString display-val base))))

(defn format-fraction [numerator denominator improper]
(let [whole (.dividedToIntegerBy numerator denominator)]
(if (or improper (.isZero whole))
(str numerator "/" denominator )
(str numerator "/" denominator)
(str whole " "
(.abs (.modulo numerator denominator)) "/" denominator))))

@@ -179,40 +178,40 @@
places (get @env :places)]
(cond
(= base "hex")
(format-base val 16)
(format-base val 16)
(= base "oct")
(format-base val 8)
(format-base val 8)
(= base "bin")
(format-base val 2)
(format-base val 2)

(= mode "fix")
(if (can-fix? val places)
(.toFixed val places)
(.toExponential val places))
(if (can-fix? val places)
(.toFixed val places)
(.toExponential val places))
(= mode "sci")
(.toExponential val places)
(.toExponential val places)
(= mode "frac")
(let [max-denominator (or (get @env :max-denominator) 4095)
improper (get @env :improper)
[numerator denominator] (.toFraction val max-denominator)
delta (.minus (.dividedBy numerator denominator) val)]
(if (or (.isZero delta) (< (.-e delta) -16))
(if (> denominator 1)
(format-fraction numerator denominator improper)
(format-normal env numerator))
(format-normal env val)))
(let [max-denominator (or (get @env :max-denominator) 4095)
improper (get @env :improper)
[numerator denominator] (.toFraction val max-denominator)
delta (.minus (.dividedBy numerator denominator) val)]
(if (or (.isZero delta) (< (.-e delta) -16))
(if (> denominator 1)
(format-fraction numerator denominator improper)
(format-normal env numerator))
(format-normal env val)))

:else
(format-normal env val)))
(format-normal env val)))
val))

(defn eval-lines [s]
{:pre [(string? s)]}
(let [env (new-env)]
(mapv (fn [line]
(when-not (str/blank? line)
(when-not (string/blank? line)
(format-val env (assign-last-value env (eval env (parse line))))))
(str/split-lines s))))
(string/split-lines s))))

;; ======================================================================
;; UI
@@ -225,7 +224,7 @@
;; if we stop click propagation on this element, we allow the user to
;; copy and paste the calc results
[:div.extensions__code-calc.pr-2 {:on-pointer-down (fn [e]
(.stopPropagation e))}
(.stopPropagation e))}
;; TODO: add react keys
(for [[i line] (map-indexed vector output-lines)]
[:div.extensions__code-calc-output-line.CodeMirror-line {:key i}
16 changes: 8 additions & 8 deletions src/main/frontend/extensions/video/youtube.cljs
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
(ns frontend.extensions.video.youtube
(:require [rum.core :as rum]
[cljs.core.async :refer [<! chan go] :as a]
(:require [cljs.core.async :refer [<! chan go] :as a]
[clojure.string :as string]
[frontend.components.svg :as svg]
[frontend.handler.notification :as notification]
[frontend.mobile.util :as mobile-util]
[frontend.state :as state]
[frontend.util :as util]
[goog.object :as gobj]
[clojure.string :as str]
[frontend.mobile.util :as mobile-util]
[frontend.handler.notification :as notification]))
[rum.core :as rum]))

(defn- load-yt-script []
(js/console.log "load yt script")
@@ -79,7 +79,7 @@
(when (or (> idx 0)
(not= v "00"))
v)))
(str/join ":"))))
(string/join ":"))))

(defn dom-after-video-node? [video-node target]
(not (zero?
@@ -92,11 +92,11 @@
(filter
(fn [node]
(let [src (gobj/get node "src" "")]
(str/includes? src "youtube.com"))))
(string/includes? src "youtube.com"))))
(filter #(dom-after-video-node? % target))
last)]
(let [id (gobj/get iframe "id" "")
id (str/replace-first id #"youtube-player-" "")]
id (string/replace-first id #"youtube-player-" "")]
(get (get @state/state :youtube/players) id))))

(rum/defc timestamp
Loading

0 comments on commit b65a2d5

Please sign in to comment.