mirror of
https://github.com/journeyman-cc/smeagol.git
synced 2026-04-12 18:05:06 +00:00
Added separate Vega extension file
This commit is contained in:
parent
54b82931b2
commit
1df78111cd
1 changed files with 84 additions and 0 deletions
|
|
@ -0,0 +1,84 @@
|
|||
(ns ^{:doc "Format Semagol's extended markdown format."
|
||||
:author "Simon Brooke"}
|
||||
smeagol.extensions.vega
|
||||
(:require [smeagol.extensions.utils :refer :all]
|
||||
[taoensso.timbre :as log]))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;
|
||||
;;;; Smeagol: a very simple Wiki engine.
|
||||
;;;;
|
||||
;;;; This program is free software; you can redistribute it and/or
|
||||
;;;; modify it under the terms of the GNU General Public License
|
||||
;;;; as published by the Free Software Foundation; either version 2
|
||||
;;;; of the License, or (at your option) any later version.
|
||||
;;;;
|
||||
;;;; This program is distributed in the hope that it will be useful,
|
||||
;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;;; GNU General Public License for more details.
|
||||
;;;;
|
||||
;;;; You should have received a copy of the GNU General Public License
|
||||
;;;; along with this program; if not, write to the Free Software
|
||||
;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
;;;; USA.
|
||||
;;;;
|
||||
;;;; Copyright (C) 2017 Simon Brooke
|
||||
;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;
|
||||
;;;; Inspired by [visdown](https://visdown.com/) and
|
||||
;;;; [vega-lite](https://vega.github.io/vega-lite/docs/), the Vega formatter
|
||||
;;;; allows you to embed vega data visualisations into Smeagol pages. The graph
|
||||
;;;; description should start with a line comprising three back-ticks and then
|
||||
;;;; the word '`vega`', and end with a line comprising just three backticks.
|
||||
;;;;
|
||||
;;;; Here's an example cribbed in its entirety from
|
||||
;;;; [here](http://visdown.amitkaps.com/london):
|
||||
;;;;
|
||||
;;;; ### Flight punctuality at London airports
|
||||
;;;;
|
||||
;;;; ```vega
|
||||
;;;; data:
|
||||
;;;; url: "data/london.csv"
|
||||
;;;; transform:
|
||||
;;;; -
|
||||
;;;; filter: datum.year == 2016
|
||||
;;;; mark: rect
|
||||
;;;; encoding:
|
||||
;;;; x:
|
||||
;;;; type: nominal
|
||||
;;;; field: source
|
||||
;;;; y:
|
||||
;;;; type: nominal
|
||||
;;;; field: dest
|
||||
;;;; color:
|
||||
;;;; type: quantitative
|
||||
;;;; field: flights
|
||||
;;;; aggregate: sum
|
||||
;;;; ```
|
||||
;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(defn process-vega
|
||||
"If this `src-resource-or-url` is a valid URL, it is assumed to point to a
|
||||
plain text file pointing to valid `vega-src`; otherwise, it is expected to
|
||||
BE a valid `vega-src`.
|
||||
|
||||
Process this `vega-src` string, assumed to be in YAML format, into a
|
||||
specification of a Vega chart, and add the plumbing to render it."
|
||||
[^String src-resource-or-url ^Integer index]
|
||||
(let [data (resource-url-or-data->data url-or-graph-spec)
|
||||
vega-src (:data data)]
|
||||
(log/info "Retrieved vega-src from " (:from data) " `" ((:from data) data) "`")
|
||||
(str
|
||||
"<div class='data-visualisation' id='vis" index "'></div>\n"
|
||||
"<script>\n//<![CDATA[\nvar vl"
|
||||
index
|
||||
" = "
|
||||
(yaml->json (str "$schema: https://vega.github.io/schema/vega-lite/v2.json\n" vega-src))
|
||||
";\nvegaEmbed('#vis"
|
||||
index
|
||||
"', vl"
|
||||
index
|
||||
");\n//]]\n</script>")))
|
||||
Loading…
Add table
Add a link
Reference in a new issue