From fe14aa4837a811c7efeedf2feb20c7bd878c4d12 Mon Sep 17 00:00:00 2001 From: C240390 Date: Mon, 7 Aug 2017 21:19:53 -0400 Subject: [PATCH] Add _files/slides/will-drake The new slides are Will Landau's talk on drake, an R package for reproducibility and high-performance computing. https://github.com/wlandau-lilly/drake --- _files/slides/will-drake/abstract.txt | 4 + _files/slides/will-drake/demo.R | 13 + _files/slides/will-drake/drake.Rmd | 278 ++ _files/slides/will-drake/drake.html | 850 ++++ _files/slides/will-drake/graph1.html | 18 + .../htmlwidgets-0.9/htmlwidgets.js | 836 ++++ .../img/network/acceptDeleteIcon.png | Bin 0 -> 20675 bytes .../vis-4.20.0/img/network/addNodeIcon.png | Bin 0 -> 20998 bytes .../vis-4.20.0/img/network/backIcon.png | Bin 0 -> 20802 bytes .../vis-4.20.0/img/network/connectIcon.png | Bin 0 -> 20764 bytes .../vis-4.20.0/img/network/cross.png | Bin 0 -> 18303 bytes .../vis-4.20.0/img/network/cross2.png | Bin 0 -> 17768 bytes .../vis-4.20.0/img/network/deleteIcon.png | Bin 0 -> 20981 bytes .../vis-4.20.0/img/network/downArrow.png | Bin 0 -> 4460 bytes .../vis-4.20.0/img/network/editIcon.png | Bin 0 -> 21016 bytes .../vis-4.20.0/img/network/leftArrow.png | Bin 0 -> 4531 bytes .../vis-4.20.0/img/network/minus.png | Bin 0 -> 4147 bytes .../vis-4.20.0/img/network/plus.png | Bin 0 -> 4341 bytes .../vis-4.20.0/img/network/rightArrow.png | Bin 0 -> 4514 bytes .../vis-4.20.0/img/network/upArrow.png | Bin 0 -> 4461 bytes .../vis-4.20.0/img/network/zoomExtends.png | Bin 0 -> 4464 bytes .../graph1_files/vis-4.20.0/vis.css | 1460 +++++++ .../graph1_files/vis-4.20.0/vis.min.js | 46 + .../visNetwork-binding-2.0.0/visNetwork.js | 3741 +++++++++++++++++ _files/slides/will-drake/graph2.html | 18 + .../htmlwidgets-0.9/htmlwidgets.js | 836 ++++ .../img/network/acceptDeleteIcon.png | Bin 0 -> 20675 bytes .../vis-4.20.0/img/network/addNodeIcon.png | Bin 0 -> 20998 bytes .../vis-4.20.0/img/network/backIcon.png | Bin 0 -> 20802 bytes .../vis-4.20.0/img/network/connectIcon.png | Bin 0 -> 20764 bytes .../vis-4.20.0/img/network/cross.png | Bin 0 -> 18303 bytes .../vis-4.20.0/img/network/cross2.png | Bin 0 -> 17768 bytes .../vis-4.20.0/img/network/deleteIcon.png | Bin 0 -> 20981 bytes .../vis-4.20.0/img/network/downArrow.png | Bin 0 -> 4460 bytes .../vis-4.20.0/img/network/editIcon.png | Bin 0 -> 21016 bytes .../vis-4.20.0/img/network/leftArrow.png | Bin 0 -> 4531 bytes .../vis-4.20.0/img/network/minus.png | Bin 0 -> 4147 bytes .../vis-4.20.0/img/network/plus.png | Bin 0 -> 4341 bytes .../vis-4.20.0/img/network/rightArrow.png | Bin 0 -> 4514 bytes .../vis-4.20.0/img/network/upArrow.png | Bin 0 -> 4461 bytes .../vis-4.20.0/img/network/zoomExtends.png | Bin 0 -> 4464 bytes .../graph2_files/vis-4.20.0/vis.css | 1460 +++++++ .../graph2_files/vis-4.20.0/vis.min.js | 46 + .../visNetwork-binding-2.0.0/visNetwork.js | 3741 +++++++++++++++++ _files/slides/will-drake/graph3.html | 18 + .../htmlwidgets-0.9/htmlwidgets.js | 836 ++++ .../img/network/acceptDeleteIcon.png | Bin 0 -> 20675 bytes .../vis-4.20.0/img/network/addNodeIcon.png | Bin 0 -> 20998 bytes .../vis-4.20.0/img/network/backIcon.png | Bin 0 -> 20802 bytes .../vis-4.20.0/img/network/connectIcon.png | Bin 0 -> 20764 bytes .../vis-4.20.0/img/network/cross.png | Bin 0 -> 18303 bytes .../vis-4.20.0/img/network/cross2.png | Bin 0 -> 17768 bytes .../vis-4.20.0/img/network/deleteIcon.png | Bin 0 -> 20981 bytes .../vis-4.20.0/img/network/downArrow.png | Bin 0 -> 4460 bytes .../vis-4.20.0/img/network/editIcon.png | Bin 0 -> 21016 bytes .../vis-4.20.0/img/network/leftArrow.png | Bin 0 -> 4531 bytes .../vis-4.20.0/img/network/minus.png | Bin 0 -> 4147 bytes .../vis-4.20.0/img/network/plus.png | Bin 0 -> 4341 bytes .../vis-4.20.0/img/network/rightArrow.png | Bin 0 -> 4514 bytes .../vis-4.20.0/img/network/upArrow.png | Bin 0 -> 4461 bytes .../vis-4.20.0/img/network/zoomExtends.png | Bin 0 -> 4464 bytes .../graph3_files/vis-4.20.0/vis.css | 1460 +++++++ .../graph3_files/vis-4.20.0/vis.min.js | 46 + .../visNetwork-binding-2.0.0/visNetwork.js | 3741 +++++++++++++++++ _files/slides/will-drake/graph4.html | 18 + .../htmlwidgets-0.9/htmlwidgets.js | 836 ++++ .../img/network/acceptDeleteIcon.png | Bin 0 -> 20675 bytes .../vis-4.20.0/img/network/addNodeIcon.png | Bin 0 -> 20998 bytes .../vis-4.20.0/img/network/backIcon.png | Bin 0 -> 20802 bytes .../vis-4.20.0/img/network/connectIcon.png | Bin 0 -> 20764 bytes .../vis-4.20.0/img/network/cross.png | Bin 0 -> 18303 bytes .../vis-4.20.0/img/network/cross2.png | Bin 0 -> 17768 bytes .../vis-4.20.0/img/network/deleteIcon.png | Bin 0 -> 20981 bytes .../vis-4.20.0/img/network/downArrow.png | Bin 0 -> 4460 bytes .../vis-4.20.0/img/network/editIcon.png | Bin 0 -> 21016 bytes .../vis-4.20.0/img/network/leftArrow.png | Bin 0 -> 4531 bytes .../vis-4.20.0/img/network/minus.png | Bin 0 -> 4147 bytes .../vis-4.20.0/img/network/plus.png | Bin 0 -> 4341 bytes .../vis-4.20.0/img/network/rightArrow.png | Bin 0 -> 4514 bytes .../vis-4.20.0/img/network/upArrow.png | Bin 0 -> 4461 bytes .../vis-4.20.0/img/network/zoomExtends.png | Bin 0 -> 4464 bytes .../graph4_files/vis-4.20.0/vis.css | 1460 +++++++ .../graph4_files/vis-4.20.0/vis.min.js | 46 + .../visNetwork-binding-2.0.0/visNetwork.js | 3741 +++++++++++++++++ _files/slides/will-drake/images/demo.gif | Bin 0 -> 1297259 bytes _files/slides/will-drake/images/logo.svg | 389 ++ _files/slides/will-drake/include/header.html | 3 + .../slides/will-drake/include/template.html | 798 ++++ _files/slides/will-drake/pdf.css | 172 + _files/slides/will-drake/style.css | 4 + 90 files changed, 26915 insertions(+) create mode 100755 _files/slides/will-drake/abstract.txt create mode 100755 _files/slides/will-drake/demo.R create mode 100755 _files/slides/will-drake/drake.Rmd create mode 100755 _files/slides/will-drake/drake.html create mode 100755 _files/slides/will-drake/graph1.html create mode 100755 _files/slides/will-drake/graph1_files/htmlwidgets-0.9/htmlwidgets.js create mode 100755 _files/slides/will-drake/graph1_files/vis-4.20.0/img/network/acceptDeleteIcon.png create mode 100755 _files/slides/will-drake/graph1_files/vis-4.20.0/img/network/addNodeIcon.png create mode 100755 _files/slides/will-drake/graph1_files/vis-4.20.0/img/network/backIcon.png create mode 100755 _files/slides/will-drake/graph1_files/vis-4.20.0/img/network/connectIcon.png create mode 100755 _files/slides/will-drake/graph1_files/vis-4.20.0/img/network/cross.png create mode 100755 _files/slides/will-drake/graph1_files/vis-4.20.0/img/network/cross2.png create mode 100755 _files/slides/will-drake/graph1_files/vis-4.20.0/img/network/deleteIcon.png create mode 100755 _files/slides/will-drake/graph1_files/vis-4.20.0/img/network/downArrow.png create mode 100755 _files/slides/will-drake/graph1_files/vis-4.20.0/img/network/editIcon.png create mode 100755 _files/slides/will-drake/graph1_files/vis-4.20.0/img/network/leftArrow.png create mode 100755 _files/slides/will-drake/graph1_files/vis-4.20.0/img/network/minus.png create mode 100755 _files/slides/will-drake/graph1_files/vis-4.20.0/img/network/plus.png create mode 100755 _files/slides/will-drake/graph1_files/vis-4.20.0/img/network/rightArrow.png create mode 100755 _files/slides/will-drake/graph1_files/vis-4.20.0/img/network/upArrow.png create mode 100755 _files/slides/will-drake/graph1_files/vis-4.20.0/img/network/zoomExtends.png create mode 100755 _files/slides/will-drake/graph1_files/vis-4.20.0/vis.css create mode 100755 _files/slides/will-drake/graph1_files/vis-4.20.0/vis.min.js create mode 100755 _files/slides/will-drake/graph1_files/visNetwork-binding-2.0.0/visNetwork.js create mode 100755 _files/slides/will-drake/graph2.html create mode 100755 _files/slides/will-drake/graph2_files/htmlwidgets-0.9/htmlwidgets.js create mode 100755 _files/slides/will-drake/graph2_files/vis-4.20.0/img/network/acceptDeleteIcon.png create mode 100755 _files/slides/will-drake/graph2_files/vis-4.20.0/img/network/addNodeIcon.png create mode 100755 _files/slides/will-drake/graph2_files/vis-4.20.0/img/network/backIcon.png create mode 100755 _files/slides/will-drake/graph2_files/vis-4.20.0/img/network/connectIcon.png create mode 100755 _files/slides/will-drake/graph2_files/vis-4.20.0/img/network/cross.png create mode 100755 _files/slides/will-drake/graph2_files/vis-4.20.0/img/network/cross2.png create mode 100755 _files/slides/will-drake/graph2_files/vis-4.20.0/img/network/deleteIcon.png create mode 100755 _files/slides/will-drake/graph2_files/vis-4.20.0/img/network/downArrow.png create mode 100755 _files/slides/will-drake/graph2_files/vis-4.20.0/img/network/editIcon.png create mode 100755 _files/slides/will-drake/graph2_files/vis-4.20.0/img/network/leftArrow.png create mode 100755 _files/slides/will-drake/graph2_files/vis-4.20.0/img/network/minus.png create mode 100755 _files/slides/will-drake/graph2_files/vis-4.20.0/img/network/plus.png create mode 100755 _files/slides/will-drake/graph2_files/vis-4.20.0/img/network/rightArrow.png create mode 100755 _files/slides/will-drake/graph2_files/vis-4.20.0/img/network/upArrow.png create mode 100755 _files/slides/will-drake/graph2_files/vis-4.20.0/img/network/zoomExtends.png create mode 100755 _files/slides/will-drake/graph2_files/vis-4.20.0/vis.css create mode 100755 _files/slides/will-drake/graph2_files/vis-4.20.0/vis.min.js create mode 100755 _files/slides/will-drake/graph2_files/visNetwork-binding-2.0.0/visNetwork.js create mode 100755 _files/slides/will-drake/graph3.html create mode 100755 _files/slides/will-drake/graph3_files/htmlwidgets-0.9/htmlwidgets.js create mode 100755 _files/slides/will-drake/graph3_files/vis-4.20.0/img/network/acceptDeleteIcon.png create mode 100755 _files/slides/will-drake/graph3_files/vis-4.20.0/img/network/addNodeIcon.png create mode 100755 _files/slides/will-drake/graph3_files/vis-4.20.0/img/network/backIcon.png create mode 100755 _files/slides/will-drake/graph3_files/vis-4.20.0/img/network/connectIcon.png create mode 100755 _files/slides/will-drake/graph3_files/vis-4.20.0/img/network/cross.png create mode 100755 _files/slides/will-drake/graph3_files/vis-4.20.0/img/network/cross2.png create mode 100755 _files/slides/will-drake/graph3_files/vis-4.20.0/img/network/deleteIcon.png create mode 100755 _files/slides/will-drake/graph3_files/vis-4.20.0/img/network/downArrow.png create mode 100755 _files/slides/will-drake/graph3_files/vis-4.20.0/img/network/editIcon.png create mode 100755 _files/slides/will-drake/graph3_files/vis-4.20.0/img/network/leftArrow.png create mode 100755 _files/slides/will-drake/graph3_files/vis-4.20.0/img/network/minus.png create mode 100755 _files/slides/will-drake/graph3_files/vis-4.20.0/img/network/plus.png create mode 100755 _files/slides/will-drake/graph3_files/vis-4.20.0/img/network/rightArrow.png create mode 100755 _files/slides/will-drake/graph3_files/vis-4.20.0/img/network/upArrow.png create mode 100755 _files/slides/will-drake/graph3_files/vis-4.20.0/img/network/zoomExtends.png create mode 100755 _files/slides/will-drake/graph3_files/vis-4.20.0/vis.css create mode 100755 _files/slides/will-drake/graph3_files/vis-4.20.0/vis.min.js create mode 100755 _files/slides/will-drake/graph3_files/visNetwork-binding-2.0.0/visNetwork.js create mode 100755 _files/slides/will-drake/graph4.html create mode 100755 _files/slides/will-drake/graph4_files/htmlwidgets-0.9/htmlwidgets.js create mode 100755 _files/slides/will-drake/graph4_files/vis-4.20.0/img/network/acceptDeleteIcon.png create mode 100755 _files/slides/will-drake/graph4_files/vis-4.20.0/img/network/addNodeIcon.png create mode 100755 _files/slides/will-drake/graph4_files/vis-4.20.0/img/network/backIcon.png create mode 100755 _files/slides/will-drake/graph4_files/vis-4.20.0/img/network/connectIcon.png create mode 100755 _files/slides/will-drake/graph4_files/vis-4.20.0/img/network/cross.png create mode 100755 _files/slides/will-drake/graph4_files/vis-4.20.0/img/network/cross2.png create mode 100755 _files/slides/will-drake/graph4_files/vis-4.20.0/img/network/deleteIcon.png create mode 100755 _files/slides/will-drake/graph4_files/vis-4.20.0/img/network/downArrow.png create mode 100755 _files/slides/will-drake/graph4_files/vis-4.20.0/img/network/editIcon.png create mode 100755 _files/slides/will-drake/graph4_files/vis-4.20.0/img/network/leftArrow.png create mode 100755 _files/slides/will-drake/graph4_files/vis-4.20.0/img/network/minus.png create mode 100755 _files/slides/will-drake/graph4_files/vis-4.20.0/img/network/plus.png create mode 100755 _files/slides/will-drake/graph4_files/vis-4.20.0/img/network/rightArrow.png create mode 100755 _files/slides/will-drake/graph4_files/vis-4.20.0/img/network/upArrow.png create mode 100755 _files/slides/will-drake/graph4_files/vis-4.20.0/img/network/zoomExtends.png create mode 100755 _files/slides/will-drake/graph4_files/vis-4.20.0/vis.css create mode 100755 _files/slides/will-drake/graph4_files/vis-4.20.0/vis.min.js create mode 100755 _files/slides/will-drake/graph4_files/visNetwork-binding-2.0.0/visNetwork.js create mode 100755 _files/slides/will-drake/images/demo.gif create mode 100755 _files/slides/will-drake/images/logo.svg create mode 100755 _files/slides/will-drake/include/header.html create mode 100755 _files/slides/will-drake/include/template.html create mode 100755 _files/slides/will-drake/pdf.css create mode 100755 _files/slides/will-drake/style.css diff --git a/_files/slides/will-drake/abstract.txt b/_files/slides/will-drake/abstract.txt new file mode 100755 index 0000000..f997799 --- /dev/null +++ b/_files/slides/will-drake/abstract.txt @@ -0,0 +1,4 @@ +Reproducibility and high-performance computing with drake + +There is room to improve the conversation and the landscape of reproducibility in the R and Statistics communities. At a more basic level than scientific replicability, literate programming, and version control, reproducibility carries an implicit promise that the alleged results of an analysis really do match the code. Drake helps keep this promise by tracking the relationships among the components of the analysis, a rare and effective approach that also saves time. And with multiple parallel computing options that switch on auto-magically, drake is also a convenient and powerful high-performance computing solution. Drake is published on CRAN, and you can follow the development at https://github.com/wlandau-lilly/drake. + diff --git a/_files/slides/will-drake/demo.R b/_files/slides/will-drake/demo.R new file mode 100755 index 0000000..86b4706 --- /dev/null +++ b/_files/slides/will-drake/demo.R @@ -0,0 +1,13 @@ +library(drake) +load_basic_example() +plot_graph(my_plan) +outdated(my_plan) +max_useful_jobs(my_plan) +make(my_plan) +plot_graph(my_plan) +reg2 = function(d){ # Change one of your functions. + d$x3 = d$x^3 + lm(y ~ x3, data = d) +} +outdated(my_plan) # Some targets depend on reg2(). +plot_graph(my_plan) diff --git a/_files/slides/will-drake/drake.Rmd b/_files/slides/will-drake/drake.Rmd new file mode 100755 index 0000000..3903a28 --- /dev/null +++ b/_files/slides/will-drake/drake.Rmd @@ -0,0 +1,278 @@ +--- +title: "Data frames in R for Make" +subtitle: "Reproducibility and high-performance computing" +output: + revealjs::revealjs_presentation: + template: include/template.html + includes: + in_header: include/header.html + css: style.css +author: Will Landau +--- + +## drake in action + +

+ demo +

