Skip to content

Latest commit

 

History

History
88 lines (63 loc) · 2.51 KB

README.md

File metadata and controls

88 lines (63 loc) · 2.51 KB

Picasso GitHub Actions status |pink-gorilla/picassoClojars Project

  • This project is used in Notebook , but the library can be used independently.
  • Data structures from clojure/clojurescript have to be converted to some kind of visual repesentation so that the notebook can render them
  • For all clojure/clojurescript datatypes default renderers are defined here
  • Custom data-types can implement the renderable protocol
  • The notebook receives the render-datastructure and renders it to the notebook cell.

This are the core concepts in picasso:

render (used in nrepl middleware)

(defprotocol Renderable
  (render [self]))

paint (used in notebook-ui)

(defmulti paint :type)

Clojure/Clojurescript Data => (render) => Picasso DataStructure => (paint) => Notebook

Clojure/Clojurescript type based rendering

  • All clj/cljs datatypes have default renderers that will be selected based on the type of the data.

Syntactic sugar for librarys that need visualization

  • Goal is to use meta-data to trigger rendering of function output.
  • Say we want a function that creates a vega spec to be rendered with a vega renderer:
(defn timeseries-plot 
  "timeseries-plot creates vega spec for a timeseries plot"
  [data] 
  ^{:render-with :p/vega} vega-spec)
  • The user would then use this with:
[:div [:h1 "demo"]
      (timeseries-plot data)]
  • the rendering system would then internally convert this to:
[:div [:h1 "demo"]
      [:p/vega (timeseries-plot data)]]
  • This saves the library author from writing a wrapper.

UI Demo

clojure -X:goldly

Unit Tests

Clojure: clojure -M:test Clojurescript: ./script/test-cljs.sh

paint implementation

  • :default picasso
  • :hiccup picasso
  • :list-alike picasso (compatibility)
  • :html notebook-ui (needs gorilla-ui)
  • :text notebook-ui (needs gorilla-ui)
  • :pinkie notebook-ui (needs pinkie)
  • :reagent notebook-ui (needs pinkie)
  • :goldly not yet implemented. will be in goldly

notebook transactor

clojure -M:transactor new creates demo-nb.edn clojure -M:transactor add adds new code segment to document,and reevaluates notebook.

Licence

This code is licensed to you under the MIT licence. See LICENCE.txt for details.