From 153b036f6846a50abb03c4199918ff4ce157f968 Mon Sep 17 00:00:00 2001 From: Matthew Huebert Date: Thu, 3 Aug 2023 06:00:45 -0600 Subject: [PATCH] emmy viewers: ratios --- editor2/shadow-cljs.edn | 2 +- .../src/main/maria/editor/extensions/emmy.cljs | 17 +++++++++++++---- .../src/main/maria/editor/extensions/katex.cljs | 17 +++++++++++------ 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/editor2/shadow-cljs.edn b/editor2/shadow-cljs.edn index 7ae46108..3e8082a0 100644 --- a/editor2/shadow-cljs.edn +++ b/editor2/shadow-cljs.edn @@ -22,4 +22,4 @@ :ext.reagent {:entries [maria.editor.extensions.reagent] :depends-on #{:core}} :ext.emmy {:entries [maria.editor.extensions.emmy] - :depends-on #{:core :ext.reagent}}}}}} \ No newline at end of file + :depends-on #{:core :ext.reagent :ext.katex}}}}}} \ No newline at end of file diff --git a/editor2/src/main/maria/editor/extensions/emmy.cljs b/editor2/src/main/maria/editor/extensions/emmy.cljs index 583e183f..2eca5b86 100644 --- a/editor2/src/main/maria/editor/extensions/emmy.cljs +++ b/editor2/src/main/maria/editor/extensions/emmy.cljs @@ -1,5 +1,5 @@ (ns maria.editor.extensions.emmy - (:require ["fraction.js/bigfraction.js$default" :as Fraction] + (:require [emmy.ratio] [emmy.viewer.sci] [emmy.value] [emmy.expression] @@ -14,7 +14,8 @@ [maria.editor.extensions.reagent :as ext.reagent] [maria.editor.code.show-values :as show :refer [show]] [sci.ctx-store :refer [get-ctx]] - [yawn.view :as v])) + [yawn.view :as v] + #_[maria.editor.extensions.katex :as katex])) (defn show-frozen [opts x] (show opts (emmy.value/freeze x))) @@ -25,6 +26,14 @@ (defn show-number-string [opts x] (v/x [:span.text-number (str x)])) +(defn show-ratio [opts x] + (let [[_ n d] (emmy.value/freeze x)] + #_(katex/show-katex :span (str "\\dfrac{" n "}{" d "}")) + (v/x [:<> + [:span.text-number n] + [:span.text-brackets "/"] + [:span.text-number d]]))) + (def viewers-by-type {emmy.expression/Literal show-expression-of emmy.operator/Operator show-frozen @@ -37,8 +46,8 @@ js/BigInt show-number-string}) (defn show-emmy [opts x] - (if (instance? Fraction x) - (show-number-string opts x) + (if (emmy.ratio/ratio? x) + (show-ratio opts x) (if-let [viewer (viewers-by-type (type x))] (viewer opts x) (when-let [m (meta x)] diff --git a/editor2/src/main/maria/editor/extensions/katex.cljs b/editor2/src/main/maria/editor/extensions/katex.cljs index ee9e3d91..053ba668 100644 --- a/editor2/src/main/maria/editor/extensions/katex.cljs +++ b/editor2/src/main/maria/editor/extensions/katex.cljs @@ -3,10 +3,15 @@ [yawn.hooks :as h] [yawn.view :as v])) -;; TODO - load this css -;; {:href "https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/katex.min.css"} +(defonce !load-css! (delay + (let [link (.createElement js/document "link")] + (set! (.-rel link) "stylesheet") + (set! (.-href link) "https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/katex.min.css") + (js/document.head.appendChild link)))) + (v/defview show-katex [el x] - [el {:ref (h/use-callback - (fn [el] - (when el - (katex/render x el))))}]) \ No newline at end of file + @!load-css! + [el {:ref (h/use-callback + (fn [el] + (when el + (katex/render x el))))}]) \ No newline at end of file