+ + +## Workflow plan data frame + +```{r plandf} +library(drake) +load_basic_example() +my_plan +``` + +## Network graph + +```r +# The graph is interactive! Hover, click, drag, zoom, pan. +plot_graph(my_plan) +``` + +```{r graph, echo = FALSE} +plot_graph(my_plan, width = "100%", height = "400px", verbose = FALSE, + file = "graph1.html", font_size = 25) +``` + + + + +## Just the targets + +```r +plot_graph(my_plan, targets_only = TRUE) +``` + +```{r graphtargs, echo = FALSE} +plot_graph(my_plan, targets_only = TRUE, width = "100%", height = "400px", verbose = FALSE, file = "graph2.html", font_size = 25) +``` + + + + +## Execution + +```{r make1} +make(my_plan) +``` + +## Results + +```{r} +loadd(small) +small +readd(coef_regression2_large) +``` + +## Reproducibility + + +```r +plot_graph(my_plan) +``` + +```{r make2, echo = FALSE} +plot_graph(my_plan, width = "100%", height = "400px", verbose = FALSE, file = "graph3.html", font_size = 25) +``` + + + + + + +## Reproducibility + +```{r make3} +reg2 = function(d){ # Change one of your functions. + d$x3 = d$x^3 + lm(y ~ x3, data = d) +} +outdated(my_plan, verbose = FALSE) # Some targets are now out of date. +missed(my_plan, verbose = FALSE) # But our workspace has all we need. +``` + +## Reproducibility + +```r +plot_graph(my_plan) +``` + +```{r plotgraphreg3, echo = FALSE} +plot_graph(my_plan, width = "100%", height = "400px", verbose = FALSE, file = "graph4.html", font_size = 25) +``` + + + + + + +## Reproducibility +```{r rebuildreg3} +make(my_plan) # Only rebuild the outdated targets. +``` + +## High-performance computing + +
How many jobs could help?
+ +```r +max_useful_jobs(my_plan) +``` + +
Parallel processes: low overhead, light weight
+ +```r +make(my_plan, jobs = 2) # Backend chosen based on platform. +make(my_plan, parallelism = "mclapply", jobs = 2) # Mac/Linux +make(my_plan, parallelism = "parLapply", jobs = 2) # Windows too +``` + +
Parallel R sessions: high overhead, heavy duty
+ +```{r eval = FALSE} +make(my_plan, parallelism = "Makefile", jobs = 2) +make(my_plan, parallelism = "Makefile", command = "make", + args = c("--jobs=2", "--silent")) +``` + +## Supercomputing + +
+
`my_script.R`
+```{r shell, eval = FALSE} +# Your setup... +make(my_plan, parallelism = "Makefile", jobs = 8, + prepend = "SHELL = ./shell.sh") +``` + +
`shell.sh` (write with shell_file())
+```{r shellfile, eval = FALSE} +#!/bin/bash +shift +echo "module load R; $*" | qsub -sync y -cwd -j y +``` + +
Run on a cluster or supercomputer.
+```{r submit, eval = FALSE} +chmod +x shell.sh +nohup nice -19 R CMD BATCH my_script.R & +``` +
+ +## Utilities + +
+
+Workflow plan +```r +plan() +analyses() +summaries() +evaluate() +expand() +gather() +``` + +Dependency network +```r +outdated() +missed() +plot_graph() +read_graph() +dataframes_graph() +deps() +tracked() +max_useful_jobs() +``` +
+
+Cache +```r +clean() +cached() +imported() +built() +readd() +loadd() +find_project() +find_cache() +``` + +Debugging +```r +check() +session() +in_progress() +progress() +read_config() +``` + +
+
+ +## Learning + +
- Basic example
+```r +load_basic_example() +examples_drake() # List examples. +example_drake("basic") # Generate code files. +``` + +
- Tutorials
+```{r getbasic, eval = FALSE} +vignette("drake") # High-level overview. +vignette("quickstart") # Deep dive. +vignette("caution") # Pitfalls. +``` + +- Rendered tutorials: [https://CRAN.R-project.org/package=drake/vignettes](https://CRAN.R-project.org/package=drake/vignettes) +- Bug reports, issues, feature requests: [https://github.com/wlandau-lilly/drake/issues](https://github.com/wlandau-lilly/drake/issues) + +```{r cleanup, echo=F} +clean(destroy = TRUE) +unlink("report.Rmd") +``` + +## Similar work + +- Main inspiration: [remake](https://github.com/richfitz/remake) (FitzJohn) +- [GNU Make](https://www.gnu.org/software/make) (GNU Project) +- Packages for caching and tracking: + - [archivist](https://cran.r-project.org/package=archivist) (Biecek et al.) + - [memoise](https://cran.r-project.org/package=memoise) (Wickham et al.) + - [R.cache](https://cran.r-project.org/package=R.cache) (Bengtsson) + - [trackr](https://github.com/gmbecker/recordr) (Moore and Becker) +- CRAN task views: + - [reproducible research](https://CRAN.R-project.org/view=ReproducibleResearch) + - [high-performance computing]( https://CRAN.R-project.org/view=HighPerformanceComputing) + +## Sources + + +
+
+ +
vignette("drake") # High-level overview.
+vignette("quickstart") # Deep dive.
+vignette("caution") # Pitfalls.
+ + +
+

Similar work

+ +
+
+

Sources

+
+ + + + + + + + + + + + + + + diff --git a/_files/slides/will-drake/graph1.html b/_files/slides/will-drake/graph1.html new file mode 100755 index 0000000..973c0de --- /dev/null +++ b/_files/slides/will-drake/graph1.html @@ -0,0 +1,18 @@ + + + + + + + + + + + +
+
+
+ + + + diff --git a/_files/slides/will-drake/graph1_files/htmlwidgets-0.9/htmlwidgets.js b/_files/slides/will-drake/graph1_files/htmlwidgets-0.9/htmlwidgets.js new file mode 100755 index 0000000..ecda3ef --- /dev/null +++ b/_files/slides/will-drake/graph1_files/htmlwidgets-0.9/htmlwidgets.js @@ -0,0 +1,836 @@ +(function() { + // If window.HTMLWidgets is already defined, then use it; otherwise create a + // new object. This allows preceding code to set options that affect the + // initialization process (though none currently exist). + window.HTMLWidgets = window.HTMLWidgets || {}; + + // See if we're running in a viewer pane. If not, we're in a web browser. + var viewerMode = window.HTMLWidgets.viewerMode = + /\bviewer_pane=1\b/.test(window.location); + + // See if we're running in Shiny mode. If not, it's a static document. + // Note that static widgets can appear in both Shiny and static modes, but + // obviously, Shiny widgets can only appear in Shiny apps/documents. + var shinyMode = window.HTMLWidgets.shinyMode = + typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; + + // We can't count on jQuery being available, so we implement our own + // version if necessary. + function querySelectorAll(scope, selector) { + if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { + return scope.find(selector); + } + if (scope.querySelectorAll) { + return scope.querySelectorAll(selector); + } + } + + function asArray(value) { + if (value === null) + return []; + if ($.isArray(value)) + return value; + return [value]; + } + + // Implement jQuery's extend + function extend(target /*, ... */) { + if (arguments.length == 1) { + return target; + } + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + } + return target; + } + + // IE8 doesn't support Array.forEach. + function forEach(values, callback, thisArg) { + if (values.forEach) { + values.forEach(callback, thisArg); + } else { + for (var i = 0; i < values.length; i++) { + callback.call(thisArg, values[i], i, values); + } + } + } + + // Replaces the specified method with the return value of funcSource. + // + // Note that funcSource should not BE the new method, it should be a function + // that RETURNS the new method. funcSource receives a single argument that is + // the overridden method, it can be called from the new method. The overridden + // method can be called like a regular function, it has the target permanently + // bound to it so "this" will work correctly. + function overrideMethod(target, methodName, funcSource) { + var superFunc = target[methodName] || function() {}; + var superFuncBound = function() { + return superFunc.apply(target, arguments); + }; + target[methodName] = funcSource(superFuncBound); + } + + // Add a method to delegator that, when invoked, calls + // delegatee.methodName. If there is no such method on + // the delegatee, but there was one on delegator before + // delegateMethod was called, then the original version + // is invoked instead. + // For example: + // + // var a = { + // method1: function() { console.log('a1'); } + // method2: function() { console.log('a2'); } + // }; + // var b = { + // method1: function() { console.log('b1'); } + // }; + // delegateMethod(a, b, "method1"); + // delegateMethod(a, b, "method2"); + // a.method1(); + // a.method2(); + // + // The output would be "b1", "a2". + function delegateMethod(delegator, delegatee, methodName) { + var inherited = delegator[methodName]; + delegator[methodName] = function() { + var target = delegatee; + var method = delegatee[methodName]; + + // The method doesn't exist on the delegatee. Instead, + // call the method on the delegator, if it exists. + if (!method) { + target = delegator; + method = inherited; + } + + if (method) { + return method.apply(target, arguments); + } + }; + } + + // Implement a vague facsimilie of jQuery's data method + function elementData(el, name, value) { + if (arguments.length == 2) { + return el["htmlwidget_data_" + name]; + } else if (arguments.length == 3) { + el["htmlwidget_data_" + name] = value; + return el; + } else { + throw new Error("Wrong number of arguments for elementData: " + + arguments.length); + } + } + + // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex + function escapeRegExp(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + } + + function hasClass(el, className) { + var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); + return re.test(el.className); + } + + // elements - array (or array-like object) of HTML elements + // className - class name to test for + // include - if true, only return elements with given className; + // if false, only return elements *without* given className + function filterByClass(elements, className, include) { + var results = []; + for (var i = 0; i < elements.length; i++) { + if (hasClass(elements[i], className) == include) + results.push(elements[i]); + } + return results; + } + + function on(obj, eventName, func) { + if (obj.addEventListener) { + obj.addEventListener(eventName, func, false); + } else if (obj.attachEvent) { + obj.attachEvent(eventName, func); + } + } + + function off(obj, eventName, func) { + if (obj.removeEventListener) + obj.removeEventListener(eventName, func, false); + else if (obj.detachEvent) { + obj.detachEvent(eventName, func); + } + } + + // Translate array of values to top/right/bottom/left, as usual with + // the "padding" CSS property + // https://developer.mozilla.org/en-US/docs/Web/CSS/padding + function unpackPadding(value) { + if (typeof(value) === "number") + value = [value]; + if (value.length === 1) { + return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; + } + if (value.length === 2) { + return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; + } + if (value.length === 3) { + return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; + } + if (value.length === 4) { + return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; + } + } + + // Convert an unpacked padding object to a CSS value + function paddingToCss(paddingObj) { + return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; + } + + // Makes a number suitable for CSS + function px(x) { + if (typeof(x) === "number") + return x + "px"; + else + return x; + } + + // Retrieves runtime widget sizing information for an element. + // The return value is either null, or an object with fill, padding, + // defaultWidth, defaultHeight fields. + function sizingPolicy(el) { + var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); + if (!sizingEl) + return null; + var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); + if (viewerMode) { + return sp.viewer; + } else { + return sp.browser; + } + } + + // @param tasks Array of strings (or falsy value, in which case no-op). + // Each element must be a valid JavaScript expression that yields a + // function. Or, can be an array of objects with "code" and "data" + // properties; in this case, the "code" property should be a string + // of JS that's an expr that yields a function, and "data" should be + // an object that will be added as an additional argument when that + // function is called. + // @param target The object that will be "this" for each function + // execution. + // @param args Array of arguments to be passed to the functions. (The + // same arguments will be passed to all functions.) + function evalAndRun(tasks, target, args) { + if (tasks) { + forEach(tasks, function(task) { + var theseArgs = args; + if (typeof(task) === "object") { + theseArgs = theseArgs.concat([task.data]); + task = task.code; + } + var taskFunc = eval("(" + task + ")"); + if (typeof(taskFunc) !== "function") { + throw new Error("Task must be a function! Source:\n" + task); + } + taskFunc.apply(target, theseArgs); + }); + } + } + + function initSizing(el) { + var sizing = sizingPolicy(el); + if (!sizing) + return; + + var cel = document.getElementById("htmlwidget_container"); + if (!cel) + return; + + if (typeof(sizing.padding) !== "undefined") { + document.body.style.margin = "0"; + document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); + } + + if (sizing.fill) { + document.body.style.overflow = "hidden"; + document.body.style.width = "100%"; + document.body.style.height = "100%"; + document.documentElement.style.width = "100%"; + document.documentElement.style.height = "100%"; + if (cel) { + cel.style.position = "absolute"; + var pad = unpackPadding(sizing.padding); + cel.style.top = pad.top + "px"; + cel.style.right = pad.right + "px"; + cel.style.bottom = pad.bottom + "px"; + cel.style.left = pad.left + "px"; + el.style.width = "100%"; + el.style.height = "100%"; + } + + return { + getWidth: function() { return cel.offsetWidth; }, + getHeight: function() { return cel.offsetHeight; } + }; + + } else { + el.style.width = px(sizing.width); + el.style.height = px(sizing.height); + + return { + getWidth: function() { return el.offsetWidth; }, + getHeight: function() { return el.offsetHeight; } + }; + } + } + + // Default implementations for methods + var defaults = { + find: function(scope) { + return querySelectorAll(scope, "." + this.name); + }, + renderError: function(el, err) { + var $el = $(el); + + this.clearError(el); + + // Add all these error classes, as Shiny does + var errClass = "shiny-output-error"; + if (err.type !== null) { + // use the classes of the error condition as CSS class names + errClass = errClass + " " + $.map(asArray(err.type), function(type) { + return errClass + "-" + type; + }).join(" "); + } + errClass = errClass + " htmlwidgets-error"; + + // Is el inline or block? If inline or inline-block, just display:none it + // and add an inline error. + var display = $el.css("display"); + $el.data("restore-display-mode", display); + + if (display === "inline" || display === "inline-block") { + $el.hide(); + if (err.message !== "") { + var errorSpan = $("").addClass(errClass); + errorSpan.text(err.message); + $el.after(errorSpan); + } + } else if (display === "block") { + // If block, add an error just after the el, set visibility:none on the + // el, and position the error to be on top of the el. + // Mark it with a unique ID and CSS class so we can remove it later. + $el.css("visibility", "hidden"); + if (err.message !== "") { + var errorDiv = $("
").addClass(errClass).css("position", "absolute") + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + // setting width can push out the page size, forcing otherwise + // unnecessary scrollbars to appear and making it impossible for + // the element to shrink; so use max-width instead + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + errorDiv.text(err.message); + $el.after(errorDiv); + + // Really dumb way to keep the size/position of the error in sync with + // the parent element as the window is resized or whatever. + var intId = setInterval(function() { + if (!errorDiv[0].parentElement) { + clearInterval(intId); + return; + } + errorDiv + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + }, 500); + } + } + }, + clearError: function(el) { + var $el = $(el); + var display = $el.data("restore-display-mode"); + $el.data("restore-display-mode", null); + + if (display === "inline" || display === "inline-block") { + if (display) + $el.css("display", display); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } else if (display === "block"){ + $el.css("visibility", "inherit"); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } + }, + sizing: {} + }; + + // Called by widget bindings to register a new type of widget. The definition + // object can contain the following properties: + // - name (required) - A string indicating the binding name, which will be + // used by default as the CSS classname to look for. + // - initialize (optional) - A function(el) that will be called once per + // widget element; if a value is returned, it will be passed as the third + // value to renderValue. + // - renderValue (required) - A function(el, data, initValue) that will be + // called with data. Static contexts will cause this to be called once per + // element; Shiny apps will cause this to be called multiple times per + // element, as the data changes. + window.HTMLWidgets.widget = function(definition) { + if (!definition.name) { + throw new Error("Widget must have a name"); + } + if (!definition.type) { + throw new Error("Widget must have a type"); + } + // Currently we only support output widgets + if (definition.type !== "output") { + throw new Error("Unrecognized widget type '" + definition.type + "'"); + } + // TODO: Verify that .name is a valid CSS classname + + // Support new-style instance-bound definitions. Old-style class-bound + // definitions have one widget "object" per widget per type/class of + // widget; the renderValue and resize methods on such widget objects + // take el and instance arguments, because the widget object can't + // store them. New-style instance-bound definitions have one widget + // object per widget instance; the definition that's passed in doesn't + // provide renderValue or resize methods at all, just the single method + // factory(el, width, height) + // which returns an object that has renderValue(x) and resize(w, h). + // This enables a far more natural programming style for the widget + // author, who can store per-instance state using either OO-style + // instance fields or functional-style closure variables (I guess this + // is in contrast to what can only be called C-style pseudo-OO which is + // what we required before). + if (definition.factory) { + definition = createLegacyDefinitionAdapter(definition); + } + + if (!definition.renderValue) { + throw new Error("Widget must have a renderValue function"); + } + + // For static rendering (non-Shiny), use a simple widget registration + // scheme. We also use this scheme for Shiny apps/documents that also + // contain static widgets. + window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; + // Merge defaults into the definition; don't mutate the original definition. + var staticBinding = extend({}, defaults, definition); + overrideMethod(staticBinding, "find", function(superfunc) { + return function(scope) { + var results = superfunc(scope); + // Filter out Shiny outputs, we only want the static kind + return filterByClass(results, "html-widget-output", false); + }; + }); + window.HTMLWidgets.widgets.push(staticBinding); + + if (shinyMode) { + // Shiny is running. Register the definition with an output binding. + // The definition itself will not be the output binding, instead + // we will make an output binding object that delegates to the + // definition. This is because we foolishly used the same method + // name (renderValue) for htmlwidgets definition and Shiny bindings + // but they actually have quite different semantics (the Shiny + // bindings receive data that includes lots of metadata that it + // strips off before calling htmlwidgets renderValue). We can't + // just ignore the difference because in some widgets it's helpful + // to call this.renderValue() from inside of resize(), and if + // we're not delegating, then that call will go to the Shiny + // version instead of the htmlwidgets version. + + // Merge defaults with definition, without mutating either. + var bindingDef = extend({}, defaults, definition); + + // This object will be our actual Shiny binding. + var shinyBinding = new Shiny.OutputBinding(); + + // With a few exceptions, we'll want to simply use the bindingDef's + // version of methods if they are available, otherwise fall back to + // Shiny's defaults. NOTE: If Shiny's output bindings gain additional + // methods in the future, and we want them to be overrideable by + // HTMLWidget binding definitions, then we'll need to add them to this + // list. + delegateMethod(shinyBinding, bindingDef, "getId"); + delegateMethod(shinyBinding, bindingDef, "onValueChange"); + delegateMethod(shinyBinding, bindingDef, "onValueError"); + delegateMethod(shinyBinding, bindingDef, "renderError"); + delegateMethod(shinyBinding, bindingDef, "clearError"); + delegateMethod(shinyBinding, bindingDef, "showProgress"); + + // The find, renderValue, and resize are handled differently, because we + // want to actually decorate the behavior of the bindingDef methods. + + shinyBinding.find = function(scope) { + var results = bindingDef.find(scope); + + // Only return elements that are Shiny outputs, not static ones + var dynamicResults = results.filter(".html-widget-output"); + + // It's possible that whatever caused Shiny to think there might be + // new dynamic outputs, also caused there to be new static outputs. + // Since there might be lots of different htmlwidgets bindings, we + // schedule execution for later--no need to staticRender multiple + // times. + if (results.length !== dynamicResults.length) + scheduleStaticRender(); + + return dynamicResults; + }; + + // Wrap renderValue to handle initialization, which unfortunately isn't + // supported natively by Shiny at the time of this writing. + + shinyBinding.renderValue = function(el, data) { + Shiny.renderDependencies(data.deps); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var i = 0; data.evals && i < data.evals.length; i++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); + } + if (!bindingDef.renderOnNullValue) { + if (data.x === null) { + el.style.visibility = "hidden"; + return; + } else { + el.style.visibility = "inherit"; + } + } + if (!elementData(el, "initialized")) { + initSizing(el); + + elementData(el, "initialized", true); + if (bindingDef.initialize) { + var result = bindingDef.initialize(el, el.offsetWidth, + el.offsetHeight); + elementData(el, "init_result", result); + } + } + bindingDef.renderValue(el, data.x, elementData(el, "init_result")); + evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]); + }; + + // Only override resize if bindingDef implements it + if (bindingDef.resize) { + shinyBinding.resize = function(el, width, height) { + // Shiny can call resize before initialize/renderValue have been + // called, which doesn't make sense for widgets. + if (elementData(el, "initialized")) { + bindingDef.resize(el, width, height, elementData(el, "init_result")); + } + }; + } + + Shiny.outputBindings.register(shinyBinding, bindingDef.name); + } + }; + + var scheduleStaticRenderTimerId = null; + function scheduleStaticRender() { + if (!scheduleStaticRenderTimerId) { + scheduleStaticRenderTimerId = setTimeout(function() { + scheduleStaticRenderTimerId = null; + window.HTMLWidgets.staticRender(); + }, 1); + } + } + + // Render static widgets after the document finishes loading + // Statically render all elements that are of this widget's class + window.HTMLWidgets.staticRender = function() { + var bindings = window.HTMLWidgets.widgets || []; + forEach(bindings, function(binding) { + var matches = binding.find(document.documentElement); + forEach(matches, function(el) { + var sizeObj = initSizing(el, binding); + + if (hasClass(el, "html-widget-static-bound")) + return; + el.className = el.className + " html-widget-static-bound"; + + var initResult; + if (binding.initialize) { + initResult = binding.initialize(el, + sizeObj ? sizeObj.getWidth() : el.offsetWidth, + sizeObj ? sizeObj.getHeight() : el.offsetHeight + ); + elementData(el, "init_result", initResult); + } + + if (binding.resize) { + var lastSize = {}; + var resizeHandler = function(e) { + var size = { + w: sizeObj ? sizeObj.getWidth() : el.offsetWidth, + h: sizeObj ? sizeObj.getHeight() : el.offsetHeight + }; + if (size.w === 0 && size.h === 0) + return; + if (size.w === lastSize.w && size.h === lastSize.h) + return; + lastSize = size; + binding.resize(el, size.w, size.h, initResult); + }; + + on(window, "resize", resizeHandler); + + // This is needed for cases where we're running in a Shiny + // app, but the widget itself is not a Shiny output, but + // rather a simple static widget. One example of this is + // an rmarkdown document that has runtime:shiny and widget + // that isn't in a render function. Shiny only knows to + // call resize handlers for Shiny outputs, not for static + // widgets, so we do it ourselves. + if (window.jQuery) { + window.jQuery(document).on( + "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets", + resizeHandler + ); + window.jQuery(document).on( + "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets", + resizeHandler + ); + } + + // This is needed for the specific case of ioslides, which + // flips slides between display:none and display:block. + // Ideally we would not have to have ioslide-specific code + // here, but rather have ioslides raise a generic event, + // but the rmarkdown package just went to CRAN so the + // window to getting that fixed may be long. + if (window.addEventListener) { + // It's OK to limit this to window.addEventListener + // browsers because ioslides itself only supports + // such browsers. + on(document, "slideenter", resizeHandler); + on(document, "slideleave", resizeHandler); + } + } + + var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); + if (scriptData) { + var data = JSON.parse(scriptData.textContent || scriptData.text); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var k = 0; data.evals && k < data.evals.length; k++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); + } + binding.renderValue(el, data.x, initResult); + evalAndRun(data.jsHooks.render, initResult, [el, data.x]); + } + }); + }); + + invokePostRenderHandlers(); + } + + // Wait until after the document has loaded to render the widgets. + if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", function() { + document.removeEventListener("DOMContentLoaded", arguments.callee, false); + window.HTMLWidgets.staticRender(); + }, false); + } else if (document.attachEvent) { + document.attachEvent("onreadystatechange", function() { + if (document.readyState === "complete") { + document.detachEvent("onreadystatechange", arguments.callee); + window.HTMLWidgets.staticRender(); + } + }); + } + + + window.HTMLWidgets.getAttachmentUrl = function(depname, key) { + // If no key, default to the first item + if (typeof(key) === "undefined") + key = 1; + + var link = document.getElementById(depname + "-" + key + "-attachment"); + if (!link) { + throw new Error("Attachment " + depname + "/" + key + " not found in document"); + } + return link.getAttribute("href"); + }; + + window.HTMLWidgets.dataframeToD3 = function(df) { + var names = []; + var length; + for (var name in df) { + if (df.hasOwnProperty(name)) + names.push(name); + if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { + throw new Error("All fields must be arrays"); + } else if (typeof(length) !== "undefined" && length !== df[name].length) { + throw new Error("All fields must be arrays of the same length"); + } + length = df[name].length; + } + var results = []; + var item; + for (var row = 0; row < length; row++) { + item = {}; + for (var col = 0; col < names.length; col++) { + item[names[col]] = df[names[col]][row]; + } + results.push(item); + } + return results; + }; + + window.HTMLWidgets.transposeArray2D = function(array) { + if (array.length === 0) return array; + var newArray = array[0].map(function(col, i) { + return array.map(function(row) { + return row[i] + }) + }); + return newArray; + }; + // Split value at splitChar, but allow splitChar to be escaped + // using escapeChar. Any other characters escaped by escapeChar + // will be included as usual (including escapeChar itself). + function splitWithEscape(value, splitChar, escapeChar) { + var results = []; + var escapeMode = false; + var currentResult = ""; + for (var pos = 0; pos < value.length; pos++) { + if (!escapeMode) { + if (value[pos] === splitChar) { + results.push(currentResult); + currentResult = ""; + } else if (value[pos] === escapeChar) { + escapeMode = true; + } else { + currentResult += value[pos]; + } + } else { + currentResult += value[pos]; + escapeMode = false; + } + } + if (currentResult !== "") { + results.push(currentResult); + } + return results; + } + // Function authored by Yihui/JJ Allaire + window.HTMLWidgets.evaluateStringMember = function(o, member) { + var parts = splitWithEscape(member, '.', '\\'); + for (var i = 0, l = parts.length; i < l; i++) { + var part = parts[i]; + // part may be a character or 'numeric' member name + if (o !== null && typeof o === "object" && part in o) { + if (i == (l - 1)) { // if we are at the end of the line then evalulate + if (typeof o[part] === "string") + o[part] = eval("(" + o[part] + ")"); + } else { // otherwise continue to next embedded object + o = o[part]; + } + } + } + }; + + // Retrieve the HTMLWidget instance (i.e. the return value of an + // HTMLWidget binding's initialize() or factory() function) + // associated with an element, or null if none. + window.HTMLWidgets.getInstance = function(el) { + return elementData(el, "init_result"); + }; + + // Finds the first element in the scope that matches the selector, + // and returns the HTMLWidget instance (i.e. the return value of + // an HTMLWidget binding's initialize() or factory() function) + // associated with that element, if any. If no element matches the + // selector, or the first matching element has no HTMLWidget + // instance associated with it, then null is returned. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.find = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var el = scope.querySelector(selector); + if (el === null) { + return null; + } else { + return window.HTMLWidgets.getInstance(el); + } + }; + + // Finds all elements in the scope that match the selector, and + // returns the HTMLWidget instances (i.e. the return values of + // an HTMLWidget binding's initialize() or factory() function) + // associated with the elements, in an array. If elements that + // match the selector don't have an associated HTMLWidget + // instance, the returned array will contain nulls. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.findAll = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var nodes = scope.querySelectorAll(selector); + var results = []; + for (var i = 0; i < nodes.length; i++) { + results.push(window.HTMLWidgets.getInstance(nodes[i])); + } + return results; + }; + + var postRenderHandlers = []; + function invokePostRenderHandlers() { + while (postRenderHandlers.length) { + var handler = postRenderHandlers.shift(); + if (handler) { + handler(); + } + } + } + + // Register the given callback function to be invoked after the + // next time static widgets are rendered. + window.HTMLWidgets.addPostRenderHandler = function(callback) { + postRenderHandlers.push(callback); + }; + + // Takes a new-style instance-bound definition, and returns an + // old-style class-bound definition. This saves us from having + // to rewrite all the logic in this file to accomodate both + // types of definitions. + function createLegacyDefinitionAdapter(defn) { + var result = { + name: defn.name, + type: defn.type, + initialize: function(el, width, height) { + return defn.factory(el, width, height); + }, + renderValue: function(el, x, instance) { + return instance.renderValue(x); + }, + resize: function(el, width, height, instance) { + return instance.resize(width, height); + } + }; + + if (defn.find) + result.find = defn.find; + if (defn.renderError) + result.renderError = defn.renderError; + if (defn.clearError) + result.clearError = defn.clearError; + + return result; + } +})(); + diff --git a/_files/slides/will-drake/graph1_files/vis-4.20.0/img/network/acceptDeleteIcon.png b/_files/slides/will-drake/graph1_files/vis-4.20.0/img/network/acceptDeleteIcon.png new file mode 100755 index 0000000000000000000000000000000000000000..02a062852c2a8ea7610b64f5d6f79ce4953c3b42 GIT binary patch literal 20675 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

|#V-x46+1BId1SnF`o)!|KGJUGs&sOwUB zRzUtFZd_dFlaAkSgF1s4jec0ai(89EZTao;X6t%dhTG8r?7>a*g!$n4b|5EgGY5$? zI$S?|$BOBx-~%!@PUxb0iJwZkNA-_qR_KfB#~vy=G*nk4<8}M($s(D_;iT5MR-6;L=DdDJOF_k?eh^ZIsZqIy7kAJ%`s@QdLY!~Rqf)EaeBb*s9v zPQKc1Opit-qEfd}&C{i&(>dMQ%*T8KN=>;KN%grtFf%$4`8@qO|KNV{B=Bul-=MRt zH$NQB5zA9stAakGXAxzkdHQ#KVdY%0qt$y; zWy|1GZ{w=fgXC_(vs8vEjws}vthQKf@gxCf#;5Q>B+*CE~9I?jEYU%HjQn-+^!FXvmwsu2ENOXRyn_Ros_|bSWLt=$K-W zUhzcHgO3&a0*9m`X?JfV_np3ySI|&FX!GpweEqUtHDib1nf%0;iGtMC-91-U4>(>K z{rJhK7o2!cvA61Q8Mfm54a~J_V$Pk`ds@2o7wkXSf3Zi7bv(I>>zbmrk4f#X{)Bkj z*}J29a#rWg^+PU5uLbm^pSadiIcsWa0Q*CH#*p3x@G4$fJgO@d`z6%RY5 zJGAX>V;^mKVHS404S{h9+B#u>hurh}(1Uo=`?llh z3F#rBYM=Yud(V~aAI7&1>=vSpR|?agbr{Vb8`i4UYTfz%8vT7q@6bA@YfdQ_(QcFx z`Uqw&{(*HYcg*!Y9`8H2yEY(mqP@>#lKbf4wz;^E zu|n9DvB|N`5vwEKWN7N3P|tP!W?#?bVA}|7@)_cD=jNJ=#l^s(Q=M+|K0cK36p z<0a$c=eanOCT8$()m{M57bM#|)156X(0Cd}4M(7P5Y+-HzKlW?05H0NzBs%$kq+`8 zlE_qT+3~6yvLG@+Th>Y45@P9#C3=xfgZ+qh!B+P8U~fE%AgimxhY3V81Smv04irf7 zq57i(wPnBRq8au=Ggub%)rIb@EvvuKA;{Ts8wgADBZAb`)K&2i7!;&|QiG}^P*A7} z2nK<|!B7YohEjz>(FhGR6bbtFlGWj3SQtNoC)(D~_*-|3|FmVj=yYE+7#t7~pcVjE zqxq4*P!tLUhQPoum@30V)jxOKwPj@& zI%2-QofpNI*%8(M8#@L?a3IbX3{``GmkT1`nK8b5{d~R-jerLeeTWnymF~}ogDxA# zKx%2p3|+Q63T4?yf4b2=#uzZ1eY7B!q8tX^I(P@76 zG@6gj;&T0QA;!24Q*f_KCZN>`>K+gz0ivqz z34^F=;t&W`9Gqc!dP1RaI0AyuKzMw`VQINE{7=$`H2mI$z4J|)z>qf5*FeIIQAiDh zCfo=Pg`yCe28K|$5zN3y1BKFuewSSm`X^ayKQbfd;e3|(ER1|XUIT7`gz4)WqM&~- zzl_A6x-ljDGZt6Sl10Z@dS5e|9dXYeTfZOhA%D$GzBoUB;=;z&mi@kSnW>DKsTN|s zCIB=JzmU^(@C&P%NWg&q(E4Lo%*bzHkoh{tNiw3)u*&iH2x=&m;dk_G)2RE1e*a9SW8_mDqdX=0`RjQ4(I_CCudfdok6Xx^;C)oWxB8A*ntGeMAGYB)b;7?=F)j{lN$7IQ zw11~)TPi61?EC%y#ik`e{OOipMl&4=b^Nh1(-81=w%%}X?Y9A^Bkv~BTcB^`fT z69bT$5f%wWA(5&uHAc<6tltuyg)1*KqvmDQU|+MQ4kPAIZ9n@vFVwC+d%xDE8ZZb1 z1z}w4GhW|9mmdB()aCC(mmdB(^hcxvl}y)xee3O~<|R=Jmxqf`?HIR2hzqCobJNe> z+sJ`LA7?`{GUziowRk3MHlw8y6D=D+U`EE0mZ%Y+OtftQc%utWaY5uyHX_uwt-ru|kRI!^Xu# z!HU7g#R?^+4;vQ~1uF&{7b}#QK5Se}6s#C*T&z%H`mk{^QLtjLaj`;)>BGjwM8S%| z#>EOHrVkqz69p><8y72-m_BS=OcbmbY+S5RV*0RgF;TE$uyL_MiRr_}#YDl1!N$c3 zC8iG>7ZU|51{)VEl$btjTucGUzit)F&_aHMRr?~)AdpVY1@nJk8=NI2DPE);xh>d12?K`1Ues{O)lsTQFJ z77tsU>p>4}IcMY0JyyL(E~n=b8ldhcA}G58KG+a5>tJ`>Sgh7P^FZsD)(#i% z1Lo3OR&)njB>^9fUVm8J=WXuIe}#}y*?T%tLWHAJ7gK&7dOgM+!rN21cMD^<@WH9O zvsD6(8|B^i8fTTu2TWdF`6O1E9S@~rgR&xdn{#-P?dMpa!I`}bOJ(BtFdbHBQM zPxV_p^;PQ)!z{=0kI~e0`o=D`#xyEaBK#U{LWXWRtaf`?gb5lR6e!QoI*n_t{B5`8 zvEr1PI`Om(v2*)pcFRZItt{=~tl%7|5&6|v=JV&zUM_nf(#P%OYMZ;Y)W){cYqhkS zpG9juqKv-jdJ+P8wT)00NPieAbAM#J773py{{;&uZr%U##Hx-sB_EgG(cQEIB>{Vq zk|l-T5;z>&Lh7c!oD1nUA!}+sd?8@m^!C`PiD_`cz~?u1cg(+FVcvxo;Zz93s&5d3mYO2OtzI0BX0~V zN?jAyOi)nq7FmTcJU;XA+!|o2>$ZytrO7(uAVfV*?gGdsoP*OqnWI)%cvb({tX+jH z$F1C8+EZGb>p;+(UxJiAZxSne$}vSILeeabtAyxF0R6A>!O4(~azi;{lO<#~2sBAz z;^WbJ;AHCCcM3`&9X?r)=OD$g2ggFIXtX=mH=D$UOISR&Hw-(u)%O+uN3^KY29>GY zq23mU(x+Y0vD5SCt@+EJoDk5I6p&fDIYvYxRKE3<(By8aw#J7G+D+s919V5%JQWhG z^L(Z|kVJFStj5>9k^WWth8s+H%v_^XK>{iRk?^Ou%QDRy^~(C1(;%9H=-OA2jYGQhFBzQjiWe>InzSB>tc$Yt{$(1`Mu-3MtdoQkgil$@Hr8cux8Va4JhrZA zIxat-^)ha%b}}HgTYhy`;+BZ+ov_iBVWsu=GD6(OK69J;=(Sj7$G?Wg|MGhNSWd`? zLnfwrnKg!7^0JsNNA(stb*`Hx<^3+9nbYO-oF$l|7G1k6uKifoVsYIa6-D5_(Ud&f zL(R74GY=GK(z~}?WgB|mt(J-e^!WJsq4-9D7gJ|kNA8S-ojm=7cURkt@qgI7UWuF-<)?i-Qn}&TolNZqXNC@Ty3V%+ZQtjs65JL%RWRG!%Cnu{ zCwXsUr=y3n=BmHP;~C?>X~&o%l6Q z*0M6oWB>q=wY4F;f}bjax3nbq_gRR^DEKii$i|BY0P~duZwVkH3-pk2W?5LQS>wmy zb9jE7Ac(Dn1tf^e@nr=t03h^fwj0ykt#^sZNXL7UeO%;0dyea3X^1Onf8?TM9X-u? z@^*2Wxlb0m)F@b5&QZO2G;VfcVr0T%7ySkMWFAX(Y33zHAB)>}d+ho4WBv~-M_%2X zxbTSBb80BNv`MO3dO@mzJC zUInd|x&laq-k&cGR6Ax?Bh_Lj7rr5-Z;*)GBT>yyHnNwFTm+bfCz4J8W>ylB*@t!9 zfTME&?*^LBOJEHQ@LsX&)qNl`do+E!1hD>~=3PGqb=K$#i0MaEcW+gCZJK%j&ODh!ElMXDhdgp2Uc2$Xd zj~+-W{hV>RHr_I7y)hFF{@83{ry+1=3sGWwGOS=DZT9c>E95Es>K7vb@UDVW^NX(Z z>`1@p=S?A#gQnxwN0$SUzP1Op0>CD+Hr)MoscF450FaMH>76lGeP5%ZUoELtGq%H>SZj$cayJyt(yb-^csbi{L{Pv~<$-%FAT#_>hTKJJF zol~P*88vT?`Aumhs^-%;37>rwtwd?%^q5i28k;$a`?Vpr;ug6;?UM~{P_FyjAs#mB z?@YL}@Ua`LE+?+FNOjIv91%#pIU-7c9yPaLe{s<;}lG=c6)`mK@Ez$34Hy zBmtY-bFav6;nO6dMLn|mwThI%^#CNiu9kGxNPk`mt>G;6)PkbAWoOo&nq3h;OlvwD zGDk7WvU(nNP6!D?)iAfAI8dA(+Y~_5v@r@#=i%nf-s5s@1vI6={=Cj*g%8(Ne9)*^ zijBV3L&YQ|g#7k6i|aUT#dr(!it?Xk*`EE`y+yIbs)g;U)vJFp6JxVXE9KTxy8k&T z{6T%ls+%!g*bB|*guI&Z6 z?h1xU>qy19Wv-`PVhfZo+cNNXqnFs)A1}^3bbpzjvfl{n^lScQh4w=lPHFc%TN-+; zU#GpE{XS%Y?B2!E^>IwyrI{*HD$J!JDyI)SoLG8)|I&JQBo5VgxF>yKI>&>eSEjdP zaq?}MLw1LB4yo!P+)oysDC{Vl?=j@j;GT4HliSV`D-Q#=mnY}_l3L_Zn7yXYP1TKg za&v&GLYN6&74Sy=~}Pg`0Vs;}uUTeNpul;L%qvv;5D z2-d4OJg#1`-=y$lF5bex&cL(Ob?Bh4snpBETSv3_PV;(n^V5bR_H`^8T=`<9>IsZP zIf}8tzc4i|l~QC=UFbUfvVyWp z4BK;E>rQwLlvT20*5SR5Q#{sfEVU}mE?)kyqPQYoA-~)y#i=OgA+z?(+p=3_Coe8N z)BRYowWKVtY$uiJqs+W`qoj5qr7C6T<()r{n@GvVK9MU@U#A|yJI`H2SWD>0Xv`Wg z-Ff4EYA=FGX_9YxZ1A#7sbS@HR<>K_eQTyNvz!+_6t_R#es=>rjR?vxy$S#k2GN(Who_Dn*~l8j(TAligb zg^E6q{L@xap{8R>8S@SEm2YsvDMrk>i5u+w7ZDnVq;C0_{&Z@t7fhy%bmF!9I^9Ql zQsVPDI<*CV&UkBB ztIW&Ab64$MD|yQJ(!Mgizz5Dn{hnzh5mh?jj{Z@bYHshYxgg=+H{V01J7#BJ+oS%C z&J=`K=LPD=z1gb7#qs+}7PTs;E#CE5w=J|=HI{SxYI@tj^Cye0m(!bkTYP(8b-;4g z%cT~ky-Jf~%RYH}Ubb`X`TpVGEn5+3cXeAUqRTAGk6kssRLRJ{)p&Qcsr%3F@7+JT zV+UH=FHj$ivYQ7~w^#m-`Sn5T`pS`U;;k#K9ugjo4}2dm#%#w*M@&oN3wuXX#{xGN zI|Xj-ub+xe&-3zTCa#&aI z$h^)G4Ozm|;Dqg`o=e^TAy}QMj@UxVc$Z<7>6S6J-e>(~=R3sahi^K=kA=%s5Th9QcO+#&{y-zH@y=Rz*fh`3C>;f$*ve+kHoRRdaBS?eD9? z-Y%JZ_#g*w(q1(b&KbEeGTgbOJ%YPpys@F;Nyv(U;!5Yr&F{_n&7WAb$38G!KhgGh zux;0t>X4&D&282rk}=Uu6UoC#3oYg*r6)D)mEGHyV?@N`Uzl>odq3q{G|`)Ma+D|X zCK^hVmmnfWAM`zHY(CtaoAxd(jS$vLwR4}GE;z*+&oT#n^V;ZqzP2sBP0oJ!~T zFyNtqL0};Y0LG@FK~$PQgAegxFj;I9=wQWFD1=2ffqEJ`A{~P)7=A39a4y3w+{v95 z?oY$hp{7I`<4^)95Xj(DA)$c*Y#t%h1o~N*0NR3P1Qhbwh3{_yH5YUUp*XIASa7%u zh#}k%Mnj@e5F8$kGQ{9fD18VTi84T-kO(v$hC&fAI06a_`SOAiWkAcAOZO$XlC8dU z2mWUQ_2ct{2na+-NC-T{0M6ku5hy$!k3gakXfzD;fbqiEd}=6+&C{9^`Km)^@Mv6C z5TC_iLj<~1AI>(u2^1>mNcj44UV%Zvj@Y~}>_Cc$P-+kY1xF%g3Zm15F+tn70iTCP zry&>tj6epP&jaI7Gsb~P9UXp){>4B9NB%O55z6|DFu{?ju+M91 zYO0Mv>I4fegUaV{-8q~9;?#2eb|D5{hv|B<*mO<^Z>2Hfd+%>+=9>_MOyx6(;F`w3 zkSG`$?T*3|&=`UtY84ViKq9A!OnH8%;Rx;@I+ahIrhA0UF8qH-|KMb zEZ;DZRK9sm)1cD`z8r2Kl}}^^Qke`y5SwX?_|`bh^Yg+b*s^(iDx1czB@@90IEzIm z_+Wi7NVFjxo_`bJSPaX`z3Tb>_0boJS3q<|7!nKptm6 z!lKR1$#~S?%g-S3r*3RmJaBP^OARDzh#34lPQ333{dCRoi3x-sGpt>18PLW)o%4{NI{18iyUs;Qlk24$P-iusmgOc|>0>ClEpn3JPG+sDiAC2xim2)OW(t z1j6S)rhWHK5t^p)Ke#~Y3@+=RNh;GuDZ~W%e|FCQb{Z9}{Fs_n@uq}KeIx#{Ciz-M z{ket_)VpBWMxI)jR)Xy$_(J{1B@0+}fY%I!X~4ghi=rmc@52AE4Zo<<|CNeyYGBhs zXHw?;J4NGE4>L%7>**`;X<(<7D8|C%M6lolaJY^fI)ez-12Z*G)BJWA{9S3y)Xz#p zo~tzpVryxEMd7hn7#a@N%rp8;(-B;G5x|-ktie8KO(Gccr?&6?DT3NHVB6=~6o*D4 z@ksDmAAEfYoqqWHP_MraoqqWH&~K3*Y!;u0{?glb&C{X;mxohO-N0KS48f^=-}Jrr z8dfMHfI?=0*Csqc<&DOCiTVD(jDcQ%6*%p{m%yp5Iqk;9=Or=K3f>k0@5ms8w`8WR z7Gb6TpEtgp(SKfBs3`74h(Z)Yj7tS26eZ;tgC`2*DxJ02O^bz9{q7cOp;}V6E z&_|3*h(Z)Yj7t&L4=q09fBc5G)tTfaE9Xi<-_}5uDeWvEYu3I_ zLDi`+e+x{mR~SLprf_uh4?|GKw-QkM>6%tLtBU1T+eNMltXbmb$Fa}t)OcurxPkuB zp3T0JGBn;;UVgO`-}N?h4TT~Ncqc@mBmoHYXV;U8&^N$6E3zS(UehV9&^!oeNQ~N^ zeq{YtB2GGvr#9H2zwP=vD47d(9Xld;}@T^+7b{oIpxZ*p%d48hP+nj=oCuu zm0U(zT3QyDK55H0)ZPPZtPE9%iHY$}&{UJ#Wlc6A?}?UL7;d7`MECOYn)QRZ?jk)E z4UOO{J3h3ekL9h`NjWJ6to8J)>3j1A(tw60-&|ZrLC_Wy7Z=mg;2W29mh+gBt<~O0 zdK>#Vku60VaJ8l>MT1O$b zs%pISmSL80SW5#wR@)YLzn6cKOjgfWhdJbDbKLb)O|+DprHg)dcXuwYr_nLMvzm@x zt}YkbG&thPEPW!kk_lBa3i94$zi$0{+Q>jVPij`wJ~GsWOr}sMXSOyrcXV6{RH$et zPQH0iw59RG*7&$A@}AqbZ>siYE9baC-v17FJd3jJBTSY7utEQ-szLbW{ynBn;l;brvHs*}1TeE4?m3t2# z{+?G>hE+?d@6OHDEGXPE8uW93NzDw2|t_Z~bLwl6v3_4KJZME;Dtf}A?xeO_tl z5bj5_(~p=X8!NC!e>^aGt-T_o2@ZpK#Yt!JP6G zuXj1v4$c>1i@$$uJlUr{dv!>o-GTR~b1!W(Qd9tktGn#SC0#Ex2e{>l=sLaPwSBF% zu?tsO9YdjUxQqT_VPTKDy6A_RdJKBHyO-ymIB}(=Z+O**4U!)%vvfd8GXVGvL^km@2*2}uao6pTaJ!D;B}NsM3N zoMSXQD$-yinxmu;>gJ|oXJ>byu&^%f_2{Qhl^z}s6582GJM=zWzkdA@p0N=Iheu@C z9j{hZRn5KMd-PG?k)lGG#t#aXE~k=h==B{{+m*Kw+Ux4$l;ZaoqtUK|BV&Es>`wHu zAFIfF_ypO@5#xk?`}S3<%`~7b9`3BXd|76tM$%+$d=~HKIpcc#)nupqt4+S8*`&C&Q0}b9 zusxCTK2dR%q_`vCq+SK*77F#-ur4apIPt0^5WvH~?e?vd5=td1 zA&RmTLQ*e^MA`l`sY$)w_cy=gzg^eNb&a{5=f1z^JfCyUJ@@m>bv*~|Y)r*P=3HQXI)nj(xKFqpv<0Sw@AQu%tT32!kAq4u?y}u2xqPS!fZZbgo&( z{*Dw5C!p})Y!rWVbodb&dyNH$L|+JXE1i$tdm-x3qw&s=3p<-iN8i*;U3-q{%^6N9 ztP?61UU13`VXqawAk%2MRL9<`iptJz&GiwYD`~(&;Xfb9=dR04s0iGZ}pkc-~OwRsDB)mfwxujm!8 zMBySf34?uwTwFAltJRt>Su3rLpNCIcuX#5pQ4St~lZddyh4SI+1jD_j&aWB}@Z2hP)_?S{#}&!- z*MPHqEiS_}HXGczW5vzQJ>A_eEGmpP;UBr|nj+ubR_-$C^(9PiVsxbA*6WoK@GTLh z0%IL_AAhpCw5;y9$UgVBH!-FY*TtqM6rUuiG`o`7!NUK*0_SUq~!CV+(=*v!&`nS4R2kQ2-b!q276>Cd?o1xwo^9IX!4F zX?k`Q5bj}q+!p}08n4uJdQ@moB@6(@XCu@L3>7}zS*lSkxa`jSwmV`I+qL%@t*p3f zw9rVD7{1JJ`2uLM1elD1d2jMXxOIUI5VIh!dC>HEz?9oTGg zGj`nr0KR8pf2k?#M8p+){bviVVT&_#;EQ&n7?dyDG1LMEhLtlWb4P zmKY4S3R?blsSu*V3#wUp&*-wQhDaQt`m%D)g6vB9f(<$RB?m_cb(fg}iz0C4BH98> zBM^SMp_!|dtIZ3u4A8QbNU0VP9TEP0_IFj4<1#F-uD&VtrDCZ&9CpCfOhctCk;n16kw@s*}OR zFt^Erf^PS$?%855+Mm6=t*f*WBu0=c4AfBCDW1LGKSHZw_2ru8&;a$4gh|Dc!}?j7 z=TKOL1;VA!VfciHflyb1@7QUEjYzLrdi-$Mp;yv_YhJHWNJCl`!$_NVW}S*Z<(h4l zZJ%xWzDzr>KRqR_3|Hbd9wA{^WudxR)s!4lJ3pn@vDxuux@fwrwLW?zPcv)hC53Y( z#?0G3=>rL=x3-3-T2a$q1(o%FUA7A{=``v6HGRZ%fvaHQf|Y`;3u>3@-PiJ^>M261 zT0h!jx7=Hgy@WrBkMGs!HUEY=6l^0eEu2x!YY5mT6Aj!eH zIBiYZI;(Y7RW*-m&et?0Y9;H#p2K^Sdy}6hw_o4BF>s?sQAW`XlKGYHjcINJMWsHG z8&PhTT%9*=DKyDV$z9b{l3S84m0oNUXOo@UM7~$>vFKq@=5@J(o)?0xc}3nuyYOW9 zCFJY(^X?7AmBsD4x$EepzL5BVW{GUYjf!FPtA5hx4d_=%wWkLRcHRGUst-bTty@_4 z0?}2pxOzfi1`f2Hd5k=>Ce;l=e{$~uw!^-s-azckN$Ae@oG@FgZ3OvRuL^_!iFL_+ zUU2;qGiww-xCHYV<9DVD)1{~L3jWG%+hd*b>kqD1+uoz5Zi{Tk?pB#5P6tod1L@(b z_{jVRBMc)p%^M#J4pq7xZGdhieZJD%Z+PTvv7wA%%%0pmJ$G`IJRkgVELUl?H=#DR zmLd^p7xuR4i4gt`{_wr91*(w;B3NdOuTx%&b%iWRfIQej z3p!VO_furLY^LTS4fLt?R#7&(Cq5W1RL_t-vTA5Cb5*ox&|Ss5WMxRbc74}K`l zHbZ9W*1^aBh%MC$T6rIFNu#HDpK9i@QY&$*m&xc<*`xrFH(VcG2HSf)_L#3xmXdW` z5&0eYjYmLr4k_}=)P0}B*CESK3O(Fecr0hW8(6f+DDAD&Mz!baLRZKn7mwRD2OptM zWv8yK>3>}KsP&l6>A^G8{fq7{>O5X_X}_flSkd)OS zkvVuMPr7wUyv*(wYHfi%3J0i#xSE+=QB17!Xz=KJ^9r20N#ayi{F`_QAMxgv ztK#h&uJ(_7#AM`P2_6 zgp__p{?XXFsdRJ_^YB)yGoQ0{qemlY+K^9Y#q*NhZmTN#mQ`H{G;-jHz#W_bPb8v~`8#X{4T8kj1dmLrP2Eo~Lo- zp}Hd}CsTHXX?|(j-g>?$q?b_JzC)5acyl46vjI1KxOZLYy4uY{HyA@#T6-3|+;B}b!uOJDhv83JKfZniqd~sHXKYH zy+1nAF8eafPj#}kx}=$@I*?mxTe|Jj`hLS^?8^g<2AihZUJSPF-cimxJ6zvpIw}~s zw{9wSBt{ZDKPEAzdcXMo_o=!V6za8s-(=rJI<}5jw>ovn)cL9Eyd|=bu(8JX&ui-w z>d(aw#mC+D4!tz_uKc}Rerx63%H_8n1|ncvKW!NAzr$=}Dh^&~m$dB;1?^Uw_WW{r z#PLb`c${2Z+_V6H!tewE0d55VLkWtLE5p^=3QeGTYvPGicamnHH;q+@0)U=DAPrC0 zNn(K9No0zTzVcwnZDkOJsITmzWev5aVM(48vtU1xW3Y`AA$TVNMN~Gxi0TERSpwc9 z1|AgX?d3y92kI+-(?zpvb~8j7^v#8_Q(xJT-66=;+75)J`jJ3dnp$826b=LFpfq7x zNE8gF0fIwe2nY-cfuq1M7#gXAhG~PozmzeeEKARi=z(@HHu>Hi>py*EPX>dAhCrB1 zrX~}iN%bQ`U?>y{0)<21a4^dQOb_y5-~+)vbd?#AA3DY)I>C=ZV^F9*Ahs^vo$Alf zS5{_s#Cd%`FK-&BBOm&Ab}WjJKs*fs(}Y6i3L+9XF*JWauWv&m5+Ecmk~hhRL1)Fm z=8R(@wYKJj&e@%}_neV*1}=bg2H%Oy8A*2vqLCmDBs$gKk3hl&utuUX*Wl?42hvZt zTu8Cp=Ma>hdaSgXgCtB z1zQV+p`p-OA~T-9X;`!N4-wD6&r*Sdp-3kf5{=MBYw65Z`Nj8l9V(IH5yX|sPtREz zL;~7_>gSDTU?|>rG6_QSA?rbYHqP?=ws6trK6D1&hd?qn#;_VRDHI|a<>9Ucg=!(e zcpY6B7)C_uf>9(C39O|}BBBVoBzGNx_BR~X*0aO^ByCJ3__O!UcWEL^8fU1Z4L3n) z>mYRzI0OuaLh2eB!w@*Q5l#n%GKBq*ofY~gSzA8}E9c?8X8Ev3&X(6f7-_=|4UJK- zzn7mw;!oX}QRuA26*Oznv6kMqjOIx4{k8SS0WZq8%tXWc(Mjx$tFQcH=WIT(tyGybqZ~#6W(W)sKe% zPcx=NBI4n2BoqwCBVk|!3CYTN1Z@P^T?gTgXVoRFOo#t*e*f&O&6)lG6SMZqHyby5 z=Kt2D5vV=^B)@+q)3Nd?o>iWb{OA}DKdLtfPosHJ2zYkZgar5yzt?x1(gehyf@Xd9 z%@CTU@jtjgi6lSDKa*5ujgo^2^#AOf|Lru&UHLIHt-MVMn)ycjwI=ydM*X>lVb{B? zvdwsAVVbbF6Z;GGAD1kws)KdSfSv{XN4dyt68$awmu>i6o%pX*j57n96*`wP_1`HP zXL^`J;%84kh|dB$t3=V`BqubM>P7XlrV>dQRy{CR^DNDuhgrWX+0Fc{grPf_8iCAl zSZx?eTN@15WYx@b`pwc|UwNTfH7~0M`<68^te8Kw{qFC|u3f$SztyHXa3~Z7WnJsD zUf)A!AO1bm?e9ZpAO1b`XQZ$V8%jtqozOJ>$;;Z*wn zdE@69{pYngio8xZD7Z0rxVWLj@!{d(py0;f;o^o8$A^cDgMu4_hl?9Z93LJo4hn7z z9xiSuaeR2VI4HO=c(}Ns#PQ+b;-KKh;Njwi632&!i-Uq2gNKV7N*o^^E)EKA3?43S zC~9xe_FZVVnSZYXhl zc(^zyxG{LRxS_=H;o;(-;KtzL;)W8(hlh)Uf*XT}iyKNDA093a3T_M@E^a7se0aDx zD7Z0rxVWLj@!{d(py0;f;o^o8$A^cDgMu4_hl?9Z93LJo4hn9Jzr`i`^C1T$AJ&r% zn5;(_Xi^n0tj8aK2xbn}01&(i0K)eIz?W&(XCDCgLjmC3b^t&p0KgLJ@oo1_0AN1Y z+}O}5u;s|9-CoZ|8hABl7N( z3&-9Pl$bX-{rb@q{uV*mNd2TyQc}`~;4(*=ROhu-$wq=j$`g;e`GJ}}y0m#4hCv`p zev5ll+uOstjrth!6fduf1qC0_p?#G#NtbY|gtja`Ul^dhOR{eJ*zz-$plJG5nIdJXN^LVe8^G18+13PV^uR9IrFOsDA5R@eQ z8kN3Qt~O&vJD!W~IU@sE9)@i4RgQbuEl>mr$u#cB5S^INj2=ui9q%s}+MiH34Hx@7 zQuyKanu*qdGy)QPlW!zt0R)-C0kT;LH~H=^g}4#eyelibJCq{U8}HkviO=0xC8^2aq~9esn8`c%N07e zUf3S)VEIR9Gs9*4U|D1Jp;ciw+i#sI5;LE$4ZSDW8-DJwVw2K)8CS*g!yX@=2?U3p z2oa0)+7*@mZm_#elDvq2tR`sr2i=4fAPH#xv5Fy3${CYPrT0y1?NrMjHGg`QgTz>V zuEH@yJQ;h+8|0b;!v?#rJBbt^%hyk}#(31P4bRGRAX~XckZ{IS|IAneCcCs=y+&L z(d2Ocy_Nu`qe3!htVe54 zWk-&YH>@|UYN@ZQ)M?mxoBp$azWIdCK26Rbu0JcR#p94+4 zcH%>~=0}@k7DL_Ao)S*TMfzVl-R7U#@}hCsME`jHJ*vm#nhDjeXG{4AJ^H)6&uS?@ z@|m9$LRa+d)DUdEv*N3(l=L&ZU|q{7?e+c9V%Ma zpqwYIp13KZi&7c_x%@|=nq)?}?yHIBj&u7nV~d%CTjxapS%_6`^TkumzrIoRpmWaeUH|*0^~e zY=2XSBh$4pJ>`ML1x+u-9+UYpU!6U#Kf?PCl=-WySYW+-s2dz>_Te@k5Zw6g?VX!D REZGm4F~`{$=NWC^^ItUJ)cF7a literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph1_files/vis-4.20.0/img/network/cross.png b/_files/slides/will-drake/graph1_files/vis-4.20.0/img/network/cross.png new file mode 100755 index 0000000000000000000000000000000000000000..9cbd189ab6ae99ed5794c30a12ddc0480987f29f GIT binary patch literal 18303 zcmeI33p7;g-^aHIkxS)Lq{gj~xtbZx7~?XoxrLF@eaviQa+zVKTsk>aN|%3<$}NuS z6uEU#N+?OXD5BGql91%k8;Mil-7cYB&3oSUKks_if34YTjhWx`dw$>Nc|Ol?|MuS2 z+Pjv!+AGLu$N>PL;OJoE0e#Did}O7ezm*=|51_9Zd6oEw)$ zTfW?%C*%qId3=N;jfUWd^8C1gAOM6vOZVi^Jv-FQ`(J#pc8ZHW=*06-l|^`1?}=7P zSY)I77+Dd8O%8ZlTw=a6Hs=M*b-EvQ4TD6bu+jcx|_nptpn~w)P zD(!!LZ|K5fYI|O9dSR_hx$Mlt4kqq|=$WUi7tDIO?Pg_Fb1TX+Moy0pD9aYIwFQH^ z62L$dg|bAaT;>WO5&l447ASW~E62>=Ijr>7I%Ty)^md7IVZu@;*=QBOGIF2wNx;%h zB04>JktdKT1+1@T`L+Pdk-+-JzrKC|M5hm=Y?c649n@Bp$V>nbbHF$oz~2nWt6j0% z7GPii6+fp+67U2GU>v>u9Dp+yf$|z<`E!8mOaS8^7i$PeZ3fog($x(Iwx<9pc0Jyd z_e%Zsbac?rG5u~S z|F!a&8~gY8ol~;B0AzMN^X}!3u(3V5zxe6Xw$|1s%POr`G4FV98RAr|EB77@{40v` zrN8gxl~;N(xHU2MQUfn5?tXASF~9b}jP1USujB2%T$CUFqV+(h($Tk=VWiUHK09Qe zP3qoW+zFjs)&~r4=+_UkUo{zjmZUZjfHNDY5}Ol{*=tymADtE}Glb=@`T?M)gm>)^ z16j#v|832+VZ-k%2JJKTfoMO+10evg)!^Q59a76wUcc zpO~^4*9=NyW=L7xlAXiUeikR;yPKiAPgXr8c0l`@gVgLjdWhR`D(*T?2?PhM$8I{p z%R#HhJaigq=W4sl31+td+}1BUO6{=+W6rso|1t9dtvK6MW4qlk`TJ}kHZ@)?Gwpup zc@6Wu#G~!^bN!W`#ZzfFG39UO%9vCJVo+7rtAGq+0P%!)k8l3jhQ z+OuI&vtw+_XAq^rtP#uwRt^kjhU*iDY{Yy${H$j)OlL@LcduBilbG#ve$nMwe^t)) z#bI|c9E^1z&5oagR^A*(t2EV{y^DrhT)cmpVrLWJB&}I;T<$|6K_9b z2b_~39W+KPxfR=*-g>>&q*b$3yJwYLy02x(?*pE%3_R{^ST?UsxeebY4JPBPypE@O zJkLH#pGAmYX`O$x$m6v8&g?n(jj5!2+teJLPUIgu^gzR3-M^oE`i=1NtmlUoxF+5A zuCMN}f0Oh^@MVQ)byab2!;Ny2bBNK7+fYeXcuScccC8o_Tg%OKBBCo;9y9+*mt6A$P~d7((Tu zv-h6QiG86AYkKTiR7BVf#Ap=K*t~1&VvXXkEcE3=0XZXrc z^CaH67z?fr$T^&Jn33y{>z-@hSw<}A%1S?3W?SO(IY!ay=CZ}B7u$2~JJrLb_@v=UGiNjBoA>VCJ9h6;3L(uL`xw`r)}Hn_t?A)*H8Hm($j2R1y`Hrdjp; zR$1#ZVPD9a=E(ZK^t8gXimvR2)7`{wZuic{-|pgnGtBTY5!}Cii}upJt$1ybOut|il zx<;Cy$>x*IVVf6e9IPAZG;$fih?;}iKzU|*8GqTL3gzc>_aP&l;TY&NpM)|hAO;6s zY5LODyYp50EBThq>dEL^YxogIYbrj(W~rS*%{C?L<-GRWRGkOLo*TLmyyqf%!6BL30fqbXru!h}imXq* zp|3P}Y$S7z1A6;iy|?QQ>2Pkwl6zfu3-2`SH$C$1x8bhY6|$M9K0iE(*a&56& zIvXE%t#MMyIu}bl9PSWcn#bAY}&(13}tvKJ+_tCZiopjHjp=4VTt@!v=%B4~;>vqjOGYk6f z^bhn;bYge?^9#(!1HpCOnwv{M;{SZuu&T6wkb3({gO`Mt%R|41;Ah9rh5Z%lkXZ7(sfg^UUE=ISFz}E@gEPh>domM@sE~t+AH2%cx5R4T^Lepf!NN^i94+()>(ri9yEM<#&#Qb_U3R-mt$XzLMdTOz zhJ{K;@D!hjWxe#<+-DtIA0%>mYWJoeO5YNN`m1q$!?B{x?W~%n4NAOsmz9Oh^|r%% z+RaMMYF77L684;HXq)4G$vgEld0o(3;akd3;sdvvB}Yn93yN0<6n96KUD)i`-=Udd zTJ!uvS;Tv_;YSZMNaoMWdLw!LH~RaU)SgF$E*`9@E_oWZxI4ept#sW7%Py;@wC6h? zTC5sseDbdG*A3-inZ0$5_Wjba+iHgr`r?&n)8kX(t9K~u=*(D3C6QiPgbsFm$)eS= zYZqmx4;>q-E>KrPM-4ped|XqPTz537Cn@o2&@U$j-4AXjdyh+Ke^%umi2E+b;o$d3ypY=I$USi^~lw@-67nTXK0RYUZxO9e);o?kY z@q$oHHqRGCg$MDW8&LqDScLPLtN>7m@C7;CU~`>!C0BJ2T(-H6H^Bwt!l!}$T!+X| z&@bZBLgBB zF3S-#UMPqlpa@7728TtMl2BLzo`l63BXAh32^xz*<48y>mW($gV~L3ILx(B{{i1}j z{m33RcH_fAmbs3s4x>0FO-AEl1L;p28YJskWde#AR<`E3`YhFbjL)# z>ezq+Rw$P* zK~RVQnmqQ0Q{aDn0+|T^W*QUjpRQiW^_$$BZ(>J0KMe!JxjzXT@r;Fyroz|`QK0-I z(?UU}kQYkl@dBx1SvL9n1U)_(cyoiw;C=k zWXE8EkQvMZ9c`%4+EH9Cn@l9&eOV-5HWKSg^hL6K@k}HMB(aeMKcdM}ES|vfBjHCE z`EB@j(l$KS#*rKvmu5rKq@_3(5#x(Nf+l_@NDK*&K`zA+@X$yg$(O*ygV?1eU!|vn ze<$r0%7uy$GjK|uk=g%mhxmcacSAXF1yJflOi3vyu|~^`Cm8Z=>sLo0ceGsanV|x3 z@U~c;Nb^wQ6 zO2iUbM5GA;%R=IDcoK3clgUQlfq_^{dl24Od*vU#N>czelUlEo@|^< z6w1V{1DVDP7?)^1Fs~RF42Wn`j7u~hm{*Jo21K+e z#wD5$%qzwP10vcK;}XpW<`v_D0TFGAaf#*w^NMl7fQUB5xJ2`TdBwP3Kt!8jT%!5F zykcB1Afin%F425oUNJ5h5YeU>muNmPuNW5$h-g!cOEe#tSBwh=M6@Z!C7KV+E5-!_ zBH9$=63qwZ72|>d5p9ZbiRJ_IigCe!h&IKzMDu}p#kgQVM4Mtw@4&hnc2M6Zjy6{G@Ml0ZfFG7XB9S)Jr%zW^S64s({{8#jwzf6} zSy@?ULqo$(sf7y{YDh~rSXfvXIygAAOq(|CC^RW8O-;=O&~VC9(EGfv&CJX` sLo+=8@#Du{XhNy_`uZ-AV5cPDZ0Kg4{eEr{v_`wYJT%uzxVs&t(B|=$v*q+?>Xml_SyF)Yu$aW z&bBg=%On8+kg>P3atGfRP5+6Dg8zSE>-2(e5*#}pE&xa=P5%i2na7p@fTRnHL~?cY zXY<%xe>MkZPa?rMp=<^#kPZOh?b#kovPb`7)A8q{mJSKgM;zGhD&jDA%LCEM$vXNP z67uU3G>$)2ajR3XwiZ#lk((f#m>7Lf#mzu^zvL6K9*q-;drl_ozxCn8&XWO;s>fg5 znY{3r*jGG~UEV5ID=wXCXXs`WEnQ%_LgDv4O%07NdJyI@lG+?VUc8*9!JW_&0^UUt z2&*+~#jXHC;rFG)fm)}mTGaCRDY-Y68JmQn_X^eWlGiwhM=Jy7k%^Y40dpIn=>jqrmz*gO#U)=|yv)^Ux6aqFL(NGb}O$J~}^aLxwe=Shlx_-Yk;Ee*5 z84e9N;0YW+*?TeUfU_5Y+7@}KGC*7!K)EHvt^!1M0$XorX@vuOGXQ0qVK2g;t4rnk z^g&V?WrRv?oOR4bad?QBmltA%UW>izYGq@}50p%EM14fYQcMh1?)Q<~0Faxk0opPhcNF2{_}K4P zUTVi+HpkeCy!*ZW_Ne2j<*kP$_WE_cO0xZUQEKX=`hCp?d%sF=edTU9#gIg+%!4DC zQ=0oM53jnu^4=8fWtYJRVPcmNaCRF}XlF7!e=}A1F9%(DZ(i-oaR3;uV%I&;6Bmy5 z-}9n1Y--4C!Zvp$5Y4bZ90CAath5p2Tjgd=;s9Wk8>4^LLT$8ei9xOC^14Nxby6R< z8t=8#Zm74Ex0IwsFAv?is(81hUfi9t>iS!e56soEwQl}#DI8fuz2_xaQ;ytwig-?) zUUiIwh{X+YC5lFSf{@>SZ>>ae)r{D88g+IeiU+h|HxrcIG#!$S?9lG}$uLhl^o4W-O%&POb;3# z@4H*%FV~(#BsHOGUoR0eYzRal8n0QNTVo)RLTx^$Su9=Dxa{ouV&STNW7O7jVIqn# z*0mDGB4L&=$_fiRZ%1$ECwBR;<=R+(uZ0-fSYxNrxWMS==X{Fq3rv;RW;f@%< zR^N#2$?mz;IC_7XzpDQ@>&$E3Wrb%)S2(BL^}5&GZ~Hp! zweV<|v`n1Jo~8t*-qNfkVoR7y!b>F!P@-z zLS{ajZ1!7}&%{1apKFfSTu8sU<(~8Hu5N@$QJ0p78)yW`6vb_iF>25`cjxI(JM^p4 zC)BGBm=+cs$B_)z8G4nwj~ro`iFK!kygSBomgv*VOB;#W|6F-!)yq|Cr?HNeX!@pr z!ql`>?;^V*w<6oOHO8d_dD*9HtgC!J#K>ASt<&A4Ys*Y(S(M%9@zmp4o@Cx)CsX`b zDWWjol-ltstFWuVd4uUWSGGjwII{DeN7VGaU%m@DL7oVDpEqVJ?JZg^tu5Li-Liym z-6(`jP)9a({OLy8e9fG6igJ{a_F`{xWgFq-Lz`c0yYp41W5(a>>l zdgC;h>F!i{de!N*j%yv8?%cj};?AQCqbyVOV@zLGU)JNSu8UhYgl{mY$gj9Ww=e72 zaN1|EqB=Ns1J37^x95h<nY&kY)w(I(6 zYCn?c-74Su#IUsSjgrV zk@v>3v&ysT2l6}43>puz2ID(_y^Z~KRgRA#_wKbDq~G0o+sveXJ&FqGDvoj?xx_Fp z^l2ff$YigQ$7e5|3M(9^45BHcK6nmX!zgw z<4}plcwc%;atli~)-~$&qq}01SCj+SqNH_W<72(z%n~^X-pkt1X+~jfog{9T)qAT{ ztLIrvv*K&k{LAc@ zQr$aM(~&neb0Utn)Q`sIEiOPP8sJmS9TS|_9Ql`pyng=TgDZ!X!d50qM%1g?QCa(t{xQJYFRP1Iz`Jv)PK5)qj%hRvP8}uIQivWeV?)1A4Jg(tzBpWQD$cPabWvdZY_U$iK?odrr`T2=nXLzq#Jp0zwjLswH3yK;lX|0TVjQ&^8;W-;+Qw!5x zrO5`%JZ(QO)3yHmz}R2b9muphdL31JDoB+luM#d*)AMe&+*xZz{*63Jeor)qi3Cc-XPAdVGR-^Gb)Okf+l_#zXoC`w!*gW~KWI``@L02-;lY927Fp zBz#YJLQG4x;&J7JhwArC$?i#yR=>5CZTj)bWcE-PT*g?&^Os|dFSR&U5k39m5?$jf zWbo}f4(=>|A$I@A9qLSVkIWAn{We~9xlL?)^yYcwN864c<&I$qJ`w9i z$TwN-{k!j{Fo#P+x!eq*Qm!_&?Rhgxgn*u5aBWo_~WQ_N#<(RZQ8?A}>bMe%p zhdDUYXEh^{?D6a4V_l1%MTP24v@};e4bvSgsdlOM9W@`YcuIN}|IlpXWapEi&Y!o{ zhUJd5b=r=L#_nmIOdd;;BP~kGNNSFgiF=!~hKR$xGz*>R|CmQ=rM2qhs7{`kY%Wz@ zjEs8s@a^N4w)D2+X~StLSA%{!HSwnQ?b0(HjrENyuG|baL~j{g|6!mmtTRk~=wz3i zOV3ZRpY^8v|2{Y7aX0Tn%F>jSDG}lHk&jeEcn1LB6Ti#G|U8tKpSCkXtV(ggF+i3(I_Ma2S=mvSQ9+j820I-;c%>Bd;q=*csaFA#O3i+KNCnx@4K|$Y)$3q)pnLNuJfw5L&clz*b~MPH~6o5o^9{3Dh5o?mJ>IpOVtxjafRm2PiE1lNvW zv1oXlAIca@Sz`jHQ0WXf6@$gW*Wl1}I2MJ*88Og)RJ0*&W|3cpeh}9u7Ugc8T!H3F#KpZV?P`nMZtWQUJ(A3v`Z)pEJBpP1%0Mx z|GypL8!}%FWyj)zsS~jvrNG3RDKj4QkS|+5I|5lV<$^;A<nk|=E}!( z%*<)VQ>fF0hDe>xRXPaxi`MyR%|(6+V|`--{}JU`{RQFQA0y149?UP{XQgI(eP4vj zX7Iu&p>zu-m=piQF`O0rG6JehKu*`>K-T}m9&jl;{*OEGkB-oP`wqyG_V=Ey6@lAl`kP=-;0wIr0bid&7rLRLKKw%$x}l--k)FXU9uX|UGZTe0 zFNm7H*v>-r0PhRwL~v=)CTMS0RyaM-+lmEV6S&ir&gfGJwEdfLKHrI3(EcfIHklUO zyUi4c*;eq*5WFcx&fS%MRXgUY>wogY{DS_Ist_%~AP^w@O#v?cd>~!{E(j3*rT`az zJ`k?}7X%1@Q-F&SY!yaHShApA`MF8+KVUI8u$5dNkB7k@qwuK*VW2!B(6i$5QTSAYuw zgulrbm*o6&p7dbw;m$DdDb7*s&CTEwpfIYPyAuFJt^|PSJpl0c6!_i`0NYUj@MbIc z@Mt;!sIm|HUbg}J?y$GAAcwaDEFg7C$jHd3NI^lNYhYktM}L3+e(>Q-O%XU8-XkI+ zvVC}XSl`*%*?~kN9TLJ~v4EnYVxxwJ22M#yscCd{6fZ0)Dw66@W66t vXh=cW*VmWs>gsx7WMqT_%1DD_{3r~d5_MscE5?+;836Xy&Q_(CTX+8(LxE$* literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph1_files/vis-4.20.0/img/network/deleteIcon.png b/_files/slides/will-drake/graph1_files/vis-4.20.0/img/network/deleteIcon.png new file mode 100755 index 0000000000000000000000000000000000000000..540256479106ed2f9263ec5df22fd7f0c75231e4 GIT binary patch literal 20981 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph1_files/vis-4.20.0/img/network/downArrow.png b/_files/slides/will-drake/graph1_files/vis-4.20.0/img/network/downArrow.png new file mode 100755 index 0000000000000000000000000000000000000000..e77d5e6d4157b12a5b2fa08a9fc138f0ab9eb4e7 GIT binary patch literal 4460 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�EM>-Bgb&Rym2{we-b7Oawc(c4k4MzLw~<#m(JZ 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph1_files/vis-4.20.0/img/network/leftArrow.png b/_files/slides/will-drake/graph1_files/vis-4.20.0/img/network/leftArrow.png new file mode 100755 index 0000000000000000000000000000000000000000..3823536e38ef1cd96582a6072b70cc514ac27d05 GIT binary patch literal 4531 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 Re)#|Z002ovPDHLkV1iMdkGuc? literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph1_files/vis-4.20.0/img/network/minus.png b/_files/slides/will-drake/graph1_files/vis-4.20.0/img/network/minus.png new file mode 100755 index 0000000000000000000000000000000000000000..30698076b9ac59f0880752ddc13af3f6bf062403 GIT binary patch literal 4147 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph1_files/vis-4.20.0/img/network/plus.png b/_files/slides/will-drake/graph1_files/vis-4.20.0/img/network/plus.png new file mode 100755 index 0000000000000000000000000000000000000000..f7ab2a334e566b6deb9657d7d8370f591bfb81bc GIT binary patch literal 4341 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph1_files/vis-4.20.0/img/network/rightArrow.png b/_files/slides/will-drake/graph1_files/vis-4.20.0/img/network/rightArrow.png new file mode 100755 index 0000000000000000000000000000000000000000..c3a209d8b0a58355305aae03b5520a1e070d8eab GIT binary patch literal 4514 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph1_files/vis-4.20.0/img/network/zoomExtends.png b/_files/slides/will-drake/graph1_files/vis-4.20.0/img/network/zoomExtends.png new file mode 100755 index 0000000000000000000000000000000000000000..74595c6358448fbdcfbd62629084841ca7e8b8a9 GIT binary patch literal 4464 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 .vis-content { + position: relative; +} + +.vis-panel .vis-shadow { + position: absolute; + width: 100%; + height: 1px; + box-shadow: 0 0 10px rgba(0,0,0,0.8); + /* TODO: find a nice way to ensure vis-shadows are drawn on top of items + z-index: 1; + */ +} + +.vis-panel .vis-shadow.vis-top { + top: -1px; + left: 0; +} + +.vis-panel .vis-shadow.vis-bottom { + bottom: -1px; + left: 0; +} +.vis-graph-group0 { + fill:#4f81bd; + fill-opacity:0; + stroke-width:2px; + stroke: #4f81bd; +} + +.vis-graph-group1 { + fill:#f79646; + fill-opacity:0; + stroke-width:2px; + stroke: #f79646; +} + +.vis-graph-group2 { + fill: #8c51cf; + fill-opacity:0; + stroke-width:2px; + stroke: #8c51cf; +} + +.vis-graph-group3 { + fill: #75c841; + fill-opacity:0; + stroke-width:2px; + stroke: #75c841; +} + +.vis-graph-group4 { + fill: #ff0100; + fill-opacity:0; + stroke-width:2px; + stroke: #ff0100; +} + +.vis-graph-group5 { + fill: #37d8e6; + fill-opacity:0; + stroke-width:2px; + stroke: #37d8e6; +} + +.vis-graph-group6 { + fill: #042662; + fill-opacity:0; + stroke-width:2px; + stroke: #042662; +} + +.vis-graph-group7 { + fill:#00ff26; + fill-opacity:0; + stroke-width:2px; + stroke: #00ff26; +} + +.vis-graph-group8 { + fill:#ff00ff; + fill-opacity:0; + stroke-width:2px; + stroke: #ff00ff; +} + +.vis-graph-group9 { + fill: #8f3938; + fill-opacity:0; + stroke-width:2px; + stroke: #8f3938; +} + +.vis-timeline .vis-fill { + fill-opacity:0.1; + stroke: none; +} + + +.vis-timeline .vis-bar { + fill-opacity:0.5; + stroke-width:1px; +} + +.vis-timeline .vis-point { + stroke-width:2px; + fill-opacity:1.0; +} + + +.vis-timeline .vis-legend-background { + stroke-width:1px; + fill-opacity:0.9; + fill: #ffffff; + stroke: #c2c2c2; +} + + +.vis-timeline .vis-outline { + stroke-width:1px; + fill-opacity:1; + fill: #ffffff; + stroke: #e5e5e5; +} + +.vis-timeline .vis-icon-fill { + fill-opacity:0.3; + stroke: none; +} + +.vis-time-axis { + position: relative; + overflow: hidden; +} + +.vis-time-axis.vis-foreground { + top: 0; + left: 0; + width: 100%; +} + +.vis-time-axis.vis-background { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.vis-time-axis .vis-text { + position: absolute; + color: #4d4d4d; + padding: 3px; + overflow: hidden; + box-sizing: border-box; + + white-space: nowrap; +} + +.vis-time-axis .vis-text.vis-measure { + position: absolute; + padding-left: 0; + padding-right: 0; + margin-left: 0; + margin-right: 0; + visibility: hidden; +} + +.vis-time-axis .vis-grid.vis-vertical { + position: absolute; + border-left: 1px solid; +} + +.vis-time-axis .vis-grid.vis-vertical-rtl { + position: absolute; + border-right: 1px solid; +} + +.vis-time-axis .vis-grid.vis-minor { + border-color: #e5e5e5; +} + +.vis-time-axis .vis-grid.vis-major { + border-color: #bfbfbf; +} + + +.vis-timeline { + position: relative; + border: 1px solid #bfbfbf; + + overflow: hidden; + padding: 0; + margin: 0; + + box-sizing: border-box; +} diff --git a/_files/slides/will-drake/graph1_files/vis-4.20.0/vis.min.js b/_files/slides/will-drake/graph1_files/vis-4.20.0/vis.min.js new file mode 100755 index 0000000..7c48489 --- /dev/null +++ b/_files/slides/will-drake/graph1_files/vis-4.20.0/vis.min.js @@ -0,0 +1,46 @@ +/** + * vis.js + * https://github.com/almende/vis + * + * A dynamic, browser-based visualization library. + * + * @version 4.20.0 + * @date 2017-05-21 + * + * @license + * Copyright (C) 2011-2017 Almende B.V, http://almende.com + * + * Vis.js is dual licensed under both + * + * * The Apache 2.0 License + * http://www.apache.org/licenses/LICENSE-2.0 + * + * and + * + * * The MIT License + * http://opensource.org/licenses/MIT + * + * Vis.js may be distributed under either license. + */ +"use strict";!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.vis=e():t.vis=e()}(this,function(){return function(t){function e(o){if(i[o])return i[o].exports;var n=i[o]={exports:{},id:o,loaded:!1};return t[o].call(n.exports,n,n.exports,e),n.loaded=!0,n.exports}var i={};return e.m=t,e.c=i,e.p="",e(0)}([function(t,e,i){var o=i(1);o.extend(e,i(87)),o.extend(e,i(116)),o.extend(e,i(158))},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}var n=i(2),s=o(n),r=i(55),a=o(r),h=i(58),d=o(h),l=i(62),u=o(l),c=i(82),p=i(86);e.isNumber=function(t){return t instanceof Number||"number"==typeof t},e.recursiveDOMDelete=function(t){if(t)for(;!0===t.hasChildNodes();)e.recursiveDOMDelete(t.firstChild),t.removeChild(t.firstChild)},e.giveRange=function(t,e,i,o){if(e==t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)},e.isString=function(t){return t instanceof String||"string"==typeof t},e.isDate=function(t){if(t instanceof Date)return!0;if(e.isString(t)){if(f.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},e.randomUUID=function(){return p.v4()},e.assignAllKeys=function(t,e){for(var i in t)t.hasOwnProperty(i)&&"object"!==(0,u.default)(t[i])&&(t[i]=e)},e.fillIfDefined=function(t,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var n in t)void 0!==i[n]&&("object"!==(0,u.default)(i[n])?void 0!==i[n]&&null!==i[n]||void 0===t[n]||!0!==o?t[n]=i[n]:delete t[n]:"object"===(0,u.default)(t[n])&&e.fillIfDefined(t[n],i[n],o))},e.protoExtend=function(t,e){for(var i=1;i3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var s=2;s3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var s in o)if(o.hasOwnProperty(s)&&-1==t.indexOf(s))if(o[s]&&o[s].constructor===Object)void 0===i[s]&&(i[s]={}),i[s].constructor===Object?e.deepExtend(i[s],o[s]):null===o[s]&&void 0!==i[s]&&!0===n?delete i[s]:i[s]=o[s];else if(Array.isArray(o[s])){i[s]=[];for(var r=0;r=0&&(e="DOMMouseScroll"),t.addEventListener(e,i,o)):t.attachEvent("on"+e,i)},e.removeEventListener=function(t,e,i,o){t.removeEventListener?(void 0===o&&(o=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.removeEventListener(e,i,o)):t.detachEvent("on"+e,i)},e.preventDefault=function(t){t||(t=window.event),t.preventDefault?t.preventDefault():t.returnValue=!1},e.getTarget=function(t){t||(t=window.event);var e;return t.target?e=t.target:t.srcElement&&(e=t.srcElement),void 0!=e.nodeType&&3==e.nodeType&&(e=e.parentNode),e},e.hasParent=function(t,e){for(var i=t;i;){if(i===e)return!0;i=i.parentNode}return!1},e.option={},e.option.asBoolean=function(t,e){return"function"==typeof t&&(t=t()),null!=t?0!=t:e||null},e.option.asNumber=function(t,e){return"function"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},e.option.asString=function(t,e){return"function"==typeof t&&(t=t()),null!=t?String(t):e||null},e.option.asSize=function(t,i){return"function"==typeof t&&(t=t()),e.isString(t)?t:e.isNumber(t)?t+"px":i||null},e.option.asElement=function(t,e){return"function"==typeof t&&(t=t()),t||e||null},e.hexToRGB=function(t){var e=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;t=t.replace(e,function(t,e,i,o){return e+e+i+i+o+o});var i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return i?{r:parseInt(i[1],16),g:parseInt(i[2],16),b:parseInt(i[3],16)}:null},e.overrideOpacity=function(t,i){if(-1!=t.indexOf("rgba"))return t;if(-1!=t.indexOf("rgb")){var o=t.substr(t.indexOf("(")+1).replace(")","").split(",");return"rgba("+o[0]+","+o[1]+","+o[2]+","+i+")"}var o=e.hexToRGB(t);return null==o?t:"rgba("+o.r+","+o.g+","+o.b+","+i+")"},e.RGBToHex=function(t,e,i){return"#"+((1<<24)+(t<<16)+(e<<8)+i).toString(16).slice(1)},e.parseColor=function(t){var i;if(!0===e.isString(t)){if(!0===e.isValidRGB(t)){var o=t.substr(4).substr(0,t.length-5).split(",").map(function(t){return parseInt(t)});t=e.RGBToHex(o[0],o[1],o[2])}if(!0===e.isValidHex(t)){var n=e.hexToHSV(t),s={h:n.h,s:.8*n.s,v:Math.min(1,1.02*n.v)},r={h:n.h,s:Math.min(1,1.25*n.s),v:.8*n.v},a=e.HSVToHex(r.h,r.s,r.v),h=e.HSVToHex(s.h,s.s,s.v);i={background:t,border:a,highlight:{background:h,border:a},hover:{background:h,border:a}}}else i={background:t,border:t,highlight:{background:t,border:t},hover:{background:t,border:t}}}else i={},i.background=t.background||void 0,i.border=t.border||void 0,e.isString(t.highlight)?i.highlight={border:t.highlight,background:t.highlight}:(i.highlight={},i.highlight.background=t.highlight&&t.highlight.background||void 0,i.highlight.border=t.highlight&&t.highlight.border||void 0),e.isString(t.hover)?i.hover={border:t.hover,background:t.hover}:(i.hover={},i.hover.background=t.hover&&t.hover.background||void 0,i.hover.border=t.hover&&t.hover.border||void 0);return i},e.RGBToHSV=function(t,e,i){t/=255,e/=255,i/=255;var o=Math.min(t,Math.min(e,i)),n=Math.max(t,Math.max(e,i));if(o==n)return{h:0,s:0,v:o};var s=t==o?e-i:i==o?t-e:i-t;return{h:60*((t==o?3:i==o?1:5)-s/(n-o))/360,s:(n-o)/n,v:n}};var m={split:function(t){var e={};return t.split(";").forEach(function(t){if(""!=t.trim()){var i=t.split(":"),o=i[0].trim(),n=i[1].trim();e[o]=n}}),e},join:function(t){return(0,d.default)(t).map(function(e){return e+": "+t[e]}).join("; ")}};e.addCssText=function(t,i){var o=m.split(t.style.cssText),n=m.split(i),s=e.extend(o,n);t.style.cssText=m.join(s)},e.removeCssText=function(t,e){var i=m.split(t.style.cssText),o=m.split(e);for(var n in o)o.hasOwnProperty(n)&&delete i[n];t.style.cssText=m.join(i)},e.HSVToRGB=function(t,e,i){var o,n,s,r=Math.floor(6*t),a=6*t-r,h=i*(1-e),d=i*(1-a*e),l=i*(1-(1-a)*e);switch(r%6){case 0:o=i,n=l,s=h;break;case 1:o=d,n=i,s=h;break;case 2:o=h,n=i,s=l;break;case 3:o=h,n=d,s=i;break;case 4:o=l,n=h,s=i;break;case 5:o=i,n=h,s=d}return{r:Math.floor(255*o),g:Math.floor(255*n),b:Math.floor(255*s)}},e.HSVToHex=function(t,i,o){var n=e.HSVToRGB(t,i,o);return e.RGBToHex(n.r,n.g,n.b)},e.hexToHSV=function(t){var i=e.hexToRGB(t);return e.RGBToHSV(i.r,i.g,i.b)},e.isValidHex=function(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)},e.isValidRGB=function(t){return t=t.replace(" ",""),/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t)},e.isValidRGBA=function(t){return t=t.replace(" ",""),/rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(t)},e.selectiveBridgeObject=function(t,i){if("object"==(void 0===i?"undefined":(0,u.default)(i))){for(var o=(0,a.default)(i),n=0;n0&&e(o,t[n-1])<0;n--)t[n]=t[n-1];t[n]=o}return t},e.mergeOptions=function(t,e,i){var o=(arguments.length>3&&void 0!==arguments[3]&&arguments[3],arguments.length>4&&void 0!==arguments[4]?arguments[4]:{});if(null===e[i])t[i]=(0,a.default)(o[i]);else if(void 0!==e[i])if("boolean"==typeof e[i])t[i].enabled=e[i];else{void 0===e[i].enabled&&(t[i].enabled=!0);for(var n in e[i])e[i].hasOwnProperty(n)&&(t[i][n]=e[i][n])}},e.binarySearchCustom=function(t,e,i,o){for(var n=0,s=0,r=t.length-1;s<=r&&n<1e4;){var a=Math.floor((s+r)/2),h=t[a],d=void 0===o?h[i]:h[i][o],l=e(d);if(0==l)return a;-1==l?s=a+1:r=a-1,n++}return-1},e.binarySearchValue=function(t,e,i,o,n){for(var s,r,a,h,d=0,l=0,u=t.length-1,n=void 0!=n?n:function(t,e){return t==e?0:t0)return"before"==o?Math.max(0,h-1):h;if(n(r,e)<0&&n(a,e)>0)return"before"==o?h:Math.min(t.length-1,h+1);n(r,e)<0?l=h+1:u=h-1,d++}return-1},e.easingFunctions={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}},e.getScrollBarWidth=function(){var t=document.createElement("p");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow="scroll";var o=t.offsetWidth;return i==o&&(o=e.clientWidth),document.body.removeChild(e),i-o},e.topMost=function(t,e){var i=void 0;Array.isArray(e)||(e=[e]);var o=!0,n=!1,r=void 0;try{for(var a,h=(0,s.default)(t);!(o=(a=h.next()).done);o=!0){var d=a.value;if(d){i=d[e[0]];for(var l=1;l=t.length?(this._t=void 0,n(1)):"keys"==e?n(0,i):"values"==e?n(0,t[i]):n(0,[i,t[i]])},"values"),s.Arguments=s.Array,o("keys"),o("values"),o("entries")},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e){t.exports={}},function(t,e,i){var o=i(10),n=i(12);t.exports=function(t){return o(n(t))}},function(t,e,i){var o=i(11);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==o(t)?t.split(""):Object(t)}},function(t,e){var i={}.toString;t.exports=function(t){return i.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,i){var o=i(14),n=i(15),s=i(30),r=i(20),a=i(31),h=i(8),d=i(32),l=i(46),u=i(48),c=i(47)("iterator"),p=!([].keys&&"next"in[].keys()),f=function(){return this};t.exports=function(t,e,i,m,v,g,y){d(i,e,m);var b,_,w,x=function(t){if(!p&&t in D)return D[t];switch(t){case"keys":case"values":return function(){return new i(this,t)}}return function(){return new i(this,t)}},k=e+" Iterator",M="values"==v,S=!1,D=t.prototype,O=D[c]||D["@@iterator"]||v&&D[v],C=O||x(v),T=v?M?x("entries"):C:void 0,E="Array"==e?D.entries||O:O;if(E&&(w=u(E.call(new t)))!==Object.prototype&&(l(w,k,!0),o||a(w,c)||r(w,c,f)),M&&O&&"values"!==O.name&&(S=!0,C=function(){return O.call(this)}),o&&!y||!p&&!S&&D[c]||r(D,c,C),h[e]=C,h[k]=f,v)if(b={values:M?C:x("values"),keys:g?C:x("keys"),entries:T},y)for(_ in b)_ in D||s(D,_,b[_]);else n(n.P+n.F*(p||S),e,b);return b}},function(t,e){t.exports=!0},function(t,e,i){var o=i(16),n=i(17),s=i(18),r=i(20),a=function(t,e,i){var h,d,l,u=t&a.F,c=t&a.G,p=t&a.S,f=t&a.P,m=t&a.B,v=t&a.W,g=c?n:n[e]||(n[e]={}),y=g.prototype,b=c?o:p?o[e]:(o[e]||{}).prototype;c&&(i=e);for(h in i)(d=!u&&b&&void 0!==b[h])&&h in g||(l=d?b[h]:i[h],g[h]=c&&"function"!=typeof b[h]?i[h]:m&&d?s(l,o):v&&b[h]==l?function(t){var e=function(e,i,o){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,o)}return t.apply(this,arguments)};return e.prototype=t.prototype,e}(l):f&&"function"==typeof l?s(Function.call,l):l,f&&((g.virtual||(g.virtual={}))[h]=l,t&a.R&&y&&!y[h]&&r(y,h,l)))};a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,t.exports=a},function(t,e){var i=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(t,e){var i=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=i)},function(t,e,i){var o=i(19);t.exports=function(t,e,i){if(o(t),void 0===e)return t;switch(i){case 1:return function(i){return t.call(e,i)};case 2:return function(i,o){return t.call(e,i,o)};case 3:return function(i,o,n){return t.call(e,i,o,n)}}return function(){return t.apply(e,arguments)}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,i){var o=i(21),n=i(29);t.exports=i(25)?function(t,e,i){return o.f(t,e,n(1,i))}:function(t,e,i){return t[e]=i,t}},function(t,e,i){var o=i(22),n=i(24),s=i(28),r=Object.defineProperty;e.f=i(25)?Object.defineProperty:function(t,e,i){if(o(t),e=s(e,!0),o(i),n)try{return r(t,e,i)}catch(t){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(t[e]=i.value),t}},function(t,e,i){var o=i(23);t.exports=function(t){if(!o(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,i){t.exports=!i(25)&&!i(26)(function(){return 7!=Object.defineProperty(i(27)("div"),"a",{get:function(){return 7}}).a})},function(t,e,i){t.exports=!i(26)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,i){var o=i(23),n=i(16).document,s=o(n)&&o(n.createElement);t.exports=function(t){return s?n.createElement(t):{}}},function(t,e,i){var o=i(23);t.exports=function(t,e){if(!o(t))return t;var i,n;if(e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;if("function"==typeof(i=t.valueOf)&&!o(n=i.call(t)))return n;if(!e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,i){t.exports=i(20)},function(t,e){var i={}.hasOwnProperty;t.exports=function(t,e){return i.call(t,e)}},function(t,e,i){var o=i(33),n=i(29),s=i(46),r={};i(20)(r,i(47)("iterator"),function(){return this}),t.exports=function(t,e,i){t.prototype=o(r,{next:n(1,i)}),s(t,e+" Iterator")}},function(t,e,i){var o=i(22),n=i(34),s=i(44),r=i(41)("IE_PROTO"),a=function(){},h=function(){var t,e=i(27)("iframe"),o=s.length;for(e.style.display="none",i(45).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(" + + + + + + +

+
+
+ + + + diff --git a/_files/slides/will-drake/graph2_files/htmlwidgets-0.9/htmlwidgets.js b/_files/slides/will-drake/graph2_files/htmlwidgets-0.9/htmlwidgets.js new file mode 100755 index 0000000..ecda3ef --- /dev/null +++ b/_files/slides/will-drake/graph2_files/htmlwidgets-0.9/htmlwidgets.js @@ -0,0 +1,836 @@ +(function() { + // If window.HTMLWidgets is already defined, then use it; otherwise create a + // new object. This allows preceding code to set options that affect the + // initialization process (though none currently exist). + window.HTMLWidgets = window.HTMLWidgets || {}; + + // See if we're running in a viewer pane. If not, we're in a web browser. + var viewerMode = window.HTMLWidgets.viewerMode = + /\bviewer_pane=1\b/.test(window.location); + + // See if we're running in Shiny mode. If not, it's a static document. + // Note that static widgets can appear in both Shiny and static modes, but + // obviously, Shiny widgets can only appear in Shiny apps/documents. + var shinyMode = window.HTMLWidgets.shinyMode = + typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; + + // We can't count on jQuery being available, so we implement our own + // version if necessary. + function querySelectorAll(scope, selector) { + if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { + return scope.find(selector); + } + if (scope.querySelectorAll) { + return scope.querySelectorAll(selector); + } + } + + function asArray(value) { + if (value === null) + return []; + if ($.isArray(value)) + return value; + return [value]; + } + + // Implement jQuery's extend + function extend(target /*, ... */) { + if (arguments.length == 1) { + return target; + } + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + } + return target; + } + + // IE8 doesn't support Array.forEach. + function forEach(values, callback, thisArg) { + if (values.forEach) { + values.forEach(callback, thisArg); + } else { + for (var i = 0; i < values.length; i++) { + callback.call(thisArg, values[i], i, values); + } + } + } + + // Replaces the specified method with the return value of funcSource. + // + // Note that funcSource should not BE the new method, it should be a function + // that RETURNS the new method. funcSource receives a single argument that is + // the overridden method, it can be called from the new method. The overridden + // method can be called like a regular function, it has the target permanently + // bound to it so "this" will work correctly. + function overrideMethod(target, methodName, funcSource) { + var superFunc = target[methodName] || function() {}; + var superFuncBound = function() { + return superFunc.apply(target, arguments); + }; + target[methodName] = funcSource(superFuncBound); + } + + // Add a method to delegator that, when invoked, calls + // delegatee.methodName. If there is no such method on + // the delegatee, but there was one on delegator before + // delegateMethod was called, then the original version + // is invoked instead. + // For example: + // + // var a = { + // method1: function() { console.log('a1'); } + // method2: function() { console.log('a2'); } + // }; + // var b = { + // method1: function() { console.log('b1'); } + // }; + // delegateMethod(a, b, "method1"); + // delegateMethod(a, b, "method2"); + // a.method1(); + // a.method2(); + // + // The output would be "b1", "a2". + function delegateMethod(delegator, delegatee, methodName) { + var inherited = delegator[methodName]; + delegator[methodName] = function() { + var target = delegatee; + var method = delegatee[methodName]; + + // The method doesn't exist on the delegatee. Instead, + // call the method on the delegator, if it exists. + if (!method) { + target = delegator; + method = inherited; + } + + if (method) { + return method.apply(target, arguments); + } + }; + } + + // Implement a vague facsimilie of jQuery's data method + function elementData(el, name, value) { + if (arguments.length == 2) { + return el["htmlwidget_data_" + name]; + } else if (arguments.length == 3) { + el["htmlwidget_data_" + name] = value; + return el; + } else { + throw new Error("Wrong number of arguments for elementData: " + + arguments.length); + } + } + + // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex + function escapeRegExp(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + } + + function hasClass(el, className) { + var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); + return re.test(el.className); + } + + // elements - array (or array-like object) of HTML elements + // className - class name to test for + // include - if true, only return elements with given className; + // if false, only return elements *without* given className + function filterByClass(elements, className, include) { + var results = []; + for (var i = 0; i < elements.length; i++) { + if (hasClass(elements[i], className) == include) + results.push(elements[i]); + } + return results; + } + + function on(obj, eventName, func) { + if (obj.addEventListener) { + obj.addEventListener(eventName, func, false); + } else if (obj.attachEvent) { + obj.attachEvent(eventName, func); + } + } + + function off(obj, eventName, func) { + if (obj.removeEventListener) + obj.removeEventListener(eventName, func, false); + else if (obj.detachEvent) { + obj.detachEvent(eventName, func); + } + } + + // Translate array of values to top/right/bottom/left, as usual with + // the "padding" CSS property + // https://developer.mozilla.org/en-US/docs/Web/CSS/padding + function unpackPadding(value) { + if (typeof(value) === "number") + value = [value]; + if (value.length === 1) { + return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; + } + if (value.length === 2) { + return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; + } + if (value.length === 3) { + return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; + } + if (value.length === 4) { + return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; + } + } + + // Convert an unpacked padding object to a CSS value + function paddingToCss(paddingObj) { + return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; + } + + // Makes a number suitable for CSS + function px(x) { + if (typeof(x) === "number") + return x + "px"; + else + return x; + } + + // Retrieves runtime widget sizing information for an element. + // The return value is either null, or an object with fill, padding, + // defaultWidth, defaultHeight fields. + function sizingPolicy(el) { + var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); + if (!sizingEl) + return null; + var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); + if (viewerMode) { + return sp.viewer; + } else { + return sp.browser; + } + } + + // @param tasks Array of strings (or falsy value, in which case no-op). + // Each element must be a valid JavaScript expression that yields a + // function. Or, can be an array of objects with "code" and "data" + // properties; in this case, the "code" property should be a string + // of JS that's an expr that yields a function, and "data" should be + // an object that will be added as an additional argument when that + // function is called. + // @param target The object that will be "this" for each function + // execution. + // @param args Array of arguments to be passed to the functions. (The + // same arguments will be passed to all functions.) + function evalAndRun(tasks, target, args) { + if (tasks) { + forEach(tasks, function(task) { + var theseArgs = args; + if (typeof(task) === "object") { + theseArgs = theseArgs.concat([task.data]); + task = task.code; + } + var taskFunc = eval("(" + task + ")"); + if (typeof(taskFunc) !== "function") { + throw new Error("Task must be a function! Source:\n" + task); + } + taskFunc.apply(target, theseArgs); + }); + } + } + + function initSizing(el) { + var sizing = sizingPolicy(el); + if (!sizing) + return; + + var cel = document.getElementById("htmlwidget_container"); + if (!cel) + return; + + if (typeof(sizing.padding) !== "undefined") { + document.body.style.margin = "0"; + document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); + } + + if (sizing.fill) { + document.body.style.overflow = "hidden"; + document.body.style.width = "100%"; + document.body.style.height = "100%"; + document.documentElement.style.width = "100%"; + document.documentElement.style.height = "100%"; + if (cel) { + cel.style.position = "absolute"; + var pad = unpackPadding(sizing.padding); + cel.style.top = pad.top + "px"; + cel.style.right = pad.right + "px"; + cel.style.bottom = pad.bottom + "px"; + cel.style.left = pad.left + "px"; + el.style.width = "100%"; + el.style.height = "100%"; + } + + return { + getWidth: function() { return cel.offsetWidth; }, + getHeight: function() { return cel.offsetHeight; } + }; + + } else { + el.style.width = px(sizing.width); + el.style.height = px(sizing.height); + + return { + getWidth: function() { return el.offsetWidth; }, + getHeight: function() { return el.offsetHeight; } + }; + } + } + + // Default implementations for methods + var defaults = { + find: function(scope) { + return querySelectorAll(scope, "." + this.name); + }, + renderError: function(el, err) { + var $el = $(el); + + this.clearError(el); + + // Add all these error classes, as Shiny does + var errClass = "shiny-output-error"; + if (err.type !== null) { + // use the classes of the error condition as CSS class names + errClass = errClass + " " + $.map(asArray(err.type), function(type) { + return errClass + "-" + type; + }).join(" "); + } + errClass = errClass + " htmlwidgets-error"; + + // Is el inline or block? If inline or inline-block, just display:none it + // and add an inline error. + var display = $el.css("display"); + $el.data("restore-display-mode", display); + + if (display === "inline" || display === "inline-block") { + $el.hide(); + if (err.message !== "") { + var errorSpan = $("").addClass(errClass); + errorSpan.text(err.message); + $el.after(errorSpan); + } + } else if (display === "block") { + // If block, add an error just after the el, set visibility:none on the + // el, and position the error to be on top of the el. + // Mark it with a unique ID and CSS class so we can remove it later. + $el.css("visibility", "hidden"); + if (err.message !== "") { + var errorDiv = $("
").addClass(errClass).css("position", "absolute") + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + // setting width can push out the page size, forcing otherwise + // unnecessary scrollbars to appear and making it impossible for + // the element to shrink; so use max-width instead + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + errorDiv.text(err.message); + $el.after(errorDiv); + + // Really dumb way to keep the size/position of the error in sync with + // the parent element as the window is resized or whatever. + var intId = setInterval(function() { + if (!errorDiv[0].parentElement) { + clearInterval(intId); + return; + } + errorDiv + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + }, 500); + } + } + }, + clearError: function(el) { + var $el = $(el); + var display = $el.data("restore-display-mode"); + $el.data("restore-display-mode", null); + + if (display === "inline" || display === "inline-block") { + if (display) + $el.css("display", display); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } else if (display === "block"){ + $el.css("visibility", "inherit"); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } + }, + sizing: {} + }; + + // Called by widget bindings to register a new type of widget. The definition + // object can contain the following properties: + // - name (required) - A string indicating the binding name, which will be + // used by default as the CSS classname to look for. + // - initialize (optional) - A function(el) that will be called once per + // widget element; if a value is returned, it will be passed as the third + // value to renderValue. + // - renderValue (required) - A function(el, data, initValue) that will be + // called with data. Static contexts will cause this to be called once per + // element; Shiny apps will cause this to be called multiple times per + // element, as the data changes. + window.HTMLWidgets.widget = function(definition) { + if (!definition.name) { + throw new Error("Widget must have a name"); + } + if (!definition.type) { + throw new Error("Widget must have a type"); + } + // Currently we only support output widgets + if (definition.type !== "output") { + throw new Error("Unrecognized widget type '" + definition.type + "'"); + } + // TODO: Verify that .name is a valid CSS classname + + // Support new-style instance-bound definitions. Old-style class-bound + // definitions have one widget "object" per widget per type/class of + // widget; the renderValue and resize methods on such widget objects + // take el and instance arguments, because the widget object can't + // store them. New-style instance-bound definitions have one widget + // object per widget instance; the definition that's passed in doesn't + // provide renderValue or resize methods at all, just the single method + // factory(el, width, height) + // which returns an object that has renderValue(x) and resize(w, h). + // This enables a far more natural programming style for the widget + // author, who can store per-instance state using either OO-style + // instance fields or functional-style closure variables (I guess this + // is in contrast to what can only be called C-style pseudo-OO which is + // what we required before). + if (definition.factory) { + definition = createLegacyDefinitionAdapter(definition); + } + + if (!definition.renderValue) { + throw new Error("Widget must have a renderValue function"); + } + + // For static rendering (non-Shiny), use a simple widget registration + // scheme. We also use this scheme for Shiny apps/documents that also + // contain static widgets. + window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; + // Merge defaults into the definition; don't mutate the original definition. + var staticBinding = extend({}, defaults, definition); + overrideMethod(staticBinding, "find", function(superfunc) { + return function(scope) { + var results = superfunc(scope); + // Filter out Shiny outputs, we only want the static kind + return filterByClass(results, "html-widget-output", false); + }; + }); + window.HTMLWidgets.widgets.push(staticBinding); + + if (shinyMode) { + // Shiny is running. Register the definition with an output binding. + // The definition itself will not be the output binding, instead + // we will make an output binding object that delegates to the + // definition. This is because we foolishly used the same method + // name (renderValue) for htmlwidgets definition and Shiny bindings + // but they actually have quite different semantics (the Shiny + // bindings receive data that includes lots of metadata that it + // strips off before calling htmlwidgets renderValue). We can't + // just ignore the difference because in some widgets it's helpful + // to call this.renderValue() from inside of resize(), and if + // we're not delegating, then that call will go to the Shiny + // version instead of the htmlwidgets version. + + // Merge defaults with definition, without mutating either. + var bindingDef = extend({}, defaults, definition); + + // This object will be our actual Shiny binding. + var shinyBinding = new Shiny.OutputBinding(); + + // With a few exceptions, we'll want to simply use the bindingDef's + // version of methods if they are available, otherwise fall back to + // Shiny's defaults. NOTE: If Shiny's output bindings gain additional + // methods in the future, and we want them to be overrideable by + // HTMLWidget binding definitions, then we'll need to add them to this + // list. + delegateMethod(shinyBinding, bindingDef, "getId"); + delegateMethod(shinyBinding, bindingDef, "onValueChange"); + delegateMethod(shinyBinding, bindingDef, "onValueError"); + delegateMethod(shinyBinding, bindingDef, "renderError"); + delegateMethod(shinyBinding, bindingDef, "clearError"); + delegateMethod(shinyBinding, bindingDef, "showProgress"); + + // The find, renderValue, and resize are handled differently, because we + // want to actually decorate the behavior of the bindingDef methods. + + shinyBinding.find = function(scope) { + var results = bindingDef.find(scope); + + // Only return elements that are Shiny outputs, not static ones + var dynamicResults = results.filter(".html-widget-output"); + + // It's possible that whatever caused Shiny to think there might be + // new dynamic outputs, also caused there to be new static outputs. + // Since there might be lots of different htmlwidgets bindings, we + // schedule execution for later--no need to staticRender multiple + // times. + if (results.length !== dynamicResults.length) + scheduleStaticRender(); + + return dynamicResults; + }; + + // Wrap renderValue to handle initialization, which unfortunately isn't + // supported natively by Shiny at the time of this writing. + + shinyBinding.renderValue = function(el, data) { + Shiny.renderDependencies(data.deps); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var i = 0; data.evals && i < data.evals.length; i++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); + } + if (!bindingDef.renderOnNullValue) { + if (data.x === null) { + el.style.visibility = "hidden"; + return; + } else { + el.style.visibility = "inherit"; + } + } + if (!elementData(el, "initialized")) { + initSizing(el); + + elementData(el, "initialized", true); + if (bindingDef.initialize) { + var result = bindingDef.initialize(el, el.offsetWidth, + el.offsetHeight); + elementData(el, "init_result", result); + } + } + bindingDef.renderValue(el, data.x, elementData(el, "init_result")); + evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]); + }; + + // Only override resize if bindingDef implements it + if (bindingDef.resize) { + shinyBinding.resize = function(el, width, height) { + // Shiny can call resize before initialize/renderValue have been + // called, which doesn't make sense for widgets. + if (elementData(el, "initialized")) { + bindingDef.resize(el, width, height, elementData(el, "init_result")); + } + }; + } + + Shiny.outputBindings.register(shinyBinding, bindingDef.name); + } + }; + + var scheduleStaticRenderTimerId = null; + function scheduleStaticRender() { + if (!scheduleStaticRenderTimerId) { + scheduleStaticRenderTimerId = setTimeout(function() { + scheduleStaticRenderTimerId = null; + window.HTMLWidgets.staticRender(); + }, 1); + } + } + + // Render static widgets after the document finishes loading + // Statically render all elements that are of this widget's class + window.HTMLWidgets.staticRender = function() { + var bindings = window.HTMLWidgets.widgets || []; + forEach(bindings, function(binding) { + var matches = binding.find(document.documentElement); + forEach(matches, function(el) { + var sizeObj = initSizing(el, binding); + + if (hasClass(el, "html-widget-static-bound")) + return; + el.className = el.className + " html-widget-static-bound"; + + var initResult; + if (binding.initialize) { + initResult = binding.initialize(el, + sizeObj ? sizeObj.getWidth() : el.offsetWidth, + sizeObj ? sizeObj.getHeight() : el.offsetHeight + ); + elementData(el, "init_result", initResult); + } + + if (binding.resize) { + var lastSize = {}; + var resizeHandler = function(e) { + var size = { + w: sizeObj ? sizeObj.getWidth() : el.offsetWidth, + h: sizeObj ? sizeObj.getHeight() : el.offsetHeight + }; + if (size.w === 0 && size.h === 0) + return; + if (size.w === lastSize.w && size.h === lastSize.h) + return; + lastSize = size; + binding.resize(el, size.w, size.h, initResult); + }; + + on(window, "resize", resizeHandler); + + // This is needed for cases where we're running in a Shiny + // app, but the widget itself is not a Shiny output, but + // rather a simple static widget. One example of this is + // an rmarkdown document that has runtime:shiny and widget + // that isn't in a render function. Shiny only knows to + // call resize handlers for Shiny outputs, not for static + // widgets, so we do it ourselves. + if (window.jQuery) { + window.jQuery(document).on( + "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets", + resizeHandler + ); + window.jQuery(document).on( + "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets", + resizeHandler + ); + } + + // This is needed for the specific case of ioslides, which + // flips slides between display:none and display:block. + // Ideally we would not have to have ioslide-specific code + // here, but rather have ioslides raise a generic event, + // but the rmarkdown package just went to CRAN so the + // window to getting that fixed may be long. + if (window.addEventListener) { + // It's OK to limit this to window.addEventListener + // browsers because ioslides itself only supports + // such browsers. + on(document, "slideenter", resizeHandler); + on(document, "slideleave", resizeHandler); + } + } + + var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); + if (scriptData) { + var data = JSON.parse(scriptData.textContent || scriptData.text); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var k = 0; data.evals && k < data.evals.length; k++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); + } + binding.renderValue(el, data.x, initResult); + evalAndRun(data.jsHooks.render, initResult, [el, data.x]); + } + }); + }); + + invokePostRenderHandlers(); + } + + // Wait until after the document has loaded to render the widgets. + if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", function() { + document.removeEventListener("DOMContentLoaded", arguments.callee, false); + window.HTMLWidgets.staticRender(); + }, false); + } else if (document.attachEvent) { + document.attachEvent("onreadystatechange", function() { + if (document.readyState === "complete") { + document.detachEvent("onreadystatechange", arguments.callee); + window.HTMLWidgets.staticRender(); + } + }); + } + + + window.HTMLWidgets.getAttachmentUrl = function(depname, key) { + // If no key, default to the first item + if (typeof(key) === "undefined") + key = 1; + + var link = document.getElementById(depname + "-" + key + "-attachment"); + if (!link) { + throw new Error("Attachment " + depname + "/" + key + " not found in document"); + } + return link.getAttribute("href"); + }; + + window.HTMLWidgets.dataframeToD3 = function(df) { + var names = []; + var length; + for (var name in df) { + if (df.hasOwnProperty(name)) + names.push(name); + if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { + throw new Error("All fields must be arrays"); + } else if (typeof(length) !== "undefined" && length !== df[name].length) { + throw new Error("All fields must be arrays of the same length"); + } + length = df[name].length; + } + var results = []; + var item; + for (var row = 0; row < length; row++) { + item = {}; + for (var col = 0; col < names.length; col++) { + item[names[col]] = df[names[col]][row]; + } + results.push(item); + } + return results; + }; + + window.HTMLWidgets.transposeArray2D = function(array) { + if (array.length === 0) return array; + var newArray = array[0].map(function(col, i) { + return array.map(function(row) { + return row[i] + }) + }); + return newArray; + }; + // Split value at splitChar, but allow splitChar to be escaped + // using escapeChar. Any other characters escaped by escapeChar + // will be included as usual (including escapeChar itself). + function splitWithEscape(value, splitChar, escapeChar) { + var results = []; + var escapeMode = false; + var currentResult = ""; + for (var pos = 0; pos < value.length; pos++) { + if (!escapeMode) { + if (value[pos] === splitChar) { + results.push(currentResult); + currentResult = ""; + } else if (value[pos] === escapeChar) { + escapeMode = true; + } else { + currentResult += value[pos]; + } + } else { + currentResult += value[pos]; + escapeMode = false; + } + } + if (currentResult !== "") { + results.push(currentResult); + } + return results; + } + // Function authored by Yihui/JJ Allaire + window.HTMLWidgets.evaluateStringMember = function(o, member) { + var parts = splitWithEscape(member, '.', '\\'); + for (var i = 0, l = parts.length; i < l; i++) { + var part = parts[i]; + // part may be a character or 'numeric' member name + if (o !== null && typeof o === "object" && part in o) { + if (i == (l - 1)) { // if we are at the end of the line then evalulate + if (typeof o[part] === "string") + o[part] = eval("(" + o[part] + ")"); + } else { // otherwise continue to next embedded object + o = o[part]; + } + } + } + }; + + // Retrieve the HTMLWidget instance (i.e. the return value of an + // HTMLWidget binding's initialize() or factory() function) + // associated with an element, or null if none. + window.HTMLWidgets.getInstance = function(el) { + return elementData(el, "init_result"); + }; + + // Finds the first element in the scope that matches the selector, + // and returns the HTMLWidget instance (i.e. the return value of + // an HTMLWidget binding's initialize() or factory() function) + // associated with that element, if any. If no element matches the + // selector, or the first matching element has no HTMLWidget + // instance associated with it, then null is returned. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.find = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var el = scope.querySelector(selector); + if (el === null) { + return null; + } else { + return window.HTMLWidgets.getInstance(el); + } + }; + + // Finds all elements in the scope that match the selector, and + // returns the HTMLWidget instances (i.e. the return values of + // an HTMLWidget binding's initialize() or factory() function) + // associated with the elements, in an array. If elements that + // match the selector don't have an associated HTMLWidget + // instance, the returned array will contain nulls. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.findAll = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var nodes = scope.querySelectorAll(selector); + var results = []; + for (var i = 0; i < nodes.length; i++) { + results.push(window.HTMLWidgets.getInstance(nodes[i])); + } + return results; + }; + + var postRenderHandlers = []; + function invokePostRenderHandlers() { + while (postRenderHandlers.length) { + var handler = postRenderHandlers.shift(); + if (handler) { + handler(); + } + } + } + + // Register the given callback function to be invoked after the + // next time static widgets are rendered. + window.HTMLWidgets.addPostRenderHandler = function(callback) { + postRenderHandlers.push(callback); + }; + + // Takes a new-style instance-bound definition, and returns an + // old-style class-bound definition. This saves us from having + // to rewrite all the logic in this file to accomodate both + // types of definitions. + function createLegacyDefinitionAdapter(defn) { + var result = { + name: defn.name, + type: defn.type, + initialize: function(el, width, height) { + return defn.factory(el, width, height); + }, + renderValue: function(el, x, instance) { + return instance.renderValue(x); + }, + resize: function(el, width, height, instance) { + return instance.resize(width, height); + } + }; + + if (defn.find) + result.find = defn.find; + if (defn.renderError) + result.renderError = defn.renderError; + if (defn.clearError) + result.clearError = defn.clearError; + + return result; + } +})(); + diff --git a/_files/slides/will-drake/graph2_files/vis-4.20.0/img/network/acceptDeleteIcon.png b/_files/slides/will-drake/graph2_files/vis-4.20.0/img/network/acceptDeleteIcon.png new file mode 100755 index 0000000000000000000000000000000000000000..02a062852c2a8ea7610b64f5d6f79ce4953c3b42 GIT binary patch literal 20675 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

|#V-x46+1BId1SnF`o)!|KGJUGs&sOwUB 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 REZGm4F~`{$=NWC^^ItUJ)cF7a literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph2_files/vis-4.20.0/img/network/cross.png b/_files/slides/will-drake/graph2_files/vis-4.20.0/img/network/cross.png new file mode 100755 index 0000000000000000000000000000000000000000..9cbd189ab6ae99ed5794c30a12ddc0480987f29f GIT binary patch literal 18303 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph2_files/vis-4.20.0/img/network/deleteIcon.png b/_files/slides/will-drake/graph2_files/vis-4.20.0/img/network/deleteIcon.png new file mode 100755 index 0000000000000000000000000000000000000000..540256479106ed2f9263ec5df22fd7f0c75231e4 GIT binary patch literal 20981 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph2_files/vis-4.20.0/img/network/downArrow.png b/_files/slides/will-drake/graph2_files/vis-4.20.0/img/network/downArrow.png new file mode 100755 index 0000000000000000000000000000000000000000..e77d5e6d4157b12a5b2fa08a9fc138f0ab9eb4e7 GIT binary patch literal 4460 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�EM>-Bgb&Rym2{we-b7Oawc(c4k4MzLw~<#m(JZ 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph2_files/vis-4.20.0/img/network/leftArrow.png b/_files/slides/will-drake/graph2_files/vis-4.20.0/img/network/leftArrow.png new file mode 100755 index 0000000000000000000000000000000000000000..3823536e38ef1cd96582a6072b70cc514ac27d05 GIT binary patch literal 4531 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 Re)#|Z002ovPDHLkV1iMdkGuc? literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph2_files/vis-4.20.0/img/network/minus.png b/_files/slides/will-drake/graph2_files/vis-4.20.0/img/network/minus.png new file mode 100755 index 0000000000000000000000000000000000000000..30698076b9ac59f0880752ddc13af3f6bf062403 GIT binary patch literal 4147 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph2_files/vis-4.20.0/img/network/plus.png b/_files/slides/will-drake/graph2_files/vis-4.20.0/img/network/plus.png new file mode 100755 index 0000000000000000000000000000000000000000..f7ab2a334e566b6deb9657d7d8370f591bfb81bc GIT binary patch literal 4341 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph2_files/vis-4.20.0/img/network/rightArrow.png b/_files/slides/will-drake/graph2_files/vis-4.20.0/img/network/rightArrow.png new file mode 100755 index 0000000000000000000000000000000000000000..c3a209d8b0a58355305aae03b5520a1e070d8eab GIT binary patch literal 4514 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph2_files/vis-4.20.0/img/network/zoomExtends.png b/_files/slides/will-drake/graph2_files/vis-4.20.0/img/network/zoomExtends.png new file mode 100755 index 0000000000000000000000000000000000000000..74595c6358448fbdcfbd62629084841ca7e8b8a9 GIT binary patch literal 4464 zcmV-$5s&VPP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000J?Nklmr?3xa&Z(!1P+L?CZ z)HFk8I!$dt<2X~bGfw*YAl1VaY`=w2guz-01!Jr_ZsL({y1u8G%uE2<* zWuJa{cDHB*w@LpqJI~ABdw%zvd(XM|VQFb8LMF#)^&|!!GbP|t${2X*$hc+8@H}HdkBLcy%ASf3Cx)=r^ zgbqMK03cbTB$MI*@It72nGPHhNKg+!0U(GVM8p7xVImUo7yxSBM|KjZh5{f!+M?A% zd5P}+yo8M-tK)OWm&K+`6Ts;7Q0#??uJ}{_=HyfU=G05q`%;8b9@K;7q&!97bws2` z>}z*JN#dyM@Bs++k$@w)sPD;#esO+d^0q6uhf)`=ypg(aipm6{jwG@M>|X{Sbsc_@3S~mzg*7iWKA-*jUVKG46AMQk(BiJO z2aczc%o9qSP#UrZYz8B9TSAE9194>k~Hik^&{#E)jve?>a3NMBG-~Dbj@PL{p#T6fmRN?|%eF>RX8ZQ-Uc24y zBk8TJt@RwZ`AlH!_OMAHAdR0>Y6Jn-lz+e{vh$GdjzS|0#!*j`?Odn`RJ zYsfcsF=a-dDG&l%AcQT!)jxaW;qcmQHedT=e-GF`e!|2MRH&d)gQ5ma7C=#fAgoQr zrqiyYfe;ko>wg!Uy`L0lvS5owVLn0F5?mv5g>UTku*vIu6(=71SLJ+RE|fK;yam&o zt2}<)NbS&H0dl=YFoP82EXf_8tAnBj359k(DX7STx|cE*uNepFr ztu68L&A}8!1%Winw&rJb0m}r$p9iXPX4mR4G&eUl>P^C8vG|-$r#A$Tyl)tNFUKgY zs?6Q_!=QxztN?&h{^sn%pB=D-!2rWX@kICt(`*yD(exBDwCXU99TX{1^O zNpRo3eGn0Ru;G=b1X86$Ls{nUyicrn(uenUNVoYHmaP< .vis-content { + position: relative; +} + +.vis-panel .vis-shadow { + position: absolute; + width: 100%; + height: 1px; + box-shadow: 0 0 10px rgba(0,0,0,0.8); + /* TODO: find a nice way to ensure vis-shadows are drawn on top of items + z-index: 1; + */ +} + +.vis-panel .vis-shadow.vis-top { + top: -1px; + left: 0; +} + +.vis-panel .vis-shadow.vis-bottom { + bottom: -1px; + left: 0; +} +.vis-graph-group0 { + fill:#4f81bd; + fill-opacity:0; + stroke-width:2px; + stroke: #4f81bd; +} + +.vis-graph-group1 { + fill:#f79646; + fill-opacity:0; + stroke-width:2px; + stroke: #f79646; +} + +.vis-graph-group2 { + fill: #8c51cf; + fill-opacity:0; + stroke-width:2px; + stroke: #8c51cf; +} + +.vis-graph-group3 { + fill: #75c841; + fill-opacity:0; + stroke-width:2px; + stroke: #75c841; +} + +.vis-graph-group4 { + fill: #ff0100; + fill-opacity:0; + stroke-width:2px; + stroke: #ff0100; +} + +.vis-graph-group5 { + fill: #37d8e6; + fill-opacity:0; + stroke-width:2px; + stroke: #37d8e6; +} + +.vis-graph-group6 { + fill: #042662; + fill-opacity:0; + stroke-width:2px; + stroke: #042662; +} + +.vis-graph-group7 { + fill:#00ff26; + fill-opacity:0; + stroke-width:2px; + stroke: #00ff26; +} + +.vis-graph-group8 { + fill:#ff00ff; + fill-opacity:0; + stroke-width:2px; + stroke: #ff00ff; +} + +.vis-graph-group9 { + fill: #8f3938; + fill-opacity:0; + stroke-width:2px; + stroke: #8f3938; +} + +.vis-timeline .vis-fill { + fill-opacity:0.1; + stroke: none; +} + + +.vis-timeline .vis-bar { + fill-opacity:0.5; + stroke-width:1px; +} + +.vis-timeline .vis-point { + stroke-width:2px; + fill-opacity:1.0; +} + + +.vis-timeline .vis-legend-background { + stroke-width:1px; + fill-opacity:0.9; + fill: #ffffff; + stroke: #c2c2c2; +} + + +.vis-timeline .vis-outline { + stroke-width:1px; + fill-opacity:1; + fill: #ffffff; + stroke: #e5e5e5; +} + +.vis-timeline .vis-icon-fill { + fill-opacity:0.3; + stroke: none; +} + +.vis-time-axis { + position: relative; + overflow: hidden; +} + +.vis-time-axis.vis-foreground { + top: 0; + left: 0; + width: 100%; +} + +.vis-time-axis.vis-background { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.vis-time-axis .vis-text { + position: absolute; + color: #4d4d4d; + padding: 3px; + overflow: hidden; + box-sizing: border-box; + + white-space: nowrap; +} + +.vis-time-axis .vis-text.vis-measure { + position: absolute; + padding-left: 0; + padding-right: 0; + margin-left: 0; + margin-right: 0; + visibility: hidden; +} + +.vis-time-axis .vis-grid.vis-vertical { + position: absolute; + border-left: 1px solid; +} + +.vis-time-axis .vis-grid.vis-vertical-rtl { + position: absolute; + border-right: 1px solid; +} + +.vis-time-axis .vis-grid.vis-minor { + border-color: #e5e5e5; +} + +.vis-time-axis .vis-grid.vis-major { + border-color: #bfbfbf; +} + + +.vis-timeline { + position: relative; + border: 1px solid #bfbfbf; + + overflow: hidden; + padding: 0; + margin: 0; + + box-sizing: border-box; +} diff --git a/_files/slides/will-drake/graph2_files/vis-4.20.0/vis.min.js b/_files/slides/will-drake/graph2_files/vis-4.20.0/vis.min.js new file mode 100755 index 0000000..7c48489 --- /dev/null +++ b/_files/slides/will-drake/graph2_files/vis-4.20.0/vis.min.js @@ -0,0 +1,46 @@ +/** + * vis.js + * https://github.com/almende/vis + * + * A dynamic, browser-based visualization library. + * + * @version 4.20.0 + * @date 2017-05-21 + * + * @license + * Copyright (C) 2011-2017 Almende B.V, http://almende.com + * + * Vis.js is dual licensed under both + * + * * The Apache 2.0 License + * http://www.apache.org/licenses/LICENSE-2.0 + * + * and + * + * * The MIT License + * http://opensource.org/licenses/MIT + * + * Vis.js may be distributed under either license. + */ +"use strict";!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.vis=e():t.vis=e()}(this,function(){return function(t){function e(o){if(i[o])return i[o].exports;var n=i[o]={exports:{},id:o,loaded:!1};return t[o].call(n.exports,n,n.exports,e),n.loaded=!0,n.exports}var i={};return e.m=t,e.c=i,e.p="",e(0)}([function(t,e,i){var o=i(1);o.extend(e,i(87)),o.extend(e,i(116)),o.extend(e,i(158))},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}var n=i(2),s=o(n),r=i(55),a=o(r),h=i(58),d=o(h),l=i(62),u=o(l),c=i(82),p=i(86);e.isNumber=function(t){return t instanceof Number||"number"==typeof t},e.recursiveDOMDelete=function(t){if(t)for(;!0===t.hasChildNodes();)e.recursiveDOMDelete(t.firstChild),t.removeChild(t.firstChild)},e.giveRange=function(t,e,i,o){if(e==t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)},e.isString=function(t){return t instanceof String||"string"==typeof t},e.isDate=function(t){if(t instanceof Date)return!0;if(e.isString(t)){if(f.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},e.randomUUID=function(){return p.v4()},e.assignAllKeys=function(t,e){for(var i in t)t.hasOwnProperty(i)&&"object"!==(0,u.default)(t[i])&&(t[i]=e)},e.fillIfDefined=function(t,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var n in t)void 0!==i[n]&&("object"!==(0,u.default)(i[n])?void 0!==i[n]&&null!==i[n]||void 0===t[n]||!0!==o?t[n]=i[n]:delete t[n]:"object"===(0,u.default)(t[n])&&e.fillIfDefined(t[n],i[n],o))},e.protoExtend=function(t,e){for(var i=1;i3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var s=2;s3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var s in o)if(o.hasOwnProperty(s)&&-1==t.indexOf(s))if(o[s]&&o[s].constructor===Object)void 0===i[s]&&(i[s]={}),i[s].constructor===Object?e.deepExtend(i[s],o[s]):null===o[s]&&void 0!==i[s]&&!0===n?delete i[s]:i[s]=o[s];else if(Array.isArray(o[s])){i[s]=[];for(var r=0;r=0&&(e="DOMMouseScroll"),t.addEventListener(e,i,o)):t.attachEvent("on"+e,i)},e.removeEventListener=function(t,e,i,o){t.removeEventListener?(void 0===o&&(o=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.removeEventListener(e,i,o)):t.detachEvent("on"+e,i)},e.preventDefault=function(t){t||(t=window.event),t.preventDefault?t.preventDefault():t.returnValue=!1},e.getTarget=function(t){t||(t=window.event);var e;return t.target?e=t.target:t.srcElement&&(e=t.srcElement),void 0!=e.nodeType&&3==e.nodeType&&(e=e.parentNode),e},e.hasParent=function(t,e){for(var i=t;i;){if(i===e)return!0;i=i.parentNode}return!1},e.option={},e.option.asBoolean=function(t,e){return"function"==typeof t&&(t=t()),null!=t?0!=t:e||null},e.option.asNumber=function(t,e){return"function"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},e.option.asString=function(t,e){return"function"==typeof t&&(t=t()),null!=t?String(t):e||null},e.option.asSize=function(t,i){return"function"==typeof t&&(t=t()),e.isString(t)?t:e.isNumber(t)?t+"px":i||null},e.option.asElement=function(t,e){return"function"==typeof t&&(t=t()),t||e||null},e.hexToRGB=function(t){var e=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;t=t.replace(e,function(t,e,i,o){return e+e+i+i+o+o});var i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return i?{r:parseInt(i[1],16),g:parseInt(i[2],16),b:parseInt(i[3],16)}:null},e.overrideOpacity=function(t,i){if(-1!=t.indexOf("rgba"))return t;if(-1!=t.indexOf("rgb")){var o=t.substr(t.indexOf("(")+1).replace(")","").split(",");return"rgba("+o[0]+","+o[1]+","+o[2]+","+i+")"}var o=e.hexToRGB(t);return null==o?t:"rgba("+o.r+","+o.g+","+o.b+","+i+")"},e.RGBToHex=function(t,e,i){return"#"+((1<<24)+(t<<16)+(e<<8)+i).toString(16).slice(1)},e.parseColor=function(t){var i;if(!0===e.isString(t)){if(!0===e.isValidRGB(t)){var o=t.substr(4).substr(0,t.length-5).split(",").map(function(t){return parseInt(t)});t=e.RGBToHex(o[0],o[1],o[2])}if(!0===e.isValidHex(t)){var n=e.hexToHSV(t),s={h:n.h,s:.8*n.s,v:Math.min(1,1.02*n.v)},r={h:n.h,s:Math.min(1,1.25*n.s),v:.8*n.v},a=e.HSVToHex(r.h,r.s,r.v),h=e.HSVToHex(s.h,s.s,s.v);i={background:t,border:a,highlight:{background:h,border:a},hover:{background:h,border:a}}}else i={background:t,border:t,highlight:{background:t,border:t},hover:{background:t,border:t}}}else i={},i.background=t.background||void 0,i.border=t.border||void 0,e.isString(t.highlight)?i.highlight={border:t.highlight,background:t.highlight}:(i.highlight={},i.highlight.background=t.highlight&&t.highlight.background||void 0,i.highlight.border=t.highlight&&t.highlight.border||void 0),e.isString(t.hover)?i.hover={border:t.hover,background:t.hover}:(i.hover={},i.hover.background=t.hover&&t.hover.background||void 0,i.hover.border=t.hover&&t.hover.border||void 0);return i},e.RGBToHSV=function(t,e,i){t/=255,e/=255,i/=255;var o=Math.min(t,Math.min(e,i)),n=Math.max(t,Math.max(e,i));if(o==n)return{h:0,s:0,v:o};var s=t==o?e-i:i==o?t-e:i-t;return{h:60*((t==o?3:i==o?1:5)-s/(n-o))/360,s:(n-o)/n,v:n}};var m={split:function(t){var e={};return t.split(";").forEach(function(t){if(""!=t.trim()){var i=t.split(":"),o=i[0].trim(),n=i[1].trim();e[o]=n}}),e},join:function(t){return(0,d.default)(t).map(function(e){return e+": "+t[e]}).join("; ")}};e.addCssText=function(t,i){var o=m.split(t.style.cssText),n=m.split(i),s=e.extend(o,n);t.style.cssText=m.join(s)},e.removeCssText=function(t,e){var i=m.split(t.style.cssText),o=m.split(e);for(var n in o)o.hasOwnProperty(n)&&delete i[n];t.style.cssText=m.join(i)},e.HSVToRGB=function(t,e,i){var o,n,s,r=Math.floor(6*t),a=6*t-r,h=i*(1-e),d=i*(1-a*e),l=i*(1-(1-a)*e);switch(r%6){case 0:o=i,n=l,s=h;break;case 1:o=d,n=i,s=h;break;case 2:o=h,n=i,s=l;break;case 3:o=h,n=d,s=i;break;case 4:o=l,n=h,s=i;break;case 5:o=i,n=h,s=d}return{r:Math.floor(255*o),g:Math.floor(255*n),b:Math.floor(255*s)}},e.HSVToHex=function(t,i,o){var n=e.HSVToRGB(t,i,o);return e.RGBToHex(n.r,n.g,n.b)},e.hexToHSV=function(t){var i=e.hexToRGB(t);return e.RGBToHSV(i.r,i.g,i.b)},e.isValidHex=function(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)},e.isValidRGB=function(t){return t=t.replace(" ",""),/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t)},e.isValidRGBA=function(t){return t=t.replace(" ",""),/rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(t)},e.selectiveBridgeObject=function(t,i){if("object"==(void 0===i?"undefined":(0,u.default)(i))){for(var o=(0,a.default)(i),n=0;n0&&e(o,t[n-1])<0;n--)t[n]=t[n-1];t[n]=o}return t},e.mergeOptions=function(t,e,i){var o=(arguments.length>3&&void 0!==arguments[3]&&arguments[3],arguments.length>4&&void 0!==arguments[4]?arguments[4]:{});if(null===e[i])t[i]=(0,a.default)(o[i]);else if(void 0!==e[i])if("boolean"==typeof e[i])t[i].enabled=e[i];else{void 0===e[i].enabled&&(t[i].enabled=!0);for(var n in e[i])e[i].hasOwnProperty(n)&&(t[i][n]=e[i][n])}},e.binarySearchCustom=function(t,e,i,o){for(var n=0,s=0,r=t.length-1;s<=r&&n<1e4;){var a=Math.floor((s+r)/2),h=t[a],d=void 0===o?h[i]:h[i][o],l=e(d);if(0==l)return a;-1==l?s=a+1:r=a-1,n++}return-1},e.binarySearchValue=function(t,e,i,o,n){for(var s,r,a,h,d=0,l=0,u=t.length-1,n=void 0!=n?n:function(t,e){return t==e?0:t0)return"before"==o?Math.max(0,h-1):h;if(n(r,e)<0&&n(a,e)>0)return"before"==o?h:Math.min(t.length-1,h+1);n(r,e)<0?l=h+1:u=h-1,d++}return-1},e.easingFunctions={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}},e.getScrollBarWidth=function(){var t=document.createElement("p");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow="scroll";var o=t.offsetWidth;return i==o&&(o=e.clientWidth),document.body.removeChild(e),i-o},e.topMost=function(t,e){var i=void 0;Array.isArray(e)||(e=[e]);var o=!0,n=!1,r=void 0;try{for(var a,h=(0,s.default)(t);!(o=(a=h.next()).done);o=!0){var d=a.value;if(d){i=d[e[0]];for(var l=1;l=t.length?(this._t=void 0,n(1)):"keys"==e?n(0,i):"values"==e?n(0,t[i]):n(0,[i,t[i]])},"values"),s.Arguments=s.Array,o("keys"),o("values"),o("entries")},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e){t.exports={}},function(t,e,i){var o=i(10),n=i(12);t.exports=function(t){return o(n(t))}},function(t,e,i){var o=i(11);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==o(t)?t.split(""):Object(t)}},function(t,e){var i={}.toString;t.exports=function(t){return i.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,i){var o=i(14),n=i(15),s=i(30),r=i(20),a=i(31),h=i(8),d=i(32),l=i(46),u=i(48),c=i(47)("iterator"),p=!([].keys&&"next"in[].keys()),f=function(){return this};t.exports=function(t,e,i,m,v,g,y){d(i,e,m);var b,_,w,x=function(t){if(!p&&t in D)return D[t];switch(t){case"keys":case"values":return function(){return new i(this,t)}}return function(){return new i(this,t)}},k=e+" Iterator",M="values"==v,S=!1,D=t.prototype,O=D[c]||D["@@iterator"]||v&&D[v],C=O||x(v),T=v?M?x("entries"):C:void 0,E="Array"==e?D.entries||O:O;if(E&&(w=u(E.call(new t)))!==Object.prototype&&(l(w,k,!0),o||a(w,c)||r(w,c,f)),M&&O&&"values"!==O.name&&(S=!0,C=function(){return O.call(this)}),o&&!y||!p&&!S&&D[c]||r(D,c,C),h[e]=C,h[k]=f,v)if(b={values:M?C:x("values"),keys:g?C:x("keys"),entries:T},y)for(_ in b)_ in D||s(D,_,b[_]);else n(n.P+n.F*(p||S),e,b);return b}},function(t,e){t.exports=!0},function(t,e,i){var o=i(16),n=i(17),s=i(18),r=i(20),a=function(t,e,i){var h,d,l,u=t&a.F,c=t&a.G,p=t&a.S,f=t&a.P,m=t&a.B,v=t&a.W,g=c?n:n[e]||(n[e]={}),y=g.prototype,b=c?o:p?o[e]:(o[e]||{}).prototype;c&&(i=e);for(h in i)(d=!u&&b&&void 0!==b[h])&&h in g||(l=d?b[h]:i[h],g[h]=c&&"function"!=typeof b[h]?i[h]:m&&d?s(l,o):v&&b[h]==l?function(t){var e=function(e,i,o){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,o)}return t.apply(this,arguments)};return e.prototype=t.prototype,e}(l):f&&"function"==typeof l?s(Function.call,l):l,f&&((g.virtual||(g.virtual={}))[h]=l,t&a.R&&y&&!y[h]&&r(y,h,l)))};a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,t.exports=a},function(t,e){var i=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(t,e){var i=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=i)},function(t,e,i){var o=i(19);t.exports=function(t,e,i){if(o(t),void 0===e)return t;switch(i){case 1:return function(i){return t.call(e,i)};case 2:return function(i,o){return t.call(e,i,o)};case 3:return function(i,o,n){return t.call(e,i,o,n)}}return function(){return t.apply(e,arguments)}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,i){var o=i(21),n=i(29);t.exports=i(25)?function(t,e,i){return o.f(t,e,n(1,i))}:function(t,e,i){return t[e]=i,t}},function(t,e,i){var o=i(22),n=i(24),s=i(28),r=Object.defineProperty;e.f=i(25)?Object.defineProperty:function(t,e,i){if(o(t),e=s(e,!0),o(i),n)try{return r(t,e,i)}catch(t){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(t[e]=i.value),t}},function(t,e,i){var o=i(23);t.exports=function(t){if(!o(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,i){t.exports=!i(25)&&!i(26)(function(){return 7!=Object.defineProperty(i(27)("div"),"a",{get:function(){return 7}}).a})},function(t,e,i){t.exports=!i(26)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,i){var o=i(23),n=i(16).document,s=o(n)&&o(n.createElement);t.exports=function(t){return s?n.createElement(t):{}}},function(t,e,i){var o=i(23);t.exports=function(t,e){if(!o(t))return t;var i,n;if(e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;if("function"==typeof(i=t.valueOf)&&!o(n=i.call(t)))return n;if(!e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,i){t.exports=i(20)},function(t,e){var i={}.hasOwnProperty;t.exports=function(t,e){return i.call(t,e)}},function(t,e,i){var o=i(33),n=i(29),s=i(46),r={};i(20)(r,i(47)("iterator"),function(){return this}),t.exports=function(t,e,i){t.prototype=o(r,{next:n(1,i)}),s(t,e+" Iterator")}},function(t,e,i){var o=i(22),n=i(34),s=i(44),r=i(41)("IE_PROTO"),a=function(){},h=function(){var t,e=i(27)("iframe"),o=s.length;for(e.style.display="none",i(45).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(" + + + + + + +

+
+
+ + + + diff --git a/_files/slides/will-drake/graph3_files/htmlwidgets-0.9/htmlwidgets.js b/_files/slides/will-drake/graph3_files/htmlwidgets-0.9/htmlwidgets.js new file mode 100755 index 0000000..ecda3ef --- /dev/null +++ b/_files/slides/will-drake/graph3_files/htmlwidgets-0.9/htmlwidgets.js @@ -0,0 +1,836 @@ +(function() { + // If window.HTMLWidgets is already defined, then use it; otherwise create a + // new object. This allows preceding code to set options that affect the + // initialization process (though none currently exist). + window.HTMLWidgets = window.HTMLWidgets || {}; + + // See if we're running in a viewer pane. If not, we're in a web browser. + var viewerMode = window.HTMLWidgets.viewerMode = + /\bviewer_pane=1\b/.test(window.location); + + // See if we're running in Shiny mode. If not, it's a static document. + // Note that static widgets can appear in both Shiny and static modes, but + // obviously, Shiny widgets can only appear in Shiny apps/documents. + var shinyMode = window.HTMLWidgets.shinyMode = + typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; + + // We can't count on jQuery being available, so we implement our own + // version if necessary. + function querySelectorAll(scope, selector) { + if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { + return scope.find(selector); + } + if (scope.querySelectorAll) { + return scope.querySelectorAll(selector); + } + } + + function asArray(value) { + if (value === null) + return []; + if ($.isArray(value)) + return value; + return [value]; + } + + // Implement jQuery's extend + function extend(target /*, ... */) { + if (arguments.length == 1) { + return target; + } + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + } + return target; + } + + // IE8 doesn't support Array.forEach. + function forEach(values, callback, thisArg) { + if (values.forEach) { + values.forEach(callback, thisArg); + } else { + for (var i = 0; i < values.length; i++) { + callback.call(thisArg, values[i], i, values); + } + } + } + + // Replaces the specified method with the return value of funcSource. + // + // Note that funcSource should not BE the new method, it should be a function + // that RETURNS the new method. funcSource receives a single argument that is + // the overridden method, it can be called from the new method. The overridden + // method can be called like a regular function, it has the target permanently + // bound to it so "this" will work correctly. + function overrideMethod(target, methodName, funcSource) { + var superFunc = target[methodName] || function() {}; + var superFuncBound = function() { + return superFunc.apply(target, arguments); + }; + target[methodName] = funcSource(superFuncBound); + } + + // Add a method to delegator that, when invoked, calls + // delegatee.methodName. If there is no such method on + // the delegatee, but there was one on delegator before + // delegateMethod was called, then the original version + // is invoked instead. + // For example: + // + // var a = { + // method1: function() { console.log('a1'); } + // method2: function() { console.log('a2'); } + // }; + // var b = { + // method1: function() { console.log('b1'); } + // }; + // delegateMethod(a, b, "method1"); + // delegateMethod(a, b, "method2"); + // a.method1(); + // a.method2(); + // + // The output would be "b1", "a2". + function delegateMethod(delegator, delegatee, methodName) { + var inherited = delegator[methodName]; + delegator[methodName] = function() { + var target = delegatee; + var method = delegatee[methodName]; + + // The method doesn't exist on the delegatee. Instead, + // call the method on the delegator, if it exists. + if (!method) { + target = delegator; + method = inherited; + } + + if (method) { + return method.apply(target, arguments); + } + }; + } + + // Implement a vague facsimilie of jQuery's data method + function elementData(el, name, value) { + if (arguments.length == 2) { + return el["htmlwidget_data_" + name]; + } else if (arguments.length == 3) { + el["htmlwidget_data_" + name] = value; + return el; + } else { + throw new Error("Wrong number of arguments for elementData: " + + arguments.length); + } + } + + // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex + function escapeRegExp(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + } + + function hasClass(el, className) { + var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); + return re.test(el.className); + } + + // elements - array (or array-like object) of HTML elements + // className - class name to test for + // include - if true, only return elements with given className; + // if false, only return elements *without* given className + function filterByClass(elements, className, include) { + var results = []; + for (var i = 0; i < elements.length; i++) { + if (hasClass(elements[i], className) == include) + results.push(elements[i]); + } + return results; + } + + function on(obj, eventName, func) { + if (obj.addEventListener) { + obj.addEventListener(eventName, func, false); + } else if (obj.attachEvent) { + obj.attachEvent(eventName, func); + } + } + + function off(obj, eventName, func) { + if (obj.removeEventListener) + obj.removeEventListener(eventName, func, false); + else if (obj.detachEvent) { + obj.detachEvent(eventName, func); + } + } + + // Translate array of values to top/right/bottom/left, as usual with + // the "padding" CSS property + // https://developer.mozilla.org/en-US/docs/Web/CSS/padding + function unpackPadding(value) { + if (typeof(value) === "number") + value = [value]; + if (value.length === 1) { + return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; + } + if (value.length === 2) { + return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; + } + if (value.length === 3) { + return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; + } + if (value.length === 4) { + return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; + } + } + + // Convert an unpacked padding object to a CSS value + function paddingToCss(paddingObj) { + return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; + } + + // Makes a number suitable for CSS + function px(x) { + if (typeof(x) === "number") + return x + "px"; + else + return x; + } + + // Retrieves runtime widget sizing information for an element. + // The return value is either null, or an object with fill, padding, + // defaultWidth, defaultHeight fields. + function sizingPolicy(el) { + var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); + if (!sizingEl) + return null; + var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); + if (viewerMode) { + return sp.viewer; + } else { + return sp.browser; + } + } + + // @param tasks Array of strings (or falsy value, in which case no-op). + // Each element must be a valid JavaScript expression that yields a + // function. Or, can be an array of objects with "code" and "data" + // properties; in this case, the "code" property should be a string + // of JS that's an expr that yields a function, and "data" should be + // an object that will be added as an additional argument when that + // function is called. + // @param target The object that will be "this" for each function + // execution. + // @param args Array of arguments to be passed to the functions. (The + // same arguments will be passed to all functions.) + function evalAndRun(tasks, target, args) { + if (tasks) { + forEach(tasks, function(task) { + var theseArgs = args; + if (typeof(task) === "object") { + theseArgs = theseArgs.concat([task.data]); + task = task.code; + } + var taskFunc = eval("(" + task + ")"); + if (typeof(taskFunc) !== "function") { + throw new Error("Task must be a function! Source:\n" + task); + } + taskFunc.apply(target, theseArgs); + }); + } + } + + function initSizing(el) { + var sizing = sizingPolicy(el); + if (!sizing) + return; + + var cel = document.getElementById("htmlwidget_container"); + if (!cel) + return; + + if (typeof(sizing.padding) !== "undefined") { + document.body.style.margin = "0"; + document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); + } + + if (sizing.fill) { + document.body.style.overflow = "hidden"; + document.body.style.width = "100%"; + document.body.style.height = "100%"; + document.documentElement.style.width = "100%"; + document.documentElement.style.height = "100%"; + if (cel) { + cel.style.position = "absolute"; + var pad = unpackPadding(sizing.padding); + cel.style.top = pad.top + "px"; + cel.style.right = pad.right + "px"; + cel.style.bottom = pad.bottom + "px"; + cel.style.left = pad.left + "px"; + el.style.width = "100%"; + el.style.height = "100%"; + } + + return { + getWidth: function() { return cel.offsetWidth; }, + getHeight: function() { return cel.offsetHeight; } + }; + + } else { + el.style.width = px(sizing.width); + el.style.height = px(sizing.height); + + return { + getWidth: function() { return el.offsetWidth; }, + getHeight: function() { return el.offsetHeight; } + }; + } + } + + // Default implementations for methods + var defaults = { + find: function(scope) { + return querySelectorAll(scope, "." + this.name); + }, + renderError: function(el, err) { + var $el = $(el); + + this.clearError(el); + + // Add all these error classes, as Shiny does + var errClass = "shiny-output-error"; + if (err.type !== null) { + // use the classes of the error condition as CSS class names + errClass = errClass + " " + $.map(asArray(err.type), function(type) { + return errClass + "-" + type; + }).join(" "); + } + errClass = errClass + " htmlwidgets-error"; + + // Is el inline or block? If inline or inline-block, just display:none it + // and add an inline error. + var display = $el.css("display"); + $el.data("restore-display-mode", display); + + if (display === "inline" || display === "inline-block") { + $el.hide(); + if (err.message !== "") { + var errorSpan = $("").addClass(errClass); + errorSpan.text(err.message); + $el.after(errorSpan); + } + } else if (display === "block") { + // If block, add an error just after the el, set visibility:none on the + // el, and position the error to be on top of the el. + // Mark it with a unique ID and CSS class so we can remove it later. + $el.css("visibility", "hidden"); + if (err.message !== "") { + var errorDiv = $("
").addClass(errClass).css("position", "absolute") + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + // setting width can push out the page size, forcing otherwise + // unnecessary scrollbars to appear and making it impossible for + // the element to shrink; so use max-width instead + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + errorDiv.text(err.message); + $el.after(errorDiv); + + // Really dumb way to keep the size/position of the error in sync with + // the parent element as the window is resized or whatever. + var intId = setInterval(function() { + if (!errorDiv[0].parentElement) { + clearInterval(intId); + return; + } + errorDiv + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + }, 500); + } + } + }, + clearError: function(el) { + var $el = $(el); + var display = $el.data("restore-display-mode"); + $el.data("restore-display-mode", null); + + if (display === "inline" || display === "inline-block") { + if (display) + $el.css("display", display); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } else if (display === "block"){ + $el.css("visibility", "inherit"); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } + }, + sizing: {} + }; + + // Called by widget bindings to register a new type of widget. The definition + // object can contain the following properties: + // - name (required) - A string indicating the binding name, which will be + // used by default as the CSS classname to look for. + // - initialize (optional) - A function(el) that will be called once per + // widget element; if a value is returned, it will be passed as the third + // value to renderValue. + // - renderValue (required) - A function(el, data, initValue) that will be + // called with data. Static contexts will cause this to be called once per + // element; Shiny apps will cause this to be called multiple times per + // element, as the data changes. + window.HTMLWidgets.widget = function(definition) { + if (!definition.name) { + throw new Error("Widget must have a name"); + } + if (!definition.type) { + throw new Error("Widget must have a type"); + } + // Currently we only support output widgets + if (definition.type !== "output") { + throw new Error("Unrecognized widget type '" + definition.type + "'"); + } + // TODO: Verify that .name is a valid CSS classname + + // Support new-style instance-bound definitions. Old-style class-bound + // definitions have one widget "object" per widget per type/class of + // widget; the renderValue and resize methods on such widget objects + // take el and instance arguments, because the widget object can't + // store them. New-style instance-bound definitions have one widget + // object per widget instance; the definition that's passed in doesn't + // provide renderValue or resize methods at all, just the single method + // factory(el, width, height) + // which returns an object that has renderValue(x) and resize(w, h). + // This enables a far more natural programming style for the widget + // author, who can store per-instance state using either OO-style + // instance fields or functional-style closure variables (I guess this + // is in contrast to what can only be called C-style pseudo-OO which is + // what we required before). + if (definition.factory) { + definition = createLegacyDefinitionAdapter(definition); + } + + if (!definition.renderValue) { + throw new Error("Widget must have a renderValue function"); + } + + // For static rendering (non-Shiny), use a simple widget registration + // scheme. We also use this scheme for Shiny apps/documents that also + // contain static widgets. + window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; + // Merge defaults into the definition; don't mutate the original definition. + var staticBinding = extend({}, defaults, definition); + overrideMethod(staticBinding, "find", function(superfunc) { + return function(scope) { + var results = superfunc(scope); + // Filter out Shiny outputs, we only want the static kind + return filterByClass(results, "html-widget-output", false); + }; + }); + window.HTMLWidgets.widgets.push(staticBinding); + + if (shinyMode) { + // Shiny is running. Register the definition with an output binding. + // The definition itself will not be the output binding, instead + // we will make an output binding object that delegates to the + // definition. This is because we foolishly used the same method + // name (renderValue) for htmlwidgets definition and Shiny bindings + // but they actually have quite different semantics (the Shiny + // bindings receive data that includes lots of metadata that it + // strips off before calling htmlwidgets renderValue). We can't + // just ignore the difference because in some widgets it's helpful + // to call this.renderValue() from inside of resize(), and if + // we're not delegating, then that call will go to the Shiny + // version instead of the htmlwidgets version. + + // Merge defaults with definition, without mutating either. + var bindingDef = extend({}, defaults, definition); + + // This object will be our actual Shiny binding. + var shinyBinding = new Shiny.OutputBinding(); + + // With a few exceptions, we'll want to simply use the bindingDef's + // version of methods if they are available, otherwise fall back to + // Shiny's defaults. NOTE: If Shiny's output bindings gain additional + // methods in the future, and we want them to be overrideable by + // HTMLWidget binding definitions, then we'll need to add them to this + // list. + delegateMethod(shinyBinding, bindingDef, "getId"); + delegateMethod(shinyBinding, bindingDef, "onValueChange"); + delegateMethod(shinyBinding, bindingDef, "onValueError"); + delegateMethod(shinyBinding, bindingDef, "renderError"); + delegateMethod(shinyBinding, bindingDef, "clearError"); + delegateMethod(shinyBinding, bindingDef, "showProgress"); + + // The find, renderValue, and resize are handled differently, because we + // want to actually decorate the behavior of the bindingDef methods. + + shinyBinding.find = function(scope) { + var results = bindingDef.find(scope); + + // Only return elements that are Shiny outputs, not static ones + var dynamicResults = results.filter(".html-widget-output"); + + // It's possible that whatever caused Shiny to think there might be + // new dynamic outputs, also caused there to be new static outputs. + // Since there might be lots of different htmlwidgets bindings, we + // schedule execution for later--no need to staticRender multiple + // times. + if (results.length !== dynamicResults.length) + scheduleStaticRender(); + + return dynamicResults; + }; + + // Wrap renderValue to handle initialization, which unfortunately isn't + // supported natively by Shiny at the time of this writing. + + shinyBinding.renderValue = function(el, data) { + Shiny.renderDependencies(data.deps); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var i = 0; data.evals && i < data.evals.length; i++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); + } + if (!bindingDef.renderOnNullValue) { + if (data.x === null) { + el.style.visibility = "hidden"; + return; + } else { + el.style.visibility = "inherit"; + } + } + if (!elementData(el, "initialized")) { + initSizing(el); + + elementData(el, "initialized", true); + if (bindingDef.initialize) { + var result = bindingDef.initialize(el, el.offsetWidth, + el.offsetHeight); + elementData(el, "init_result", result); + } + } + bindingDef.renderValue(el, data.x, elementData(el, "init_result")); + evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]); + }; + + // Only override resize if bindingDef implements it + if (bindingDef.resize) { + shinyBinding.resize = function(el, width, height) { + // Shiny can call resize before initialize/renderValue have been + // called, which doesn't make sense for widgets. + if (elementData(el, "initialized")) { + bindingDef.resize(el, width, height, elementData(el, "init_result")); + } + }; + } + + Shiny.outputBindings.register(shinyBinding, bindingDef.name); + } + }; + + var scheduleStaticRenderTimerId = null; + function scheduleStaticRender() { + if (!scheduleStaticRenderTimerId) { + scheduleStaticRenderTimerId = setTimeout(function() { + scheduleStaticRenderTimerId = null; + window.HTMLWidgets.staticRender(); + }, 1); + } + } + + // Render static widgets after the document finishes loading + // Statically render all elements that are of this widget's class + window.HTMLWidgets.staticRender = function() { + var bindings = window.HTMLWidgets.widgets || []; + forEach(bindings, function(binding) { + var matches = binding.find(document.documentElement); + forEach(matches, function(el) { + var sizeObj = initSizing(el, binding); + + if (hasClass(el, "html-widget-static-bound")) + return; + el.className = el.className + " html-widget-static-bound"; + + var initResult; + if (binding.initialize) { + initResult = binding.initialize(el, + sizeObj ? sizeObj.getWidth() : el.offsetWidth, + sizeObj ? sizeObj.getHeight() : el.offsetHeight + ); + elementData(el, "init_result", initResult); + } + + if (binding.resize) { + var lastSize = {}; + var resizeHandler = function(e) { + var size = { + w: sizeObj ? sizeObj.getWidth() : el.offsetWidth, + h: sizeObj ? sizeObj.getHeight() : el.offsetHeight + }; + if (size.w === 0 && size.h === 0) + return; + if (size.w === lastSize.w && size.h === lastSize.h) + return; + lastSize = size; + binding.resize(el, size.w, size.h, initResult); + }; + + on(window, "resize", resizeHandler); + + // This is needed for cases where we're running in a Shiny + // app, but the widget itself is not a Shiny output, but + // rather a simple static widget. One example of this is + // an rmarkdown document that has runtime:shiny and widget + // that isn't in a render function. Shiny only knows to + // call resize handlers for Shiny outputs, not for static + // widgets, so we do it ourselves. + if (window.jQuery) { + window.jQuery(document).on( + "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets", + resizeHandler + ); + window.jQuery(document).on( + "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets", + resizeHandler + ); + } + + // This is needed for the specific case of ioslides, which + // flips slides between display:none and display:block. + // Ideally we would not have to have ioslide-specific code + // here, but rather have ioslides raise a generic event, + // but the rmarkdown package just went to CRAN so the + // window to getting that fixed may be long. + if (window.addEventListener) { + // It's OK to limit this to window.addEventListener + // browsers because ioslides itself only supports + // such browsers. + on(document, "slideenter", resizeHandler); + on(document, "slideleave", resizeHandler); + } + } + + var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); + if (scriptData) { + var data = JSON.parse(scriptData.textContent || scriptData.text); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var k = 0; data.evals && k < data.evals.length; k++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); + } + binding.renderValue(el, data.x, initResult); + evalAndRun(data.jsHooks.render, initResult, [el, data.x]); + } + }); + }); + + invokePostRenderHandlers(); + } + + // Wait until after the document has loaded to render the widgets. + if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", function() { + document.removeEventListener("DOMContentLoaded", arguments.callee, false); + window.HTMLWidgets.staticRender(); + }, false); + } else if (document.attachEvent) { + document.attachEvent("onreadystatechange", function() { + if (document.readyState === "complete") { + document.detachEvent("onreadystatechange", arguments.callee); + window.HTMLWidgets.staticRender(); + } + }); + } + + + window.HTMLWidgets.getAttachmentUrl = function(depname, key) { + // If no key, default to the first item + if (typeof(key) === "undefined") + key = 1; + + var link = document.getElementById(depname + "-" + key + "-attachment"); + if (!link) { + throw new Error("Attachment " + depname + "/" + key + " not found in document"); + } + return link.getAttribute("href"); + }; + + window.HTMLWidgets.dataframeToD3 = function(df) { + var names = []; + var length; + for (var name in df) { + if (df.hasOwnProperty(name)) + names.push(name); + if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { + throw new Error("All fields must be arrays"); + } else if (typeof(length) !== "undefined" && length !== df[name].length) { + throw new Error("All fields must be arrays of the same length"); + } + length = df[name].length; + } + var results = []; + var item; + for (var row = 0; row < length; row++) { + item = {}; + for (var col = 0; col < names.length; col++) { + item[names[col]] = df[names[col]][row]; + } + results.push(item); + } + return results; + }; + + window.HTMLWidgets.transposeArray2D = function(array) { + if (array.length === 0) return array; + var newArray = array[0].map(function(col, i) { + return array.map(function(row) { + return row[i] + }) + }); + return newArray; + }; + // Split value at splitChar, but allow splitChar to be escaped + // using escapeChar. Any other characters escaped by escapeChar + // will be included as usual (including escapeChar itself). + function splitWithEscape(value, splitChar, escapeChar) { + var results = []; + var escapeMode = false; + var currentResult = ""; + for (var pos = 0; pos < value.length; pos++) { + if (!escapeMode) { + if (value[pos] === splitChar) { + results.push(currentResult); + currentResult = ""; + } else if (value[pos] === escapeChar) { + escapeMode = true; + } else { + currentResult += value[pos]; + } + } else { + currentResult += value[pos]; + escapeMode = false; + } + } + if (currentResult !== "") { + results.push(currentResult); + } + return results; + } + // Function authored by Yihui/JJ Allaire + window.HTMLWidgets.evaluateStringMember = function(o, member) { + var parts = splitWithEscape(member, '.', '\\'); + for (var i = 0, l = parts.length; i < l; i++) { + var part = parts[i]; + // part may be a character or 'numeric' member name + if (o !== null && typeof o === "object" && part in o) { + if (i == (l - 1)) { // if we are at the end of the line then evalulate + if (typeof o[part] === "string") + o[part] = eval("(" + o[part] + ")"); + } else { // otherwise continue to next embedded object + o = o[part]; + } + } + } + }; + + // Retrieve the HTMLWidget instance (i.e. the return value of an + // HTMLWidget binding's initialize() or factory() function) + // associated with an element, or null if none. + window.HTMLWidgets.getInstance = function(el) { + return elementData(el, "init_result"); + }; + + // Finds the first element in the scope that matches the selector, + // and returns the HTMLWidget instance (i.e. the return value of + // an HTMLWidget binding's initialize() or factory() function) + // associated with that element, if any. If no element matches the + // selector, or the first matching element has no HTMLWidget + // instance associated with it, then null is returned. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.find = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var el = scope.querySelector(selector); + if (el === null) { + return null; + } else { + return window.HTMLWidgets.getInstance(el); + } + }; + + // Finds all elements in the scope that match the selector, and + // returns the HTMLWidget instances (i.e. the return values of + // an HTMLWidget binding's initialize() or factory() function) + // associated with the elements, in an array. If elements that + // match the selector don't have an associated HTMLWidget + // instance, the returned array will contain nulls. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.findAll = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var nodes = scope.querySelectorAll(selector); + var results = []; + for (var i = 0; i < nodes.length; i++) { + results.push(window.HTMLWidgets.getInstance(nodes[i])); + } + return results; + }; + + var postRenderHandlers = []; + function invokePostRenderHandlers() { + while (postRenderHandlers.length) { + var handler = postRenderHandlers.shift(); + if (handler) { + handler(); + } + } + } + + // Register the given callback function to be invoked after the + // next time static widgets are rendered. + window.HTMLWidgets.addPostRenderHandler = function(callback) { + postRenderHandlers.push(callback); + }; + + // Takes a new-style instance-bound definition, and returns an + // old-style class-bound definition. This saves us from having + // to rewrite all the logic in this file to accomodate both + // types of definitions. + function createLegacyDefinitionAdapter(defn) { + var result = { + name: defn.name, + type: defn.type, + initialize: function(el, width, height) { + return defn.factory(el, width, height); + }, + renderValue: function(el, x, instance) { + return instance.renderValue(x); + }, + resize: function(el, width, height, instance) { + return instance.resize(width, height); + } + }; + + if (defn.find) + result.find = defn.find; + if (defn.renderError) + result.renderError = defn.renderError; + if (defn.clearError) + result.clearError = defn.clearError; + + return result; + } +})(); + diff --git a/_files/slides/will-drake/graph3_files/vis-4.20.0/img/network/acceptDeleteIcon.png b/_files/slides/will-drake/graph3_files/vis-4.20.0/img/network/acceptDeleteIcon.png new file mode 100755 index 0000000000000000000000000000000000000000..02a062852c2a8ea7610b64f5d6f79ce4953c3b42 GIT binary patch literal 20675 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

|#V-x46+1BId1SnF`o)!|KGJUGs&sOwUB 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 REZGm4F~`{$=NWC^^ItUJ)cF7a literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph3_files/vis-4.20.0/img/network/cross.png b/_files/slides/will-drake/graph3_files/vis-4.20.0/img/network/cross.png new file mode 100755 index 0000000000000000000000000000000000000000..9cbd189ab6ae99ed5794c30a12ddc0480987f29f GIT binary patch literal 18303 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph3_files/vis-4.20.0/img/network/deleteIcon.png b/_files/slides/will-drake/graph3_files/vis-4.20.0/img/network/deleteIcon.png new file mode 100755 index 0000000000000000000000000000000000000000..540256479106ed2f9263ec5df22fd7f0c75231e4 GIT binary patch literal 20981 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph3_files/vis-4.20.0/img/network/downArrow.png b/_files/slides/will-drake/graph3_files/vis-4.20.0/img/network/downArrow.png new file mode 100755 index 0000000000000000000000000000000000000000..e77d5e6d4157b12a5b2fa08a9fc138f0ab9eb4e7 GIT binary patch literal 4460 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�EM>-Bgb&Rym2{we-b7Oawc(c4k4MzLw~<#m(JZ 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph3_files/vis-4.20.0/img/network/leftArrow.png b/_files/slides/will-drake/graph3_files/vis-4.20.0/img/network/leftArrow.png new file mode 100755 index 0000000000000000000000000000000000000000..3823536e38ef1cd96582a6072b70cc514ac27d05 GIT binary patch literal 4531 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 Re)#|Z002ovPDHLkV1iMdkGuc? literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph3_files/vis-4.20.0/img/network/minus.png b/_files/slides/will-drake/graph3_files/vis-4.20.0/img/network/minus.png new file mode 100755 index 0000000000000000000000000000000000000000..30698076b9ac59f0880752ddc13af3f6bf062403 GIT binary patch literal 4147 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph3_files/vis-4.20.0/img/network/plus.png b/_files/slides/will-drake/graph3_files/vis-4.20.0/img/network/plus.png new file mode 100755 index 0000000000000000000000000000000000000000..f7ab2a334e566b6deb9657d7d8370f591bfb81bc GIT binary patch literal 4341 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph3_files/vis-4.20.0/img/network/rightArrow.png b/_files/slides/will-drake/graph3_files/vis-4.20.0/img/network/rightArrow.png new file mode 100755 index 0000000000000000000000000000000000000000..c3a209d8b0a58355305aae03b5520a1e070d8eab GIT binary patch literal 4514 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph3_files/vis-4.20.0/img/network/zoomExtends.png b/_files/slides/will-drake/graph3_files/vis-4.20.0/img/network/zoomExtends.png new file mode 100755 index 0000000000000000000000000000000000000000..74595c6358448fbdcfbd62629084841ca7e8b8a9 GIT binary patch literal 4464 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 .vis-content { + position: relative; +} + +.vis-panel .vis-shadow { + position: absolute; + width: 100%; + height: 1px; + box-shadow: 0 0 10px rgba(0,0,0,0.8); + /* TODO: find a nice way to ensure vis-shadows are drawn on top of items + z-index: 1; + */ +} + +.vis-panel .vis-shadow.vis-top { + top: -1px; + left: 0; +} + +.vis-panel .vis-shadow.vis-bottom { + bottom: -1px; + left: 0; +} +.vis-graph-group0 { + fill:#4f81bd; + fill-opacity:0; + stroke-width:2px; + stroke: #4f81bd; +} + +.vis-graph-group1 { + fill:#f79646; + fill-opacity:0; + stroke-width:2px; + stroke: #f79646; +} + +.vis-graph-group2 { + fill: #8c51cf; + fill-opacity:0; + stroke-width:2px; + stroke: #8c51cf; +} + +.vis-graph-group3 { + fill: #75c841; + fill-opacity:0; + stroke-width:2px; + stroke: #75c841; +} + +.vis-graph-group4 { + fill: #ff0100; + fill-opacity:0; + stroke-width:2px; + stroke: #ff0100; +} + +.vis-graph-group5 { + fill: #37d8e6; + fill-opacity:0; + stroke-width:2px; + stroke: #37d8e6; +} + +.vis-graph-group6 { + fill: #042662; + fill-opacity:0; + stroke-width:2px; + stroke: #042662; +} + +.vis-graph-group7 { + fill:#00ff26; + fill-opacity:0; + stroke-width:2px; + stroke: #00ff26; +} + +.vis-graph-group8 { + fill:#ff00ff; + fill-opacity:0; + stroke-width:2px; + stroke: #ff00ff; +} + +.vis-graph-group9 { + fill: #8f3938; + fill-opacity:0; + stroke-width:2px; + stroke: #8f3938; +} + +.vis-timeline .vis-fill { + fill-opacity:0.1; + stroke: none; +} + + +.vis-timeline .vis-bar { + fill-opacity:0.5; + stroke-width:1px; +} + +.vis-timeline .vis-point { + stroke-width:2px; + fill-opacity:1.0; +} + + +.vis-timeline .vis-legend-background { + stroke-width:1px; + fill-opacity:0.9; + fill: #ffffff; + stroke: #c2c2c2; +} + + +.vis-timeline .vis-outline { + stroke-width:1px; + fill-opacity:1; + fill: #ffffff; + stroke: #e5e5e5; +} + +.vis-timeline .vis-icon-fill { + fill-opacity:0.3; + stroke: none; +} + +.vis-time-axis { + position: relative; + overflow: hidden; +} + +.vis-time-axis.vis-foreground { + top: 0; + left: 0; + width: 100%; +} + +.vis-time-axis.vis-background { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.vis-time-axis .vis-text { + position: absolute; + color: #4d4d4d; + padding: 3px; + overflow: hidden; + box-sizing: border-box; + + white-space: nowrap; +} + +.vis-time-axis .vis-text.vis-measure { + position: absolute; + padding-left: 0; + padding-right: 0; + margin-left: 0; + margin-right: 0; + visibility: hidden; +} + +.vis-time-axis .vis-grid.vis-vertical { + position: absolute; + border-left: 1px solid; +} + +.vis-time-axis .vis-grid.vis-vertical-rtl { + position: absolute; + border-right: 1px solid; +} + +.vis-time-axis .vis-grid.vis-minor { + border-color: #e5e5e5; +} + +.vis-time-axis .vis-grid.vis-major { + border-color: #bfbfbf; +} + + +.vis-timeline { + position: relative; + border: 1px solid #bfbfbf; + + overflow: hidden; + padding: 0; + margin: 0; + + box-sizing: border-box; +} diff --git a/_files/slides/will-drake/graph3_files/vis-4.20.0/vis.min.js b/_files/slides/will-drake/graph3_files/vis-4.20.0/vis.min.js new file mode 100755 index 0000000..7c48489 --- /dev/null +++ b/_files/slides/will-drake/graph3_files/vis-4.20.0/vis.min.js @@ -0,0 +1,46 @@ +/** + * vis.js + * https://github.com/almende/vis + * + * A dynamic, browser-based visualization library. + * + * @version 4.20.0 + * @date 2017-05-21 + * + * @license + * Copyright (C) 2011-2017 Almende B.V, http://almende.com + * + * Vis.js is dual licensed under both + * + * * The Apache 2.0 License + * http://www.apache.org/licenses/LICENSE-2.0 + * + * and + * + * * The MIT License + * http://opensource.org/licenses/MIT + * + * Vis.js may be distributed under either license. + */ +"use strict";!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.vis=e():t.vis=e()}(this,function(){return function(t){function e(o){if(i[o])return i[o].exports;var n=i[o]={exports:{},id:o,loaded:!1};return t[o].call(n.exports,n,n.exports,e),n.loaded=!0,n.exports}var i={};return e.m=t,e.c=i,e.p="",e(0)}([function(t,e,i){var o=i(1);o.extend(e,i(87)),o.extend(e,i(116)),o.extend(e,i(158))},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}var n=i(2),s=o(n),r=i(55),a=o(r),h=i(58),d=o(h),l=i(62),u=o(l),c=i(82),p=i(86);e.isNumber=function(t){return t instanceof Number||"number"==typeof t},e.recursiveDOMDelete=function(t){if(t)for(;!0===t.hasChildNodes();)e.recursiveDOMDelete(t.firstChild),t.removeChild(t.firstChild)},e.giveRange=function(t,e,i,o){if(e==t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)},e.isString=function(t){return t instanceof String||"string"==typeof t},e.isDate=function(t){if(t instanceof Date)return!0;if(e.isString(t)){if(f.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},e.randomUUID=function(){return p.v4()},e.assignAllKeys=function(t,e){for(var i in t)t.hasOwnProperty(i)&&"object"!==(0,u.default)(t[i])&&(t[i]=e)},e.fillIfDefined=function(t,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var n in t)void 0!==i[n]&&("object"!==(0,u.default)(i[n])?void 0!==i[n]&&null!==i[n]||void 0===t[n]||!0!==o?t[n]=i[n]:delete t[n]:"object"===(0,u.default)(t[n])&&e.fillIfDefined(t[n],i[n],o))},e.protoExtend=function(t,e){for(var i=1;i3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var s=2;s3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var s in o)if(o.hasOwnProperty(s)&&-1==t.indexOf(s))if(o[s]&&o[s].constructor===Object)void 0===i[s]&&(i[s]={}),i[s].constructor===Object?e.deepExtend(i[s],o[s]):null===o[s]&&void 0!==i[s]&&!0===n?delete i[s]:i[s]=o[s];else if(Array.isArray(o[s])){i[s]=[];for(var r=0;r=0&&(e="DOMMouseScroll"),t.addEventListener(e,i,o)):t.attachEvent("on"+e,i)},e.removeEventListener=function(t,e,i,o){t.removeEventListener?(void 0===o&&(o=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.removeEventListener(e,i,o)):t.detachEvent("on"+e,i)},e.preventDefault=function(t){t||(t=window.event),t.preventDefault?t.preventDefault():t.returnValue=!1},e.getTarget=function(t){t||(t=window.event);var e;return t.target?e=t.target:t.srcElement&&(e=t.srcElement),void 0!=e.nodeType&&3==e.nodeType&&(e=e.parentNode),e},e.hasParent=function(t,e){for(var i=t;i;){if(i===e)return!0;i=i.parentNode}return!1},e.option={},e.option.asBoolean=function(t,e){return"function"==typeof t&&(t=t()),null!=t?0!=t:e||null},e.option.asNumber=function(t,e){return"function"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},e.option.asString=function(t,e){return"function"==typeof t&&(t=t()),null!=t?String(t):e||null},e.option.asSize=function(t,i){return"function"==typeof t&&(t=t()),e.isString(t)?t:e.isNumber(t)?t+"px":i||null},e.option.asElement=function(t,e){return"function"==typeof t&&(t=t()),t||e||null},e.hexToRGB=function(t){var e=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;t=t.replace(e,function(t,e,i,o){return e+e+i+i+o+o});var i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return i?{r:parseInt(i[1],16),g:parseInt(i[2],16),b:parseInt(i[3],16)}:null},e.overrideOpacity=function(t,i){if(-1!=t.indexOf("rgba"))return t;if(-1!=t.indexOf("rgb")){var o=t.substr(t.indexOf("(")+1).replace(")","").split(",");return"rgba("+o[0]+","+o[1]+","+o[2]+","+i+")"}var o=e.hexToRGB(t);return null==o?t:"rgba("+o.r+","+o.g+","+o.b+","+i+")"},e.RGBToHex=function(t,e,i){return"#"+((1<<24)+(t<<16)+(e<<8)+i).toString(16).slice(1)},e.parseColor=function(t){var i;if(!0===e.isString(t)){if(!0===e.isValidRGB(t)){var o=t.substr(4).substr(0,t.length-5).split(",").map(function(t){return parseInt(t)});t=e.RGBToHex(o[0],o[1],o[2])}if(!0===e.isValidHex(t)){var n=e.hexToHSV(t),s={h:n.h,s:.8*n.s,v:Math.min(1,1.02*n.v)},r={h:n.h,s:Math.min(1,1.25*n.s),v:.8*n.v},a=e.HSVToHex(r.h,r.s,r.v),h=e.HSVToHex(s.h,s.s,s.v);i={background:t,border:a,highlight:{background:h,border:a},hover:{background:h,border:a}}}else i={background:t,border:t,highlight:{background:t,border:t},hover:{background:t,border:t}}}else i={},i.background=t.background||void 0,i.border=t.border||void 0,e.isString(t.highlight)?i.highlight={border:t.highlight,background:t.highlight}:(i.highlight={},i.highlight.background=t.highlight&&t.highlight.background||void 0,i.highlight.border=t.highlight&&t.highlight.border||void 0),e.isString(t.hover)?i.hover={border:t.hover,background:t.hover}:(i.hover={},i.hover.background=t.hover&&t.hover.background||void 0,i.hover.border=t.hover&&t.hover.border||void 0);return i},e.RGBToHSV=function(t,e,i){t/=255,e/=255,i/=255;var o=Math.min(t,Math.min(e,i)),n=Math.max(t,Math.max(e,i));if(o==n)return{h:0,s:0,v:o};var s=t==o?e-i:i==o?t-e:i-t;return{h:60*((t==o?3:i==o?1:5)-s/(n-o))/360,s:(n-o)/n,v:n}};var m={split:function(t){var e={};return t.split(";").forEach(function(t){if(""!=t.trim()){var i=t.split(":"),o=i[0].trim(),n=i[1].trim();e[o]=n}}),e},join:function(t){return(0,d.default)(t).map(function(e){return e+": "+t[e]}).join("; ")}};e.addCssText=function(t,i){var o=m.split(t.style.cssText),n=m.split(i),s=e.extend(o,n);t.style.cssText=m.join(s)},e.removeCssText=function(t,e){var i=m.split(t.style.cssText),o=m.split(e);for(var n in o)o.hasOwnProperty(n)&&delete i[n];t.style.cssText=m.join(i)},e.HSVToRGB=function(t,e,i){var o,n,s,r=Math.floor(6*t),a=6*t-r,h=i*(1-e),d=i*(1-a*e),l=i*(1-(1-a)*e);switch(r%6){case 0:o=i,n=l,s=h;break;case 1:o=d,n=i,s=h;break;case 2:o=h,n=i,s=l;break;case 3:o=h,n=d,s=i;break;case 4:o=l,n=h,s=i;break;case 5:o=i,n=h,s=d}return{r:Math.floor(255*o),g:Math.floor(255*n),b:Math.floor(255*s)}},e.HSVToHex=function(t,i,o){var n=e.HSVToRGB(t,i,o);return e.RGBToHex(n.r,n.g,n.b)},e.hexToHSV=function(t){var i=e.hexToRGB(t);return e.RGBToHSV(i.r,i.g,i.b)},e.isValidHex=function(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)},e.isValidRGB=function(t){return t=t.replace(" ",""),/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t)},e.isValidRGBA=function(t){return t=t.replace(" ",""),/rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(t)},e.selectiveBridgeObject=function(t,i){if("object"==(void 0===i?"undefined":(0,u.default)(i))){for(var o=(0,a.default)(i),n=0;n0&&e(o,t[n-1])<0;n--)t[n]=t[n-1];t[n]=o}return t},e.mergeOptions=function(t,e,i){var o=(arguments.length>3&&void 0!==arguments[3]&&arguments[3],arguments.length>4&&void 0!==arguments[4]?arguments[4]:{});if(null===e[i])t[i]=(0,a.default)(o[i]);else if(void 0!==e[i])if("boolean"==typeof e[i])t[i].enabled=e[i];else{void 0===e[i].enabled&&(t[i].enabled=!0);for(var n in e[i])e[i].hasOwnProperty(n)&&(t[i][n]=e[i][n])}},e.binarySearchCustom=function(t,e,i,o){for(var n=0,s=0,r=t.length-1;s<=r&&n<1e4;){var a=Math.floor((s+r)/2),h=t[a],d=void 0===o?h[i]:h[i][o],l=e(d);if(0==l)return a;-1==l?s=a+1:r=a-1,n++}return-1},e.binarySearchValue=function(t,e,i,o,n){for(var s,r,a,h,d=0,l=0,u=t.length-1,n=void 0!=n?n:function(t,e){return t==e?0:t0)return"before"==o?Math.max(0,h-1):h;if(n(r,e)<0&&n(a,e)>0)return"before"==o?h:Math.min(t.length-1,h+1);n(r,e)<0?l=h+1:u=h-1,d++}return-1},e.easingFunctions={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}},e.getScrollBarWidth=function(){var t=document.createElement("p");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow="scroll";var o=t.offsetWidth;return i==o&&(o=e.clientWidth),document.body.removeChild(e),i-o},e.topMost=function(t,e){var i=void 0;Array.isArray(e)||(e=[e]);var o=!0,n=!1,r=void 0;try{for(var a,h=(0,s.default)(t);!(o=(a=h.next()).done);o=!0){var d=a.value;if(d){i=d[e[0]];for(var l=1;l=t.length?(this._t=void 0,n(1)):"keys"==e?n(0,i):"values"==e?n(0,t[i]):n(0,[i,t[i]])},"values"),s.Arguments=s.Array,o("keys"),o("values"),o("entries")},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e){t.exports={}},function(t,e,i){var o=i(10),n=i(12);t.exports=function(t){return o(n(t))}},function(t,e,i){var o=i(11);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==o(t)?t.split(""):Object(t)}},function(t,e){var i={}.toString;t.exports=function(t){return i.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,i){var o=i(14),n=i(15),s=i(30),r=i(20),a=i(31),h=i(8),d=i(32),l=i(46),u=i(48),c=i(47)("iterator"),p=!([].keys&&"next"in[].keys()),f=function(){return this};t.exports=function(t,e,i,m,v,g,y){d(i,e,m);var b,_,w,x=function(t){if(!p&&t in D)return D[t];switch(t){case"keys":case"values":return function(){return new i(this,t)}}return function(){return new i(this,t)}},k=e+" Iterator",M="values"==v,S=!1,D=t.prototype,O=D[c]||D["@@iterator"]||v&&D[v],C=O||x(v),T=v?M?x("entries"):C:void 0,E="Array"==e?D.entries||O:O;if(E&&(w=u(E.call(new t)))!==Object.prototype&&(l(w,k,!0),o||a(w,c)||r(w,c,f)),M&&O&&"values"!==O.name&&(S=!0,C=function(){return O.call(this)}),o&&!y||!p&&!S&&D[c]||r(D,c,C),h[e]=C,h[k]=f,v)if(b={values:M?C:x("values"),keys:g?C:x("keys"),entries:T},y)for(_ in b)_ in D||s(D,_,b[_]);else n(n.P+n.F*(p||S),e,b);return b}},function(t,e){t.exports=!0},function(t,e,i){var o=i(16),n=i(17),s=i(18),r=i(20),a=function(t,e,i){var h,d,l,u=t&a.F,c=t&a.G,p=t&a.S,f=t&a.P,m=t&a.B,v=t&a.W,g=c?n:n[e]||(n[e]={}),y=g.prototype,b=c?o:p?o[e]:(o[e]||{}).prototype;c&&(i=e);for(h in i)(d=!u&&b&&void 0!==b[h])&&h in g||(l=d?b[h]:i[h],g[h]=c&&"function"!=typeof b[h]?i[h]:m&&d?s(l,o):v&&b[h]==l?function(t){var e=function(e,i,o){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,o)}return t.apply(this,arguments)};return e.prototype=t.prototype,e}(l):f&&"function"==typeof l?s(Function.call,l):l,f&&((g.virtual||(g.virtual={}))[h]=l,t&a.R&&y&&!y[h]&&r(y,h,l)))};a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,t.exports=a},function(t,e){var i=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(t,e){var i=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=i)},function(t,e,i){var o=i(19);t.exports=function(t,e,i){if(o(t),void 0===e)return t;switch(i){case 1:return function(i){return t.call(e,i)};case 2:return function(i,o){return t.call(e,i,o)};case 3:return function(i,o,n){return t.call(e,i,o,n)}}return function(){return t.apply(e,arguments)}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,i){var o=i(21),n=i(29);t.exports=i(25)?function(t,e,i){return o.f(t,e,n(1,i))}:function(t,e,i){return t[e]=i,t}},function(t,e,i){var o=i(22),n=i(24),s=i(28),r=Object.defineProperty;e.f=i(25)?Object.defineProperty:function(t,e,i){if(o(t),e=s(e,!0),o(i),n)try{return r(t,e,i)}catch(t){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(t[e]=i.value),t}},function(t,e,i){var o=i(23);t.exports=function(t){if(!o(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,i){t.exports=!i(25)&&!i(26)(function(){return 7!=Object.defineProperty(i(27)("div"),"a",{get:function(){return 7}}).a})},function(t,e,i){t.exports=!i(26)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,i){var o=i(23),n=i(16).document,s=o(n)&&o(n.createElement);t.exports=function(t){return s?n.createElement(t):{}}},function(t,e,i){var o=i(23);t.exports=function(t,e){if(!o(t))return t;var i,n;if(e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;if("function"==typeof(i=t.valueOf)&&!o(n=i.call(t)))return n;if(!e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,i){t.exports=i(20)},function(t,e){var i={}.hasOwnProperty;t.exports=function(t,e){return i.call(t,e)}},function(t,e,i){var o=i(33),n=i(29),s=i(46),r={};i(20)(r,i(47)("iterator"),function(){return this}),t.exports=function(t,e,i){t.prototype=o(r,{next:n(1,i)}),s(t,e+" Iterator")}},function(t,e,i){var o=i(22),n=i(34),s=i(44),r=i(41)("IE_PROTO"),a=function(){},h=function(){var t,e=i(27)("iframe"),o=s.length;for(e.style.display="none",i(45).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(" + + + + + + +

+
+
+ + + + diff --git a/_files/slides/will-drake/graph4_files/htmlwidgets-0.9/htmlwidgets.js b/_files/slides/will-drake/graph4_files/htmlwidgets-0.9/htmlwidgets.js new file mode 100755 index 0000000..ecda3ef --- /dev/null +++ b/_files/slides/will-drake/graph4_files/htmlwidgets-0.9/htmlwidgets.js @@ -0,0 +1,836 @@ +(function() { + // If window.HTMLWidgets is already defined, then use it; otherwise create a + // new object. This allows preceding code to set options that affect the + // initialization process (though none currently exist). + window.HTMLWidgets = window.HTMLWidgets || {}; + + // See if we're running in a viewer pane. If not, we're in a web browser. + var viewerMode = window.HTMLWidgets.viewerMode = + /\bviewer_pane=1\b/.test(window.location); + + // See if we're running in Shiny mode. If not, it's a static document. + // Note that static widgets can appear in both Shiny and static modes, but + // obviously, Shiny widgets can only appear in Shiny apps/documents. + var shinyMode = window.HTMLWidgets.shinyMode = + typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; + + // We can't count on jQuery being available, so we implement our own + // version if necessary. + function querySelectorAll(scope, selector) { + if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { + return scope.find(selector); + } + if (scope.querySelectorAll) { + return scope.querySelectorAll(selector); + } + } + + function asArray(value) { + if (value === null) + return []; + if ($.isArray(value)) + return value; + return [value]; + } + + // Implement jQuery's extend + function extend(target /*, ... */) { + if (arguments.length == 1) { + return target; + } + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + } + return target; + } + + // IE8 doesn't support Array.forEach. + function forEach(values, callback, thisArg) { + if (values.forEach) { + values.forEach(callback, thisArg); + } else { + for (var i = 0; i < values.length; i++) { + callback.call(thisArg, values[i], i, values); + } + } + } + + // Replaces the specified method with the return value of funcSource. + // + // Note that funcSource should not BE the new method, it should be a function + // that RETURNS the new method. funcSource receives a single argument that is + // the overridden method, it can be called from the new method. The overridden + // method can be called like a regular function, it has the target permanently + // bound to it so "this" will work correctly. + function overrideMethod(target, methodName, funcSource) { + var superFunc = target[methodName] || function() {}; + var superFuncBound = function() { + return superFunc.apply(target, arguments); + }; + target[methodName] = funcSource(superFuncBound); + } + + // Add a method to delegator that, when invoked, calls + // delegatee.methodName. If there is no such method on + // the delegatee, but there was one on delegator before + // delegateMethod was called, then the original version + // is invoked instead. + // For example: + // + // var a = { + // method1: function() { console.log('a1'); } + // method2: function() { console.log('a2'); } + // }; + // var b = { + // method1: function() { console.log('b1'); } + // }; + // delegateMethod(a, b, "method1"); + // delegateMethod(a, b, "method2"); + // a.method1(); + // a.method2(); + // + // The output would be "b1", "a2". + function delegateMethod(delegator, delegatee, methodName) { + var inherited = delegator[methodName]; + delegator[methodName] = function() { + var target = delegatee; + var method = delegatee[methodName]; + + // The method doesn't exist on the delegatee. Instead, + // call the method on the delegator, if it exists. + if (!method) { + target = delegator; + method = inherited; + } + + if (method) { + return method.apply(target, arguments); + } + }; + } + + // Implement a vague facsimilie of jQuery's data method + function elementData(el, name, value) { + if (arguments.length == 2) { + return el["htmlwidget_data_" + name]; + } else if (arguments.length == 3) { + el["htmlwidget_data_" + name] = value; + return el; + } else { + throw new Error("Wrong number of arguments for elementData: " + + arguments.length); + } + } + + // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex + function escapeRegExp(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + } + + function hasClass(el, className) { + var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); + return re.test(el.className); + } + + // elements - array (or array-like object) of HTML elements + // className - class name to test for + // include - if true, only return elements with given className; + // if false, only return elements *without* given className + function filterByClass(elements, className, include) { + var results = []; + for (var i = 0; i < elements.length; i++) { + if (hasClass(elements[i], className) == include) + results.push(elements[i]); + } + return results; + } + + function on(obj, eventName, func) { + if (obj.addEventListener) { + obj.addEventListener(eventName, func, false); + } else if (obj.attachEvent) { + obj.attachEvent(eventName, func); + } + } + + function off(obj, eventName, func) { + if (obj.removeEventListener) + obj.removeEventListener(eventName, func, false); + else if (obj.detachEvent) { + obj.detachEvent(eventName, func); + } + } + + // Translate array of values to top/right/bottom/left, as usual with + // the "padding" CSS property + // https://developer.mozilla.org/en-US/docs/Web/CSS/padding + function unpackPadding(value) { + if (typeof(value) === "number") + value = [value]; + if (value.length === 1) { + return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; + } + if (value.length === 2) { + return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; + } + if (value.length === 3) { + return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; + } + if (value.length === 4) { + return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; + } + } + + // Convert an unpacked padding object to a CSS value + function paddingToCss(paddingObj) { + return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; + } + + // Makes a number suitable for CSS + function px(x) { + if (typeof(x) === "number") + return x + "px"; + else + return x; + } + + // Retrieves runtime widget sizing information for an element. + // The return value is either null, or an object with fill, padding, + // defaultWidth, defaultHeight fields. + function sizingPolicy(el) { + var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); + if (!sizingEl) + return null; + var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); + if (viewerMode) { + return sp.viewer; + } else { + return sp.browser; + } + } + + // @param tasks Array of strings (or falsy value, in which case no-op). + // Each element must be a valid JavaScript expression that yields a + // function. Or, can be an array of objects with "code" and "data" + // properties; in this case, the "code" property should be a string + // of JS that's an expr that yields a function, and "data" should be + // an object that will be added as an additional argument when that + // function is called. + // @param target The object that will be "this" for each function + // execution. + // @param args Array of arguments to be passed to the functions. (The + // same arguments will be passed to all functions.) + function evalAndRun(tasks, target, args) { + if (tasks) { + forEach(tasks, function(task) { + var theseArgs = args; + if (typeof(task) === "object") { + theseArgs = theseArgs.concat([task.data]); + task = task.code; + } + var taskFunc = eval("(" + task + ")"); + if (typeof(taskFunc) !== "function") { + throw new Error("Task must be a function! Source:\n" + task); + } + taskFunc.apply(target, theseArgs); + }); + } + } + + function initSizing(el) { + var sizing = sizingPolicy(el); + if (!sizing) + return; + + var cel = document.getElementById("htmlwidget_container"); + if (!cel) + return; + + if (typeof(sizing.padding) !== "undefined") { + document.body.style.margin = "0"; + document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); + } + + if (sizing.fill) { + document.body.style.overflow = "hidden"; + document.body.style.width = "100%"; + document.body.style.height = "100%"; + document.documentElement.style.width = "100%"; + document.documentElement.style.height = "100%"; + if (cel) { + cel.style.position = "absolute"; + var pad = unpackPadding(sizing.padding); + cel.style.top = pad.top + "px"; + cel.style.right = pad.right + "px"; + cel.style.bottom = pad.bottom + "px"; + cel.style.left = pad.left + "px"; + el.style.width = "100%"; + el.style.height = "100%"; + } + + return { + getWidth: function() { return cel.offsetWidth; }, + getHeight: function() { return cel.offsetHeight; } + }; + + } else { + el.style.width = px(sizing.width); + el.style.height = px(sizing.height); + + return { + getWidth: function() { return el.offsetWidth; }, + getHeight: function() { return el.offsetHeight; } + }; + } + } + + // Default implementations for methods + var defaults = { + find: function(scope) { + return querySelectorAll(scope, "." + this.name); + }, + renderError: function(el, err) { + var $el = $(el); + + this.clearError(el); + + // Add all these error classes, as Shiny does + var errClass = "shiny-output-error"; + if (err.type !== null) { + // use the classes of the error condition as CSS class names + errClass = errClass + " " + $.map(asArray(err.type), function(type) { + return errClass + "-" + type; + }).join(" "); + } + errClass = errClass + " htmlwidgets-error"; + + // Is el inline or block? If inline or inline-block, just display:none it + // and add an inline error. + var display = $el.css("display"); + $el.data("restore-display-mode", display); + + if (display === "inline" || display === "inline-block") { + $el.hide(); + if (err.message !== "") { + var errorSpan = $("").addClass(errClass); + errorSpan.text(err.message); + $el.after(errorSpan); + } + } else if (display === "block") { + // If block, add an error just after the el, set visibility:none on the + // el, and position the error to be on top of the el. + // Mark it with a unique ID and CSS class so we can remove it later. + $el.css("visibility", "hidden"); + if (err.message !== "") { + var errorDiv = $("
").addClass(errClass).css("position", "absolute") + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + // setting width can push out the page size, forcing otherwise + // unnecessary scrollbars to appear and making it impossible for + // the element to shrink; so use max-width instead + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + errorDiv.text(err.message); + $el.after(errorDiv); + + // Really dumb way to keep the size/position of the error in sync with + // the parent element as the window is resized or whatever. + var intId = setInterval(function() { + if (!errorDiv[0].parentElement) { + clearInterval(intId); + return; + } + errorDiv + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + }, 500); + } + } + }, + clearError: function(el) { + var $el = $(el); + var display = $el.data("restore-display-mode"); + $el.data("restore-display-mode", null); + + if (display === "inline" || display === "inline-block") { + if (display) + $el.css("display", display); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } else if (display === "block"){ + $el.css("visibility", "inherit"); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } + }, + sizing: {} + }; + + // Called by widget bindings to register a new type of widget. The definition + // object can contain the following properties: + // - name (required) - A string indicating the binding name, which will be + // used by default as the CSS classname to look for. + // - initialize (optional) - A function(el) that will be called once per + // widget element; if a value is returned, it will be passed as the third + // value to renderValue. + // - renderValue (required) - A function(el, data, initValue) that will be + // called with data. Static contexts will cause this to be called once per + // element; Shiny apps will cause this to be called multiple times per + // element, as the data changes. + window.HTMLWidgets.widget = function(definition) { + if (!definition.name) { + throw new Error("Widget must have a name"); + } + if (!definition.type) { + throw new Error("Widget must have a type"); + } + // Currently we only support output widgets + if (definition.type !== "output") { + throw new Error("Unrecognized widget type '" + definition.type + "'"); + } + // TODO: Verify that .name is a valid CSS classname + + // Support new-style instance-bound definitions. Old-style class-bound + // definitions have one widget "object" per widget per type/class of + // widget; the renderValue and resize methods on such widget objects + // take el and instance arguments, because the widget object can't + // store them. New-style instance-bound definitions have one widget + // object per widget instance; the definition that's passed in doesn't + // provide renderValue or resize methods at all, just the single method + // factory(el, width, height) + // which returns an object that has renderValue(x) and resize(w, h). + // This enables a far more natural programming style for the widget + // author, who can store per-instance state using either OO-style + // instance fields or functional-style closure variables (I guess this + // is in contrast to what can only be called C-style pseudo-OO which is + // what we required before). + if (definition.factory) { + definition = createLegacyDefinitionAdapter(definition); + } + + if (!definition.renderValue) { + throw new Error("Widget must have a renderValue function"); + } + + // For static rendering (non-Shiny), use a simple widget registration + // scheme. We also use this scheme for Shiny apps/documents that also + // contain static widgets. + window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; + // Merge defaults into the definition; don't mutate the original definition. + var staticBinding = extend({}, defaults, definition); + overrideMethod(staticBinding, "find", function(superfunc) { + return function(scope) { + var results = superfunc(scope); + // Filter out Shiny outputs, we only want the static kind + return filterByClass(results, "html-widget-output", false); + }; + }); + window.HTMLWidgets.widgets.push(staticBinding); + + if (shinyMode) { + // Shiny is running. Register the definition with an output binding. + // The definition itself will not be the output binding, instead + // we will make an output binding object that delegates to the + // definition. This is because we foolishly used the same method + // name (renderValue) for htmlwidgets definition and Shiny bindings + // but they actually have quite different semantics (the Shiny + // bindings receive data that includes lots of metadata that it + // strips off before calling htmlwidgets renderValue). We can't + // just ignore the difference because in some widgets it's helpful + // to call this.renderValue() from inside of resize(), and if + // we're not delegating, then that call will go to the Shiny + // version instead of the htmlwidgets version. + + // Merge defaults with definition, without mutating either. + var bindingDef = extend({}, defaults, definition); + + // This object will be our actual Shiny binding. + var shinyBinding = new Shiny.OutputBinding(); + + // With a few exceptions, we'll want to simply use the bindingDef's + // version of methods if they are available, otherwise fall back to + // Shiny's defaults. NOTE: If Shiny's output bindings gain additional + // methods in the future, and we want them to be overrideable by + // HTMLWidget binding definitions, then we'll need to add them to this + // list. + delegateMethod(shinyBinding, bindingDef, "getId"); + delegateMethod(shinyBinding, bindingDef, "onValueChange"); + delegateMethod(shinyBinding, bindingDef, "onValueError"); + delegateMethod(shinyBinding, bindingDef, "renderError"); + delegateMethod(shinyBinding, bindingDef, "clearError"); + delegateMethod(shinyBinding, bindingDef, "showProgress"); + + // The find, renderValue, and resize are handled differently, because we + // want to actually decorate the behavior of the bindingDef methods. + + shinyBinding.find = function(scope) { + var results = bindingDef.find(scope); + + // Only return elements that are Shiny outputs, not static ones + var dynamicResults = results.filter(".html-widget-output"); + + // It's possible that whatever caused Shiny to think there might be + // new dynamic outputs, also caused there to be new static outputs. + // Since there might be lots of different htmlwidgets bindings, we + // schedule execution for later--no need to staticRender multiple + // times. + if (results.length !== dynamicResults.length) + scheduleStaticRender(); + + return dynamicResults; + }; + + // Wrap renderValue to handle initialization, which unfortunately isn't + // supported natively by Shiny at the time of this writing. + + shinyBinding.renderValue = function(el, data) { + Shiny.renderDependencies(data.deps); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var i = 0; data.evals && i < data.evals.length; i++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); + } + if (!bindingDef.renderOnNullValue) { + if (data.x === null) { + el.style.visibility = "hidden"; + return; + } else { + el.style.visibility = "inherit"; + } + } + if (!elementData(el, "initialized")) { + initSizing(el); + + elementData(el, "initialized", true); + if (bindingDef.initialize) { + var result = bindingDef.initialize(el, el.offsetWidth, + el.offsetHeight); + elementData(el, "init_result", result); + } + } + bindingDef.renderValue(el, data.x, elementData(el, "init_result")); + evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]); + }; + + // Only override resize if bindingDef implements it + if (bindingDef.resize) { + shinyBinding.resize = function(el, width, height) { + // Shiny can call resize before initialize/renderValue have been + // called, which doesn't make sense for widgets. + if (elementData(el, "initialized")) { + bindingDef.resize(el, width, height, elementData(el, "init_result")); + } + }; + } + + Shiny.outputBindings.register(shinyBinding, bindingDef.name); + } + }; + + var scheduleStaticRenderTimerId = null; + function scheduleStaticRender() { + if (!scheduleStaticRenderTimerId) { + scheduleStaticRenderTimerId = setTimeout(function() { + scheduleStaticRenderTimerId = null; + window.HTMLWidgets.staticRender(); + }, 1); + } + } + + // Render static widgets after the document finishes loading + // Statically render all elements that are of this widget's class + window.HTMLWidgets.staticRender = function() { + var bindings = window.HTMLWidgets.widgets || []; + forEach(bindings, function(binding) { + var matches = binding.find(document.documentElement); + forEach(matches, function(el) { + var sizeObj = initSizing(el, binding); + + if (hasClass(el, "html-widget-static-bound")) + return; + el.className = el.className + " html-widget-static-bound"; + + var initResult; + if (binding.initialize) { + initResult = binding.initialize(el, + sizeObj ? sizeObj.getWidth() : el.offsetWidth, + sizeObj ? sizeObj.getHeight() : el.offsetHeight + ); + elementData(el, "init_result", initResult); + } + + if (binding.resize) { + var lastSize = {}; + var resizeHandler = function(e) { + var size = { + w: sizeObj ? sizeObj.getWidth() : el.offsetWidth, + h: sizeObj ? sizeObj.getHeight() : el.offsetHeight + }; + if (size.w === 0 && size.h === 0) + return; + if (size.w === lastSize.w && size.h === lastSize.h) + return; + lastSize = size; + binding.resize(el, size.w, size.h, initResult); + }; + + on(window, "resize", resizeHandler); + + // This is needed for cases where we're running in a Shiny + // app, but the widget itself is not a Shiny output, but + // rather a simple static widget. One example of this is + // an rmarkdown document that has runtime:shiny and widget + // that isn't in a render function. Shiny only knows to + // call resize handlers for Shiny outputs, not for static + // widgets, so we do it ourselves. + if (window.jQuery) { + window.jQuery(document).on( + "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets", + resizeHandler + ); + window.jQuery(document).on( + "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets", + resizeHandler + ); + } + + // This is needed for the specific case of ioslides, which + // flips slides between display:none and display:block. + // Ideally we would not have to have ioslide-specific code + // here, but rather have ioslides raise a generic event, + // but the rmarkdown package just went to CRAN so the + // window to getting that fixed may be long. + if (window.addEventListener) { + // It's OK to limit this to window.addEventListener + // browsers because ioslides itself only supports + // such browsers. + on(document, "slideenter", resizeHandler); + on(document, "slideleave", resizeHandler); + } + } + + var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); + if (scriptData) { + var data = JSON.parse(scriptData.textContent || scriptData.text); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var k = 0; data.evals && k < data.evals.length; k++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); + } + binding.renderValue(el, data.x, initResult); + evalAndRun(data.jsHooks.render, initResult, [el, data.x]); + } + }); + }); + + invokePostRenderHandlers(); + } + + // Wait until after the document has loaded to render the widgets. + if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", function() { + document.removeEventListener("DOMContentLoaded", arguments.callee, false); + window.HTMLWidgets.staticRender(); + }, false); + } else if (document.attachEvent) { + document.attachEvent("onreadystatechange", function() { + if (document.readyState === "complete") { + document.detachEvent("onreadystatechange", arguments.callee); + window.HTMLWidgets.staticRender(); + } + }); + } + + + window.HTMLWidgets.getAttachmentUrl = function(depname, key) { + // If no key, default to the first item + if (typeof(key) === "undefined") + key = 1; + + var link = document.getElementById(depname + "-" + key + "-attachment"); + if (!link) { + throw new Error("Attachment " + depname + "/" + key + " not found in document"); + } + return link.getAttribute("href"); + }; + + window.HTMLWidgets.dataframeToD3 = function(df) { + var names = []; + var length; + for (var name in df) { + if (df.hasOwnProperty(name)) + names.push(name); + if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { + throw new Error("All fields must be arrays"); + } else if (typeof(length) !== "undefined" && length !== df[name].length) { + throw new Error("All fields must be arrays of the same length"); + } + length = df[name].length; + } + var results = []; + var item; + for (var row = 0; row < length; row++) { + item = {}; + for (var col = 0; col < names.length; col++) { + item[names[col]] = df[names[col]][row]; + } + results.push(item); + } + return results; + }; + + window.HTMLWidgets.transposeArray2D = function(array) { + if (array.length === 0) return array; + var newArray = array[0].map(function(col, i) { + return array.map(function(row) { + return row[i] + }) + }); + return newArray; + }; + // Split value at splitChar, but allow splitChar to be escaped + // using escapeChar. Any other characters escaped by escapeChar + // will be included as usual (including escapeChar itself). + function splitWithEscape(value, splitChar, escapeChar) { + var results = []; + var escapeMode = false; + var currentResult = ""; + for (var pos = 0; pos < value.length; pos++) { + if (!escapeMode) { + if (value[pos] === splitChar) { + results.push(currentResult); + currentResult = ""; + } else if (value[pos] === escapeChar) { + escapeMode = true; + } else { + currentResult += value[pos]; + } + } else { + currentResult += value[pos]; + escapeMode = false; + } + } + if (currentResult !== "") { + results.push(currentResult); + } + return results; + } + // Function authored by Yihui/JJ Allaire + window.HTMLWidgets.evaluateStringMember = function(o, member) { + var parts = splitWithEscape(member, '.', '\\'); + for (var i = 0, l = parts.length; i < l; i++) { + var part = parts[i]; + // part may be a character or 'numeric' member name + if (o !== null && typeof o === "object" && part in o) { + if (i == (l - 1)) { // if we are at the end of the line then evalulate + if (typeof o[part] === "string") + o[part] = eval("(" + o[part] + ")"); + } else { // otherwise continue to next embedded object + o = o[part]; + } + } + } + }; + + // Retrieve the HTMLWidget instance (i.e. the return value of an + // HTMLWidget binding's initialize() or factory() function) + // associated with an element, or null if none. + window.HTMLWidgets.getInstance = function(el) { + return elementData(el, "init_result"); + }; + + // Finds the first element in the scope that matches the selector, + // and returns the HTMLWidget instance (i.e. the return value of + // an HTMLWidget binding's initialize() or factory() function) + // associated with that element, if any. If no element matches the + // selector, or the first matching element has no HTMLWidget + // instance associated with it, then null is returned. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.find = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var el = scope.querySelector(selector); + if (el === null) { + return null; + } else { + return window.HTMLWidgets.getInstance(el); + } + }; + + // Finds all elements in the scope that match the selector, and + // returns the HTMLWidget instances (i.e. the return values of + // an HTMLWidget binding's initialize() or factory() function) + // associated with the elements, in an array. If elements that + // match the selector don't have an associated HTMLWidget + // instance, the returned array will contain nulls. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.findAll = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var nodes = scope.querySelectorAll(selector); + var results = []; + for (var i = 0; i < nodes.length; i++) { + results.push(window.HTMLWidgets.getInstance(nodes[i])); + } + return results; + }; + + var postRenderHandlers = []; + function invokePostRenderHandlers() { + while (postRenderHandlers.length) { + var handler = postRenderHandlers.shift(); + if (handler) { + handler(); + } + } + } + + // Register the given callback function to be invoked after the + // next time static widgets are rendered. + window.HTMLWidgets.addPostRenderHandler = function(callback) { + postRenderHandlers.push(callback); + }; + + // Takes a new-style instance-bound definition, and returns an + // old-style class-bound definition. This saves us from having + // to rewrite all the logic in this file to accomodate both + // types of definitions. + function createLegacyDefinitionAdapter(defn) { + var result = { + name: defn.name, + type: defn.type, + initialize: function(el, width, height) { + return defn.factory(el, width, height); + }, + renderValue: function(el, x, instance) { + return instance.renderValue(x); + }, + resize: function(el, width, height, instance) { + return instance.resize(width, height); + } + }; + + if (defn.find) + result.find = defn.find; + if (defn.renderError) + result.renderError = defn.renderError; + if (defn.clearError) + result.clearError = defn.clearError; + + return result; + } +})(); + diff --git a/_files/slides/will-drake/graph4_files/vis-4.20.0/img/network/acceptDeleteIcon.png b/_files/slides/will-drake/graph4_files/vis-4.20.0/img/network/acceptDeleteIcon.png new file mode 100755 index 0000000000000000000000000000000000000000..02a062852c2a8ea7610b64f5d6f79ce4953c3b42 GIT binary patch literal 20675 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

|#V-x46+1BId1SnF`o)!|KGJUGs&sOwUB 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 REZGm4F~`{$=NWC^^ItUJ)cF7a literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph4_files/vis-4.20.0/img/network/cross.png b/_files/slides/will-drake/graph4_files/vis-4.20.0/img/network/cross.png new file mode 100755 index 0000000000000000000000000000000000000000..9cbd189ab6ae99ed5794c30a12ddc0480987f29f GIT binary patch literal 18303 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph4_files/vis-4.20.0/img/network/deleteIcon.png b/_files/slides/will-drake/graph4_files/vis-4.20.0/img/network/deleteIcon.png new file mode 100755 index 0000000000000000000000000000000000000000..540256479106ed2f9263ec5df22fd7f0c75231e4 GIT binary patch literal 20981 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph4_files/vis-4.20.0/img/network/downArrow.png b/_files/slides/will-drake/graph4_files/vis-4.20.0/img/network/downArrow.png new file mode 100755 index 0000000000000000000000000000000000000000..e77d5e6d4157b12a5b2fa08a9fc138f0ab9eb4e7 GIT binary patch literal 4460 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�EM>-Bgb&Rym2{we-b7Oawc(c4k4MzLw~<#m(JZ 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph4_files/vis-4.20.0/img/network/leftArrow.png b/_files/slides/will-drake/graph4_files/vis-4.20.0/img/network/leftArrow.png new file mode 100755 index 0000000000000000000000000000000000000000..3823536e38ef1cd96582a6072b70cc514ac27d05 GIT binary patch literal 4531 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 Re)#|Z002ovPDHLkV1iMdkGuc? literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph4_files/vis-4.20.0/img/network/minus.png b/_files/slides/will-drake/graph4_files/vis-4.20.0/img/network/minus.png new file mode 100755 index 0000000000000000000000000000000000000000..30698076b9ac59f0880752ddc13af3f6bf062403 GIT binary patch literal 4147 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph4_files/vis-4.20.0/img/network/plus.png b/_files/slides/will-drake/graph4_files/vis-4.20.0/img/network/plus.png new file mode 100755 index 0000000000000000000000000000000000000000..f7ab2a334e566b6deb9657d7d8370f591bfb81bc GIT binary patch literal 4341 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph4_files/vis-4.20.0/img/network/rightArrow.png b/_files/slides/will-drake/graph4_files/vis-4.20.0/img/network/rightArrow.png new file mode 100755 index 0000000000000000000000000000000000000000..c3a209d8b0a58355305aae03b5520a1e070d8eab GIT binary patch literal 4514 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 literal 0 HcmV?d00001 diff --git a/_files/slides/will-drake/graph4_files/vis-4.20.0/img/network/zoomExtends.png b/_files/slides/will-drake/graph4_files/vis-4.20.0/img/network/zoomExtends.png new file mode 100755 index 0000000000000000000000000000000000000000..74595c6358448fbdcfbd62629084841ca7e8b8a9 GIT binary patch literal 4464 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 .vis-content { + position: relative; +} + +.vis-panel .vis-shadow { + position: absolute; + width: 100%; + height: 1px; + box-shadow: 0 0 10px rgba(0,0,0,0.8); + /* TODO: find a nice way to ensure vis-shadows are drawn on top of items + z-index: 1; + */ +} + +.vis-panel .vis-shadow.vis-top { + top: -1px; + left: 0; +} + +.vis-panel .vis-shadow.vis-bottom { + bottom: -1px; + left: 0; +} +.vis-graph-group0 { + fill:#4f81bd; + fill-opacity:0; + stroke-width:2px; + stroke: #4f81bd; +} + +.vis-graph-group1 { + fill:#f79646; + fill-opacity:0; + stroke-width:2px; + stroke: #f79646; +} + +.vis-graph-group2 { + fill: #8c51cf; + fill-opacity:0; + stroke-width:2px; + stroke: #8c51cf; +} + +.vis-graph-group3 { + fill: #75c841; + fill-opacity:0; + stroke-width:2px; + stroke: #75c841; +} + +.vis-graph-group4 { + fill: #ff0100; + fill-opacity:0; + stroke-width:2px; + stroke: #ff0100; +} + +.vis-graph-group5 { + fill: #37d8e6; + fill-opacity:0; + stroke-width:2px; + stroke: #37d8e6; +} + +.vis-graph-group6 { + fill: #042662; + fill-opacity:0; + stroke-width:2px; + stroke: #042662; +} + +.vis-graph-group7 { + fill:#00ff26; + fill-opacity:0; + stroke-width:2px; + stroke: #00ff26; +} + +.vis-graph-group8 { + fill:#ff00ff; + fill-opacity:0; + stroke-width:2px; + stroke: #ff00ff; +} + +.vis-graph-group9 { + fill: #8f3938; + fill-opacity:0; + stroke-width:2px; + stroke: #8f3938; +} + +.vis-timeline .vis-fill { + fill-opacity:0.1; + stroke: none; +} + + +.vis-timeline .vis-bar { + fill-opacity:0.5; + stroke-width:1px; +} + +.vis-timeline .vis-point { + stroke-width:2px; + fill-opacity:1.0; +} + + +.vis-timeline .vis-legend-background { + stroke-width:1px; + fill-opacity:0.9; + fill: #ffffff; + stroke: #c2c2c2; +} + + +.vis-timeline .vis-outline { + stroke-width:1px; + fill-opacity:1; + fill: #ffffff; + stroke: #e5e5e5; +} + +.vis-timeline .vis-icon-fill { + fill-opacity:0.3; + stroke: none; +} + +.vis-time-axis { + position: relative; + overflow: hidden; +} + +.vis-time-axis.vis-foreground { + top: 0; + left: 0; + width: 100%; +} + +.vis-time-axis.vis-background { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.vis-time-axis .vis-text { + position: absolute; + color: #4d4d4d; + padding: 3px; + overflow: hidden; + box-sizing: border-box; + + white-space: nowrap; +} + +.vis-time-axis .vis-text.vis-measure { + position: absolute; + padding-left: 0; + padding-right: 0; + margin-left: 0; + margin-right: 0; + visibility: hidden; +} + +.vis-time-axis .vis-grid.vis-vertical { + position: absolute; + border-left: 1px solid; +} + +.vis-time-axis .vis-grid.vis-vertical-rtl { + position: absolute; + border-right: 1px solid; +} + +.vis-time-axis .vis-grid.vis-minor { + border-color: #e5e5e5; +} + +.vis-time-axis .vis-grid.vis-major { + border-color: #bfbfbf; +} + + +.vis-timeline { + position: relative; + border: 1px solid #bfbfbf; + + overflow: hidden; + padding: 0; + margin: 0; + + box-sizing: border-box; +} diff --git a/_files/slides/will-drake/graph4_files/vis-4.20.0/vis.min.js b/_files/slides/will-drake/graph4_files/vis-4.20.0/vis.min.js new file mode 100755 index 0000000..7c48489 --- /dev/null +++ b/_files/slides/will-drake/graph4_files/vis-4.20.0/vis.min.js @@ -0,0 +1,46 @@ +/** + * vis.js + * https://github.com/almende/vis + * + * A dynamic, browser-based visualization library. + * + * @version 4.20.0 + * @date 2017-05-21 + * + * @license + * Copyright (C) 2011-2017 Almende B.V, http://almende.com + * + * Vis.js is dual licensed under both + * + * * The Apache 2.0 License + * http://www.apache.org/licenses/LICENSE-2.0 + * + * and + * + * * The MIT License + * http://opensource.org/licenses/MIT + * + * Vis.js may be distributed under either license. + */ +"use strict";!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.vis=e():t.vis=e()}(this,function(){return function(t){function e(o){if(i[o])return i[o].exports;var n=i[o]={exports:{},id:o,loaded:!1};return t[o].call(n.exports,n,n.exports,e),n.loaded=!0,n.exports}var i={};return e.m=t,e.c=i,e.p="",e(0)}([function(t,e,i){var o=i(1);o.extend(e,i(87)),o.extend(e,i(116)),o.extend(e,i(158))},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}var n=i(2),s=o(n),r=i(55),a=o(r),h=i(58),d=o(h),l=i(62),u=o(l),c=i(82),p=i(86);e.isNumber=function(t){return t instanceof Number||"number"==typeof t},e.recursiveDOMDelete=function(t){if(t)for(;!0===t.hasChildNodes();)e.recursiveDOMDelete(t.firstChild),t.removeChild(t.firstChild)},e.giveRange=function(t,e,i,o){if(e==t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)},e.isString=function(t){return t instanceof String||"string"==typeof t},e.isDate=function(t){if(t instanceof Date)return!0;if(e.isString(t)){if(f.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},e.randomUUID=function(){return p.v4()},e.assignAllKeys=function(t,e){for(var i in t)t.hasOwnProperty(i)&&"object"!==(0,u.default)(t[i])&&(t[i]=e)},e.fillIfDefined=function(t,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var n in t)void 0!==i[n]&&("object"!==(0,u.default)(i[n])?void 0!==i[n]&&null!==i[n]||void 0===t[n]||!0!==o?t[n]=i[n]:delete t[n]:"object"===(0,u.default)(t[n])&&e.fillIfDefined(t[n],i[n],o))},e.protoExtend=function(t,e){for(var i=1;i3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var s=2;s3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var s in o)if(o.hasOwnProperty(s)&&-1==t.indexOf(s))if(o[s]&&o[s].constructor===Object)void 0===i[s]&&(i[s]={}),i[s].constructor===Object?e.deepExtend(i[s],o[s]):null===o[s]&&void 0!==i[s]&&!0===n?delete i[s]:i[s]=o[s];else if(Array.isArray(o[s])){i[s]=[];for(var r=0;r=0&&(e="DOMMouseScroll"),t.addEventListener(e,i,o)):t.attachEvent("on"+e,i)},e.removeEventListener=function(t,e,i,o){t.removeEventListener?(void 0===o&&(o=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.removeEventListener(e,i,o)):t.detachEvent("on"+e,i)},e.preventDefault=function(t){t||(t=window.event),t.preventDefault?t.preventDefault():t.returnValue=!1},e.getTarget=function(t){t||(t=window.event);var e;return t.target?e=t.target:t.srcElement&&(e=t.srcElement),void 0!=e.nodeType&&3==e.nodeType&&(e=e.parentNode),e},e.hasParent=function(t,e){for(var i=t;i;){if(i===e)return!0;i=i.parentNode}return!1},e.option={},e.option.asBoolean=function(t,e){return"function"==typeof t&&(t=t()),null!=t?0!=t:e||null},e.option.asNumber=function(t,e){return"function"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},e.option.asString=function(t,e){return"function"==typeof t&&(t=t()),null!=t?String(t):e||null},e.option.asSize=function(t,i){return"function"==typeof t&&(t=t()),e.isString(t)?t:e.isNumber(t)?t+"px":i||null},e.option.asElement=function(t,e){return"function"==typeof t&&(t=t()),t||e||null},e.hexToRGB=function(t){var e=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;t=t.replace(e,function(t,e,i,o){return e+e+i+i+o+o});var i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return i?{r:parseInt(i[1],16),g:parseInt(i[2],16),b:parseInt(i[3],16)}:null},e.overrideOpacity=function(t,i){if(-1!=t.indexOf("rgba"))return t;if(-1!=t.indexOf("rgb")){var o=t.substr(t.indexOf("(")+1).replace(")","").split(",");return"rgba("+o[0]+","+o[1]+","+o[2]+","+i+")"}var o=e.hexToRGB(t);return null==o?t:"rgba("+o.r+","+o.g+","+o.b+","+i+")"},e.RGBToHex=function(t,e,i){return"#"+((1<<24)+(t<<16)+(e<<8)+i).toString(16).slice(1)},e.parseColor=function(t){var i;if(!0===e.isString(t)){if(!0===e.isValidRGB(t)){var o=t.substr(4).substr(0,t.length-5).split(",").map(function(t){return parseInt(t)});t=e.RGBToHex(o[0],o[1],o[2])}if(!0===e.isValidHex(t)){var n=e.hexToHSV(t),s={h:n.h,s:.8*n.s,v:Math.min(1,1.02*n.v)},r={h:n.h,s:Math.min(1,1.25*n.s),v:.8*n.v},a=e.HSVToHex(r.h,r.s,r.v),h=e.HSVToHex(s.h,s.s,s.v);i={background:t,border:a,highlight:{background:h,border:a},hover:{background:h,border:a}}}else i={background:t,border:t,highlight:{background:t,border:t},hover:{background:t,border:t}}}else i={},i.background=t.background||void 0,i.border=t.border||void 0,e.isString(t.highlight)?i.highlight={border:t.highlight,background:t.highlight}:(i.highlight={},i.highlight.background=t.highlight&&t.highlight.background||void 0,i.highlight.border=t.highlight&&t.highlight.border||void 0),e.isString(t.hover)?i.hover={border:t.hover,background:t.hover}:(i.hover={},i.hover.background=t.hover&&t.hover.background||void 0,i.hover.border=t.hover&&t.hover.border||void 0);return i},e.RGBToHSV=function(t,e,i){t/=255,e/=255,i/=255;var o=Math.min(t,Math.min(e,i)),n=Math.max(t,Math.max(e,i));if(o==n)return{h:0,s:0,v:o};var s=t==o?e-i:i==o?t-e:i-t;return{h:60*((t==o?3:i==o?1:5)-s/(n-o))/360,s:(n-o)/n,v:n}};var m={split:function(t){var e={};return t.split(";").forEach(function(t){if(""!=t.trim()){var i=t.split(":"),o=i[0].trim(),n=i[1].trim();e[o]=n}}),e},join:function(t){return(0,d.default)(t).map(function(e){return e+": "+t[e]}).join("; ")}};e.addCssText=function(t,i){var o=m.split(t.style.cssText),n=m.split(i),s=e.extend(o,n);t.style.cssText=m.join(s)},e.removeCssText=function(t,e){var i=m.split(t.style.cssText),o=m.split(e);for(var n in o)o.hasOwnProperty(n)&&delete i[n];t.style.cssText=m.join(i)},e.HSVToRGB=function(t,e,i){var o,n,s,r=Math.floor(6*t),a=6*t-r,h=i*(1-e),d=i*(1-a*e),l=i*(1-(1-a)*e);switch(r%6){case 0:o=i,n=l,s=h;break;case 1:o=d,n=i,s=h;break;case 2:o=h,n=i,s=l;break;case 3:o=h,n=d,s=i;break;case 4:o=l,n=h,s=i;break;case 5:o=i,n=h,s=d}return{r:Math.floor(255*o),g:Math.floor(255*n),b:Math.floor(255*s)}},e.HSVToHex=function(t,i,o){var n=e.HSVToRGB(t,i,o);return e.RGBToHex(n.r,n.g,n.b)},e.hexToHSV=function(t){var i=e.hexToRGB(t);return e.RGBToHSV(i.r,i.g,i.b)},e.isValidHex=function(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)},e.isValidRGB=function(t){return t=t.replace(" ",""),/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t)},e.isValidRGBA=function(t){return t=t.replace(" ",""),/rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(t)},e.selectiveBridgeObject=function(t,i){if("object"==(void 0===i?"undefined":(0,u.default)(i))){for(var o=(0,a.default)(i),n=0;n0&&e(o,t[n-1])<0;n--)t[n]=t[n-1];t[n]=o}return t},e.mergeOptions=function(t,e,i){var o=(arguments.length>3&&void 0!==arguments[3]&&arguments[3],arguments.length>4&&void 0!==arguments[4]?arguments[4]:{});if(null===e[i])t[i]=(0,a.default)(o[i]);else if(void 0!==e[i])if("boolean"==typeof e[i])t[i].enabled=e[i];else{void 0===e[i].enabled&&(t[i].enabled=!0);for(var n in e[i])e[i].hasOwnProperty(n)&&(t[i][n]=e[i][n])}},e.binarySearchCustom=function(t,e,i,o){for(var n=0,s=0,r=t.length-1;s<=r&&n<1e4;){var a=Math.floor((s+r)/2),h=t[a],d=void 0===o?h[i]:h[i][o],l=e(d);if(0==l)return a;-1==l?s=a+1:r=a-1,n++}return-1},e.binarySearchValue=function(t,e,i,o,n){for(var s,r,a,h,d=0,l=0,u=t.length-1,n=void 0!=n?n:function(t,e){return t==e?0:t0)return"before"==o?Math.max(0,h-1):h;if(n(r,e)<0&&n(a,e)>0)return"before"==o?h:Math.min(t.length-1,h+1);n(r,e)<0?l=h+1:u=h-1,d++}return-1},e.easingFunctions={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}},e.getScrollBarWidth=function(){var t=document.createElement("p");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow="scroll";var o=t.offsetWidth;return i==o&&(o=e.clientWidth),document.body.removeChild(e),i-o},e.topMost=function(t,e){var i=void 0;Array.isArray(e)||(e=[e]);var o=!0,n=!1,r=void 0;try{for(var a,h=(0,s.default)(t);!(o=(a=h.next()).done);o=!0){var d=a.value;if(d){i=d[e[0]];for(var l=1;l=t.length?(this._t=void 0,n(1)):"keys"==e?n(0,i):"values"==e?n(0,t[i]):n(0,[i,t[i]])},"values"),s.Arguments=s.Array,o("keys"),o("values"),o("entries")},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e){t.exports={}},function(t,e,i){var o=i(10),n=i(12);t.exports=function(t){return o(n(t))}},function(t,e,i){var o=i(11);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==o(t)?t.split(""):Object(t)}},function(t,e){var i={}.toString;t.exports=function(t){return i.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,i){var o=i(14),n=i(15),s=i(30),r=i(20),a=i(31),h=i(8),d=i(32),l=i(46),u=i(48),c=i(47)("iterator"),p=!([].keys&&"next"in[].keys()),f=function(){return this};t.exports=function(t,e,i,m,v,g,y){d(i,e,m);var b,_,w,x=function(t){if(!p&&t in D)return D[t];switch(t){case"keys":case"values":return function(){return new i(this,t)}}return function(){return new i(this,t)}},k=e+" Iterator",M="values"==v,S=!1,D=t.prototype,O=D[c]||D["@@iterator"]||v&&D[v],C=O||x(v),T=v?M?x("entries"):C:void 0,E="Array"==e?D.entries||O:O;if(E&&(w=u(E.call(new t)))!==Object.prototype&&(l(w,k,!0),o||a(w,c)||r(w,c,f)),M&&O&&"values"!==O.name&&(S=!0,C=function(){return O.call(this)}),o&&!y||!p&&!S&&D[c]||r(D,c,C),h[e]=C,h[k]=f,v)if(b={values:M?C:x("values"),keys:g?C:x("keys"),entries:T},y)for(_ in b)_ in D||s(D,_,b[_]);else n(n.P+n.F*(p||S),e,b);return b}},function(t,e){t.exports=!0},function(t,e,i){var o=i(16),n=i(17),s=i(18),r=i(20),a=function(t,e,i){var h,d,l,u=t&a.F,c=t&a.G,p=t&a.S,f=t&a.P,m=t&a.B,v=t&a.W,g=c?n:n[e]||(n[e]={}),y=g.prototype,b=c?o:p?o[e]:(o[e]||{}).prototype;c&&(i=e);for(h in i)(d=!u&&b&&void 0!==b[h])&&h in g||(l=d?b[h]:i[h],g[h]=c&&"function"!=typeof b[h]?i[h]:m&&d?s(l,o):v&&b[h]==l?function(t){var e=function(e,i,o){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,o)}return t.apply(this,arguments)};return e.prototype=t.prototype,e}(l):f&&"function"==typeof l?s(Function.call,l):l,f&&((g.virtual||(g.virtual={}))[h]=l,t&a.R&&y&&!y[h]&&r(y,h,l)))};a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,t.exports=a},function(t,e){var i=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(t,e){var i=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=i)},function(t,e,i){var o=i(19);t.exports=function(t,e,i){if(o(t),void 0===e)return t;switch(i){case 1:return function(i){return t.call(e,i)};case 2:return function(i,o){return t.call(e,i,o)};case 3:return function(i,o,n){return t.call(e,i,o,n)}}return function(){return t.apply(e,arguments)}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,i){var o=i(21),n=i(29);t.exports=i(25)?function(t,e,i){return o.f(t,e,n(1,i))}:function(t,e,i){return t[e]=i,t}},function(t,e,i){var o=i(22),n=i(24),s=i(28),r=Object.defineProperty;e.f=i(25)?Object.defineProperty:function(t,e,i){if(o(t),e=s(e,!0),o(i),n)try{return r(t,e,i)}catch(t){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(t[e]=i.value),t}},function(t,e,i){var o=i(23);t.exports=function(t){if(!o(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,i){t.exports=!i(25)&&!i(26)(function(){return 7!=Object.defineProperty(i(27)("div"),"a",{get:function(){return 7}}).a})},function(t,e,i){t.exports=!i(26)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,i){var o=i(23),n=i(16).document,s=o(n)&&o(n.createElement);t.exports=function(t){return s?n.createElement(t):{}}},function(t,e,i){var o=i(23);t.exports=function(t,e){if(!o(t))return t;var i,n;if(e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;if("function"==typeof(i=t.valueOf)&&!o(n=i.call(t)))return n;if(!e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,i){t.exports=i(20)},function(t,e){var i={}.hasOwnProperty;t.exports=function(t,e){return i.call(t,e)}},function(t,e,i){var o=i(33),n=i(29),s=i(46),r={};i(20)(r,i(47)("iterator"),function(){return this}),t.exports=function(t,e,i){t.prototype=o(r,{next:n(1,i)}),s(t,e+" Iterator")}},function(t,e,i){var o=i(22),n=i(34),s=i(44),r=i(41)("IE_PROTO"),a=function(){},h=function(){var t,e=i(27)("iframe"),o=s.length;for(e.style.display="none",i(45).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(" + + + +$for(author-meta)$ + +$endfor$ +$if(date-meta)$ + +$endif$ +$if(keywords)$ + +$endif$ + $if(title-prefix)$$title-prefix$ – $endif$$pagetitle$ + + + + + +$if(highlightjs)$ + + +$endif$ + +$if(highlighting-css)$ + +$endif$ + +$if(theme)$ + +$endif$ + +$if(theme-dark)$ + +$endif$ + + + + + + +$if(css)$ +$for(css)$ + +$endfor$ +$endif$ + + + + + + + + + + +$for(header-includes)$ + $header-includes$ +$endfor$ + + +$for(include-before)$ +$include-before$ +$endfor$ +

+
+ +$if(title)$ +
+

$title$

+$if(subtitle)$ +

$subtitle$

+

+ drake +

+$endif$ +$for(author)$ +

$author$

+$endfor$ +$if(date)$ +

$date$

+$endif$ +
+$endif$ +$if(toc)$ +
+$toc$ +
+$endif$ + +$body$ +
+
+ + + + + +$if(mathjax-url)$ + + +$endif$ + + + +$for(include-after)$ +$include-after$ +$endfor$ + + + diff --git a/_files/slides/will-drake/pdf.css b/_files/slides/will-drake/pdf.css new file mode 100755 index 0000000..7375485 --- /dev/null +++ b/_files/slides/will-drake/pdf.css @@ -0,0 +1,172 @@ +/** + * This stylesheet is used to print reveal.js + * presentations to PDF. + * + * https://github.com/hakimel/reveal.js#pdf-export + */ + +* { + -webkit-print-color-adjust: exact; +} + +body { + margin: 0 auto !important; + border: 0; + padding: 0; + float: none !important; + overflow: visible; +} + +html { + width: 100%; + height: 100%; + overflow: visible; +} + +/* Remove any elements not needed in print. */ +.nestedarrow, +.reveal .controls, +.reveal .progress, +.reveal .playback, +.reveal.overview, +.fork-reveal, +.share-reveal, +.state-background { + display: none !important; +} + +h1, h2, h3, h4, h5, h6 { + text-shadow: 0 0 0 #000 !important; +} + +.reveal pre code { + overflow: hidden !important; + font-family: Courier, 'Courier New', monospace !important; +} + +ul, ol, div, p { + visibility: visible; + position: static; + width: auto; + height: auto; + display: block; + overflow: visible; + margin: auto; +} +.reveal { + width: auto !important; + height: auto !important; + overflow: hidden !important; +} +.reveal .slides { + position: static; + width: 100% !important; + height: auto !important; + zoom: 1 !important; + + left: auto; + top: auto; + margin: 0 !important; + padding: 0 !important; + + overflow: visible; + display: block; + + -webkit-perspective: none; + -moz-perspective: none; + -ms-perspective: none; + perspective: none; + + -webkit-perspective-origin: 50% 50%; /* there isn't a none/auto value but 50-50 is the default */ + -moz-perspective-origin: 50% 50%; + -ms-perspective-origin: 50% 50%; + perspective-origin: 50% 50%; +} + +.reveal .slides .pdf-page { + position: relative; + overflow: hidden; + z-index: 1; + + page-break-after: always; +} + +.reveal .slides section { + visibility: visible !important; + display: block !important; + position: absolute !important; + + margin: 0 !important; + padding: 0 !important; + box-sizing: border-box !important; + min-height: 1px; + + opacity: 1 !important; + + -webkit-transform-style: flat !important; + -moz-transform-style: flat !important; + -ms-transform-style: flat !important; + transform-style: flat !important; + + -webkit-transform: none !important; + -moz-transform: none !important; + -ms-transform: none !important; + transform: none !important; +} + +.reveal section.stack { + position: relative !important; + margin: 0 !important; + padding: 0 !important; + page-break-after: avoid !important; + height: auto !important; + min-height: auto !important; +} + +.reveal img { + box-shadow: none; +} + +.reveal .roll { + overflow: visible; + line-height: 1em; +} + +/* Slide backgrounds are placed inside of their slide when exporting to PDF */ +.reveal .slide-background { + display: block !important; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: auto !important; +} + +/* Display slide speaker notes when 'showNotes' is enabled */ +.reveal .speaker-notes-pdf { + display: block; + width: 100%; + max-height: none; + top: auto; + right: auto; + bottom: auto; + left: auto; + z-index: 100; +} + +/* Layout option which makes notes appear on a separate page */ +.reveal .speaker-notes-pdf[data-layout="separate-page"] { + position: relative; + color: inherit; + background-color: transparent; + padding: 20px; + page-break-after: always; +} + +/* Display slide numbers when 'slideNumber' is enabled */ +.reveal .slide-number-pdf { + display: block; + position: absolute; + font-size: 14px; +} diff --git a/_files/slides/will-drake/style.css b/_files/slides/will-drake/style.css new file mode 100755 index 0000000..4d668fd --- /dev/null +++ b/_files/slides/will-drake/style.css @@ -0,0 +1,4 @@ +.left { + text-align: left; +} +