├── docs ├── DemoStructureStreaming.md ├── option.png ├── basic-area-chart.png ├── scaladocs │ ├── lib │ │ ├── class.png │ │ ├── trait.png │ │ ├── type.png │ │ ├── object.png │ │ ├── ownerbg.gif │ │ ├── package.png │ │ ├── remove.png │ │ ├── typebg.gif │ │ ├── arrow-down.png │ │ ├── class_big.png │ │ ├── defbg-blue.gif │ │ ├── filterbg.gif │ │ ├── object_big.png │ │ ├── ownderbg2.gif │ │ ├── ownerbg2.gif │ │ ├── packagesbg.gif │ │ ├── permalink.png │ │ ├── selected.png │ │ ├── selected2.png │ │ ├── trait_big.png │ │ ├── type_big.png │ │ ├── unselected.png │ │ ├── arrow-right.png │ │ ├── conversionbg.gif │ │ ├── defbg-green.gif │ │ ├── filterboxbg.gif │ │ ├── package_big.png │ │ ├── signaturebg.gif │ │ ├── signaturebg2.gif │ │ ├── type_diagram.png │ │ ├── class_diagram.png │ │ ├── constructorsbg.gif │ │ ├── filter_box_left.png │ │ ├── filterboxbarbg.gif │ │ ├── filterboxbarbg.png │ │ ├── navigation-li-a.png │ │ ├── navigation-li.png │ │ ├── object_diagram.png │ │ ├── selected-right.png │ │ ├── selected2-right.png │ │ ├── trait_diagram.png │ │ ├── valuemembersbg.gif │ │ ├── filter_box_left2.gif │ │ ├── filter_box_right.png │ │ ├── fullcommenttopbg.gif │ │ ├── class_to_object_big.png │ │ ├── object_to_class_big.png │ │ ├── object_to_trait_big.png │ │ ├── object_to_type_big.png │ │ ├── selected-implicits.png │ │ ├── trait_to_object_big.png │ │ ├── type_to_object_big.png │ │ ├── selected-right-implicits.png │ │ ├── ref-index.css │ │ └── modernizr.custom.js │ └── index │ │ ├── index-q.html │ │ ├── index-k.html │ │ ├── index-j.html │ │ ├── index-u.html │ │ ├── index-w.html │ │ ├── index-y.html │ │ ├── index-o.html │ │ └── index-z.html ├── zeppelin-spark-basic-line-chart.png ├── zeppelin-spark-interpreter-edit.png ├── zeppelin-spark-interpreter-add-jar.png ├── zeppelin-spark-interpreter-add-artifact.png ├── internal │ └── MavenPublish.md ├── demos.md ├── UseLatestCode.md ├── DemoSFSalariesChart.md ├── ChartOptions.md ├── DemoColumnChart.md └── DemoBubbleChart.md ├── talks ├── .bowerrc ├── .gitignore ├── config.json ├── steps │ ├── xiexie.png │ ├── highcharts.html │ ├── insparkshell.html │ ├── basicline.html │ ├── histogram.html │ ├── linebasic.html │ ├── linezoomable.html │ ├── pyspark.html │ ├── stackedcolumn.html │ ├── drilldown2level.html │ ├── drilldownbasic.html │ ├── splineinverted.html │ ├── usehtmlinsparkshell.html │ ├── howaboutpyspark.html │ ├── zeppelinbuiltincharts.html │ ├── chartaxis.html │ ├── linebasicmultipleserieswithoutoption.html │ ├── thanks.html │ ├── addjar2sparkshell.html │ ├── start.html │ └── packages.html ├── highlight │ ├── styles │ │ ├── pojoaque.jpg │ │ ├── school-book.png │ │ ├── brown-papersq.png │ │ ├── darkula.css │ │ ├── ascetic.css │ │ ├── mono-blue.css │ │ ├── dark.css │ │ ├── androidstudio.css │ │ ├── codepen-embed.css │ │ ├── brown-paper.css │ │ ├── vs.css │ │ ├── far.css │ │ ├── arta.css │ │ ├── ir-black.css │ │ ├── color-brewer.css │ │ ├── magula.css │ │ ├── github-gist.css │ │ ├── monokai.css │ │ ├── darcula.css │ │ ├── tomorrow.css │ │ ├── zenburn.css │ │ ├── school-book.css │ │ ├── ocean.css │ │ ├── paraiso-dark.css │ │ ├── paraiso-light.css │ │ ├── dracula.css │ │ ├── qtcreator_dark.css │ │ ├── qtcreator_light.css │ │ ├── rainbow.css │ │ ├── kimbie.dark.css │ │ ├── kimbie.light.css │ │ ├── atelier-dune-dark.css │ │ ├── atelier-dune-light.css │ │ ├── monokai-sublime.css │ │ ├── atelier-heath-dark.css │ │ ├── atelier-heath-light.css │ │ ├── atelier-forest-dark.css │ │ ├── tomorrow-night-bright.css │ │ ├── atelier-forest-light.css │ │ ├── tomorrow-night-eighties.css │ │ ├── atelier-seaside-dark.css │ │ ├── atelier-seaside-light.css │ │ ├── hopscotch.css │ │ ├── atelier-lakeside-dark.css │ │ ├── atelier-lakeside-light.css │ │ ├── arduino-light.css │ │ ├── googlecode.css │ │ ├── xt256.css │ │ ├── atelier-sulphurpool-dark.css │ │ ├── atelier-sulphurpool-light.css │ │ ├── obsidian.css │ │ ├── foundation.css │ │ ├── tomorrow-night.css │ │ ├── xcode.css │ │ ├── pojoaque.css │ │ ├── tomorrow-night-blue.css │ │ ├── solarized-dark.css │ │ ├── solarized-light.css │ │ ├── docco.css │ │ ├── idea.css │ │ ├── atelier-cave-dark.css │ │ ├── atelier-cave-light.css │ │ ├── atom-one-dark.css │ │ ├── atelier-estuary-dark.css │ │ ├── atelier-plateau-dark.css │ │ ├── atelier-savanna-dark.css │ │ ├── atom-one-light.css │ │ ├── github.css │ │ ├── atelier-estuary-light.css │ │ ├── atelier-plateau-light.css │ │ ├── atelier-savanna-light.css │ │ ├── default.css │ │ ├── sunburst.css │ │ ├── railscasts.css │ │ ├── agate.css │ │ └── hybrid.css │ └── LICENSE ├── bower.json ├── .editorconfig ├── package.json ├── .jshintrc ├── js │ └── main.js ├── css │ └── impressConsole.css ├── title.html ├── thanks.html ├── Gruntfile.js └── index.html ├── .travis.yml ├── src ├── test │ ├── resources │ │ ├── invalidXMLContent.xml │ │ ├── SF-Salaries.csv │ │ ├── log4j.xml │ │ └── snowdepth.csv │ └── scala │ │ └── com │ │ └── knockdata │ │ └── spark │ │ ├── highcharts │ │ ├── demo │ │ │ ├── NuclearStockpile.scala │ │ │ ├── MockOutputMode.scala │ │ │ ├── MockZeppelinContextHolder.scala │ │ │ ├── CustomSink.scala │ │ │ └── MockSinkProvider.scala │ │ ├── 1ColumnWithAgg.json │ │ ├── model │ │ │ ├── TestHighcharts.scala │ │ │ └── TestInit.scala │ │ ├── plotoptions │ │ │ └── TestPlotOptions.scala │ │ └── SparkEnv.scala │ │ └── utils │ │ └── TestCipherUtil.scala └── main │ ├── scala │ └── com │ │ └── knockdata │ │ └── spark │ │ ├── highcharts │ │ ├── Registry.scala │ │ ├── ZeppelinContextHolder.scala │ │ ├── model │ │ │ ├── Code.scala │ │ │ ├── Drilldown.scala │ │ │ ├── Data.scala │ │ │ ├── Labels.scala │ │ │ ├── package.scala │ │ │ ├── Navigation.scala │ │ │ ├── Credits.scala │ │ │ ├── Pane.scala │ │ │ └── Exporting.scala │ │ ├── base │ │ │ ├── Layout.scala │ │ │ ├── Spacing.scala │ │ │ └── Margin.scala │ │ ├── plotoptions │ │ │ └── SolidGauge.scala │ │ ├── CustomSinkProvider.scala │ │ └── package.scala │ │ └── utils │ │ ├── filter.scala │ │ ├── functions.scala │ │ └── CipherUtil.scala │ ├── resources │ ├── example.html │ ├── basicLine.json │ └── testReport.xslt │ └── java │ └── com │ └── knockdata │ └── Dummy.java ├── .gitattributes ├── release ├── lift-json_2.10-2.6.3.jar ├── lift-json_2.11-2.6.3.jar └── spark-highcharts-0.6.1.jar ├── demos ├── synchronized-charts │ ├── demo.css │ └── demo.html ├── SynchronizedCharts.html └── combo │ └── demo.html └── .gitignore /docs/DemoStructureStreaming.md: -------------------------------------------------------------------------------- 1 | # Bar Chart Demo -------------------------------------------------------------------------------- /talks/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "bower_components" 3 | } 4 | -------------------------------------------------------------------------------- /talks/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | bower_components 3 | *.log 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: java 2 | install: mvn install -DskipTests -Dgpg.skip 3 | -------------------------------------------------------------------------------- /src/test/resources/invalidXMLContent.xml: -------------------------------------------------------------------------------- 1 | invalid when -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | src/test/resources/SF-Salaries.csv filter=lfs diff=lfs merge=lfs -text 2 | -------------------------------------------------------------------------------- /docs/option.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/option.png -------------------------------------------------------------------------------- /talks/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Better Visualization for Spark", 3 | "impressConsole": true 4 | } 5 | -------------------------------------------------------------------------------- /talks/steps/xiexie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/talks/steps/xiexie.png -------------------------------------------------------------------------------- /docs/basic-area-chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/basic-area-chart.png -------------------------------------------------------------------------------- /talks/steps/highcharts.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docs/scaladocs/lib/class.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/class.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/trait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/trait.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/type.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/type.png -------------------------------------------------------------------------------- /talks/steps/insparkshell.html: -------------------------------------------------------------------------------- 1 |

How about

2 |

in spark-shell

3 | 4 | -------------------------------------------------------------------------------- /docs/scaladocs/lib/object.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/object.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/ownerbg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/ownerbg.gif -------------------------------------------------------------------------------- /docs/scaladocs/lib/package.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/package.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/remove.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/typebg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/typebg.gif -------------------------------------------------------------------------------- /docs/scaladocs/lib/arrow-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/arrow-down.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/class_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/class_big.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/defbg-blue.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/defbg-blue.gif -------------------------------------------------------------------------------- /docs/scaladocs/lib/filterbg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/filterbg.gif -------------------------------------------------------------------------------- /docs/scaladocs/lib/object_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/object_big.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/ownderbg2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/ownderbg2.gif -------------------------------------------------------------------------------- /docs/scaladocs/lib/ownerbg2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/ownerbg2.gif -------------------------------------------------------------------------------- /docs/scaladocs/lib/packagesbg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/packagesbg.gif -------------------------------------------------------------------------------- /docs/scaladocs/lib/permalink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/permalink.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/selected.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/selected2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/selected2.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/trait_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/trait_big.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/type_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/type_big.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/unselected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/unselected.png -------------------------------------------------------------------------------- /release/lift-json_2.10-2.6.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/release/lift-json_2.10-2.6.3.jar -------------------------------------------------------------------------------- /release/lift-json_2.11-2.6.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/release/lift-json_2.11-2.6.3.jar -------------------------------------------------------------------------------- /talks/steps/basicline.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /talks/steps/histogram.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /talks/steps/linebasic.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docs/scaladocs/lib/arrow-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/arrow-right.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/conversionbg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/conversionbg.gif -------------------------------------------------------------------------------- /docs/scaladocs/lib/defbg-green.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/defbg-green.gif -------------------------------------------------------------------------------- /docs/scaladocs/lib/filterboxbg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/filterboxbg.gif -------------------------------------------------------------------------------- /docs/scaladocs/lib/package_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/package_big.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/signaturebg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/signaturebg.gif -------------------------------------------------------------------------------- /docs/scaladocs/lib/signaturebg2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/signaturebg2.gif -------------------------------------------------------------------------------- /docs/scaladocs/lib/type_diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/type_diagram.png -------------------------------------------------------------------------------- /release/spark-highcharts-0.6.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/release/spark-highcharts-0.6.1.jar -------------------------------------------------------------------------------- /talks/highlight/styles/pojoaque.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/talks/highlight/styles/pojoaque.jpg -------------------------------------------------------------------------------- /talks/steps/linezoomable.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /talks/steps/pyspark.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /talks/steps/stackedcolumn.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docs/scaladocs/lib/class_diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/class_diagram.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/constructorsbg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/constructorsbg.gif -------------------------------------------------------------------------------- /docs/scaladocs/lib/filter_box_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/filter_box_left.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/filterboxbarbg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/filterboxbarbg.gif -------------------------------------------------------------------------------- /docs/scaladocs/lib/filterboxbarbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/filterboxbarbg.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/navigation-li-a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/navigation-li-a.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/navigation-li.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/navigation-li.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/object_diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/object_diagram.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/selected-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/selected-right.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/selected2-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/selected2-right.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/trait_diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/trait_diagram.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/valuemembersbg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/valuemembersbg.gif -------------------------------------------------------------------------------- /talks/highlight/styles/school-book.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/talks/highlight/styles/school-book.png -------------------------------------------------------------------------------- /talks/steps/drilldown2level.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /talks/steps/drilldownbasic.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /talks/steps/splineinverted.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docs/scaladocs/lib/filter_box_left2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/filter_box_left2.gif -------------------------------------------------------------------------------- /docs/scaladocs/lib/filter_box_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/filter_box_right.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/fullcommenttopbg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/fullcommenttopbg.gif -------------------------------------------------------------------------------- /docs/zeppelin-spark-basic-line-chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/zeppelin-spark-basic-line-chart.png -------------------------------------------------------------------------------- /docs/zeppelin-spark-interpreter-edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/zeppelin-spark-interpreter-edit.png -------------------------------------------------------------------------------- /talks/highlight/styles/brown-papersq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/talks/highlight/styles/brown-papersq.png -------------------------------------------------------------------------------- /talks/steps/usehtmlinsparkshell.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docs/scaladocs/lib/class_to_object_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/class_to_object_big.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/object_to_class_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/object_to_class_big.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/object_to_trait_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/object_to_trait_big.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/object_to_type_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/object_to_type_big.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/selected-implicits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/selected-implicits.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/trait_to_object_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/trait_to_object_big.png -------------------------------------------------------------------------------- /docs/scaladocs/lib/type_to_object_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/type_to_object_big.png -------------------------------------------------------------------------------- /docs/zeppelin-spark-interpreter-add-jar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/zeppelin-spark-interpreter-add-jar.png -------------------------------------------------------------------------------- /talks/steps/howaboutpyspark.html: -------------------------------------------------------------------------------- 1 |

I Love Python

2 |

How to use it

3 | 4 | -------------------------------------------------------------------------------- /talks/steps/zeppelinbuiltincharts.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docs/scaladocs/lib/selected-right-implicits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/scaladocs/lib/selected-right-implicits.png -------------------------------------------------------------------------------- /docs/zeppelin-spark-interpreter-add-artifact.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knockdata/spark-highcharts/HEAD/docs/zeppelin-spark-interpreter-add-artifact.png -------------------------------------------------------------------------------- /talks/steps/chartaxis.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /talks/steps/linebasicmultipleserieswithoutoption.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/test/resources/SF-Salaries.csv: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:72d727984ad49cc317bf9366c5bd20d2836162689a7ec59379c7e808863407e5 3 | size 16257213 4 | -------------------------------------------------------------------------------- /src/test/scala/com/knockdata/spark/highcharts/demo/NuclearStockpile.scala: -------------------------------------------------------------------------------- 1 | package com.knockdata.spark.highcharts.demo 2 | 3 | case class NuclearStockpile(country: String, stockpile: Int, year: Int) 4 | -------------------------------------------------------------------------------- /talks/highlight/styles/darkula.css: -------------------------------------------------------------------------------- 1 | /* 2 | Deprecated due to a typo in the name and left here for compatibility purpose only. 3 | Please use darcula.css instead. 4 | */ 5 | 6 | @import url('darcula.css'); 7 | -------------------------------------------------------------------------------- /talks/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "better-visualization-for-spark", 3 | "version": "0.6.0", 4 | "dependencies": { 5 | "impress.js": "~0.5.3", 6 | "handlebars": "~1.0.0", 7 | "jquery": "~1.10" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /talks/steps/thanks.html: -------------------------------------------------------------------------------- 1 |

Thanks

2 |

Tack

3 | 4 | 5 | 6 |
Press the P 7 | key to access the notes console. 8 |
9 | 10 | -------------------------------------------------------------------------------- /talks/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 4 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | -------------------------------------------------------------------------------- /talks/steps/addjar2sparkshell.html: -------------------------------------------------------------------------------- 1 |

Add Jars

2 |

to spark-shell

3 | 4 |
 5 | spark-defaults.conf
 6 | spark.jars \
 7 |     spark-highcharts-0.6.1.jar,\
 8 |     lift-json_2.10-2.6.3.jar
 9 | 
10 | 11 | -------------------------------------------------------------------------------- /talks/steps/start.html: -------------------------------------------------------------------------------- 1 |

Data Visualization

2 |

for Spark

3 | 4 |
5 |

Rockie Yang 6 | 7 |

8 | -------------------------------------------------------------------------------- /demos/synchronized-charts/demo.css: -------------------------------------------------------------------------------- 1 | .chart { 2 | min-width: 320px; 3 | max-width: 800px; 4 | height: 220px; 5 | margin: 0 auto; 6 | } 7 | 8 | 9 | 10 | 13 | 14 | 15 |
16 | 19 | 20 | -------------------------------------------------------------------------------- /demos/synchronized-charts/demo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/test/scala/com/knockdata/spark/highcharts/demo/MockOutputMode.scala: -------------------------------------------------------------------------------- 1 | package com.knockdata.spark.highcharts.demo 2 | 3 | import com.knockdata.spark.highcharts._ 4 | import org.apache.spark.sql.streaming.OutputMode 5 | 6 | class MockOutputMode(seriesHolder: SeriesHolder, maxPoints: Int = 200) 7 | extends OutputMode { 8 | 9 | def onFinish(res: String): Unit = { 10 | result = res 11 | } 12 | var result: String = null 13 | } 14 | 15 | -------------------------------------------------------------------------------- /src/main/scala/com/knockdata/spark/highcharts/ZeppelinContextHolder.scala: -------------------------------------------------------------------------------- 1 | package com.knockdata.spark.highcharts 2 | 3 | import org.apache.zeppelin.spark.ZeppelinContext 4 | import scala.concurrent._ 5 | import scala.concurrent.ExecutionContext.Implicits._ 6 | 7 | class ZeppelinContextHolder(z: ZeppelinContext) { 8 | def put(name: String, value: AnyRef) = z.put(name, value) 9 | def run(paragraphId: String): Unit = { 10 | Future(z.run(paragraphId)) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /demos/combo/demo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /talks/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "better-visualization-for-spark", 3 | "version": "0.6.0", 4 | "private": true, 5 | "devDependencies": { 6 | "grunt": "~0.4.1", 7 | "bower": "~0.9.2", 8 | "grunt-contrib-connect": "~0.2.0", 9 | "grunt-contrib-watch": "~0.5.2", 10 | "grunt-open": "~0.2.0", 11 | "matchdep": "~0.1.2", 12 | "connect-livereload": "~0.2.0", 13 | "moment": "~2.0.0" 14 | }, 15 | "engines": { 16 | "node": ">=0.8.0" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /talks/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "node": true, 3 | "es5": true, 4 | "esnext": true, 5 | "bitwise": true, 6 | "camelcase": true, 7 | "curly": true, 8 | "eqeqeq": true, 9 | "immed": true, 10 | "indent": 4, 11 | "latedef": true, 12 | "newcap": true, 13 | "noarg": true, 14 | "quotmark": "single", 15 | "regexp": true, 16 | "undef": true, 17 | "unused": true, 18 | "strict": true, 19 | "trailing": true, 20 | "smarttabs": true, 21 | "white": true 22 | } 23 | -------------------------------------------------------------------------------- /docs/scaladocs/lib/ref-index.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-size: 10pt; 3 | font-family: Arial, sans-serif; 4 | } 5 | 6 | a { 7 | color:#315479; 8 | } 9 | 10 | .letters { 11 | width:100%; 12 | text-align:center; 13 | margin:0.6em; 14 | padding:0.1em; 15 | border-bottom:1px solid gray; 16 | } 17 | 18 | .entry { 19 | border-bottom: 1px solid lightgray; 20 | padding: 5px 0 8px; 21 | } 22 | 23 | .name { 24 | /* background-color:#E5E5E5; */ 25 | } 26 | 27 | .occurrences { 28 | margin-left: 1em; 29 | margin-top: 5px; 30 | } -------------------------------------------------------------------------------- /src/main/resources/example.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 14 | 15 | -------------------------------------------------------------------------------- /src/test/scala/com/knockdata/spark/highcharts/demo/MockZeppelinContextHolder.scala: -------------------------------------------------------------------------------- 1 | package com.knockdata.spark.highcharts.demo 2 | 3 | import com.knockdata.spark.highcharts.ZeppelinContextHolder 4 | 5 | import scala.collection.mutable 6 | 7 | class MockZeppelinContextHolder extends ZeppelinContextHolder(null){ 8 | 9 | val values = mutable.HashMap[String, AnyRef]() 10 | 11 | override def put(name: String, value: AnyRef) = values.put(name, value) 12 | override def run(paragraphId: String): Unit = println(s"mock run $paragraphId") 13 | 14 | } 15 | -------------------------------------------------------------------------------- /docs/UseLatestCode.md: -------------------------------------------------------------------------------- 1 | # Use latest code 2 | 3 | ### Build the binary 4 | 5 | git clone https://github.com/knockdata/spark-highcharts.git 6 | cd spark-highcharts 7 | mvn clean package -DskipTests 8 | 9 | ### Add the binary to Zeppelin 10 | 11 | > Goto Zeppelin -> `Interpreters` 12 | 13 | > Scroll down to find `spark` 14 | 15 | > Click `Edit` 16 | 17 | ![zeppelin-spark-interpreter-edit](docs/zeppelin-spark-interpreter-edit.png) 18 | 19 | > Scroll down to `Dependencies` 20 | 21 | > Edit the `artifact` with the correct jar file 22 | 23 | > Click `Save` 24 | 25 | ![zeppelin-spark-interpreter-edit](docs/zeppelin-spark-interpreter-add-jar.png) 26 | -------------------------------------------------------------------------------- /src/test/resources/log4j.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/main/scala/com/knockdata/spark/utils/filter.scala: -------------------------------------------------------------------------------- 1 | package com.knockdata.spark.utils 2 | 3 | import org.apache.spark.sql.DataFrame 4 | import org.apache.spark.sql.functions._ 5 | 6 | object filter { 7 | type PredicateC2C = org.apache.spark.sql.Column => org.apache.spark.sql.Column 8 | type PredicateS2C = String => org.apache.spark.sql.Column 9 | 10 | // implicit columnNamePredictConvertion() 11 | // def apply(df: DataFrame, colNames: String*)(fun: Predicate): DataFrame = { 12 | // val f = 13 | // colNames.foldLeft(df)((resultDF, colName) => resultDF.filter(fun(col(colName)))) 14 | // } 15 | // 16 | // def isNull(df: DataFrame, colNames: String*): DataFrame = 17 | // apply(df, colNames)(isnull(col())) 18 | } 19 | -------------------------------------------------------------------------------- /talks/highlight/styles/ascetic.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Original style from softwaremaniacs.org (c) Ivan Sagalaev 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | overflow-x: auto; 10 | padding: 0.5em; 11 | background: white; 12 | color: black; 13 | } 14 | 15 | .hljs-string, 16 | .hljs-variable, 17 | .hljs-template-variable, 18 | .hljs-symbol, 19 | .hljs-bullet, 20 | .hljs-section, 21 | .hljs-addition, 22 | .hljs-attribute, 23 | .hljs-link { 24 | color: #888; 25 | } 26 | 27 | .hljs-comment, 28 | .hljs-quote, 29 | .hljs-meta, 30 | .hljs-deletion { 31 | color: #ccc; 32 | } 33 | 34 | .hljs-keyword, 35 | .hljs-selector-tag, 36 | .hljs-section, 37 | .hljs-name, 38 | .hljs-type, 39 | .hljs-strong { 40 | font-weight: bold; 41 | } 42 | 43 | .hljs-emphasis { 44 | font-style: italic; 45 | } 46 | -------------------------------------------------------------------------------- /talks/js/main.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | Handlebars.registerHelper('step', function (data) { 3 | var ret = ''; 4 | for (var key in data) { 5 | ret = ret + ' data-' + key + '="' + data[key] + '"'; 6 | } 7 | return ret; 8 | }); 9 | 10 | var appendSlides = function (data) { 11 | 12 | var steps = data; 13 | var htmltemplate = $('#step-template').html(); 14 | var htmltempl = Handlebars.compile(htmltemplate); 15 | steps.forEach(function (step, index) { 16 | var templ = htmltempl; 17 | console.log(step); 18 | $.ajax({ 19 | url: '/steps/' + step.uri, 20 | success: function (data) { 21 | $('.steps').append(templ({file: data, data: step.data, 22 | class: step.class, id: step.id})); 23 | }, 24 | async: false 25 | }); 26 | }); 27 | }; 28 | 29 | -------------------------------------------------------------------------------- /docs/scaladocs/index/index-q.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Spark Highcharts POM 0.6.4_2.1 API 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
query
15 | 16 |
17 | 18 | -------------------------------------------------------------------------------- /src/test/scala/com/knockdata/spark/highcharts/demo/CustomSink.scala: -------------------------------------------------------------------------------- 1 | //package com.knockdata.spark.highcharts.demo 2 | // 3 | //import org.apache.spark.sql.{SQLContext, _} 4 | //import org.apache.spark.sql.execution.streaming.Sink 5 | //import org.apache.spark.sql.sources.StreamSinkProvider 6 | //import org.apache.spark.sql.streaming.OutputMode 7 | // 8 | //case class CustomSink(func: DataFrame => Unit) 9 | // extends Sink { 10 | // 11 | // override def addBatch(batchId: Long, data: DataFrame): Unit = { 12 | // func(data) 13 | // } 14 | //} 15 | // 16 | //class CustomSinkProvider extends StreamSinkProvider { 17 | // def func(df: DataFrame) { 18 | // df.show(5) 19 | // } 20 | // 21 | // def createSink( 22 | // sqlContext: SQLContext, 23 | // parameters: Map[String, String], 24 | // partitionColumns: Seq[String], 25 | // outputMode: OutputMode): CustomSink = { 26 | // new CustomSink(func) 27 | // } 28 | //} 29 | -------------------------------------------------------------------------------- /src/main/scala/com/knockdata/spark/highcharts/model/Code.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package com.knockdata.spark.highcharts.model 19 | 20 | case class Code(code: String) 21 | -------------------------------------------------------------------------------- /docs/DemoSFSalariesChart.md: -------------------------------------------------------------------------------- 1 | # San Fransisco Salaries Demo 2 | 3 | Dataset from [Kaggle](https://www.kaggle.com/kaggle/sf-salaries) 4 | 5 | ## SF salaries 6 | 7 | Dataset from [Kaggle](https://www.kaggle.com/kaggle/sf-salaries) 8 | 9 | take top 10 payment job 10 | 11 | * x job title 12 | * y avg base pay 13 | * data point order by avg base pay descending 14 | 15 | 16 | ```scala 17 | 18 | import com.knockdata.spark.highcharts._ 19 | import com.knockdata.spark.highcharts.model._ 20 | import sqlContext.implicits._ 21 | 22 | 23 | 24 | val file = "src/test/resources/SF-Salaries.csv" 25 | val dataFrame = sqlContext.read 26 | .format("com.databricks.spark.csv") 27 | .option("header", "true") // Use first line of all files as header 28 | .option("inferSchema", "true") // Automatically infer data types 29 | .load(file) 30 | 31 | val chart = highcharts(dataFrame 32 | .series("name" -> "JobTitle", "y" -> avg($"BasePay")) 33 | .orderBy(avg($"BasePay").desc) 34 | .take(10)) 35 | .chart(Chart.bar) 36 | 37 | chart.plot() 38 | 39 | ``` 40 | -------------------------------------------------------------------------------- /talks/highlight/styles/mono-blue.css: -------------------------------------------------------------------------------- 1 | /* 2 | Five-color theme from a single blue hue. 3 | */ 4 | .hljs { 5 | display: block; 6 | overflow-x: auto; 7 | padding: 0.5em; 8 | background: #eaeef3; 9 | } 10 | 11 | .hljs { 12 | color: #00193a; 13 | } 14 | 15 | .hljs-keyword, 16 | .hljs-selector-tag, 17 | .hljs-title, 18 | .hljs-section, 19 | .hljs-doctag, 20 | .hljs-name, 21 | .hljs-strong { 22 | font-weight: bold; 23 | } 24 | 25 | .hljs-comment { 26 | color: #738191; 27 | } 28 | 29 | .hljs-string, 30 | .hljs-title, 31 | .hljs-section, 32 | .hljs-built_in, 33 | .hljs-literal, 34 | .hljs-type, 35 | .hljs-addition, 36 | .hljs-tag, 37 | .hljs-quote, 38 | .hljs-name, 39 | .hljs-selector-id, 40 | .hljs-selector-class { 41 | color: #0048ab; 42 | } 43 | 44 | .hljs-meta, 45 | .hljs-subst, 46 | .hljs-symbol, 47 | .hljs-regexp, 48 | .hljs-attribute, 49 | .hljs-deletion, 50 | .hljs-variable, 51 | .hljs-template-variable, 52 | .hljs-link, 53 | .hljs-bullet { 54 | color: #4c81c9; 55 | } 56 | 57 | .hljs-emphasis { 58 | font-style: italic; 59 | } 60 | -------------------------------------------------------------------------------- /src/main/java/com/knockdata/Dummy.java: -------------------------------------------------------------------------------- 1 | //package com.knockdata;/* 2 | //* Licensed to the Apache Software Foundation (ASF) under one or more 3 | //* contributor license agreements. See the NOTICE file distributed with 4 | //* this work for additional information regarding copyright ownership. 5 | //* The ASF licenses this file to You under the Apache License, Version 2.0 6 | //* (the "License"); you may not use this file except in compliance with 7 | //* the License. You may obtain a copy of the License at 8 | //* 9 | //* http://www.apache.org/licenses/LICENSE-2.0 10 | //* 11 | //* Unless required by applicable law or agreed to in writing, software 12 | //* distributed under the License is distributed on an "AS IS" BASIS, 13 | //* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | //* See the License for the specific language governing permissions and 15 | //* limitations under the License. 16 | //*/ 17 | // 18 | //public class Dummy { 19 | // void dummy() { 20 | // System.out.println("This is just a Dummy class to gen javadoc.jar"); 21 | // } 22 | //} 23 | -------------------------------------------------------------------------------- /talks/highlight/styles/dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Dark style from softwaremaniacs.org (c) Ivan Sagalaev 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | overflow-x: auto; 10 | padding: 0.5em; 11 | background: #444; 12 | } 13 | 14 | .hljs-keyword, 15 | .hljs-selector-tag, 16 | .hljs-literal, 17 | .hljs-section, 18 | .hljs-link { 19 | color: white; 20 | } 21 | 22 | .hljs, 23 | .hljs-subst { 24 | color: #ddd; 25 | } 26 | 27 | .hljs-string, 28 | .hljs-title, 29 | .hljs-name, 30 | .hljs-type, 31 | .hljs-attribute, 32 | .hljs-symbol, 33 | .hljs-bullet, 34 | .hljs-built_in, 35 | .hljs-addition, 36 | .hljs-variable, 37 | .hljs-template-tag, 38 | .hljs-template-variable { 39 | color: #d88; 40 | } 41 | 42 | .hljs-comment, 43 | .hljs-quote, 44 | .hljs-deletion, 45 | .hljs-meta { 46 | color: #777; 47 | } 48 | 49 | .hljs-keyword, 50 | .hljs-selector-tag, 51 | .hljs-literal, 52 | .hljs-title, 53 | .hljs-section, 54 | .hljs-doctag, 55 | .hljs-type, 56 | .hljs-name, 57 | .hljs-strong { 58 | font-weight: bold; 59 | } 60 | 61 | .hljs-emphasis { 62 | font-style: italic; 63 | } 64 | -------------------------------------------------------------------------------- /docs/scaladocs/index/index-k.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Spark Highcharts POM 0.6.4_2.1 API 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
keys
15 | 16 |
17 |
knockdata
18 | 19 |
20 | 21 | -------------------------------------------------------------------------------- /talks/highlight/styles/androidstudio.css: -------------------------------------------------------------------------------- 1 | /* 2 | Date: 24 Fev 2015 3 | Author: Pedro Oliveira 4 | */ 5 | 6 | .hljs { 7 | color: #a9b7c6; 8 | background: #282b2e; 9 | display: block; 10 | overflow-x: auto; 11 | padding: 0.5em; 12 | } 13 | 14 | .hljs-number, 15 | .hljs-literal, 16 | .hljs-symbol, 17 | .hljs-bullet { 18 | color: #6897BB; 19 | } 20 | 21 | .hljs-keyword, 22 | .hljs-selector-tag, 23 | .hljs-deletion { 24 | color: #cc7832; 25 | } 26 | 27 | .hljs-variable, 28 | .hljs-template-variable, 29 | .hljs-link { 30 | color: #629755; 31 | } 32 | 33 | .hljs-comment, 34 | .hljs-quote { 35 | color: #808080; 36 | } 37 | 38 | .hljs-meta { 39 | color: #bbb529; 40 | } 41 | 42 | .hljs-string, 43 | .hljs-attribute, 44 | .hljs-addition { 45 | color: #6A8759; 46 | } 47 | 48 | .hljs-section, 49 | .hljs-title, 50 | .hljs-type { 51 | color: #ffc66d; 52 | } 53 | 54 | .hljs-name, 55 | .hljs-selector-id, 56 | .hljs-selector-class { 57 | color: #e8bf6a; 58 | } 59 | 60 | .hljs-emphasis { 61 | font-style: italic; 62 | } 63 | 64 | .hljs-strong { 65 | font-weight: bold; 66 | } 67 | -------------------------------------------------------------------------------- /talks/highlight/styles/codepen-embed.css: -------------------------------------------------------------------------------- 1 | /* 2 | codepen.io Embed Theme 3 | Author: Justin Perry 4 | Original theme - https://github.com/chriskempson/tomorrow-theme 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | overflow-x: auto; 10 | padding: 0.5em; 11 | background: #222; 12 | color: #fff; 13 | } 14 | 15 | .hljs-comment, 16 | .hljs-quote { 17 | color: #777; 18 | } 19 | 20 | .hljs-variable, 21 | .hljs-template-variable, 22 | .hljs-tag, 23 | .hljs-regexp, 24 | .hljs-meta, 25 | .hljs-number, 26 | .hljs-built_in, 27 | .hljs-builtin-name, 28 | .hljs-literal, 29 | .hljs-params, 30 | .hljs-symbol, 31 | .hljs-bullet, 32 | .hljs-link, 33 | .hljs-deletion { 34 | color: #ab875d; 35 | } 36 | 37 | .hljs-section, 38 | .hljs-title, 39 | .hljs-name, 40 | .hljs-selector-id, 41 | .hljs-selector-class, 42 | .hljs-type, 43 | .hljs-attribute { 44 | color: #9b869b; 45 | } 46 | 47 | .hljs-string, 48 | .hljs-keyword, 49 | .hljs-selector-tag, 50 | .hljs-addition { 51 | color: #8f9c6c; 52 | } 53 | 54 | .hljs-emphasis { 55 | font-style: italic; 56 | } 57 | 58 | .hljs-strong { 59 | font-weight: bold; 60 | } 61 | -------------------------------------------------------------------------------- /docs/scaladocs/index/index-j.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Spark Highcharts POM 0.6.4_2.1 API 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
JsonConversion
15 | 16 |
17 |
json
18 | 19 |
20 | 21 | -------------------------------------------------------------------------------- /talks/highlight/styles/brown-paper.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Brown Paper style from goldblog.com.ua (c) Zaripov Yura 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | overflow-x: auto; 10 | padding: 0.5em; 11 | background:#b7a68e url(./brown-papersq.png); 12 | } 13 | 14 | .hljs-keyword, 15 | .hljs-selector-tag, 16 | .hljs-literal { 17 | color:#005599; 18 | font-weight:bold; 19 | } 20 | 21 | .hljs, 22 | .hljs-subst { 23 | color: #363c69; 24 | } 25 | 26 | .hljs-string, 27 | .hljs-title, 28 | .hljs-section, 29 | .hljs-type, 30 | .hljs-attribute, 31 | .hljs-symbol, 32 | .hljs-bullet, 33 | .hljs-built_in, 34 | .hljs-addition, 35 | .hljs-variable, 36 | .hljs-template-tag, 37 | .hljs-template-variable, 38 | .hljs-link, 39 | .hljs-name { 40 | color: #2c009f; 41 | } 42 | 43 | .hljs-comment, 44 | .hljs-quote, 45 | .hljs-meta, 46 | .hljs-deletion { 47 | color: #802022; 48 | } 49 | 50 | .hljs-keyword, 51 | .hljs-selector-tag, 52 | .hljs-literal, 53 | .hljs-doctag, 54 | .hljs-title, 55 | .hljs-section, 56 | .hljs-type, 57 | .hljs-name, 58 | .hljs-strong { 59 | font-weight: bold; 60 | } 61 | 62 | .hljs-emphasis { 63 | font-style: italic; 64 | } 65 | -------------------------------------------------------------------------------- /talks/highlight/styles/vs.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Visual Studio-like style based on original C# coloring by Jason Diamond 4 | 5 | */ 6 | .hljs { 7 | display: block; 8 | overflow-x: auto; 9 | padding: 0.5em; 10 | background: white; 11 | color: black; 12 | } 13 | 14 | .hljs-comment, 15 | .hljs-quote, 16 | .hljs-variable { 17 | color: #008000; 18 | } 19 | 20 | .hljs-keyword, 21 | .hljs-selector-tag, 22 | .hljs-built_in, 23 | .hljs-name, 24 | .hljs-tag { 25 | color: #00f; 26 | } 27 | 28 | .hljs-string, 29 | .hljs-title, 30 | .hljs-section, 31 | .hljs-attribute, 32 | .hljs-literal, 33 | .hljs-template-tag, 34 | .hljs-template-variable, 35 | .hljs-type, 36 | .hljs-addition { 37 | color: #a31515; 38 | } 39 | 40 | .hljs-deletion, 41 | .hljs-selector-attr, 42 | .hljs-selector-pseudo, 43 | .hljs-meta { 44 | color: #2b91af; 45 | } 46 | 47 | .hljs-doctag { 48 | color: #808080; 49 | } 50 | 51 | .hljs-attr { 52 | color: #f00; 53 | } 54 | 55 | .hljs-symbol, 56 | .hljs-bullet, 57 | .hljs-link { 58 | color: #00b0e8; 59 | } 60 | 61 | 62 | .hljs-emphasis { 63 | font-style: italic; 64 | } 65 | 66 | .hljs-strong { 67 | font-weight: bold; 68 | } 69 | -------------------------------------------------------------------------------- /src/main/resources/basicLine.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": { 3 | "text": "Monthly Average Temperature", 4 | "x": -20 5 | }, 6 | "subtitle": { 7 | "text": "Source: WorldClimate.com", 8 | "x": -20 9 | }, 10 | "xAxis": { 11 | "categories": [ 12 | "Jan", "Feb", "Mar", "Apr", "May", "Jun", 13 | "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" 14 | ] 15 | }, 16 | "yAxis": { 17 | "title": { 18 | "text": "Temperature (°C)" 19 | }, 20 | "plotLines": [ 21 | { 22 | "value": 0, 23 | "width": 1, 24 | "color": "#808080" 25 | } 26 | ] 27 | }, 28 | "tooltip": { 29 | "valueSuffix": "°C" 30 | }, 31 | "legend": { 32 | "layout": "vertical", 33 | "align": "right", 34 | "verticalAlign": "middle", 35 | "borderWidth": 0 36 | }, 37 | "series": [ 38 | { 39 | "name": "Tokyo", 40 | "data": [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6] 41 | }, { 42 | "name": "New York", 43 | "data": [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5] 44 | }, { 45 | "name": "Berlin", 46 | "data": [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0] 47 | }, { 48 | "name": "London", 49 | "data": [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8] 50 | } 51 | ] 52 | } 53 | -------------------------------------------------------------------------------- /talks/highlight/styles/far.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | FAR Style (c) MajestiC 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | overflow-x: auto; 10 | padding: 0.5em; 11 | background: #000080; 12 | } 13 | 14 | .hljs, 15 | .hljs-subst { 16 | color: #0ff; 17 | } 18 | 19 | .hljs-string, 20 | .hljs-attribute, 21 | .hljs-symbol, 22 | .hljs-bullet, 23 | .hljs-built_in, 24 | .hljs-builtin-name, 25 | .hljs-template-tag, 26 | .hljs-template-variable, 27 | .hljs-addition { 28 | color: #ff0; 29 | } 30 | 31 | .hljs-keyword, 32 | .hljs-selector-tag, 33 | .hljs-section, 34 | .hljs-type, 35 | .hljs-name, 36 | .hljs-selector-id, 37 | .hljs-selector-class, 38 | .hljs-variable { 39 | color: #fff; 40 | } 41 | 42 | .hljs-comment, 43 | .hljs-quote, 44 | .hljs-doctag, 45 | .hljs-deletion { 46 | color: #888; 47 | } 48 | 49 | .hljs-number, 50 | .hljs-regexp, 51 | .hljs-literal, 52 | .hljs-link { 53 | color: #0f0; 54 | } 55 | 56 | .hljs-meta { 57 | color: #008080; 58 | } 59 | 60 | .hljs-keyword, 61 | .hljs-selector-tag, 62 | .hljs-title, 63 | .hljs-section, 64 | .hljs-name, 65 | .hljs-strong { 66 | font-weight: bold; 67 | } 68 | 69 | .hljs-emphasis { 70 | font-style: italic; 71 | } 72 | -------------------------------------------------------------------------------- /talks/highlight/styles/arta.css: -------------------------------------------------------------------------------- 1 | /* 2 | Date: 17.V.2011 3 | Author: pumbur 4 | */ 5 | 6 | .hljs { 7 | display: block; 8 | overflow-x: auto; 9 | padding: 0.5em; 10 | background: #222; 11 | } 12 | 13 | .hljs, 14 | .hljs-subst { 15 | color: #aaa; 16 | } 17 | 18 | .hljs-section { 19 | color: #fff; 20 | } 21 | 22 | .hljs-comment, 23 | .hljs-quote, 24 | .hljs-meta { 25 | color: #444; 26 | } 27 | 28 | .hljs-string, 29 | .hljs-symbol, 30 | .hljs-bullet, 31 | .hljs-regexp { 32 | color: #ffcc33; 33 | } 34 | 35 | .hljs-number, 36 | .hljs-addition { 37 | color: #00cc66; 38 | } 39 | 40 | .hljs-built_in, 41 | .hljs-builtin-name, 42 | .hljs-literal, 43 | .hljs-type, 44 | .hljs-template-variable, 45 | .hljs-attribute, 46 | .hljs-link { 47 | color: #32aaee; 48 | } 49 | 50 | .hljs-keyword, 51 | .hljs-selector-tag, 52 | .hljs-name, 53 | .hljs-selector-id, 54 | .hljs-selector-class { 55 | color: #6644aa; 56 | } 57 | 58 | .hljs-title, 59 | .hljs-variable, 60 | .hljs-deletion, 61 | .hljs-template-tag { 62 | color: #bb1166; 63 | } 64 | 65 | .hljs-section, 66 | .hljs-doctag, 67 | .hljs-strong { 68 | font-weight: bold; 69 | } 70 | 71 | .hljs-emphasis { 72 | font-style: italic; 73 | } 74 | -------------------------------------------------------------------------------- /src/test/scala/com/knockdata/spark/highcharts/model/TestHighcharts.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package com.knockdata.spark.highcharts.model 19 | 20 | import org.junit.Test 21 | 22 | class TestHighcharts { 23 | 24 | @Test 25 | def testTitle(): Unit = { 26 | val chart = new Highcharts() 27 | val title = new Title("test") 28 | chart.options(title) 29 | 30 | chart.plot() 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/scala/com/knockdata/spark/highcharts/base/Layout.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package com.knockdata.spark.highcharts.base 19 | 20 | trait Layout extends BaseModel { 21 | def layout(value: String): this.type = append("layout", value) 22 | 23 | def align(value: String): this.type = append("align", value) 24 | 25 | def verticalAlign(value: String): this.type = append("verticalAlign", value) 26 | } 27 | -------------------------------------------------------------------------------- /talks/highlight/styles/ir-black.css: -------------------------------------------------------------------------------- 1 | /* 2 | IR_Black style (c) Vasily Mikhailitchenko 3 | */ 4 | 5 | .hljs { 6 | display: block; 7 | overflow-x: auto; 8 | padding: 0.5em; 9 | background: #000; 10 | color: #f8f8f8; 11 | } 12 | 13 | .hljs-comment, 14 | .hljs-quote, 15 | .hljs-meta { 16 | color: #7c7c7c; 17 | } 18 | 19 | .hljs-keyword, 20 | .hljs-selector-tag, 21 | .hljs-tag, 22 | .hljs-name { 23 | color: #96cbfe; 24 | } 25 | 26 | .hljs-attribute, 27 | .hljs-selector-id { 28 | color: #ffffb6; 29 | } 30 | 31 | .hljs-string, 32 | .hljs-selector-attr, 33 | .hljs-selector-pseudo, 34 | .hljs-addition { 35 | color: #a8ff60; 36 | } 37 | 38 | .hljs-subst { 39 | color: #daefa3; 40 | } 41 | 42 | .hljs-regexp, 43 | .hljs-link { 44 | color: #e9c062; 45 | } 46 | 47 | .hljs-title, 48 | .hljs-section, 49 | .hljs-type, 50 | .hljs-doctag { 51 | color: #ffffb6; 52 | } 53 | 54 | .hljs-symbol, 55 | .hljs-bullet, 56 | .hljs-variable, 57 | .hljs-template-variable, 58 | .hljs-literal { 59 | color: #c6c5fe; 60 | } 61 | 62 | .hljs-number, 63 | .hljs-deletion { 64 | color:#ff73fd; 65 | } 66 | 67 | .hljs-emphasis { 68 | font-style: italic; 69 | } 70 | 71 | .hljs-strong { 72 | font-weight: bold; 73 | } 74 | -------------------------------------------------------------------------------- /src/main/scala/com/knockdata/spark/utils/functions.scala: -------------------------------------------------------------------------------- 1 | package com.knockdata.spark.utils 2 | 3 | import org.apache.spark.sql._ 4 | import org.apache.spark.sql.types._ 5 | import org.apache.spark.sql.functions._ 6 | import scala.util.Try 7 | 8 | object functions { 9 | 10 | val dNull: java.lang.Double = null 11 | val iNull: java.lang.Integer = null 12 | val bNull: java.lang.Boolean = null 13 | 14 | val s2Boolean = udf[Boolean, String](s => s.toBoolean) 15 | val s2Double = udf[Double, String](s => s.toDouble) 16 | val s2Int = udf[Integer, String](s => s.toInt) 17 | 18 | 19 | val s2NullableBoolean = udf[Boolean, String](s => if (s.isEmpty) bNull else s.toBoolean) 20 | val s2NullableDouble = udf[Double, String](s => if (s.isEmpty) dNull else s.toDouble) 21 | val s2NullableInt = udf[Integer, String](s => if (s.isEmpty) iNull else s.toInt) 22 | 23 | 24 | // the value type for "" might infer as Any. Noticed in Spark 1.6 25 | val s2SafeBoolean = udf[Boolean, String](s => Try(s.toString.toBoolean).getOrElse(bNull)) 26 | val s2SafeDouble = udf[Double, String](s => Try(s.toString.toDouble).getOrElse(dNull)) 27 | val s2SafeInt = udf[Int, String](s => Try(s.toString.toInt).getOrElse(iNull)) 28 | 29 | 30 | 31 | 32 | } 33 | -------------------------------------------------------------------------------- /talks/highlight/styles/color-brewer.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Colorbrewer theme 4 | Original: https://github.com/mbostock/colorbrewer-theme (c) Mike Bostock 5 | Ported by Fabrício Tavares de Oliveira 6 | 7 | */ 8 | 9 | .hljs { 10 | display: block; 11 | overflow-x: auto; 12 | padding: 0.5em; 13 | background: #fff; 14 | } 15 | 16 | .hljs, 17 | .hljs-subst { 18 | color: #000; 19 | } 20 | 21 | .hljs-string, 22 | .hljs-meta, 23 | .hljs-symbol, 24 | .hljs-template-tag, 25 | .hljs-template-variable, 26 | .hljs-addition { 27 | color: #756bb1; 28 | } 29 | 30 | .hljs-comment, 31 | .hljs-quote { 32 | color: #636363; 33 | } 34 | 35 | .hljs-number, 36 | .hljs-regexp, 37 | .hljs-literal, 38 | .hljs-bullet, 39 | .hljs-link { 40 | color: #31a354; 41 | } 42 | 43 | .hljs-deletion, 44 | .hljs-variable { 45 | color: #88f; 46 | } 47 | 48 | 49 | 50 | .hljs-keyword, 51 | .hljs-selector-tag, 52 | .hljs-title, 53 | .hljs-section, 54 | .hljs-built_in, 55 | .hljs-doctag, 56 | .hljs-type, 57 | .hljs-tag, 58 | .hljs-name, 59 | .hljs-selector-id, 60 | .hljs-selector-class, 61 | .hljs-strong { 62 | color: #3182bd; 63 | } 64 | 65 | .hljs-emphasis { 66 | font-style: italic; 67 | } 68 | 69 | .hljs-attribute { 70 | color: #e6550d; 71 | } 72 | -------------------------------------------------------------------------------- /talks/highlight/styles/magula.css: -------------------------------------------------------------------------------- 1 | /* 2 | Description: Magula style for highligh.js 3 | Author: Ruslan Keba 4 | Website: http://rukeba.com/ 5 | Version: 1.0 6 | Date: 2009-01-03 7 | Music: Aphex Twin / Xtal 8 | */ 9 | 10 | .hljs { 11 | display: block; 12 | overflow-x: auto; 13 | padding: 0.5em; 14 | background-color: #f4f4f4; 15 | } 16 | 17 | .hljs, 18 | .hljs-subst { 19 | color: black; 20 | } 21 | 22 | .hljs-string, 23 | .hljs-title, 24 | .hljs-symbol, 25 | .hljs-bullet, 26 | .hljs-attribute, 27 | .hljs-addition, 28 | .hljs-variable, 29 | .hljs-template-tag, 30 | .hljs-template-variable { 31 | color: #050; 32 | } 33 | 34 | .hljs-comment, 35 | .hljs-quote { 36 | color: #777; 37 | } 38 | 39 | .hljs-number, 40 | .hljs-regexp, 41 | .hljs-literal, 42 | .hljs-type, 43 | .hljs-link { 44 | color: #800; 45 | } 46 | 47 | .hljs-deletion, 48 | .hljs-meta { 49 | color: #00e; 50 | } 51 | 52 | .hljs-keyword, 53 | .hljs-selector-tag, 54 | .hljs-doctag, 55 | .hljs-title, 56 | .hljs-section, 57 | .hljs-built_in, 58 | .hljs-tag, 59 | .hljs-name { 60 | font-weight: bold; 61 | color: navy; 62 | } 63 | 64 | .hljs-emphasis { 65 | font-style: italic; 66 | } 67 | 68 | .hljs-strong { 69 | font-weight: bold; 70 | } 71 | -------------------------------------------------------------------------------- /talks/highlight/styles/github-gist.css: -------------------------------------------------------------------------------- 1 | /** 2 | * GitHub Gist Theme 3 | * Author : Louis Barranqueiro - https://github.com/LouisBarranqueiro 4 | */ 5 | 6 | .hljs { 7 | display: block; 8 | background: white; 9 | padding: 0.5em; 10 | color: #333333; 11 | overflow-x: auto; 12 | } 13 | 14 | .hljs-comment, 15 | .hljs-meta { 16 | color: #969896; 17 | } 18 | 19 | .hljs-string, 20 | .hljs-variable, 21 | .hljs-template-variable, 22 | .hljs-strong, 23 | .hljs-emphasis, 24 | .hljs-quote { 25 | color: #df5000; 26 | } 27 | 28 | .hljs-keyword, 29 | .hljs-selector-tag, 30 | .hljs-type { 31 | color: #a71d5d; 32 | } 33 | 34 | .hljs-literal, 35 | .hljs-symbol, 36 | .hljs-bullet, 37 | .hljs-attribute { 38 | color: #0086b3; 39 | } 40 | 41 | .hljs-section, 42 | .hljs-name { 43 | color: #63a35c; 44 | } 45 | 46 | .hljs-tag { 47 | color: #333333; 48 | } 49 | 50 | .hljs-title, 51 | .hljs-attr, 52 | .hljs-selector-id, 53 | .hljs-selector-class, 54 | .hljs-selector-attr, 55 | .hljs-selector-pseudo { 56 | color: #795da3; 57 | } 58 | 59 | .hljs-addition { 60 | color: #55a532; 61 | background-color: #eaffea; 62 | } 63 | 64 | .hljs-deletion { 65 | color: #bd2c00; 66 | background-color: #ffecec; 67 | } 68 | 69 | .hljs-link { 70 | text-decoration: underline; 71 | } 72 | -------------------------------------------------------------------------------- /src/main/scala/com/knockdata/spark/highcharts/model/Drilldown.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package com.knockdata.spark.highcharts.model 19 | 20 | import com.knockdata.spark.highcharts.base.BaseModel 21 | 22 | class Drilldown(allDrilldownSeries: List[Series]) extends BaseModel with PublicApply { 23 | override def fieldName: String = "drilldown" 24 | 25 | override def preProcessResult(): Unit = { 26 | append("series", allDrilldownSeries) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /talks/highlight/styles/monokai.css: -------------------------------------------------------------------------------- 1 | /* 2 | Monokai style - ported by Luigi Maselli - http://grigio.org 3 | */ 4 | 5 | .hljs { 6 | display: block; 7 | overflow-x: auto; 8 | padding: 0.5em; 9 | background: #272822; color: #ddd; 10 | } 11 | 12 | .hljs-tag, 13 | .hljs-keyword, 14 | .hljs-selector-tag, 15 | .hljs-literal, 16 | .hljs-strong, 17 | .hljs-name { 18 | color: #f92672; 19 | } 20 | 21 | .hljs-code { 22 | color: #66d9ef; 23 | } 24 | 25 | .hljs-class .hljs-title { 26 | color: white; 27 | } 28 | 29 | .hljs-attribute, 30 | .hljs-symbol, 31 | .hljs-regexp, 32 | .hljs-link { 33 | color: #bf79db; 34 | } 35 | 36 | .hljs-string, 37 | .hljs-bullet, 38 | .hljs-subst, 39 | .hljs-title, 40 | .hljs-section, 41 | .hljs-emphasis, 42 | .hljs-type, 43 | .hljs-built_in, 44 | .hljs-builtin-name, 45 | .hljs-selector-attr, 46 | .hljs-selector-pseudo, 47 | .hljs-addition, 48 | .hljs-variable, 49 | .hljs-template-tag, 50 | .hljs-template-variable { 51 | color: #a6e22e; 52 | } 53 | 54 | .hljs-comment, 55 | .hljs-quote, 56 | .hljs-deletion, 57 | .hljs-meta { 58 | color: #75715e; 59 | } 60 | 61 | .hljs-keyword, 62 | .hljs-selector-tag, 63 | .hljs-literal, 64 | .hljs-doctag, 65 | .hljs-title, 66 | .hljs-section, 67 | .hljs-type, 68 | .hljs-selector-id { 69 | font-weight: bold; 70 | } 71 | -------------------------------------------------------------------------------- /talks/highlight/styles/darcula.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Darcula color scheme from the JetBrains family of IDEs 4 | 5 | */ 6 | 7 | 8 | .hljs { 9 | display: block; 10 | overflow-x: auto; 11 | padding: 0.5em; 12 | background: #2b2b2b; 13 | } 14 | 15 | .hljs { 16 | color: #bababa; 17 | } 18 | 19 | .hljs-strong, 20 | .hljs-emphasis { 21 | color: #a8a8a2; 22 | } 23 | 24 | .hljs-bullet, 25 | .hljs-quote, 26 | .hljs-link, 27 | .hljs-number, 28 | .hljs-regexp, 29 | .hljs-literal { 30 | color: #6896ba; 31 | } 32 | 33 | .hljs-code, 34 | .hljs-selector-class { 35 | color: #a6e22e; 36 | } 37 | 38 | .hljs-emphasis { 39 | font-style: italic; 40 | } 41 | 42 | .hljs-keyword, 43 | .hljs-selector-tag, 44 | .hljs-section, 45 | .hljs-attribute, 46 | .hljs-name, 47 | .hljs-variable { 48 | color: #cb7832; 49 | } 50 | 51 | .hljs-params { 52 | color: #b9b9b9; 53 | } 54 | 55 | .hljs-string { 56 | color: #6a8759; 57 | } 58 | 59 | .hljs-subst, 60 | .hljs-type, 61 | .hljs-built_in, 62 | .hljs-builtin-name, 63 | .hljs-symbol, 64 | .hljs-selector-id, 65 | .hljs-selector-attr, 66 | .hljs-selector-pseudo, 67 | .hljs-template-tag, 68 | .hljs-template-variable, 69 | .hljs-addition { 70 | color: #e0c46c; 71 | } 72 | 73 | .hljs-comment, 74 | .hljs-deletion, 75 | .hljs-meta { 76 | color: #7f7f7f; 77 | } 78 | -------------------------------------------------------------------------------- /src/main/scala/com/knockdata/spark/highcharts/model/Data.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package com.knockdata.spark.highcharts.model 19 | 20 | import com.knockdata.spark.highcharts.base.BaseModel 21 | 22 | class Data() extends BaseModel with PublicApply{ 23 | override def fieldName: String = "data" 24 | 25 | def dateFormat(value: String): this.type = { 26 | append("dateFormat", value) 27 | } 28 | 29 | def decimalPoint(value: String): this.type = { 30 | append("decimalPoint", value) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /talks/highlight/styles/tomorrow.css: -------------------------------------------------------------------------------- 1 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 2 | 3 | /* Tomorrow Comment */ 4 | .hljs-comment, 5 | .hljs-quote { 6 | color: #8e908c; 7 | } 8 | 9 | /* Tomorrow Red */ 10 | .hljs-variable, 11 | .hljs-template-variable, 12 | .hljs-tag, 13 | .hljs-name, 14 | .hljs-selector-id, 15 | .hljs-selector-class, 16 | .hljs-regexp, 17 | .hljs-deletion { 18 | color: #c82829; 19 | } 20 | 21 | /* Tomorrow Orange */ 22 | .hljs-number, 23 | .hljs-built_in, 24 | .hljs-builtin-name, 25 | .hljs-literal, 26 | .hljs-type, 27 | .hljs-params, 28 | .hljs-meta, 29 | .hljs-link { 30 | color: #f5871f; 31 | } 32 | 33 | /* Tomorrow Yellow */ 34 | .hljs-attribute { 35 | color: #eab700; 36 | } 37 | 38 | /* Tomorrow Green */ 39 | .hljs-string, 40 | .hljs-symbol, 41 | .hljs-bullet, 42 | .hljs-addition { 43 | color: #718c00; 44 | } 45 | 46 | /* Tomorrow Blue */ 47 | .hljs-title, 48 | .hljs-section { 49 | color: #4271ae; 50 | } 51 | 52 | /* Tomorrow Purple */ 53 | .hljs-keyword, 54 | .hljs-selector-tag { 55 | color: #8959a8; 56 | } 57 | 58 | .hljs { 59 | display: block; 60 | overflow-x: auto; 61 | background: white; 62 | color: #4d4d4c; 63 | padding: 0.5em; 64 | } 65 | 66 | .hljs-emphasis { 67 | font-style: italic; 68 | } 69 | 70 | .hljs-strong { 71 | font-weight: bold; 72 | } 73 | -------------------------------------------------------------------------------- /talks/highlight/styles/zenburn.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Zenburn style from voldmar.ru (c) Vladimir Epifanov 4 | based on dark.css by Ivan Sagalaev 5 | 6 | */ 7 | 8 | .hljs { 9 | display: block; 10 | overflow-x: auto; 11 | padding: 0.5em; 12 | background: #3f3f3f; 13 | color: #dcdcdc; 14 | } 15 | 16 | .hljs-keyword, 17 | .hljs-selector-tag, 18 | .hljs-tag { 19 | color: #e3ceab; 20 | } 21 | 22 | .hljs-template-tag { 23 | color: #dcdcdc; 24 | } 25 | 26 | .hljs-number { 27 | color: #8cd0d3; 28 | } 29 | 30 | .hljs-variable, 31 | .hljs-template-variable, 32 | .hljs-attribute { 33 | color: #efdcbc; 34 | } 35 | 36 | .hljs-literal { 37 | color: #efefaf; 38 | } 39 | 40 | .hljs-subst { 41 | color: #8f8f8f; 42 | } 43 | 44 | .hljs-title, 45 | .hljs-name, 46 | .hljs-selector-id, 47 | .hljs-selector-class, 48 | .hljs-section, 49 | .hljs-type { 50 | color: #efef8f; 51 | } 52 | 53 | .hljs-symbol, 54 | .hljs-bullet, 55 | .hljs-link { 56 | color: #dca3a3; 57 | } 58 | 59 | .hljs-deletion, 60 | .hljs-string, 61 | .hljs-built_in, 62 | .hljs-builtin-name { 63 | color: #cc9393; 64 | } 65 | 66 | .hljs-addition, 67 | .hljs-comment, 68 | .hljs-quote, 69 | .hljs-meta { 70 | color: #7f9f7f; 71 | } 72 | 73 | 74 | .hljs-emphasis { 75 | font-style: italic; 76 | } 77 | 78 | .hljs-strong { 79 | font-weight: bold; 80 | } 81 | -------------------------------------------------------------------------------- /src/test/resources/snowdepth.csv: -------------------------------------------------------------------------------- 1 | year,time,depth 2 | 2012,26524800000,0.28 3 | 2012,26956800000,0.25 4 | 2012,28512000000,0.2 5 | 2012,28944000000,0.28 6 | 2012,31017600000,0.28 7 | 2012,31276800000,0.47 8 | 2012,32400000000,0.79 9 | 2012,33696000000,0.72 10 | 2012,34387200000,1.02 11 | 2012,35078400000,1.12 12 | 2012,36288000000,1.2 13 | 2012,37497600000,1.18 14 | 2012,40176000000,1.19 15 | 2012,41904000000,1.85 16 | 2012,42249600000,2.22 17 | 2012,43459200000,1.15 18 | 2012,44755200000,0 19 | 2013,26956800000,0.4 20 | 2013,28857600000,0.25 21 | 2013,31536000000,1.66 22 | 2013,32313600000,1.8 23 | 2013,35769600000,1.76 24 | 2013,38707200000,2.62 25 | 2013,40867200000,2.41 26 | 2013,41817600000,2.05 27 | 2013,43027200000,1.7 28 | 2013,43891200000,1.1 29 | 2013,45360000000,0 30 | 2014,29289600000,0.25 31 | 2014,30499200000,1.41 32 | 2014,30931200000,1.64 33 | 2014,31795200000,1.6 34 | 2014,32918400000,2.55 35 | 2014,33523200000,2.62 36 | 2014,34473600000,2.5 37 | 2014,35337600000,2.42 38 | 2014,37065600000,2.74 39 | 2014,37756800000,2.62 40 | 2014,38620800000,2.6 41 | 2014,39398400000,2.81 42 | 2014,40262400000,2.63 43 | 2014,41644800000,2.77 44 | 2014,42249600000,2.68 45 | 2014,42681600000,2.56 46 | 2014,43113600000,2.39 47 | 2014,43545600000,2.3 48 | 2014,44928000000,2 49 | 2014,45360000000,1.85 50 | 2014,45792000000,1.49 51 | 2014,46483200000,1.08 52 | -------------------------------------------------------------------------------- /src/test/scala/com/knockdata/spark/highcharts/model/TestInit.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package com.knockdata.spark.highcharts.model 19 | 20 | import com.knockdata.spark.highcharts._ 21 | 22 | import org.junit.Test 23 | 24 | class TestInit { 25 | 26 | @Test 27 | def testInitBasic(): Unit = { 28 | Init.init("highcharts") 29 | } 30 | 31 | 32 | @Test 33 | def testInit(): Unit = { 34 | Init.init() 35 | } 36 | 37 | @Test 38 | def testHighcharts(): Unit = { 39 | Init.init("map") 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/scala/com/knockdata/spark/highcharts/model/Labels.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | 19 | package com.knockdata.spark.highcharts.model 20 | 21 | import com.knockdata.spark.highcharts.base.BaseModel 22 | 23 | class Labels extends BaseModel with PublicApply { 24 | override def fieldName: String = "labels" 25 | 26 | def items(values: (String, Any)*): this.type = { 27 | append("style", values.toMap) 28 | } 29 | 30 | def style(values: (String, Any)*): this.type = { 31 | append("style", values.toMap) 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /talks/highlight/styles/school-book.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | School Book style from goldblog.com.ua (c) Zaripov Yura 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | overflow-x: auto; 10 | padding: 15px 0.5em 0.5em 30px; 11 | font-size: 11px; 12 | line-height:16px; 13 | } 14 | 15 | pre{ 16 | background:#f6f6ae url(./school-book.png); 17 | border-top: solid 2px #d2e8b9; 18 | border-bottom: solid 1px #d2e8b9; 19 | } 20 | 21 | .hljs-keyword, 22 | .hljs-selector-tag, 23 | .hljs-literal { 24 | color:#005599; 25 | font-weight:bold; 26 | } 27 | 28 | .hljs, 29 | .hljs-subst { 30 | color: #3e5915; 31 | } 32 | 33 | .hljs-string, 34 | .hljs-title, 35 | .hljs-section, 36 | .hljs-type, 37 | .hljs-symbol, 38 | .hljs-bullet, 39 | .hljs-attribute, 40 | .hljs-built_in, 41 | .hljs-builtin-name, 42 | .hljs-addition, 43 | .hljs-variable, 44 | .hljs-template-tag, 45 | .hljs-template-variable, 46 | .hljs-link { 47 | color: #2c009f; 48 | } 49 | 50 | .hljs-comment, 51 | .hljs-quote, 52 | .hljs-deletion, 53 | .hljs-meta { 54 | color: #e60415; 55 | } 56 | 57 | .hljs-keyword, 58 | .hljs-selector-tag, 59 | .hljs-literal, 60 | .hljs-doctag, 61 | .hljs-title, 62 | .hljs-section, 63 | .hljs-type, 64 | .hljs-name, 65 | .hljs-selector-id, 66 | .hljs-strong { 67 | font-weight: bold; 68 | } 69 | 70 | .hljs-emphasis { 71 | font-style: italic; 72 | } 73 | -------------------------------------------------------------------------------- /talks/highlight/styles/ocean.css: -------------------------------------------------------------------------------- 1 | /* Ocean Dark Theme */ 2 | /* https://github.com/gavsiu */ 3 | /* Original theme - https://github.com/chriskempson/base16 */ 4 | 5 | /* Ocean Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #65737e; 9 | } 10 | 11 | /* Ocean Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-tag, 15 | .hljs-name, 16 | .hljs-selector-id, 17 | .hljs-selector-class, 18 | .hljs-regexp, 19 | .hljs-deletion { 20 | color: #bf616a; 21 | } 22 | 23 | /* Ocean Orange */ 24 | .hljs-number, 25 | .hljs-built_in, 26 | .hljs-builtin-name, 27 | .hljs-literal, 28 | .hljs-type, 29 | .hljs-params, 30 | .hljs-meta, 31 | .hljs-link { 32 | color: #d08770; 33 | } 34 | 35 | /* Ocean Yellow */ 36 | .hljs-attribute { 37 | color: #ebcb8b; 38 | } 39 | 40 | /* Ocean Green */ 41 | .hljs-string, 42 | .hljs-symbol, 43 | .hljs-bullet, 44 | .hljs-addition { 45 | color: #a3be8c; 46 | } 47 | 48 | /* Ocean Blue */ 49 | .hljs-title, 50 | .hljs-section { 51 | color: #8fa1b3; 52 | } 53 | 54 | /* Ocean Purple */ 55 | .hljs-keyword, 56 | .hljs-selector-tag { 57 | color: #b48ead; 58 | } 59 | 60 | .hljs { 61 | display: block; 62 | overflow-x: auto; 63 | background: #2b303b; 64 | color: #c0c5ce; 65 | padding: 0.5em; 66 | } 67 | 68 | .hljs-emphasis { 69 | font-style: italic; 70 | } 71 | 72 | .hljs-strong { 73 | font-weight: bold; 74 | } 75 | -------------------------------------------------------------------------------- /talks/highlight/styles/paraiso-dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | Paraíso (dark) 3 | Created by Jan T. Sott (http://github.com/idleberg) 4 | Inspired by the art of Rubens LP (http://www.rubenslp.com.br) 5 | */ 6 | 7 | /* Paraíso Comment */ 8 | .hljs-comment, 9 | .hljs-quote { 10 | color: #8d8687; 11 | } 12 | 13 | /* Paraíso Red */ 14 | .hljs-variable, 15 | .hljs-template-variable, 16 | .hljs-tag, 17 | .hljs-name, 18 | .hljs-selector-id, 19 | .hljs-selector-class, 20 | .hljs-regexp, 21 | .hljs-link, 22 | .hljs-meta { 23 | color: #ef6155; 24 | } 25 | 26 | /* Paraíso Orange */ 27 | .hljs-number, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params, 33 | .hljs-deletion { 34 | color: #f99b15; 35 | } 36 | 37 | /* Paraíso Yellow */ 38 | .hljs-title, 39 | .hljs-section, 40 | .hljs-attribute { 41 | color: #fec418; 42 | } 43 | 44 | /* Paraíso Green */ 45 | .hljs-string, 46 | .hljs-symbol, 47 | .hljs-bullet, 48 | .hljs-addition { 49 | color: #48b685; 50 | } 51 | 52 | /* Paraíso Purple */ 53 | .hljs-keyword, 54 | .hljs-selector-tag { 55 | color: #815ba4; 56 | } 57 | 58 | .hljs { 59 | display: block; 60 | overflow-x: auto; 61 | background: #2f1e2e; 62 | color: #a39e9b; 63 | padding: 0.5em; 64 | } 65 | 66 | .hljs-emphasis { 67 | font-style: italic; 68 | } 69 | 70 | .hljs-strong { 71 | font-weight: bold; 72 | } 73 | -------------------------------------------------------------------------------- /talks/highlight/styles/paraiso-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | Paraíso (light) 3 | Created by Jan T. Sott (http://github.com/idleberg) 4 | Inspired by the art of Rubens LP (http://www.rubenslp.com.br) 5 | */ 6 | 7 | /* Paraíso Comment */ 8 | .hljs-comment, 9 | .hljs-quote { 10 | color: #776e71; 11 | } 12 | 13 | /* Paraíso Red */ 14 | .hljs-variable, 15 | .hljs-template-variable, 16 | .hljs-tag, 17 | .hljs-name, 18 | .hljs-selector-id, 19 | .hljs-selector-class, 20 | .hljs-regexp, 21 | .hljs-link, 22 | .hljs-meta { 23 | color: #ef6155; 24 | } 25 | 26 | /* Paraíso Orange */ 27 | .hljs-number, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params, 33 | .hljs-deletion { 34 | color: #f99b15; 35 | } 36 | 37 | /* Paraíso Yellow */ 38 | .hljs-title, 39 | .hljs-section, 40 | .hljs-attribute { 41 | color: #fec418; 42 | } 43 | 44 | /* Paraíso Green */ 45 | .hljs-string, 46 | .hljs-symbol, 47 | .hljs-bullet, 48 | .hljs-addition { 49 | color: #48b685; 50 | } 51 | 52 | /* Paraíso Purple */ 53 | .hljs-keyword, 54 | .hljs-selector-tag { 55 | color: #815ba4; 56 | } 57 | 58 | .hljs { 59 | display: block; 60 | overflow-x: auto; 61 | background: #e7e9db; 62 | color: #4f424c; 63 | padding: 0.5em; 64 | } 65 | 66 | .hljs-emphasis { 67 | font-style: italic; 68 | } 69 | 70 | .hljs-strong { 71 | font-weight: bold; 72 | } 73 | -------------------------------------------------------------------------------- /talks/highlight/styles/dracula.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Dracula Theme v1.2.0 4 | 5 | https://github.com/zenorocha/dracula-theme 6 | 7 | Copyright 2015, All rights reserved 8 | 9 | Code licensed under the MIT license 10 | http://zenorocha.mit-license.org 11 | 12 | @author Éverton Ribeiro 13 | @author Zeno Rocha 14 | 15 | */ 16 | 17 | .hljs { 18 | display: block; 19 | overflow-x: auto; 20 | padding: 0.5em; 21 | background: #282a36; 22 | } 23 | 24 | .hljs-keyword, 25 | .hljs-selector-tag, 26 | .hljs-literal, 27 | .hljs-section, 28 | .hljs-link { 29 | color: #8be9fd; 30 | } 31 | 32 | .hljs-function .hljs-keyword { 33 | color: #ff79c6; 34 | } 35 | 36 | .hljs, 37 | .hljs-subst { 38 | color: #f8f8f2; 39 | } 40 | 41 | .hljs-string, 42 | .hljs-title, 43 | .hljs-name, 44 | .hljs-type, 45 | .hljs-attribute, 46 | .hljs-symbol, 47 | .hljs-bullet, 48 | .hljs-addition, 49 | .hljs-variable, 50 | .hljs-template-tag, 51 | .hljs-template-variable { 52 | color: #f1fa8c; 53 | } 54 | 55 | .hljs-comment, 56 | .hljs-quote, 57 | .hljs-deletion, 58 | .hljs-meta { 59 | color: #6272a4; 60 | } 61 | 62 | .hljs-keyword, 63 | .hljs-selector-tag, 64 | .hljs-literal, 65 | .hljs-title, 66 | .hljs-section, 67 | .hljs-doctag, 68 | .hljs-type, 69 | .hljs-name, 70 | .hljs-strong { 71 | font-weight: bold; 72 | } 73 | 74 | .hljs-emphasis { 75 | font-style: italic; 76 | } 77 | -------------------------------------------------------------------------------- /docs/scaladocs/lib/modernizr.custom.js: -------------------------------------------------------------------------------- 1 | /* Modernizr 2.5.3 (Custom Build) | MIT & BSD 2 | * Build: http://www.modernizr.com/download/#-inlinesvg 3 | */ 4 | ;window.Modernizr=function(a,b,c){function u(a){i.cssText=a}function v(a,b){return u(prefixes.join(a+";")+(b||""))}function w(a,b){return typeof a===b}function x(a,b){return!!~(""+a).indexOf(b)}function y(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:w(f,"function")?f.bind(d||b):f}return!1}var d="2.5.3",e={},f=b.documentElement,g="modernizr",h=b.createElement(g),i=h.style,j,k={}.toString,l={svg:"http://www.w3.org/2000/svg"},m={},n={},o={},p=[],q=p.slice,r,s={}.hasOwnProperty,t;!w(s,"undefined")&&!w(s.call,"undefined")?t=function(a,b){return s.call(a,b)}:t=function(a,b){return b in a&&w(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=q.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(q.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(q.call(arguments)))};return e}),m.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="",(a.firstChild&&a.firstChild.namespaceURI)==l.svg};for(var z in m)t(m,z)&&(r=z.toLowerCase(),e[r]=m[z](),p.push((e[r]?"":"no-")+r));return u(""),h=j=null,e._version=d,e}(this,this.document); -------------------------------------------------------------------------------- /talks/highlight/styles/qtcreator_dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Qt Creator dark color scheme 4 | 5 | */ 6 | 7 | 8 | .hljs { 9 | display: block; 10 | overflow-x: auto; 11 | padding: 0.5em; 12 | background: #000000; 13 | } 14 | 15 | .hljs, 16 | .hljs-subst, 17 | .hljs-tag, 18 | .hljs-title { 19 | color: #aaaaaa; 20 | } 21 | 22 | .hljs-strong, 23 | .hljs-emphasis { 24 | color: #a8a8a2; 25 | } 26 | 27 | .hljs-bullet, 28 | .hljs-quote, 29 | .hljs-number, 30 | .hljs-regexp, 31 | .hljs-literal { 32 | color: #ff55ff; 33 | } 34 | 35 | .hljs-code 36 | .hljs-selector-class { 37 | color: #aaaaff; 38 | } 39 | 40 | .hljs-emphasis, 41 | .hljs-stronge, 42 | .hljs-type { 43 | font-style: italic; 44 | } 45 | 46 | .hljs-keyword, 47 | .hljs-selector-tag, 48 | .hljs-function, 49 | .hljs-section, 50 | .hljs-symbol, 51 | .hljs-name { 52 | color: #ffff55; 53 | } 54 | 55 | .hljs-attribute { 56 | color: #ff5555; 57 | } 58 | 59 | .hljs-variable, 60 | .hljs-params, 61 | .hljs-class .hljs-title { 62 | color: #8888ff; 63 | } 64 | 65 | .hljs-string, 66 | .hljs-selector-id, 67 | .hljs-selector-attr, 68 | .hljs-selector-pseudo, 69 | .hljs-type, 70 | .hljs-built_in, 71 | .hljs-builtin-name, 72 | .hljs-template-tag, 73 | .hljs-template-variable, 74 | .hljs-addition, 75 | .hljs-link { 76 | color: #ff55ff; 77 | } 78 | 79 | .hljs-comment, 80 | .hljs-meta, 81 | .hljs-deletion { 82 | color: #55ffff; 83 | } 84 | -------------------------------------------------------------------------------- /talks/highlight/styles/qtcreator_light.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Qt Creator light color scheme 4 | 5 | */ 6 | 7 | 8 | .hljs { 9 | display: block; 10 | overflow-x: auto; 11 | padding: 0.5em; 12 | background: #ffffff; 13 | } 14 | 15 | .hljs, 16 | .hljs-subst, 17 | .hljs-tag, 18 | .hljs-title { 19 | color: #000000; 20 | } 21 | 22 | .hljs-strong, 23 | .hljs-emphasis { 24 | color: #000000; 25 | } 26 | 27 | .hljs-bullet, 28 | .hljs-quote, 29 | .hljs-number, 30 | .hljs-regexp, 31 | .hljs-literal { 32 | color: #000080; 33 | } 34 | 35 | .hljs-code 36 | .hljs-selector-class { 37 | color: #800080; 38 | } 39 | 40 | .hljs-emphasis, 41 | .hljs-stronge, 42 | .hljs-type { 43 | font-style: italic; 44 | } 45 | 46 | .hljs-keyword, 47 | .hljs-selector-tag, 48 | .hljs-function, 49 | .hljs-section, 50 | .hljs-symbol, 51 | .hljs-name { 52 | color: #808000; 53 | } 54 | 55 | .hljs-attribute { 56 | color: #800000; 57 | } 58 | 59 | .hljs-variable, 60 | .hljs-params, 61 | .hljs-class .hljs-title { 62 | color: #0055AF; 63 | } 64 | 65 | .hljs-string, 66 | .hljs-selector-id, 67 | .hljs-selector-attr, 68 | .hljs-selector-pseudo, 69 | .hljs-type, 70 | .hljs-built_in, 71 | .hljs-builtin-name, 72 | .hljs-template-tag, 73 | .hljs-template-variable, 74 | .hljs-addition, 75 | .hljs-link { 76 | color: #008000; 77 | } 78 | 79 | .hljs-comment, 80 | .hljs-meta, 81 | .hljs-deletion { 82 | color: #008000; 83 | } 84 | -------------------------------------------------------------------------------- /src/main/scala/com/knockdata/spark/utils/CipherUtil.scala: -------------------------------------------------------------------------------- 1 | package com.knockdata.spark.utils 2 | 3 | import java.security.MessageDigest 4 | import javax.crypto.Cipher 5 | import javax.crypto.spec.{IvParameterSpec, SecretKeySpec} 6 | 7 | import sun.misc.{BASE64Decoder, BASE64Encoder} 8 | 9 | object CipherUtil { 10 | val cipherName = "AES/CBC/PKCS5Padding" 11 | 12 | val ivspec = new IvParameterSpec(Array[Byte](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) 13 | 14 | def getKey(key: String): Array[Byte] = { 15 | val raw = MessageDigest.getInstance("MD5").digest(key.getBytes) 16 | raw 17 | } 18 | 19 | def encrypt(key: String, password: String): String = { 20 | val spec = new SecretKeySpec(getKey(key), "AES") 21 | val cipher = Cipher.getInstance(cipherName) 22 | cipher.init(Cipher.ENCRYPT_MODE, spec, ivspec) 23 | 24 | val encrypted = cipher.doFinal(password.getBytes("UTF8")) 25 | 26 | new BASE64Encoder().encode(encrypted) 27 | } 28 | 29 | def decrypt(key: String, encryptedPassword: String): String = { 30 | val spec = new SecretKeySpec(getKey(key), "AES") 31 | val cipher = Cipher.getInstance(cipherName) 32 | cipher.init(Cipher.DECRYPT_MODE, spec, ivspec) 33 | 34 | val encrypted = new BASE64Decoder().decodeBuffer(encryptedPassword) 35 | 36 | val decrypted = cipher.doFinal(encrypted) 37 | new String(decrypted, "UTF8") 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /talks/highlight/styles/rainbow.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Style with support for rainbow parens 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | overflow-x: auto; 10 | padding: 0.5em; 11 | background: #474949; 12 | color: #d1d9e1; 13 | } 14 | 15 | 16 | .hljs-comment, 17 | .hljs-quote { 18 | color: #969896; 19 | font-style: italic; 20 | } 21 | 22 | .hljs-keyword, 23 | .hljs-selector-tag, 24 | .hljs-literal, 25 | .hljs-type, 26 | .hljs-addition { 27 | color: #cc99cc; 28 | } 29 | 30 | .hljs-number, 31 | .hljs-selector-attr, 32 | .hljs-selector-pseudo { 33 | color: #f99157; 34 | } 35 | 36 | .hljs-string, 37 | .hljs-doctag, 38 | .hljs-regexp { 39 | color: #8abeb7; 40 | } 41 | 42 | .hljs-title, 43 | .hljs-name, 44 | .hljs-section, 45 | .hljs-built_in { 46 | color: #b5bd68; 47 | } 48 | 49 | .hljs-variable, 50 | .hljs-template-variable, 51 | .hljs-selector-id, 52 | .hljs-class .hljs-title { 53 | color: #ffcc66; 54 | } 55 | 56 | .hljs-section, 57 | .hljs-name, 58 | .hljs-strong { 59 | font-weight: bold; 60 | } 61 | 62 | .hljs-symbol, 63 | .hljs-bullet, 64 | .hljs-subst, 65 | .hljs-meta, 66 | .hljs-link { 67 | color: #f99157; 68 | } 69 | 70 | .hljs-deletion { 71 | color: #dc322f; 72 | } 73 | 74 | .hljs-formula { 75 | background: #eee8d5; 76 | } 77 | 78 | .hljs-attr, 79 | .hljs-attribute { 80 | color: #81a2be; 81 | } 82 | 83 | .hljs-emphasis { 84 | font-style: italic; 85 | } 86 | -------------------------------------------------------------------------------- /talks/highlight/styles/kimbie.dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | Name: Kimbie (dark) 3 | Author: Jan T. Sott 4 | License: Creative Commons Attribution-ShareAlike 4.0 Unported License 5 | URL: https://github.com/idleberg/Kimbie-highlight.js 6 | */ 7 | 8 | /* Kimbie Comment */ 9 | .hljs-comment, 10 | .hljs-quote { 11 | color: #d6baad; 12 | } 13 | 14 | /* Kimbie Red */ 15 | .hljs-variable, 16 | .hljs-template-variable, 17 | .hljs-tag, 18 | .hljs-name, 19 | .hljs-selector-id, 20 | .hljs-selector-class, 21 | .hljs-regexp, 22 | .hljs-meta { 23 | color: #dc3958; 24 | } 25 | 26 | /* Kimbie Orange */ 27 | .hljs-number, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params, 33 | .hljs-deletion, 34 | .hljs-link { 35 | color: #f79a32; 36 | } 37 | 38 | /* Kimbie Yellow */ 39 | .hljs-title, 40 | .hljs-section, 41 | .hljs-attribute { 42 | color: #f06431; 43 | } 44 | 45 | /* Kimbie Green */ 46 | .hljs-string, 47 | .hljs-symbol, 48 | .hljs-bullet, 49 | .hljs-addition { 50 | color: #889b4a; 51 | } 52 | 53 | /* Kimbie Purple */ 54 | .hljs-keyword, 55 | .hljs-selector-tag, 56 | .hljs-function { 57 | color: #98676a; 58 | } 59 | 60 | .hljs { 61 | display: block; 62 | overflow-x: auto; 63 | background: #221a0f; 64 | color: #d3af86; 65 | padding: 0.5em; 66 | } 67 | 68 | .hljs-emphasis { 69 | font-style: italic; 70 | } 71 | 72 | .hljs-strong { 73 | font-weight: bold; 74 | } 75 | -------------------------------------------------------------------------------- /talks/highlight/styles/kimbie.light.css: -------------------------------------------------------------------------------- 1 | /* 2 | Name: Kimbie (light) 3 | Author: Jan T. Sott 4 | License: Creative Commons Attribution-ShareAlike 4.0 Unported License 5 | URL: https://github.com/idleberg/Kimbie-highlight.js 6 | */ 7 | 8 | /* Kimbie Comment */ 9 | .hljs-comment, 10 | .hljs-quote { 11 | color: #a57a4c; 12 | } 13 | 14 | /* Kimbie Red */ 15 | .hljs-variable, 16 | .hljs-template-variable, 17 | .hljs-tag, 18 | .hljs-name, 19 | .hljs-selector-id, 20 | .hljs-selector-class, 21 | .hljs-regexp, 22 | .hljs-meta { 23 | color: #dc3958; 24 | } 25 | 26 | /* Kimbie Orange */ 27 | .hljs-number, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params, 33 | .hljs-deletion, 34 | .hljs-link { 35 | color: #f79a32; 36 | } 37 | 38 | /* Kimbie Yellow */ 39 | .hljs-title, 40 | .hljs-section, 41 | .hljs-attribute { 42 | color: #f06431; 43 | } 44 | 45 | /* Kimbie Green */ 46 | .hljs-string, 47 | .hljs-symbol, 48 | .hljs-bullet, 49 | .hljs-addition { 50 | color: #889b4a; 51 | } 52 | 53 | /* Kimbie Purple */ 54 | .hljs-keyword, 55 | .hljs-selector-tag, 56 | .hljs-function { 57 | color: #98676a; 58 | } 59 | 60 | .hljs { 61 | display: block; 62 | overflow-x: auto; 63 | background: #fbebd4; 64 | color: #84613d; 65 | padding: 0.5em; 66 | } 67 | 68 | .hljs-emphasis { 69 | font-style: italic; 70 | } 71 | 72 | .hljs-strong { 73 | font-weight: bold; 74 | } 75 | -------------------------------------------------------------------------------- /talks/highlight/styles/atelier-dune-dark.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Dune Dark - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | 5 | /* Atelier-Dune Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #999580; 9 | } 10 | 11 | /* Atelier-Dune Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-regexp, 18 | .hljs-link, 19 | .hljs-name, 20 | .hljs-selector-id, 21 | .hljs-selector-class { 22 | color: #d73737; 23 | } 24 | 25 | /* Atelier-Dune Orange */ 26 | .hljs-number, 27 | .hljs-meta, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params { 33 | color: #b65611; 34 | } 35 | 36 | /* Atelier-Dune Green */ 37 | .hljs-string, 38 | .hljs-symbol, 39 | .hljs-bullet { 40 | color: #60ac39; 41 | } 42 | 43 | /* Atelier-Dune Blue */ 44 | .hljs-title, 45 | .hljs-section { 46 | color: #6684e1; 47 | } 48 | 49 | /* Atelier-Dune Purple */ 50 | .hljs-keyword, 51 | .hljs-selector-tag { 52 | color: #b854d4; 53 | } 54 | 55 | .hljs { 56 | display: block; 57 | overflow-x: auto; 58 | background: #20201d; 59 | color: #a6a28c; 60 | padding: 0.5em; 61 | } 62 | 63 | .hljs-emphasis { 64 | font-style: italic; 65 | } 66 | 67 | .hljs-strong { 68 | font-weight: bold; 69 | } 70 | -------------------------------------------------------------------------------- /talks/highlight/styles/atelier-dune-light.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Dune Light - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | 5 | /* Atelier-Dune Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #7d7a68; 9 | } 10 | 11 | /* Atelier-Dune Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-regexp, 18 | .hljs-link, 19 | .hljs-name, 20 | .hljs-selector-id, 21 | .hljs-selector-class { 22 | color: #d73737; 23 | } 24 | 25 | /* Atelier-Dune Orange */ 26 | .hljs-number, 27 | .hljs-meta, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params { 33 | color: #b65611; 34 | } 35 | 36 | /* Atelier-Dune Green */ 37 | .hljs-string, 38 | .hljs-symbol, 39 | .hljs-bullet { 40 | color: #60ac39; 41 | } 42 | 43 | /* Atelier-Dune Blue */ 44 | .hljs-title, 45 | .hljs-section { 46 | color: #6684e1; 47 | } 48 | 49 | /* Atelier-Dune Purple */ 50 | .hljs-keyword, 51 | .hljs-selector-tag { 52 | color: #b854d4; 53 | } 54 | 55 | .hljs { 56 | display: block; 57 | overflow-x: auto; 58 | background: #fefbec; 59 | color: #6e6b5e; 60 | padding: 0.5em; 61 | } 62 | 63 | .hljs-emphasis { 64 | font-style: italic; 65 | } 66 | 67 | .hljs-strong { 68 | font-weight: bold; 69 | } 70 | -------------------------------------------------------------------------------- /talks/highlight/styles/monokai-sublime.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-license.org/ 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | overflow-x: auto; 10 | padding: 0.5em; 11 | background: #23241f; 12 | } 13 | 14 | .hljs, 15 | .hljs-tag, 16 | .hljs-subst { 17 | color: #f8f8f2; 18 | } 19 | 20 | .hljs-strong, 21 | .hljs-emphasis { 22 | color: #a8a8a2; 23 | } 24 | 25 | .hljs-bullet, 26 | .hljs-quote, 27 | .hljs-number, 28 | .hljs-regexp, 29 | .hljs-literal, 30 | .hljs-link { 31 | color: #ae81ff; 32 | } 33 | 34 | .hljs-code, 35 | .hljs-title, 36 | .hljs-section, 37 | .hljs-selector-class { 38 | color: #a6e22e; 39 | } 40 | 41 | .hljs-strong { 42 | font-weight: bold; 43 | } 44 | 45 | .hljs-emphasis { 46 | font-style: italic; 47 | } 48 | 49 | .hljs-keyword, 50 | .hljs-selector-tag, 51 | .hljs-name, 52 | .hljs-attr { 53 | color: #f92672; 54 | } 55 | 56 | .hljs-symbol, 57 | .hljs-attribute { 58 | color: #66d9ef; 59 | } 60 | 61 | .hljs-params, 62 | .hljs-class .hljs-title { 63 | color: #f8f8f2; 64 | } 65 | 66 | .hljs-string, 67 | .hljs-type, 68 | .hljs-built_in, 69 | .hljs-builtin-name, 70 | .hljs-selector-id, 71 | .hljs-selector-attr, 72 | .hljs-selector-pseudo, 73 | .hljs-addition, 74 | .hljs-variable, 75 | .hljs-template-variable { 76 | color: #e6db74; 77 | } 78 | 79 | .hljs-comment, 80 | .hljs-deletion, 81 | .hljs-meta { 82 | color: #75715e; 83 | } 84 | -------------------------------------------------------------------------------- /talks/highlight/styles/atelier-heath-dark.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Heath Dark - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | 5 | /* Atelier-Heath Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #9e8f9e; 9 | } 10 | 11 | /* Atelier-Heath Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-regexp, 18 | .hljs-link, 19 | .hljs-name, 20 | .hljs-selector-id, 21 | .hljs-selector-class { 22 | color: #ca402b; 23 | } 24 | 25 | /* Atelier-Heath Orange */ 26 | .hljs-number, 27 | .hljs-meta, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params { 33 | color: #a65926; 34 | } 35 | 36 | /* Atelier-Heath Green */ 37 | .hljs-string, 38 | .hljs-symbol, 39 | .hljs-bullet { 40 | color: #918b3b; 41 | } 42 | 43 | /* Atelier-Heath Blue */ 44 | .hljs-title, 45 | .hljs-section { 46 | color: #516aec; 47 | } 48 | 49 | /* Atelier-Heath Purple */ 50 | .hljs-keyword, 51 | .hljs-selector-tag { 52 | color: #7b59c0; 53 | } 54 | 55 | .hljs { 56 | display: block; 57 | overflow-x: auto; 58 | background: #1b181b; 59 | color: #ab9bab; 60 | padding: 0.5em; 61 | } 62 | 63 | .hljs-emphasis { 64 | font-style: italic; 65 | } 66 | 67 | .hljs-strong { 68 | font-weight: bold; 69 | } 70 | -------------------------------------------------------------------------------- /talks/css/impressConsole.css: -------------------------------------------------------------------------------- 1 | html { 2 | height: 100% 3 | } 4 | 5 | body { 6 | padding: 0; 7 | margin: 20px; 8 | font-family: verdana, arial, sans-serif; 9 | font-size: 26px; 10 | height: 92%; 11 | } 12 | 13 | div#console { 14 | margin: 0; 15 | height: 94%; 16 | } 17 | 18 | div#views { 19 | float: left; 20 | width: 16em; 21 | margin-right: 1em; 22 | } 23 | 24 | div#blocker { 25 | width: 17em; 26 | height: 20em; 27 | position: absolute; 28 | top: 0; 29 | left: 0; 30 | display: blocker; 31 | } 32 | 33 | div#notes { 34 | overflow-x: hidden; 35 | overflow-y: auto; 36 | height: 95%; 37 | } 38 | 39 | div#notes p { 40 | margin-top: 0; 41 | } 42 | 43 | iframe#slideView { 44 | width: 16em; 45 | height: 12em; 46 | } 47 | 48 | iframe#preView { 49 | width: 8em; 50 | height: 6em; 51 | } 52 | 53 | div#controls { 54 | margin: 0; 55 | height: 6%; 56 | } 57 | 58 | div#prev { 59 | float: left; 60 | } 61 | 62 | div#next { 63 | float: right; 64 | } 65 | 66 | div#status { 67 | margin-left: 2em; 68 | margin-right: 2em; 69 | text-align: center; 70 | float: right; 71 | } 72 | 73 | div#clock { 74 | margin-left: 2em; 75 | margin-right: 2em; 76 | text-align: center; 77 | float: left; 78 | } 79 | 80 | div#timer { 81 | margin-left: 2em; 82 | margin-right: 2em; 83 | text-align: center; 84 | float: left; 85 | } 86 | 87 | -------------------------------------------------------------------------------- /talks/highlight/styles/atelier-heath-light.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Heath Light - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | 5 | /* Atelier-Heath Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #776977; 9 | } 10 | 11 | /* Atelier-Heath Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-regexp, 18 | .hljs-link, 19 | .hljs-name, 20 | .hljs-selector-id, 21 | .hljs-selector-class { 22 | color: #ca402b; 23 | } 24 | 25 | /* Atelier-Heath Orange */ 26 | .hljs-number, 27 | .hljs-meta, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params { 33 | color: #a65926; 34 | } 35 | 36 | /* Atelier-Heath Green */ 37 | .hljs-string, 38 | .hljs-symbol, 39 | .hljs-bullet { 40 | color: #918b3b; 41 | } 42 | 43 | /* Atelier-Heath Blue */ 44 | .hljs-title, 45 | .hljs-section { 46 | color: #516aec; 47 | } 48 | 49 | /* Atelier-Heath Purple */ 50 | .hljs-keyword, 51 | .hljs-selector-tag { 52 | color: #7b59c0; 53 | } 54 | 55 | .hljs { 56 | display: block; 57 | overflow-x: auto; 58 | background: #f7f3f7; 59 | color: #695d69; 60 | padding: 0.5em; 61 | } 62 | 63 | .hljs-emphasis { 64 | font-style: italic; 65 | } 66 | 67 | .hljs-strong { 68 | font-weight: bold; 69 | } 70 | -------------------------------------------------------------------------------- /src/main/scala/com/knockdata/spark/highcharts/base/Spacing.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package com.knockdata.spark.highcharts.base 19 | 20 | trait Spacing extends IModel { 21 | 22 | def spacing(top: Int, right: Int, bottom: Int, left: Int) = 23 | append("spacing", List(top, right, bottom, left)) 24 | 25 | def spacingBottom(value: Int) = 26 | append("spacingBottom", value) 27 | 28 | def spacingLeft(value: Int) = 29 | append("spacingLeft", value) 30 | 31 | def spacingRight(value: Int) = 32 | append("spacingRight", value) 33 | 34 | def spacingTop(value: Int) = 35 | append("spacingTop", value) 36 | 37 | } 38 | -------------------------------------------------------------------------------- /talks/highlight/styles/atelier-forest-dark.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Forest Dark - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | 5 | /* Atelier-Forest Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #9c9491; 9 | } 10 | 11 | /* Atelier-Forest Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-regexp, 18 | .hljs-link, 19 | .hljs-name, 20 | .hljs-selector-id, 21 | .hljs-selector-class { 22 | color: #f22c40; 23 | } 24 | 25 | /* Atelier-Forest Orange */ 26 | .hljs-number, 27 | .hljs-meta, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params { 33 | color: #df5320; 34 | } 35 | 36 | /* Atelier-Forest Green */ 37 | .hljs-string, 38 | .hljs-symbol, 39 | .hljs-bullet { 40 | color: #7b9726; 41 | } 42 | 43 | /* Atelier-Forest Blue */ 44 | .hljs-title, 45 | .hljs-section { 46 | color: #407ee7; 47 | } 48 | 49 | /* Atelier-Forest Purple */ 50 | .hljs-keyword, 51 | .hljs-selector-tag { 52 | color: #6666ea; 53 | } 54 | 55 | .hljs { 56 | display: block; 57 | overflow-x: auto; 58 | background: #1b1918; 59 | color: #a8a19f; 60 | padding: 0.5em; 61 | } 62 | 63 | .hljs-emphasis { 64 | font-style: italic; 65 | } 66 | 67 | .hljs-strong { 68 | font-weight: bold; 69 | } 70 | -------------------------------------------------------------------------------- /talks/highlight/styles/tomorrow-night-bright.css: -------------------------------------------------------------------------------- 1 | /* Tomorrow Night Bright Theme */ 2 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 3 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 4 | 5 | /* Tomorrow Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #969896; 9 | } 10 | 11 | /* Tomorrow Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-tag, 15 | .hljs-name, 16 | .hljs-selector-id, 17 | .hljs-selector-class, 18 | .hljs-regexp, 19 | .hljs-deletion { 20 | color: #d54e53; 21 | } 22 | 23 | /* Tomorrow Orange */ 24 | .hljs-number, 25 | .hljs-built_in, 26 | .hljs-builtin-name, 27 | .hljs-literal, 28 | .hljs-type, 29 | .hljs-params, 30 | .hljs-meta, 31 | .hljs-link { 32 | color: #e78c45; 33 | } 34 | 35 | /* Tomorrow Yellow */ 36 | .hljs-attribute { 37 | color: #e7c547; 38 | } 39 | 40 | /* Tomorrow Green */ 41 | .hljs-string, 42 | .hljs-symbol, 43 | .hljs-bullet, 44 | .hljs-addition { 45 | color: #b9ca4a; 46 | } 47 | 48 | /* Tomorrow Blue */ 49 | .hljs-title, 50 | .hljs-section { 51 | color: #7aa6da; 52 | } 53 | 54 | /* Tomorrow Purple */ 55 | .hljs-keyword, 56 | .hljs-selector-tag { 57 | color: #c397d8; 58 | } 59 | 60 | .hljs { 61 | display: block; 62 | overflow-x: auto; 63 | background: black; 64 | color: #eaeaea; 65 | padding: 0.5em; 66 | } 67 | 68 | .hljs-emphasis { 69 | font-style: italic; 70 | } 71 | 72 | .hljs-strong { 73 | font-weight: bold; 74 | } 75 | -------------------------------------------------------------------------------- /talks/highlight/styles/atelier-forest-light.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Forest Light - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | 5 | /* Atelier-Forest Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #766e6b; 9 | } 10 | 11 | /* Atelier-Forest Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-regexp, 18 | .hljs-link, 19 | .hljs-name, 20 | .hljs-selector-id, 21 | .hljs-selector-class { 22 | color: #f22c40; 23 | } 24 | 25 | /* Atelier-Forest Orange */ 26 | .hljs-number, 27 | .hljs-meta, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params { 33 | color: #df5320; 34 | } 35 | 36 | /* Atelier-Forest Green */ 37 | .hljs-string, 38 | .hljs-symbol, 39 | .hljs-bullet { 40 | color: #7b9726; 41 | } 42 | 43 | /* Atelier-Forest Blue */ 44 | .hljs-title, 45 | .hljs-section { 46 | color: #407ee7; 47 | } 48 | 49 | /* Atelier-Forest Purple */ 50 | .hljs-keyword, 51 | .hljs-selector-tag { 52 | color: #6666ea; 53 | } 54 | 55 | .hljs { 56 | display: block; 57 | overflow-x: auto; 58 | background: #f1efee; 59 | color: #68615e; 60 | padding: 0.5em; 61 | } 62 | 63 | .hljs-emphasis { 64 | font-style: italic; 65 | } 66 | 67 | .hljs-strong { 68 | font-weight: bold; 69 | } 70 | -------------------------------------------------------------------------------- /talks/highlight/styles/tomorrow-night-eighties.css: -------------------------------------------------------------------------------- 1 | /* Tomorrow Night Eighties Theme */ 2 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 3 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 4 | 5 | /* Tomorrow Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #999999; 9 | } 10 | 11 | /* Tomorrow Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-tag, 15 | .hljs-name, 16 | .hljs-selector-id, 17 | .hljs-selector-class, 18 | .hljs-regexp, 19 | .hljs-deletion { 20 | color: #f2777a; 21 | } 22 | 23 | /* Tomorrow Orange */ 24 | .hljs-number, 25 | .hljs-built_in, 26 | .hljs-builtin-name, 27 | .hljs-literal, 28 | .hljs-type, 29 | .hljs-params, 30 | .hljs-meta, 31 | .hljs-link { 32 | color: #f99157; 33 | } 34 | 35 | /* Tomorrow Yellow */ 36 | .hljs-attribute { 37 | color: #ffcc66; 38 | } 39 | 40 | /* Tomorrow Green */ 41 | .hljs-string, 42 | .hljs-symbol, 43 | .hljs-bullet, 44 | .hljs-addition { 45 | color: #99cc99; 46 | } 47 | 48 | /* Tomorrow Blue */ 49 | .hljs-title, 50 | .hljs-section { 51 | color: #6699cc; 52 | } 53 | 54 | /* Tomorrow Purple */ 55 | .hljs-keyword, 56 | .hljs-selector-tag { 57 | color: #cc99cc; 58 | } 59 | 60 | .hljs { 61 | display: block; 62 | overflow-x: auto; 63 | background: #2d2d2d; 64 | color: #cccccc; 65 | padding: 0.5em; 66 | } 67 | 68 | .hljs-emphasis { 69 | font-style: italic; 70 | } 71 | 72 | .hljs-strong { 73 | font-weight: bold; 74 | } 75 | -------------------------------------------------------------------------------- /src/main/scala/com/knockdata/spark/highcharts/base/Margin.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package com.knockdata.spark.highcharts.base 19 | 20 | trait Margin extends BaseModel { 21 | 22 | def margin(top: Int, right: Int, bottom: Int, left: Int): this.type = 23 | append("margin", Seq(top, right, bottom, left)) 24 | 25 | def marginBottom(value: Int): this.type = append("marginBottom", value) 26 | 27 | def marginRight(value: Int): this.type = append("marginRight", value) 28 | 29 | def marginLeft(value: Int): this.type = append("marginLeft", value) 30 | 31 | def marginTop(value: Int): this.type = append("marginTop", value) 32 | 33 | } 34 | -------------------------------------------------------------------------------- /talks/highlight/styles/atelier-seaside-dark.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Seaside Dark - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | 5 | /* Atelier-Seaside Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #809980; 9 | } 10 | 11 | /* Atelier-Seaside Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-regexp, 18 | .hljs-link, 19 | .hljs-name, 20 | .hljs-selector-id, 21 | .hljs-selector-class { 22 | color: #e6193c; 23 | } 24 | 25 | /* Atelier-Seaside Orange */ 26 | .hljs-number, 27 | .hljs-meta, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params { 33 | color: #87711d; 34 | } 35 | 36 | /* Atelier-Seaside Green */ 37 | .hljs-string, 38 | .hljs-symbol, 39 | .hljs-bullet { 40 | color: #29a329; 41 | } 42 | 43 | /* Atelier-Seaside Blue */ 44 | .hljs-title, 45 | .hljs-section { 46 | color: #3d62f5; 47 | } 48 | 49 | /* Atelier-Seaside Purple */ 50 | .hljs-keyword, 51 | .hljs-selector-tag { 52 | color: #ad2bee; 53 | } 54 | 55 | .hljs { 56 | display: block; 57 | overflow-x: auto; 58 | background: #131513; 59 | color: #8ca68c; 60 | padding: 0.5em; 61 | } 62 | 63 | .hljs-emphasis { 64 | font-style: italic; 65 | } 66 | 67 | .hljs-strong { 68 | font-weight: bold; 69 | } 70 | -------------------------------------------------------------------------------- /talks/highlight/styles/atelier-seaside-light.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Seaside Light - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | 5 | /* Atelier-Seaside Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #687d68; 9 | } 10 | 11 | /* Atelier-Seaside Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-regexp, 18 | .hljs-link, 19 | .hljs-name, 20 | .hljs-selector-id, 21 | .hljs-selector-class { 22 | color: #e6193c; 23 | } 24 | 25 | /* Atelier-Seaside Orange */ 26 | .hljs-number, 27 | .hljs-meta, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params { 33 | color: #87711d; 34 | } 35 | 36 | /* Atelier-Seaside Green */ 37 | .hljs-string, 38 | .hljs-symbol, 39 | .hljs-bullet { 40 | color: #29a329; 41 | } 42 | 43 | /* Atelier-Seaside Blue */ 44 | .hljs-title, 45 | .hljs-section { 46 | color: #3d62f5; 47 | } 48 | 49 | /* Atelier-Seaside Purple */ 50 | .hljs-keyword, 51 | .hljs-selector-tag { 52 | color: #ad2bee; 53 | } 54 | 55 | .hljs { 56 | display: block; 57 | overflow-x: auto; 58 | background: #f4fbf4; 59 | color: #5e6e5e; 60 | padding: 0.5em; 61 | } 62 | 63 | .hljs-emphasis { 64 | font-style: italic; 65 | } 66 | 67 | .hljs-strong { 68 | font-weight: bold; 69 | } 70 | -------------------------------------------------------------------------------- /talks/highlight/styles/hopscotch.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Hopscotch 3 | * by Jan T. Sott 4 | * https://github.com/idleberg/Hopscotch 5 | * 6 | * This work is licensed under the Creative Commons CC0 1.0 Universal License 7 | */ 8 | 9 | /* Comment */ 10 | .hljs-comment, 11 | .hljs-quote { 12 | color: #989498; 13 | } 14 | 15 | /* Red */ 16 | .hljs-variable, 17 | .hljs-template-variable, 18 | .hljs-attribute, 19 | .hljs-tag, 20 | .hljs-name, 21 | .hljs-selector-id, 22 | .hljs-selector-class, 23 | .hljs-regexp, 24 | .hljs-link, 25 | .hljs-deletion { 26 | color: #dd464c; 27 | } 28 | 29 | /* Orange */ 30 | .hljs-number, 31 | .hljs-built_in, 32 | .hljs-builtin-name, 33 | .hljs-literal, 34 | .hljs-type, 35 | .hljs-params { 36 | color: #fd8b19; 37 | } 38 | 39 | /* Yellow */ 40 | .hljs-class .hljs-title { 41 | color: #fdcc59; 42 | } 43 | 44 | /* Green */ 45 | .hljs-string, 46 | .hljs-symbol, 47 | .hljs-bullet, 48 | .hljs-addition { 49 | color: #8fc13e; 50 | } 51 | 52 | /* Aqua */ 53 | .hljs-meta { 54 | color: #149b93; 55 | } 56 | 57 | /* Blue */ 58 | .hljs-function, 59 | .hljs-section, 60 | .hljs-title { 61 | color: #1290bf; 62 | } 63 | 64 | /* Purple */ 65 | .hljs-keyword, 66 | .hljs-selector-tag { 67 | color: #c85e7c; 68 | } 69 | 70 | .hljs { 71 | display: block; 72 | background: #322931; 73 | color: #b9b5b8; 74 | padding: 0.5em; 75 | } 76 | 77 | .hljs-emphasis { 78 | font-style: italic; 79 | } 80 | 81 | .hljs-strong { 82 | font-weight: bold; 83 | } 84 | -------------------------------------------------------------------------------- /talks/highlight/styles/atelier-lakeside-dark.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Lakeside Dark - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | 5 | /* Atelier-Lakeside Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #7195a8; 9 | } 10 | 11 | /* Atelier-Lakeside Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-regexp, 18 | .hljs-link, 19 | .hljs-name, 20 | .hljs-selector-id, 21 | .hljs-selector-class { 22 | color: #d22d72; 23 | } 24 | 25 | /* Atelier-Lakeside Orange */ 26 | .hljs-number, 27 | .hljs-meta, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params { 33 | color: #935c25; 34 | } 35 | 36 | /* Atelier-Lakeside Green */ 37 | .hljs-string, 38 | .hljs-symbol, 39 | .hljs-bullet { 40 | color: #568c3b; 41 | } 42 | 43 | /* Atelier-Lakeside Blue */ 44 | .hljs-title, 45 | .hljs-section { 46 | color: #257fad; 47 | } 48 | 49 | /* Atelier-Lakeside Purple */ 50 | .hljs-keyword, 51 | .hljs-selector-tag { 52 | color: #6b6bb8; 53 | } 54 | 55 | .hljs { 56 | display: block; 57 | overflow-x: auto; 58 | background: #161b1d; 59 | color: #7ea2b4; 60 | padding: 0.5em; 61 | } 62 | 63 | .hljs-emphasis { 64 | font-style: italic; 65 | } 66 | 67 | .hljs-strong { 68 | font-weight: bold; 69 | } 70 | -------------------------------------------------------------------------------- /talks/highlight/styles/atelier-lakeside-light.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Lakeside Light - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | 5 | /* Atelier-Lakeside Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #5a7b8c; 9 | } 10 | 11 | /* Atelier-Lakeside Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-regexp, 18 | .hljs-link, 19 | .hljs-name, 20 | .hljs-selector-id, 21 | .hljs-selector-class { 22 | color: #d22d72; 23 | } 24 | 25 | /* Atelier-Lakeside Orange */ 26 | .hljs-number, 27 | .hljs-meta, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params { 33 | color: #935c25; 34 | } 35 | 36 | /* Atelier-Lakeside Green */ 37 | .hljs-string, 38 | .hljs-symbol, 39 | .hljs-bullet { 40 | color: #568c3b; 41 | } 42 | 43 | /* Atelier-Lakeside Blue */ 44 | .hljs-title, 45 | .hljs-section { 46 | color: #257fad; 47 | } 48 | 49 | /* Atelier-Lakeside Purple */ 50 | .hljs-keyword, 51 | .hljs-selector-tag { 52 | color: #6b6bb8; 53 | } 54 | 55 | .hljs { 56 | display: block; 57 | overflow-x: auto; 58 | background: #ebf8ff; 59 | color: #516d7b; 60 | padding: 0.5em; 61 | } 62 | 63 | .hljs-emphasis { 64 | font-style: italic; 65 | } 66 | 67 | .hljs-strong { 68 | font-weight: bold; 69 | } 70 | -------------------------------------------------------------------------------- /talks/title.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 |
23 |

Spark Visualization

24 |
25 |
26 | 41 | 42 | -------------------------------------------------------------------------------- /talks/highlight/styles/arduino-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Arduino® Light Theme - Stefania Mellai 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | overflow-x: auto; 10 | padding: 0.5em; 11 | background: #FFFFFF; 12 | } 13 | 14 | .hljs, 15 | .hljs-subst { 16 | color: #434f54; 17 | } 18 | 19 | .hljs-keyword, 20 | .hljs-attribute, 21 | .hljs-selector-tag, 22 | .hljs-doctag, 23 | .hljs-name { 24 | color: #00979D; 25 | } 26 | 27 | .hljs-built_in, 28 | .hljs-literal, 29 | .hljs-bullet, 30 | .hljs-code, 31 | .hljs-addition { 32 | color: #D35400; 33 | } 34 | 35 | .hljs-regexp, 36 | .hljs-symbol, 37 | .hljs-variable, 38 | .hljs-template-variable, 39 | .hljs-link, 40 | .hljs-selector-attr, 41 | .hljs-selector-pseudo { 42 | color: #00979D; 43 | } 44 | 45 | .hljs-type, 46 | .hljs-string, 47 | .hljs-selector-id, 48 | .hljs-selector-class, 49 | .hljs-quote, 50 | .hljs-template-tag, 51 | .hljs-deletion { 52 | color: #005C5F; 53 | } 54 | 55 | .hljs-title, 56 | .hljs-section { 57 | color: #880000; 58 | font-weight: bold; 59 | } 60 | 61 | .hljs-comment { 62 | color: rgba(149,165,166,.8); 63 | } 64 | 65 | .hljs-meta-keyword { 66 | color: #728E00; 67 | } 68 | 69 | .hljs-meta { 70 | color: #728E00; 71 | color: #434f54; 72 | } 73 | 74 | .hljs-emphasis { 75 | font-style: italic; 76 | } 77 | 78 | .hljs-strong { 79 | font-weight: bold; 80 | } 81 | 82 | .hljs-function { 83 | color: #728E00; 84 | } 85 | 86 | .hljs-number { 87 | color: #8A7B52; 88 | } 89 | -------------------------------------------------------------------------------- /talks/highlight/styles/googlecode.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Google Code style (c) Aahan Krish 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | overflow-x: auto; 10 | padding: 0.5em; 11 | background: white; 12 | color: black; 13 | } 14 | 15 | .hljs-comment, 16 | .hljs-quote { 17 | color: #800; 18 | } 19 | 20 | .hljs-keyword, 21 | .hljs-selector-tag, 22 | .hljs-section, 23 | .hljs-title, 24 | .hljs-name { 25 | color: #008; 26 | } 27 | 28 | .hljs-variable, 29 | .hljs-template-variable { 30 | color: #660; 31 | } 32 | 33 | .hljs-string, 34 | .hljs-selector-attr, 35 | .hljs-selector-pseudo, 36 | .hljs-regexp { 37 | color: #080; 38 | } 39 | 40 | .hljs-literal, 41 | .hljs-symbol, 42 | .hljs-bullet, 43 | .hljs-meta, 44 | .hljs-number, 45 | .hljs-link { 46 | color: #066; 47 | } 48 | 49 | .hljs-title, 50 | .hljs-doctag, 51 | .hljs-type, 52 | .hljs-attr, 53 | .hljs-built_in, 54 | .hljs-builtin-name, 55 | .hljs-params { 56 | color: #606; 57 | } 58 | 59 | .hljs-attribute, 60 | .hljs-subst { 61 | color: #000; 62 | } 63 | 64 | .hljs-formula { 65 | background-color: #eee; 66 | font-style: italic; 67 | } 68 | 69 | .hljs-selector-id, 70 | .hljs-selector-class { 71 | color: #9B703F 72 | } 73 | 74 | .hljs-addition { 75 | background-color: #baeeba; 76 | } 77 | 78 | .hljs-deletion { 79 | background-color: #ffc8bd; 80 | } 81 | 82 | .hljs-doctag, 83 | .hljs-strong { 84 | font-weight: bold; 85 | } 86 | 87 | .hljs-emphasis { 88 | font-style: italic; 89 | } 90 | -------------------------------------------------------------------------------- /talks/highlight/styles/xt256.css: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | xt256.css 4 | 5 | Contact: initbar [at] protonmail [dot] ch 6 | : github.com/initbar 7 | */ 8 | 9 | .hljs { 10 | display: block; 11 | overflow-x: auto; 12 | color: #eaeaea; 13 | background: #000; 14 | padding: 0.5; 15 | } 16 | 17 | .hljs-subst { 18 | color: #eaeaea; 19 | } 20 | 21 | .hljs-emphasis { 22 | font-style: italic; 23 | } 24 | 25 | .hljs-strong { 26 | font-weight: bold; 27 | } 28 | 29 | .hljs-builtin-name, 30 | .hljs-type { 31 | color: #eaeaea; 32 | } 33 | 34 | .hljs-params { 35 | color: #da0000; 36 | } 37 | 38 | .hljs-literal, 39 | .hljs-number, 40 | .hljs-name { 41 | color: #ff0000; 42 | font-weight: bolder; 43 | } 44 | 45 | .hljs-comment { 46 | color: #969896; 47 | } 48 | 49 | .hljs-selector-id, 50 | .hljs-quote { 51 | color: #00ffff; 52 | } 53 | 54 | .hljs-template-variable, 55 | .hljs-variable, 56 | .hljs-title { 57 | color: #00ffff; 58 | font-weight: bold; 59 | } 60 | 61 | .hljs-selector-class, 62 | .hljs-keyword, 63 | .hljs-symbol { 64 | color: #fff000; 65 | } 66 | 67 | .hljs-string, 68 | .hljs-bullet { 69 | color: #00ff00; 70 | } 71 | 72 | .hljs-tag, 73 | .hljs-section { 74 | color: #000fff; 75 | } 76 | 77 | .hljs-selector-tag { 78 | color: #000fff; 79 | font-weight: bold; 80 | } 81 | 82 | .hljs-attribute, 83 | .hljs-built_in, 84 | .hljs-regexp, 85 | .hljs-link { 86 | color: #ff00ff; 87 | } 88 | 89 | .hljs-meta { 90 | color: #fff; 91 | font-weight: bolder; 92 | } 93 | -------------------------------------------------------------------------------- /talks/highlight/styles/atelier-sulphurpool-dark.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Sulphurpool Dark - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/sulphurpool) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | 5 | /* Atelier-Sulphurpool Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #898ea4; 9 | } 10 | 11 | /* Atelier-Sulphurpool Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-regexp, 18 | .hljs-link, 19 | .hljs-name, 20 | .hljs-selector-id, 21 | .hljs-selector-class { 22 | color: #c94922; 23 | } 24 | 25 | /* Atelier-Sulphurpool Orange */ 26 | .hljs-number, 27 | .hljs-meta, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params { 33 | color: #c76b29; 34 | } 35 | 36 | /* Atelier-Sulphurpool Green */ 37 | .hljs-string, 38 | .hljs-symbol, 39 | .hljs-bullet { 40 | color: #ac9739; 41 | } 42 | 43 | /* Atelier-Sulphurpool Blue */ 44 | .hljs-title, 45 | .hljs-section { 46 | color: #3d8fd1; 47 | } 48 | 49 | /* Atelier-Sulphurpool Purple */ 50 | .hljs-keyword, 51 | .hljs-selector-tag { 52 | color: #6679cc; 53 | } 54 | 55 | .hljs { 56 | display: block; 57 | overflow-x: auto; 58 | background: #202746; 59 | color: #979db4; 60 | padding: 0.5em; 61 | } 62 | 63 | .hljs-emphasis { 64 | font-style: italic; 65 | } 66 | 67 | .hljs-strong { 68 | font-weight: bold; 69 | } 70 | -------------------------------------------------------------------------------- /talks/highlight/styles/atelier-sulphurpool-light.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Sulphurpool Light - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/sulphurpool) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | 5 | /* Atelier-Sulphurpool Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #6b7394; 9 | } 10 | 11 | /* Atelier-Sulphurpool Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-regexp, 18 | .hljs-link, 19 | .hljs-name, 20 | .hljs-selector-id, 21 | .hljs-selector-class { 22 | color: #c94922; 23 | } 24 | 25 | /* Atelier-Sulphurpool Orange */ 26 | .hljs-number, 27 | .hljs-meta, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params { 33 | color: #c76b29; 34 | } 35 | 36 | /* Atelier-Sulphurpool Green */ 37 | .hljs-string, 38 | .hljs-symbol, 39 | .hljs-bullet { 40 | color: #ac9739; 41 | } 42 | 43 | /* Atelier-Sulphurpool Blue */ 44 | .hljs-title, 45 | .hljs-section { 46 | color: #3d8fd1; 47 | } 48 | 49 | /* Atelier-Sulphurpool Purple */ 50 | .hljs-keyword, 51 | .hljs-selector-tag { 52 | color: #6679cc; 53 | } 54 | 55 | .hljs { 56 | display: block; 57 | overflow-x: auto; 58 | background: #f5f7ff; 59 | color: #5e6687; 60 | padding: 0.5em; 61 | } 62 | 63 | .hljs-emphasis { 64 | font-style: italic; 65 | } 66 | 67 | .hljs-strong { 68 | font-weight: bold; 69 | } 70 | -------------------------------------------------------------------------------- /talks/highlight/styles/obsidian.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Obsidian style 3 | * ported by Alexander Marenin (http://github.com/ioncreature) 4 | */ 5 | 6 | .hljs { 7 | display: block; 8 | overflow-x: auto; 9 | padding: 0.5em; 10 | background: #282b2e; 11 | } 12 | 13 | .hljs-keyword, 14 | .hljs-selector-tag, 15 | .hljs-literal, 16 | .hljs-selector-id { 17 | color: #93c763; 18 | } 19 | 20 | .hljs-number { 21 | color: #ffcd22; 22 | } 23 | 24 | .hljs { 25 | color: #e0e2e4; 26 | } 27 | 28 | .hljs-attribute { 29 | color: #668bb0; 30 | } 31 | 32 | .hljs-code, 33 | .hljs-class .hljs-title, 34 | .hljs-section { 35 | color: white; 36 | } 37 | 38 | .hljs-regexp, 39 | .hljs-link { 40 | color: #d39745; 41 | } 42 | 43 | .hljs-meta { 44 | color: #557182; 45 | } 46 | 47 | .hljs-tag, 48 | .hljs-name, 49 | .hljs-bullet, 50 | .hljs-subst, 51 | .hljs-emphasis, 52 | .hljs-type, 53 | .hljs-built_in, 54 | .hljs-selector-attr, 55 | .hljs-selector-pseudo, 56 | .hljs-addition, 57 | .hljs-variable, 58 | .hljs-template-tag, 59 | .hljs-template-variable { 60 | color: #8cbbad; 61 | } 62 | 63 | .hljs-string, 64 | .hljs-symbol { 65 | color: #ec7600; 66 | } 67 | 68 | .hljs-comment, 69 | .hljs-quote, 70 | .hljs-deletion { 71 | color: #818e96; 72 | } 73 | 74 | .hljs-selector-class { 75 | color: #A082BD 76 | } 77 | 78 | .hljs-keyword, 79 | .hljs-selector-tag, 80 | .hljs-literal, 81 | .hljs-doctag, 82 | .hljs-title, 83 | .hljs-section, 84 | .hljs-type, 85 | .hljs-name, 86 | .hljs-strong { 87 | font-weight: bold; 88 | } 89 | -------------------------------------------------------------------------------- /talks/highlight/styles/foundation.css: -------------------------------------------------------------------------------- 1 | /* 2 | Description: Foundation 4 docs style for highlight.js 3 | Author: Dan Allen 4 | Website: http://foundation.zurb.com/docs/ 5 | Version: 1.0 6 | Date: 2013-04-02 7 | */ 8 | 9 | .hljs { 10 | display: block; 11 | overflow-x: auto; 12 | padding: 0.5em; 13 | background: #eee; color: black; 14 | } 15 | 16 | .hljs-link, 17 | .hljs-emphasis, 18 | .hljs-attribute, 19 | .hljs-addition { 20 | color: #070; 21 | } 22 | 23 | .hljs-emphasis { 24 | font-style: italic; 25 | } 26 | 27 | .hljs-strong, 28 | .hljs-string, 29 | .hljs-deletion { 30 | color: #d14; 31 | } 32 | 33 | .hljs-strong { 34 | font-weight: bold; 35 | } 36 | 37 | .hljs-quote, 38 | .hljs-comment { 39 | color: #998; 40 | font-style: italic; 41 | } 42 | 43 | .hljs-section, 44 | .hljs-title { 45 | color: #900; 46 | } 47 | 48 | .hljs-class .hljs-title, 49 | .hljs-type { 50 | color: #458; 51 | } 52 | 53 | .hljs-variable, 54 | .hljs-template-variable { 55 | color: #336699; 56 | } 57 | 58 | .hljs-bullet { 59 | color: #997700; 60 | } 61 | 62 | .hljs-meta { 63 | color: #3344bb; 64 | } 65 | 66 | .hljs-code, 67 | .hljs-number, 68 | .hljs-literal, 69 | .hljs-keyword, 70 | .hljs-selector-tag { 71 | color: #099; 72 | } 73 | 74 | .hljs-regexp { 75 | background-color: #fff0ff; 76 | color: #880088; 77 | } 78 | 79 | .hljs-symbol { 80 | color: #990073; 81 | } 82 | 83 | .hljs-tag, 84 | .hljs-name, 85 | .hljs-selector-id, 86 | .hljs-selector-class { 87 | color: #007700; 88 | } 89 | -------------------------------------------------------------------------------- /talks/highlight/styles/tomorrow-night.css: -------------------------------------------------------------------------------- 1 | /* Tomorrow Night Theme */ 2 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 3 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 4 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 5 | 6 | /* Tomorrow Comment */ 7 | .hljs-comment, 8 | .hljs-quote { 9 | color: #969896; 10 | } 11 | 12 | /* Tomorrow Red */ 13 | .hljs-variable, 14 | .hljs-template-variable, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-selector-id, 18 | .hljs-selector-class, 19 | .hljs-regexp, 20 | .hljs-deletion { 21 | color: #cc6666; 22 | } 23 | 24 | /* Tomorrow Orange */ 25 | .hljs-number, 26 | .hljs-built_in, 27 | .hljs-builtin-name, 28 | .hljs-literal, 29 | .hljs-type, 30 | .hljs-params, 31 | .hljs-meta, 32 | .hljs-link { 33 | color: #de935f; 34 | } 35 | 36 | /* Tomorrow Yellow */ 37 | .hljs-attribute { 38 | color: #f0c674; 39 | } 40 | 41 | /* Tomorrow Green */ 42 | .hljs-string, 43 | .hljs-symbol, 44 | .hljs-bullet, 45 | .hljs-addition { 46 | color: #b5bd68; 47 | } 48 | 49 | /* Tomorrow Blue */ 50 | .hljs-title, 51 | .hljs-section { 52 | color: #81a2be; 53 | } 54 | 55 | /* Tomorrow Purple */ 56 | .hljs-keyword, 57 | .hljs-selector-tag { 58 | color: #b294bb; 59 | } 60 | 61 | .hljs { 62 | display: block; 63 | overflow-x: auto; 64 | background: #1d1f21; 65 | color: #c5c8c6; 66 | padding: 0.5em; 67 | } 68 | 69 | .hljs-emphasis { 70 | font-style: italic; 71 | } 72 | 73 | .hljs-strong { 74 | font-weight: bold; 75 | } 76 | -------------------------------------------------------------------------------- /talks/highlight/styles/xcode.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | XCode style (c) Angel Garcia 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | overflow-x: auto; 10 | padding: 0.5em; 11 | background: #fff; 12 | color: black; 13 | } 14 | 15 | .hljs-comment, 16 | .hljs-quote { 17 | color: #006a00; 18 | } 19 | 20 | .hljs-keyword, 21 | .hljs-selector-tag, 22 | .hljs-literal { 23 | color: #aa0d91; 24 | } 25 | 26 | .hljs-name { 27 | color: #008; 28 | } 29 | 30 | .hljs-variable, 31 | .hljs-template-variable { 32 | color: #660; 33 | } 34 | 35 | .hljs-string { 36 | color: #c41a16; 37 | } 38 | 39 | .hljs-regexp, 40 | .hljs-link { 41 | color: #080; 42 | } 43 | 44 | .hljs-title, 45 | .hljs-tag, 46 | .hljs-symbol, 47 | .hljs-bullet, 48 | .hljs-number, 49 | .hljs-meta { 50 | color: #1c00cf; 51 | } 52 | 53 | .hljs-section, 54 | .hljs-class .hljs-title, 55 | .hljs-type, 56 | .hljs-attr, 57 | .hljs-built_in, 58 | .hljs-builtin-name, 59 | .hljs-params { 60 | color: #5c2699; 61 | } 62 | 63 | .hljs-attribute, 64 | .hljs-subst { 65 | color: #000; 66 | } 67 | 68 | .hljs-formula { 69 | background-color: #eee; 70 | font-style: italic; 71 | } 72 | 73 | .hljs-addition { 74 | background-color: #baeeba; 75 | } 76 | 77 | .hljs-deletion { 78 | background-color: #ffc8bd; 79 | } 80 | 81 | .hljs-selector-id, 82 | .hljs-selector-class { 83 | color: #9b703f; 84 | } 85 | 86 | .hljs-doctag, 87 | .hljs-strong { 88 | font-weight: bold; 89 | } 90 | 91 | .hljs-emphasis { 92 | font-style: italic; 93 | } 94 | -------------------------------------------------------------------------------- /src/test/scala/com/knockdata/spark/utils/TestCipherUtil.scala: -------------------------------------------------------------------------------- 1 | package com.knockdata.spark.utils 2 | 3 | import org.junit.Test 4 | import org.junit.Assert.assertEquals 5 | 6 | class TestCipherUtil{ 7 | @Test 8 | def testEncrypt(): Unit = { 9 | val encrypted = CipherUtil.encrypt("rockie", "password") 10 | println(encrypted) 11 | 12 | assertEquals("encrypted a sample password shall be ", "v/nMLHnQCeqDobO01j3syw==", encrypted) 13 | } 14 | 15 | @Test 16 | def testDecrypt(): Unit = { 17 | val decrypted = CipherUtil.decrypt("rockie", "v/nMLHnQCeqDobO01j3syw==") 18 | println(decrypted) 19 | 20 | assertEquals("encrypted a sample password shall be ", "password", decrypted) 21 | } 22 | 23 | @Test 24 | def testEncrypt2(): Unit = { 25 | val encrypted = CipherUtil.encrypt("yang", "password") 26 | println(encrypted) 27 | 28 | assertEquals("encrypted a sample password shall be ", "VUhy/KQ2nf7DO0NBBRWW8g==", encrypted) 29 | } 30 | 31 | @Test 32 | def testDecrypt2(): Unit = { 33 | val decrypted = CipherUtil.decrypt("yang", "VUhy/KQ2nf7DO0NBBRWW8g==") 34 | println(decrypted) 35 | 36 | assertEquals("encrypted a sample password shall be ", "password", decrypted) 37 | } 38 | 39 | @Test 40 | def testSymmetric(): Unit = { 41 | val encrypted = CipherUtil.encrypt("yang", "rockie") 42 | println(encrypted) 43 | 44 | val decrypted = CipherUtil.decrypt("yang", encrypted) 45 | assertEquals("encrypted a sample password shall be ", "rockie", decrypted) 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /talks/highlight/styles/pojoaque.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Pojoaque Style by Jason Tate 4 | http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlighter.html 5 | Based on Solarized Style from http://ethanschoonover.com/solarized 6 | 7 | */ 8 | 9 | .hljs { 10 | display: block; 11 | overflow-x: auto; 12 | padding: 0.5em; 13 | color: #dccf8f; 14 | background: url(./pojoaque.jpg) repeat scroll left top #181914; 15 | } 16 | 17 | .hljs-comment, 18 | .hljs-quote { 19 | color: #586e75; 20 | font-style: italic; 21 | } 22 | 23 | .hljs-keyword, 24 | .hljs-selector-tag, 25 | .hljs-literal, 26 | .hljs-addition { 27 | color: #b64926; 28 | } 29 | 30 | .hljs-number, 31 | .hljs-string, 32 | .hljs-doctag, 33 | .hljs-regexp { 34 | color: #468966; 35 | } 36 | 37 | .hljs-title, 38 | .hljs-section, 39 | .hljs-built_in, 40 | .hljs-name { 41 | color: #ffb03b; 42 | } 43 | 44 | .hljs-variable, 45 | .hljs-template-variable, 46 | .hljs-class .hljs-title, 47 | .hljs-type, 48 | .hljs-tag { 49 | color: #b58900; 50 | } 51 | 52 | .hljs-attribute { 53 | color: #b89859; 54 | } 55 | 56 | .hljs-symbol, 57 | .hljs-bullet, 58 | .hljs-link, 59 | .hljs-subst, 60 | .hljs-meta { 61 | color: #cb4b16; 62 | } 63 | 64 | .hljs-deletion { 65 | color: #dc322f; 66 | } 67 | 68 | .hljs-selector-id, 69 | .hljs-selector-class { 70 | color: #d3a60c; 71 | } 72 | 73 | .hljs-formula { 74 | background: #073642; 75 | } 76 | 77 | .hljs-emphasis { 78 | font-style: italic; 79 | } 80 | 81 | .hljs-strong { 82 | font-weight: bold; 83 | } 84 | -------------------------------------------------------------------------------- /talks/highlight/styles/tomorrow-night-blue.css: -------------------------------------------------------------------------------- 1 | /* Tomorrow Night Blue Theme */ 2 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 3 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 4 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 5 | 6 | /* Tomorrow Comment */ 7 | .hljs-comment, 8 | .hljs-quote { 9 | color: #7285b7; 10 | } 11 | 12 | /* Tomorrow Red */ 13 | .hljs-variable, 14 | .hljs-template-variable, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-selector-id, 18 | .hljs-selector-class, 19 | .hljs-regexp, 20 | .hljs-deletion { 21 | color: #ff9da4; 22 | } 23 | 24 | /* Tomorrow Orange */ 25 | .hljs-number, 26 | .hljs-built_in, 27 | .hljs-builtin-name, 28 | .hljs-literal, 29 | .hljs-type, 30 | .hljs-params, 31 | .hljs-meta, 32 | .hljs-link { 33 | color: #ffc58f; 34 | } 35 | 36 | /* Tomorrow Yellow */ 37 | .hljs-attribute { 38 | color: #ffeead; 39 | } 40 | 41 | /* Tomorrow Green */ 42 | .hljs-string, 43 | .hljs-symbol, 44 | .hljs-bullet, 45 | .hljs-addition { 46 | color: #d1f1a9; 47 | } 48 | 49 | /* Tomorrow Blue */ 50 | .hljs-title, 51 | .hljs-section { 52 | color: #bbdaff; 53 | } 54 | 55 | /* Tomorrow Purple */ 56 | .hljs-keyword, 57 | .hljs-selector-tag { 58 | color: #ebbbff; 59 | } 60 | 61 | .hljs { 62 | display: block; 63 | overflow-x: auto; 64 | background: #002451; 65 | color: white; 66 | padding: 0.5em; 67 | } 68 | 69 | .hljs-emphasis { 70 | font-style: italic; 71 | } 72 | 73 | .hljs-strong { 74 | font-weight: bold; 75 | } 76 | -------------------------------------------------------------------------------- /talks/thanks.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 |
24 |

Thanks

25 |
26 |
27 | 41 | 42 | -------------------------------------------------------------------------------- /talks/highlight/styles/solarized-dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | overflow-x: auto; 10 | padding: 0.5em; 11 | background: #002b36; 12 | color: #839496; 13 | } 14 | 15 | .hljs-comment, 16 | .hljs-quote { 17 | color: #586e75; 18 | } 19 | 20 | /* Solarized Green */ 21 | .hljs-keyword, 22 | .hljs-selector-tag, 23 | .hljs-addition { 24 | color: #859900; 25 | } 26 | 27 | /* Solarized Cyan */ 28 | .hljs-number, 29 | .hljs-string, 30 | .hljs-meta .hljs-meta-string, 31 | .hljs-literal, 32 | .hljs-doctag, 33 | .hljs-regexp { 34 | color: #2aa198; 35 | } 36 | 37 | /* Solarized Blue */ 38 | .hljs-title, 39 | .hljs-section, 40 | .hljs-name, 41 | .hljs-selector-id, 42 | .hljs-selector-class { 43 | color: #268bd2; 44 | } 45 | 46 | /* Solarized Yellow */ 47 | .hljs-attribute, 48 | .hljs-attr, 49 | .hljs-variable, 50 | .hljs-template-variable, 51 | .hljs-class .hljs-title, 52 | .hljs-type { 53 | color: #b58900; 54 | } 55 | 56 | /* Solarized Orange */ 57 | .hljs-symbol, 58 | .hljs-bullet, 59 | .hljs-subst, 60 | .hljs-meta, 61 | .hljs-meta .hljs-keyword, 62 | .hljs-selector-attr, 63 | .hljs-selector-pseudo, 64 | .hljs-link { 65 | color: #cb4b16; 66 | } 67 | 68 | /* Solarized Red */ 69 | .hljs-built_in, 70 | .hljs-deletion { 71 | color: #dc322f; 72 | } 73 | 74 | .hljs-formula { 75 | background: #073642; 76 | } 77 | 78 | .hljs-emphasis { 79 | font-style: italic; 80 | } 81 | 82 | .hljs-strong { 83 | font-weight: bold; 84 | } 85 | -------------------------------------------------------------------------------- /talks/highlight/styles/solarized-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | overflow-x: auto; 10 | padding: 0.5em; 11 | background: #fdf6e3; 12 | color: #657b83; 13 | } 14 | 15 | .hljs-comment, 16 | .hljs-quote { 17 | color: #93a1a1; 18 | } 19 | 20 | /* Solarized Green */ 21 | .hljs-keyword, 22 | .hljs-selector-tag, 23 | .hljs-addition { 24 | color: #859900; 25 | } 26 | 27 | /* Solarized Cyan */ 28 | .hljs-number, 29 | .hljs-string, 30 | .hljs-meta .hljs-meta-string, 31 | .hljs-literal, 32 | .hljs-doctag, 33 | .hljs-regexp { 34 | color: #2aa198; 35 | } 36 | 37 | /* Solarized Blue */ 38 | .hljs-title, 39 | .hljs-section, 40 | .hljs-name, 41 | .hljs-selector-id, 42 | .hljs-selector-class { 43 | color: #268bd2; 44 | } 45 | 46 | /* Solarized Yellow */ 47 | .hljs-attribute, 48 | .hljs-attr, 49 | .hljs-variable, 50 | .hljs-template-variable, 51 | .hljs-class .hljs-title, 52 | .hljs-type { 53 | color: #b58900; 54 | } 55 | 56 | /* Solarized Orange */ 57 | .hljs-symbol, 58 | .hljs-bullet, 59 | .hljs-subst, 60 | .hljs-meta, 61 | .hljs-meta .hljs-keyword, 62 | .hljs-selector-attr, 63 | .hljs-selector-pseudo, 64 | .hljs-link { 65 | color: #cb4b16; 66 | } 67 | 68 | /* Solarized Red */ 69 | .hljs-built_in, 70 | .hljs-deletion { 71 | color: #dc322f; 72 | } 73 | 74 | .hljs-formula { 75 | background: #eee8d5; 76 | } 77 | 78 | .hljs-emphasis { 79 | font-style: italic; 80 | } 81 | 82 | .hljs-strong { 83 | font-weight: bold; 84 | } 85 | -------------------------------------------------------------------------------- /src/test/scala/com/knockdata/spark/highcharts/demo/MockSinkProvider.scala: -------------------------------------------------------------------------------- 1 | //package com.knockdata.spark.highcharts.demo 2 | // 3 | //import com.knockdata.spark.highcharts.model.Highcharts 4 | //import org.apache.spark.sql.execution.streaming.Sink 5 | //import org.apache.spark.sql.{SQLContext, _} 6 | //import org.apache.spark.sql.sources.StreamSinkProvider 7 | //import org.apache.spark.sql.streaming.OutputMode 8 | // 9 | //class MockSinkProvider extends StreamSinkProvider { 10 | // def createSink( 11 | // sqlContext: SQLContext, 12 | // parameters: Map[String, String], 13 | // partitionColumns: Seq[String], 14 | // outputMode: OutputMode): Sink = { 15 | // new Sink { 16 | // var resultFrame: DataFrame = null 17 | // 18 | // override def addBatch(batchId: Long, data: DataFrame): Unit = { 19 | // val mockOutputMode = outputMode.asInstanceOf[MockOutputMode] 20 | // val seriesHolder = mockOutputMode.seriesHolder 21 | // 22 | // if (resultFrame == null) { 23 | // resultFrame = data 24 | // } else { 25 | // resultFrame = resultFrame.union(data) 26 | // } 27 | // 28 | // seriesHolder.dataFrame = resultFrame 29 | // 30 | // val (normalSeriesList, drilldownSeriesList) = seriesHolder.result 31 | // val chart = new Highcharts(normalSeriesList, seriesHolder.chartId) 32 | // .drilldown(drilldownSeriesList) 33 | // 34 | // mockOutputMode.put("plotData", chart.plotData) 35 | // 36 | // } 37 | // } 38 | // } 39 | //} 40 | -------------------------------------------------------------------------------- /src/main/resources/testReport.xslt: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /docs/ChartOptions.md: -------------------------------------------------------------------------------- 1 | # Chart Option 2 | 3 | Highcharts can be fine controlled with chart options. Check [Understanding Highcharts](http://www.highcharts.com/docs/chart-concepts/understanding-highcharts) article on Highcharts web site. 4 | 5 | ### Common Options 6 | spark-highcharts using following function to specify chart options. The interface are try to follow Highcharts API as much as possible. 7 | 8 | highcharts(dataFrame) 9 | .chart(Chart("column)[.some extra configuration]) 10 | .credits(Credits("Highcharts.com")[.some extra configuration]) 11 | .exporting(new Exporting()[.some extra configuration]) 12 | .labels(new Label()[.some extra configuration]) 13 | .legend(new Legend()[.some extra configuration]) 14 | .navigation(new Navigation()[.some extra configuration]) 15 | .noData(new NoData()[.some extra configuration]) 16 | .pane(new Pane()[.some extra configuration]) 17 | .subtitle(Subtitle("subtitle)[.some extra configuration]) 18 | .title(Title("title")[.some extra configuration]) 19 | .xAxis(XAxis("x")[.some extra configuration]) 20 | .yAxis(YAxis("y")[.some extra configuration]) 21 | 22 | 23 | Companion object are provided if it is a default property, e.g. title `text` for `Title`. 24 | 25 | ### plotOptions 26 | 27 | Each charts has it's own plotOption class defined. The plotOptions classes are defined in package `com.knockdata.spark.highchart.plotOptions`. Use cooresponding plotOption class to contol the chart. 28 | 29 | 30 | ### Series and Drilldown 31 | 32 | For `Series` and `Drilldown`, check [Select Data to Plot](docs/SelectDataToPlot.md) 33 | 34 | -------------------------------------------------------------------------------- /src/main/scala/com/knockdata/spark/highcharts/model/package.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package com.knockdata.spark.highcharts 19 | 20 | import scala.language.implicitConversions 21 | 22 | package object model { 23 | implicit def normalNDrilldownSeriesListToHighcharts(allSeries: (List[Series], List[Series])): Highcharts = { 24 | val (normalSeriesList, drilldownSeriesList) = allSeries 25 | new Highcharts(normalSeriesList).drilldown(drilldownSeriesList) 26 | } 27 | 28 | implicit def normalSeriesListToHighcharts(normalSeriesList: List[Series]): Highcharts = { 29 | new Highcharts(normalSeriesList) 30 | } 31 | 32 | implicit def normalSeriesToHighcharts(normalSeries: Series): Highcharts = { 33 | new Highcharts(List(normalSeries)) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /talks/highlight/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2006, Ivan Sagalaev 2 | All rights reserved. 3 | Redistribution and use in source and binary forms, with or without 4 | modification, are permitted provided that the following conditions are met: 5 | 6 | * Redistributions of source code must retain the above copyright 7 | notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above copyright 9 | notice, this list of conditions and the following disclaimer in the 10 | documentation and/or other materials provided with the distribution. 11 | * Neither the name of highlight.js nor the names of its contributors 12 | may be used to endorse or promote products derived from this software 13 | without specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY 16 | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY 19 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 | -------------------------------------------------------------------------------- /talks/highlight/styles/docco.css: -------------------------------------------------------------------------------- 1 | /* 2 | Docco style used in http://jashkenas.github.com/docco/ converted by Simon Madine (@thingsinjars) 3 | */ 4 | 5 | .hljs { 6 | display: block; 7 | overflow-x: auto; 8 | padding: 0.5em; 9 | color: #000; 10 | background: #f8f8ff; 11 | } 12 | 13 | .hljs-comment, 14 | .hljs-quote { 15 | color: #408080; 16 | font-style: italic; 17 | } 18 | 19 | .hljs-keyword, 20 | .hljs-selector-tag, 21 | .hljs-literal, 22 | .hljs-subst { 23 | color: #954121; 24 | } 25 | 26 | .hljs-number { 27 | color: #40a070; 28 | } 29 | 30 | .hljs-string, 31 | .hljs-doctag { 32 | color: #219161; 33 | } 34 | 35 | .hljs-selector-id, 36 | .hljs-selector-class, 37 | .hljs-section, 38 | .hljs-type { 39 | color: #19469d; 40 | } 41 | 42 | .hljs-params { 43 | color: #00f; 44 | } 45 | 46 | .hljs-title { 47 | color: #458; 48 | font-weight: bold; 49 | } 50 | 51 | .hljs-tag, 52 | .hljs-name, 53 | .hljs-attribute { 54 | color: #000080; 55 | font-weight: normal; 56 | } 57 | 58 | .hljs-variable, 59 | .hljs-template-variable { 60 | color: #008080; 61 | } 62 | 63 | .hljs-regexp, 64 | .hljs-link { 65 | color: #b68; 66 | } 67 | 68 | .hljs-symbol, 69 | .hljs-bullet { 70 | color: #990073; 71 | } 72 | 73 | .hljs-built_in, 74 | .hljs-builtin-name { 75 | color: #0086b3; 76 | } 77 | 78 | .hljs-meta { 79 | color: #999; 80 | font-weight: bold; 81 | } 82 | 83 | .hljs-deletion { 84 | background: #fdd; 85 | } 86 | 87 | .hljs-addition { 88 | background: #dfd; 89 | } 90 | 91 | .hljs-emphasis { 92 | font-style: italic; 93 | } 94 | 95 | .hljs-strong { 96 | font-weight: bold; 97 | } 98 | -------------------------------------------------------------------------------- /src/main/scala/com/knockdata/spark/highcharts/model/Navigation.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package com.knockdata.spark.highcharts.model 19 | 20 | import com.knockdata.spark.highcharts.base.BaseModel 21 | 22 | class Navigation() extends BaseModel with PublicApply { 23 | override def fieldName: String = "navigation" 24 | 25 | def buttonOptions(values: (String, Any)*): this.type = { 26 | append("buttonOptions", values.toMap) 27 | } 28 | 29 | def menuItemHoverStyle(values: (String, Any)*): this.type = { 30 | append("menuItemHoverStyle", values.toMap) 31 | } 32 | 33 | def menuItemStyle(values: (String, Any)*): this.type = { 34 | append("menuItemStyle", values.toMap) 35 | } 36 | 37 | def menuStyle(values: (String, Any)*): this.type = { 38 | append("menuStyle", values.toMap) 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /docs/scaladocs/index/index-u.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Spark Highcharts POM 0.6.4_2.1 API 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
units
15 | 16 |
17 |
useHTML
18 | 19 |
20 |
utils
21 | 22 |
23 | 24 | -------------------------------------------------------------------------------- /talks/highlight/styles/idea.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Intellij Idea-like styling (c) Vasily Polovnyov 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | overflow-x: auto; 10 | padding: 0.5em; 11 | color: #000; 12 | background: #fff; 13 | } 14 | 15 | .hljs-subst, 16 | .hljs-title { 17 | font-weight: normal; 18 | color: #000; 19 | } 20 | 21 | .hljs-comment, 22 | .hljs-quote { 23 | color: #808080; 24 | font-style: italic; 25 | } 26 | 27 | .hljs-meta { 28 | color: #808000; 29 | } 30 | 31 | .hljs-tag { 32 | background: #efefef; 33 | } 34 | 35 | .hljs-section, 36 | .hljs-name, 37 | .hljs-literal, 38 | .hljs-keyword, 39 | .hljs-selector-tag, 40 | .hljs-type, 41 | .hljs-selector-id, 42 | .hljs-selector-class { 43 | font-weight: bold; 44 | color: #000080; 45 | } 46 | 47 | .hljs-attribute, 48 | .hljs-number, 49 | .hljs-regexp, 50 | .hljs-link { 51 | font-weight: bold; 52 | color: #0000ff; 53 | } 54 | 55 | .hljs-number, 56 | .hljs-regexp, 57 | .hljs-link { 58 | font-weight: normal; 59 | } 60 | 61 | .hljs-string { 62 | color: #008000; 63 | font-weight: bold; 64 | } 65 | 66 | .hljs-symbol, 67 | .hljs-bullet, 68 | .hljs-formula { 69 | color: #000; 70 | background: #d0eded; 71 | font-style: italic; 72 | } 73 | 74 | .hljs-doctag { 75 | text-decoration: underline; 76 | } 77 | 78 | .hljs-variable, 79 | .hljs-template-variable { 80 | color: #660e7a; 81 | } 82 | 83 | .hljs-addition { 84 | background: #baeeba; 85 | } 86 | 87 | .hljs-deletion { 88 | background: #ffc8bd; 89 | } 90 | 91 | .hljs-emphasis { 92 | font-style: italic; 93 | } 94 | 95 | .hljs-strong { 96 | font-weight: bold; 97 | } 98 | -------------------------------------------------------------------------------- /src/main/scala/com/knockdata/spark/highcharts/model/Credits.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package com.knockdata.spark.highcharts.model 19 | 20 | import com.knockdata.spark.highcharts.base.BaseModel 21 | 22 | class Credits(text: String) extends BaseModel with PublicApply{ 23 | override def fieldName: String = "credits" 24 | 25 | append("text", text) 26 | 27 | def enabled(value: Boolean): this.type = { 28 | append("enabled", value) 29 | } 30 | 31 | def href(value: String): this.type = { 32 | append("href", value) 33 | } 34 | 35 | def position(values: (String, Any)*): this.type = { 36 | append("position", values.toMap) 37 | } 38 | 39 | def style(values: (String, Any)*): this.type = { 40 | append("style", values.toMap) 41 | } 42 | } 43 | 44 | object Credits { 45 | def apply(text: String): Credits = new Credits(text) 46 | } 47 | -------------------------------------------------------------------------------- /talks/highlight/styles/atelier-cave-dark.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Cave Dark - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | 5 | /* Atelier-Cave Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #7e7887; 9 | } 10 | 11 | /* Atelier-Cave Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-attribute, 15 | .hljs-regexp, 16 | .hljs-link, 17 | .hljs-tag, 18 | .hljs-name, 19 | .hljs-selector-id, 20 | .hljs-selector-class { 21 | color: #be4678; 22 | } 23 | 24 | /* Atelier-Cave Orange */ 25 | .hljs-number, 26 | .hljs-meta, 27 | .hljs-built_in, 28 | .hljs-builtin-name, 29 | .hljs-literal, 30 | .hljs-type, 31 | .hljs-params { 32 | color: #aa573c; 33 | } 34 | 35 | /* Atelier-Cave Green */ 36 | .hljs-string, 37 | .hljs-symbol, 38 | .hljs-bullet { 39 | color: #2a9292; 40 | } 41 | 42 | /* Atelier-Cave Blue */ 43 | .hljs-title, 44 | .hljs-section { 45 | color: #576ddb; 46 | } 47 | 48 | /* Atelier-Cave Purple */ 49 | .hljs-keyword, 50 | .hljs-selector-tag { 51 | color: #955ae7; 52 | } 53 | 54 | .hljs-deletion, 55 | .hljs-addition { 56 | color: #19171c; 57 | display: inline-block; 58 | width: 100%; 59 | } 60 | 61 | .hljs-deletion { 62 | background-color: #be4678; 63 | } 64 | 65 | .hljs-addition { 66 | background-color: #2a9292; 67 | } 68 | 69 | .hljs { 70 | display: block; 71 | overflow-x: auto; 72 | background: #19171c; 73 | color: #8b8792; 74 | padding: 0.5em; 75 | } 76 | 77 | .hljs-emphasis { 78 | font-style: italic; 79 | } 80 | 81 | .hljs-strong { 82 | font-weight: bold; 83 | } 84 | -------------------------------------------------------------------------------- /src/main/scala/com/knockdata/spark/highcharts/model/Pane.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package com.knockdata.spark.highcharts.model 19 | 20 | import com.knockdata.spark.highcharts.base.BaseModel 21 | 22 | class Pane() extends BaseModel with PublicApply { 23 | override def fieldName: String = "pane" 24 | 25 | def background(values: Map[String, Any]*): this.type = { 26 | append("background", values.toList) 27 | } 28 | 29 | def center(values: Any*): this.type = { 30 | append("center", values.toList) 31 | } 32 | 33 | def endAngle(value: Int): this.type = { 34 | append("endAngle", value) 35 | } 36 | 37 | def size(value: String): this.type = { 38 | append("size", value) 39 | } 40 | 41 | def size(value: Int): this.type = { 42 | append("size", value) 43 | } 44 | 45 | def startAngle(value: String): this.type = { 46 | append("startAngle", value) 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /talks/highlight/styles/atelier-cave-light.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Cave Light - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | 5 | /* Atelier-Cave Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #655f6d; 9 | } 10 | 11 | /* Atelier-Cave Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-regexp, 18 | .hljs-link, 19 | .hljs-name, 20 | .hljs-name, 21 | .hljs-selector-id, 22 | .hljs-selector-class { 23 | color: #be4678; 24 | } 25 | 26 | /* Atelier-Cave Orange */ 27 | .hljs-number, 28 | .hljs-meta, 29 | .hljs-built_in, 30 | .hljs-builtin-name, 31 | .hljs-literal, 32 | .hljs-type, 33 | .hljs-params { 34 | color: #aa573c; 35 | } 36 | 37 | /* Atelier-Cave Green */ 38 | .hljs-string, 39 | .hljs-symbol, 40 | .hljs-bullet { 41 | color: #2a9292; 42 | } 43 | 44 | /* Atelier-Cave Blue */ 45 | .hljs-title, 46 | .hljs-section { 47 | color: #576ddb; 48 | } 49 | 50 | /* Atelier-Cave Purple */ 51 | .hljs-keyword, 52 | .hljs-selector-tag { 53 | color: #955ae7; 54 | } 55 | 56 | .hljs-deletion, 57 | .hljs-addition { 58 | color: #19171c; 59 | display: inline-block; 60 | width: 100%; 61 | } 62 | 63 | .hljs-deletion { 64 | background-color: #be4678; 65 | } 66 | 67 | .hljs-addition { 68 | background-color: #2a9292; 69 | } 70 | 71 | .hljs { 72 | display: block; 73 | overflow-x: auto; 74 | background: #efecf4; 75 | color: #585260; 76 | padding: 0.5em; 77 | } 78 | 79 | .hljs-emphasis { 80 | font-style: italic; 81 | } 82 | 83 | .hljs-strong { 84 | font-weight: bold; 85 | } 86 | -------------------------------------------------------------------------------- /talks/highlight/styles/atom-one-dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Atom One Dark by Daniel Gamage 4 | Original One Dark Syntax theme from https://github.com/atom/one-dark-syntax 5 | 6 | base: #282c34 7 | mono-1: #abb2bf 8 | mono-2: #818896 9 | mono-3: #5c6370 10 | hue-1: #56b6c2 11 | hue-2: #61aeee 12 | hue-3: #c678dd 13 | hue-4: #98c379 14 | hue-5: #e06c75 15 | hue-5-2: #be5046 16 | hue-6: #d19a66 17 | hue-6-2: #e6c07b 18 | 19 | */ 20 | 21 | .hljs { 22 | display: block; 23 | overflow-x: auto; 24 | padding: 0.5em; 25 | color: #abb2bf; 26 | background: #282c34; 27 | } 28 | 29 | .hljs-comment, 30 | .hljs-quote { 31 | color: #5c6370; 32 | font-style: italic; 33 | } 34 | 35 | .hljs-doctag, 36 | .hljs-keyword, 37 | .hljs-formula { 38 | color: #c678dd; 39 | } 40 | 41 | .hljs-section, 42 | .hljs-name, 43 | .hljs-selector-tag, 44 | .hljs-deletion, 45 | .hljs-subst { 46 | color: #e06c75; 47 | } 48 | 49 | .hljs-literal { 50 | color: #56b6c2; 51 | } 52 | 53 | .hljs-string, 54 | .hljs-regexp, 55 | .hljs-addition, 56 | .hljs-attribute, 57 | .hljs-meta-string { 58 | color: #98c379; 59 | } 60 | 61 | .hljs-built_in, 62 | .hljs-class .hljs-title { 63 | color: #e6c07b; 64 | } 65 | 66 | .hljs-variable, 67 | .hljs-template-variable, 68 | .hljs-type, 69 | .hljs-selector-class, 70 | .hljs-selector-attr, 71 | .hljs-selector-pseudo, 72 | .hljs-number { 73 | color: #d19a66; 74 | } 75 | 76 | .hljs-symbol, 77 | .hljs-bullet, 78 | .hljs-link, 79 | .hljs-meta, 80 | .hljs-selector-id, 81 | .hljs-title { 82 | color: #61aeee; 83 | } 84 | 85 | .hljs-emphasis { 86 | font-style: italic; 87 | } 88 | 89 | .hljs-strong { 90 | font-weight: bold; 91 | } 92 | 93 | .hljs-link { 94 | text-decoration: underline; 95 | } 96 | -------------------------------------------------------------------------------- /talks/highlight/styles/atelier-estuary-dark.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Estuary Dark - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/estuary) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | 5 | /* Atelier-Estuary Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #878573; 9 | } 10 | 11 | /* Atelier-Estuary Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-regexp, 18 | .hljs-link, 19 | .hljs-name, 20 | .hljs-selector-id, 21 | .hljs-selector-class { 22 | color: #ba6236; 23 | } 24 | 25 | /* Atelier-Estuary Orange */ 26 | .hljs-number, 27 | .hljs-meta, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params { 33 | color: #ae7313; 34 | } 35 | 36 | /* Atelier-Estuary Green */ 37 | .hljs-string, 38 | .hljs-symbol, 39 | .hljs-bullet { 40 | color: #7d9726; 41 | } 42 | 43 | /* Atelier-Estuary Blue */ 44 | .hljs-title, 45 | .hljs-section { 46 | color: #36a166; 47 | } 48 | 49 | /* Atelier-Estuary Purple */ 50 | .hljs-keyword, 51 | .hljs-selector-tag { 52 | color: #5f9182; 53 | } 54 | 55 | .hljs-deletion, 56 | .hljs-addition { 57 | color: #22221b; 58 | display: inline-block; 59 | width: 100%; 60 | } 61 | 62 | .hljs-deletion { 63 | background-color: #ba6236; 64 | } 65 | 66 | .hljs-addition { 67 | background-color: #7d9726; 68 | } 69 | 70 | .hljs { 71 | display: block; 72 | overflow-x: auto; 73 | background: #22221b; 74 | color: #929181; 75 | padding: 0.5em; 76 | } 77 | 78 | .hljs-emphasis { 79 | font-style: italic; 80 | } 81 | 82 | .hljs-strong { 83 | font-weight: bold; 84 | } 85 | -------------------------------------------------------------------------------- /talks/highlight/styles/atelier-plateau-dark.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Plateau Dark - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/plateau) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | 5 | /* Atelier-Plateau Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #7e7777; 9 | } 10 | 11 | /* Atelier-Plateau Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-regexp, 18 | .hljs-link, 19 | .hljs-name, 20 | .hljs-selector-id, 21 | .hljs-selector-class { 22 | color: #ca4949; 23 | } 24 | 25 | /* Atelier-Plateau Orange */ 26 | .hljs-number, 27 | .hljs-meta, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params { 33 | color: #b45a3c; 34 | } 35 | 36 | /* Atelier-Plateau Green */ 37 | .hljs-string, 38 | .hljs-symbol, 39 | .hljs-bullet { 40 | color: #4b8b8b; 41 | } 42 | 43 | /* Atelier-Plateau Blue */ 44 | .hljs-title, 45 | .hljs-section { 46 | color: #7272ca; 47 | } 48 | 49 | /* Atelier-Plateau Purple */ 50 | .hljs-keyword, 51 | .hljs-selector-tag { 52 | color: #8464c4; 53 | } 54 | 55 | .hljs-deletion, 56 | .hljs-addition { 57 | color: #1b1818; 58 | display: inline-block; 59 | width: 100%; 60 | } 61 | 62 | .hljs-deletion { 63 | background-color: #ca4949; 64 | } 65 | 66 | .hljs-addition { 67 | background-color: #4b8b8b; 68 | } 69 | 70 | .hljs { 71 | display: block; 72 | overflow-x: auto; 73 | background: #1b1818; 74 | color: #8a8585; 75 | padding: 0.5em; 76 | } 77 | 78 | .hljs-emphasis { 79 | font-style: italic; 80 | } 81 | 82 | .hljs-strong { 83 | font-weight: bold; 84 | } 85 | -------------------------------------------------------------------------------- /talks/highlight/styles/atelier-savanna-dark.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Savanna Dark - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/savanna) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | 5 | /* Atelier-Savanna Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #78877d; 9 | } 10 | 11 | /* Atelier-Savanna Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-regexp, 18 | .hljs-link, 19 | .hljs-name, 20 | .hljs-selector-id, 21 | .hljs-selector-class { 22 | color: #b16139; 23 | } 24 | 25 | /* Atelier-Savanna Orange */ 26 | .hljs-number, 27 | .hljs-meta, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params { 33 | color: #9f713c; 34 | } 35 | 36 | /* Atelier-Savanna Green */ 37 | .hljs-string, 38 | .hljs-symbol, 39 | .hljs-bullet { 40 | color: #489963; 41 | } 42 | 43 | /* Atelier-Savanna Blue */ 44 | .hljs-title, 45 | .hljs-section { 46 | color: #478c90; 47 | } 48 | 49 | /* Atelier-Savanna Purple */ 50 | .hljs-keyword, 51 | .hljs-selector-tag { 52 | color: #55859b; 53 | } 54 | 55 | .hljs-deletion, 56 | .hljs-addition { 57 | color: #171c19; 58 | display: inline-block; 59 | width: 100%; 60 | } 61 | 62 | .hljs-deletion { 63 | background-color: #b16139; 64 | } 65 | 66 | .hljs-addition { 67 | background-color: #489963; 68 | } 69 | 70 | .hljs { 71 | display: block; 72 | overflow-x: auto; 73 | background: #171c19; 74 | color: #87928a; 75 | padding: 0.5em; 76 | } 77 | 78 | .hljs-emphasis { 79 | font-style: italic; 80 | } 81 | 82 | .hljs-strong { 83 | font-weight: bold; 84 | } 85 | -------------------------------------------------------------------------------- /talks/highlight/styles/atom-one-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Atom One Light by Daniel Gamage 4 | Original One Light Syntax theme from https://github.com/atom/one-light-syntax 5 | 6 | base: #fafafa 7 | mono-1: #383a42 8 | mono-2: #686b77 9 | mono-3: #a0a1a7 10 | hue-1: #0184bb 11 | hue-2: #4078f2 12 | hue-3: #a626a4 13 | hue-4: #50a14f 14 | hue-5: #e45649 15 | hue-5-2: #c91243 16 | hue-6: #986801 17 | hue-6-2: #c18401 18 | 19 | */ 20 | 21 | .hljs { 22 | display: block; 23 | overflow-x: auto; 24 | padding: 0.5em; 25 | color: #383a42; 26 | background: #fafafa; 27 | } 28 | 29 | .hljs-comment, 30 | .hljs-quote { 31 | color: #a0a1a7; 32 | font-style: italic; 33 | } 34 | 35 | .hljs-doctag, 36 | .hljs-keyword, 37 | .hljs-formula { 38 | color: #a626a4; 39 | } 40 | 41 | .hljs-section, 42 | .hljs-name, 43 | .hljs-selector-tag, 44 | .hljs-deletion, 45 | .hljs-subst { 46 | color: #e45649; 47 | } 48 | 49 | .hljs-literal { 50 | color: #0184bb; 51 | } 52 | 53 | .hljs-string, 54 | .hljs-regexp, 55 | .hljs-addition, 56 | .hljs-attribute, 57 | .hljs-meta-string { 58 | color: #50a14f; 59 | } 60 | 61 | .hljs-built_in, 62 | .hljs-class .hljs-title { 63 | color: #c18401; 64 | } 65 | 66 | .hljs-variable, 67 | .hljs-template-variable, 68 | .hljs-type, 69 | .hljs-selector-class, 70 | .hljs-selector-attr, 71 | .hljs-selector-pseudo, 72 | .hljs-number { 73 | color: #986801; 74 | } 75 | 76 | .hljs-symbol, 77 | .hljs-bullet, 78 | .hljs-link, 79 | .hljs-meta, 80 | .hljs-selector-id, 81 | .hljs-title { 82 | color: #4078f2; 83 | } 84 | 85 | .hljs-emphasis { 86 | font-style: italic; 87 | } 88 | 89 | .hljs-strong { 90 | font-weight: bold; 91 | } 92 | 93 | .hljs-link { 94 | text-decoration: underline; 95 | } 96 | -------------------------------------------------------------------------------- /talks/highlight/styles/github.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | github.com style (c) Vasily Polovnyov 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | overflow-x: auto; 10 | padding: 0.5em; 11 | color: #333; 12 | background: #f8f8f8; 13 | } 14 | 15 | .hljs-comment, 16 | .hljs-quote { 17 | color: #998; 18 | font-style: italic; 19 | } 20 | 21 | .hljs-keyword, 22 | .hljs-selector-tag, 23 | .hljs-subst { 24 | color: #333; 25 | font-weight: bold; 26 | } 27 | 28 | .hljs-number, 29 | .hljs-literal, 30 | .hljs-variable, 31 | .hljs-template-variable, 32 | .hljs-tag .hljs-attr { 33 | color: #008080; 34 | } 35 | 36 | .hljs-string, 37 | .hljs-doctag { 38 | color: #d14; 39 | } 40 | 41 | .hljs-title, 42 | .hljs-section, 43 | .hljs-selector-id { 44 | color: #900; 45 | font-weight: bold; 46 | } 47 | 48 | .hljs-subst { 49 | font-weight: normal; 50 | } 51 | 52 | .hljs-type, 53 | .hljs-class .hljs-title { 54 | color: #458; 55 | font-weight: bold; 56 | } 57 | 58 | .hljs-tag, 59 | .hljs-name, 60 | .hljs-attribute { 61 | color: #000080; 62 | font-weight: normal; 63 | } 64 | 65 | .hljs-regexp, 66 | .hljs-link { 67 | color: #009926; 68 | } 69 | 70 | .hljs-symbol, 71 | .hljs-bullet { 72 | color: #990073; 73 | } 74 | 75 | .hljs-built_in, 76 | .hljs-builtin-name { 77 | color: #0086b3; 78 | } 79 | 80 | .hljs-meta { 81 | color: #999; 82 | font-weight: bold; 83 | } 84 | 85 | .hljs-deletion { 86 | background: #fdd; 87 | } 88 | 89 | .hljs-addition { 90 | background: #dfd; 91 | } 92 | 93 | .hljs-emphasis { 94 | font-style: italic; 95 | } 96 | 97 | .hljs-strong { 98 | font-weight: bold; 99 | } 100 | -------------------------------------------------------------------------------- /talks/highlight/styles/atelier-estuary-light.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Estuary Light - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/estuary) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | 5 | /* Atelier-Estuary Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #6c6b5a; 9 | } 10 | 11 | /* Atelier-Estuary Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-regexp, 18 | .hljs-link, 19 | .hljs-name, 20 | .hljs-selector-id, 21 | .hljs-selector-class { 22 | color: #ba6236; 23 | } 24 | 25 | /* Atelier-Estuary Orange */ 26 | .hljs-number, 27 | .hljs-meta, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params { 33 | color: #ae7313; 34 | } 35 | 36 | /* Atelier-Estuary Green */ 37 | .hljs-string, 38 | .hljs-symbol, 39 | .hljs-bullet { 40 | color: #7d9726; 41 | } 42 | 43 | /* Atelier-Estuary Blue */ 44 | .hljs-title, 45 | .hljs-section { 46 | color: #36a166; 47 | } 48 | 49 | /* Atelier-Estuary Purple */ 50 | .hljs-keyword, 51 | .hljs-selector-tag { 52 | color: #5f9182; 53 | } 54 | 55 | .hljs-deletion, 56 | .hljs-addition { 57 | color: #22221b; 58 | display: inline-block; 59 | width: 100%; 60 | } 61 | 62 | .hljs-deletion { 63 | background-color: #ba6236; 64 | } 65 | 66 | .hljs-addition { 67 | background-color: #7d9726; 68 | } 69 | 70 | .hljs { 71 | display: block; 72 | overflow-x: auto; 73 | background: #f4f3ec; 74 | color: #5f5e4e; 75 | padding: 0.5em; 76 | } 77 | 78 | .hljs-emphasis { 79 | font-style: italic; 80 | } 81 | 82 | .hljs-strong { 83 | font-weight: bold; 84 | } 85 | -------------------------------------------------------------------------------- /talks/highlight/styles/atelier-plateau-light.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Plateau Light - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/plateau) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | 5 | /* Atelier-Plateau Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #655d5d; 9 | } 10 | 11 | /* Atelier-Plateau Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-regexp, 18 | .hljs-link, 19 | .hljs-name, 20 | .hljs-selector-id, 21 | .hljs-selector-class { 22 | color: #ca4949; 23 | } 24 | 25 | /* Atelier-Plateau Orange */ 26 | .hljs-number, 27 | .hljs-meta, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params { 33 | color: #b45a3c; 34 | } 35 | 36 | /* Atelier-Plateau Green */ 37 | .hljs-string, 38 | .hljs-symbol, 39 | .hljs-bullet { 40 | color: #4b8b8b; 41 | } 42 | 43 | /* Atelier-Plateau Blue */ 44 | .hljs-title, 45 | .hljs-section { 46 | color: #7272ca; 47 | } 48 | 49 | /* Atelier-Plateau Purple */ 50 | .hljs-keyword, 51 | .hljs-selector-tag { 52 | color: #8464c4; 53 | } 54 | 55 | .hljs-deletion, 56 | .hljs-addition { 57 | color: #1b1818; 58 | display: inline-block; 59 | width: 100%; 60 | } 61 | 62 | .hljs-deletion { 63 | background-color: #ca4949; 64 | } 65 | 66 | .hljs-addition { 67 | background-color: #4b8b8b; 68 | } 69 | 70 | .hljs { 71 | display: block; 72 | overflow-x: auto; 73 | background: #f4ecec; 74 | color: #585050; 75 | padding: 0.5em; 76 | } 77 | 78 | .hljs-emphasis { 79 | font-style: italic; 80 | } 81 | 82 | .hljs-strong { 83 | font-weight: bold; 84 | } 85 | -------------------------------------------------------------------------------- /talks/highlight/styles/atelier-savanna-light.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Savanna Light - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/savanna) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | 5 | /* Atelier-Savanna Comment */ 6 | .hljs-comment, 7 | .hljs-quote { 8 | color: #5f6d64; 9 | } 10 | 11 | /* Atelier-Savanna Red */ 12 | .hljs-variable, 13 | .hljs-template-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-regexp, 18 | .hljs-link, 19 | .hljs-name, 20 | .hljs-selector-id, 21 | .hljs-selector-class { 22 | color: #b16139; 23 | } 24 | 25 | /* Atelier-Savanna Orange */ 26 | .hljs-number, 27 | .hljs-meta, 28 | .hljs-built_in, 29 | .hljs-builtin-name, 30 | .hljs-literal, 31 | .hljs-type, 32 | .hljs-params { 33 | color: #9f713c; 34 | } 35 | 36 | /* Atelier-Savanna Green */ 37 | .hljs-string, 38 | .hljs-symbol, 39 | .hljs-bullet { 40 | color: #489963; 41 | } 42 | 43 | /* Atelier-Savanna Blue */ 44 | .hljs-title, 45 | .hljs-section { 46 | color: #478c90; 47 | } 48 | 49 | /* Atelier-Savanna Purple */ 50 | .hljs-keyword, 51 | .hljs-selector-tag { 52 | color: #55859b; 53 | } 54 | 55 | .hljs-deletion, 56 | .hljs-addition { 57 | color: #171c19; 58 | display: inline-block; 59 | width: 100%; 60 | } 61 | 62 | .hljs-deletion { 63 | background-color: #b16139; 64 | } 65 | 66 | .hljs-addition { 67 | background-color: #489963; 68 | } 69 | 70 | .hljs { 71 | display: block; 72 | overflow-x: auto; 73 | background: #ecf4ee; 74 | color: #526057; 75 | padding: 0.5em; 76 | } 77 | 78 | .hljs-emphasis { 79 | font-style: italic; 80 | } 81 | 82 | .hljs-strong { 83 | font-weight: bold; 84 | } 85 | -------------------------------------------------------------------------------- /talks/highlight/styles/default.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Original highlight.js style (c) Ivan Sagalaev 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | overflow-x: auto; 10 | padding: 0.5em; 11 | background: #F0F0F0; 12 | } 13 | 14 | 15 | /* Base color: saturation 0; */ 16 | 17 | .hljs, 18 | .hljs-subst { 19 | color: #444; 20 | } 21 | 22 | .hljs-comment { 23 | color: #888888; 24 | } 25 | 26 | .hljs-keyword, 27 | .hljs-attribute, 28 | .hljs-selector-tag, 29 | .hljs-meta-keyword, 30 | .hljs-doctag, 31 | .hljs-name { 32 | font-weight: bold; 33 | } 34 | 35 | 36 | /* User color: hue: 0 */ 37 | 38 | .hljs-type, 39 | .hljs-string, 40 | .hljs-number, 41 | .hljs-selector-id, 42 | .hljs-selector-class, 43 | .hljs-quote, 44 | .hljs-template-tag, 45 | .hljs-deletion { 46 | color: #880000; 47 | } 48 | 49 | .hljs-title, 50 | .hljs-section { 51 | color: #880000; 52 | font-weight: bold; 53 | } 54 | 55 | .hljs-regexp, 56 | .hljs-symbol, 57 | .hljs-variable, 58 | .hljs-template-variable, 59 | .hljs-link, 60 | .hljs-selector-attr, 61 | .hljs-selector-pseudo { 62 | color: #BC6060; 63 | } 64 | 65 | 66 | /* Language color: hue: 90; */ 67 | 68 | .hljs-literal { 69 | color: #78A960; 70 | } 71 | 72 | .hljs-built_in, 73 | .hljs-bullet, 74 | .hljs-code, 75 | .hljs-addition { 76 | color: #397300; 77 | } 78 | 79 | 80 | /* Meta color: hue: 200 */ 81 | 82 | .hljs-meta { 83 | color: #1f7199; 84 | } 85 | 86 | .hljs-meta-string { 87 | color: #4d99bf; 88 | } 89 | 90 | 91 | /* Misc effects */ 92 | 93 | .hljs-emphasis { 94 | font-style: italic; 95 | } 96 | 97 | .hljs-strong { 98 | font-weight: bold; 99 | } 100 | -------------------------------------------------------------------------------- /src/test/scala/com/knockdata/spark/highcharts/plotoptions/TestPlotOptions.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package com.knockdata.spark.highcharts.plotoptions 19 | 20 | import com.knockdata.spark.highcharts.AbstractTestCase 21 | 22 | import org.junit.Test 23 | 24 | class TestPlotOptions extends AbstractTestCase{ 25 | @Test 26 | def testCodeInPlot() = { 27 | val options = new Area()//.fillColor("linearGradient", Map("x1"->0,"y1"->0, "x2"->0, "y2"->1)) 28 | .fillColorStops((0, "Highcharts.getOptions().colors[0]"), 29 | (1, "Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')")) 30 | 31 | val expected = 32 | """ 33 | |{ 34 | | "fillColor":{ 35 | | "stops":[[0,"--code-FEA24034CBC777B5F8EC1B3125E2BFC7--"],[1,"--code-7619821E4C9B6D7CA8090F17507C6024--"]] 36 | | } 37 | |} 38 | """.stripMargin 39 | 40 | assertEqualJson(expected, options.json) 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /talks/highlight/styles/sunburst.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Sunburst-like style (c) Vasily Polovnyov 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | overflow-x: auto; 10 | padding: 0.5em; 11 | background: #000; 12 | color: #f8f8f8; 13 | } 14 | 15 | .hljs-comment, 16 | .hljs-quote { 17 | color: #aeaeae; 18 | font-style: italic; 19 | } 20 | 21 | .hljs-keyword, 22 | .hljs-selector-tag, 23 | .hljs-type { 24 | color: #e28964; 25 | } 26 | 27 | .hljs-string { 28 | color: #65b042; 29 | } 30 | 31 | .hljs-subst { 32 | color: #daefa3; 33 | } 34 | 35 | .hljs-regexp, 36 | .hljs-link { 37 | color: #e9c062; 38 | } 39 | 40 | .hljs-title, 41 | .hljs-section, 42 | .hljs-tag, 43 | .hljs-name { 44 | color: #89bdff; 45 | } 46 | 47 | .hljs-class .hljs-title, 48 | .hljs-doctag { 49 | text-decoration: underline; 50 | } 51 | 52 | .hljs-symbol, 53 | .hljs-bullet, 54 | .hljs-number { 55 | color: #3387cc; 56 | } 57 | 58 | .hljs-params, 59 | .hljs-variable, 60 | .hljs-template-variable { 61 | color: #3e87e3; 62 | } 63 | 64 | .hljs-attribute { 65 | color: #cda869; 66 | } 67 | 68 | .hljs-meta { 69 | color: #8996a8; 70 | } 71 | 72 | .hljs-formula { 73 | background-color: #0e2231; 74 | color: #f8f8f8; 75 | font-style: italic; 76 | } 77 | 78 | .hljs-addition { 79 | background-color: #253b22; 80 | color: #f8f8f8; 81 | } 82 | 83 | .hljs-deletion { 84 | background-color: #420e09; 85 | color: #f8f8f8; 86 | } 87 | 88 | .hljs-selector-class { 89 | color: #9b703f; 90 | } 91 | 92 | .hljs-selector-id { 93 | color: #8b98ab; 94 | } 95 | 96 | .hljs-emphasis { 97 | font-style: italic; 98 | } 99 | 100 | .hljs-strong { 101 | font-weight: bold; 102 | } 103 | -------------------------------------------------------------------------------- /talks/Gruntfile.js: -------------------------------------------------------------------------------- 1 | // Generated on 2016-09-06 using generator-impress 0.1.2 2 | 'use strict'; 3 | 4 | var LIVERELOAD_PORT = 35729; 5 | var lrSnippet = require('connect-livereload')({port: LIVERELOAD_PORT}); 6 | var mountFolder = function (connect, dir) { 7 | return connect.static(require('path').resolve(dir)); 8 | }; 9 | 10 | module.exports = function (grunt) { 11 | // load all grunt tasks 12 | require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); 13 | 14 | grunt.initConfig({ 15 | watch: { 16 | options: { 17 | nospawn: true, 18 | livereload: LIVERELOAD_PORT 19 | }, 20 | livereload: { 21 | files: [ 22 | 'index.html', 23 | 'js/*.js', 24 | 'css/*.css', 25 | 'steps/*.html', 26 | 'steps/list.json' 27 | ] 28 | } 29 | }, 30 | connect: { 31 | options: { 32 | port: 9000, 33 | // change this to '0.0.0.0' to access the server from outside 34 | hostname: 'localhost' 35 | }, 36 | livereload: { 37 | options: { 38 | middleware: function (connect) { 39 | return [ 40 | lrSnippet, 41 | mountFolder(connect, '.') 42 | ]; 43 | } 44 | } 45 | } 46 | }, 47 | open: { 48 | server: { 49 | path: 'http://localhost:<%= connect.options.port %>' 50 | } 51 | } 52 | }); 53 | 54 | grunt.registerTask('server', ['connect:livereload', 'open', 'watch']); 55 | }; 56 | -------------------------------------------------------------------------------- /docs/scaladocs/index/index-w.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Spark Highcharts POM 0.6.4_2.1 API 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
waterfall
15 | 16 |
17 |
width
18 | 19 |
20 |
widthAdjust
21 | 22 |
23 | 24 | -------------------------------------------------------------------------------- /talks/highlight/styles/railscasts.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Railscasts-like style (c) Visoft, Inc. (Damien White) 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | overflow-x: auto; 10 | padding: 0.5em; 11 | background: #232323; 12 | color: #e6e1dc; 13 | } 14 | 15 | .hljs-comment, 16 | .hljs-quote { 17 | color: #bc9458; 18 | font-style: italic; 19 | } 20 | 21 | .hljs-keyword, 22 | .hljs-selector-tag { 23 | color: #c26230; 24 | } 25 | 26 | .hljs-string, 27 | .hljs-number, 28 | .hljs-regexp, 29 | .hljs-variable, 30 | .hljs-template-variable { 31 | color: #a5c261; 32 | } 33 | 34 | .hljs-subst { 35 | color: #519f50; 36 | } 37 | 38 | .hljs-tag, 39 | .hljs-name { 40 | color: #e8bf6a; 41 | } 42 | 43 | .hljs-type { 44 | color: #da4939; 45 | } 46 | 47 | 48 | .hljs-symbol, 49 | .hljs-bullet, 50 | .hljs-built_in, 51 | .hljs-builtin-name, 52 | .hljs-attr, 53 | .hljs-link { 54 | color: #6d9cbe; 55 | } 56 | 57 | .hljs-params { 58 | color: #d0d0ff; 59 | } 60 | 61 | .hljs-attribute { 62 | color: #cda869; 63 | } 64 | 65 | .hljs-meta { 66 | color: #9b859d; 67 | } 68 | 69 | .hljs-title, 70 | .hljs-section { 71 | color: #ffc66d; 72 | } 73 | 74 | .hljs-addition { 75 | background-color: #144212; 76 | color: #e6e1dc; 77 | display: inline-block; 78 | width: 100%; 79 | } 80 | 81 | .hljs-deletion { 82 | background-color: #600; 83 | color: #e6e1dc; 84 | display: inline-block; 85 | width: 100%; 86 | } 87 | 88 | .hljs-selector-class { 89 | color: #9b703f; 90 | } 91 | 92 | .hljs-selector-id { 93 | color: #8b98ab; 94 | } 95 | 96 | .hljs-emphasis { 97 | font-style: italic; 98 | } 99 | 100 | .hljs-strong { 101 | font-weight: bold; 102 | } 103 | 104 | .hljs-link { 105 | text-decoration: underline; 106 | } 107 | -------------------------------------------------------------------------------- /docs/scaladocs/index/index-y.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Spark Highcharts POM 0.6.4_2.1 API 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
YAxis
15 | 16 |
17 |
y
18 | 19 |
20 |
yAxis
21 | 22 |
23 | 24 | -------------------------------------------------------------------------------- /docs/DemoColumnChart.md: -------------------------------------------------------------------------------- 1 | # Column Chart Demo 2 | 3 | Based on [Column Basic Demo](http://www.highcharts.com/demo/column-basic) 4 | 5 | ## Histogram 6 | 7 | Based on [plot-histograms-in-highcharts](http://stackoverflow.com/questions/18042165/plot-histograms-in-highcharts) 8 | 9 | an line chart with 10 | 11 | * x axis data from column $"age" 12 | * y axis number of record for age 13 | * data point order by age 14 | 15 | 16 | ```scala 17 | 18 | import com.knockdata.spark.highcharts._ 19 | import com.knockdata.spark.highcharts.model._ 20 | import sqlContext.implicits._ 21 | 22 | val chart = highcharts( 23 | bank 24 | .series("x" -> "age", "y" -> count("*")) 25 | .orderBy(col("age")) 26 | ) 27 | .chart(Chart.column) 28 | .plotOptions(PlotOptions.column.groupPadding(0).pointPadding(0).borderWidth(0)) 29 | 30 | chart.plot() 31 | 32 | ``` 33 | 34 | ## Stacked Column 35 | 36 | Based on [Stacked Column](http://www.highcharts.com/demo/column-stacked) 37 | 38 | Column are stacked, each stack is one series which is person 39 | 40 | * x axis is index of fruit types. it does not specified by in data series 41 | * y from $"consumption" 42 | 43 | 44 | ```scala 45 | 46 | import com.knockdata.spark.highcharts._ 47 | import com.knockdata.spark.highcharts.model._ 48 | import sqlContext.implicits._ 49 | 50 | val john = Seq(5, 3, 4, 7, 2).map(v => ("John", v)) 51 | val jane = Seq(2, 2, 3, 2, 1).map(v => ("Jane", v)) 52 | val joe = Seq(3, 4, 4, 2, 5).map(v => ("Jeo", v)) 53 | 54 | val dataFrame = (john ++ jane ++ joe).toDF("name", "consumption") 55 | 56 | val chart = highcharts( 57 | dataFrame 58 | .seriesCol("name") 59 | .series("y" -> "consumption")). 60 | chart(Chart.column). 61 | xAxis(XAxis("").categories("Apples", "Oranges", "Pears", "Grapes", "Bananas")). 62 | plotOptions(PlotOptions.column.stacking("normal")) 63 | 64 | chart.plot() 65 | 66 | ``` 67 | -------------------------------------------------------------------------------- /talks/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Better Visualization for Spark 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 |
26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 
 37 | 38 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /talks/highlight/styles/agate.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Agate by Taufik Nurrohman 3 | * ---------------------------------------------------- 4 | * 5 | * #ade5fc 6 | * #a2fca2 7 | * #c6b4f0 8 | * #d36363 9 | * #fcc28c 10 | * #fc9b9b 11 | * #ffa 12 | * #fff 13 | * #333 14 | * #62c8f3 15 | * #888 16 | * 17 | */ 18 | 19 | .hljs { 20 | display: block; 21 | overflow-x: auto; 22 | padding: 0.5em; 23 | background: #333; 24 | color: white; 25 | } 26 | 27 | .hljs-name, 28 | .hljs-strong { 29 | font-weight: bold; 30 | } 31 | 32 | .hljs-code, 33 | .hljs-emphasis { 34 | font-style: italic; 35 | } 36 | 37 | .hljs-tag { 38 | color: #62c8f3; 39 | } 40 | 41 | .hljs-variable, 42 | .hljs-template-variable, 43 | .hljs-selector-id, 44 | .hljs-selector-class { 45 | color: #ade5fc; 46 | } 47 | 48 | .hljs-string, 49 | .hljs-bullet { 50 | color: #a2fca2; 51 | } 52 | 53 | .hljs-type, 54 | .hljs-title, 55 | .hljs-section, 56 | .hljs-attribute, 57 | .hljs-quote, 58 | .hljs-built_in, 59 | .hljs-builtin-name { 60 | color: #ffa; 61 | } 62 | 63 | .hljs-number, 64 | .hljs-symbol, 65 | .hljs-bullet { 66 | color: #d36363; 67 | } 68 | 69 | .hljs-keyword, 70 | .hljs-selector-tag, 71 | .hljs-literal { 72 | color: #fcc28c; 73 | } 74 | 75 | .hljs-comment, 76 | .hljs-deletion, 77 | .hljs-code { 78 | color: #888; 79 | } 80 | 81 | .hljs-regexp, 82 | .hljs-link { 83 | color: #c6b4f0; 84 | } 85 | 86 | .hljs-meta { 87 | color: #fc9b9b; 88 | } 89 | 90 | .hljs-deletion { 91 | background-color: #fc9b9b; 92 | color: #333; 93 | } 94 | 95 | .hljs-addition { 96 | background-color: #a2fca2; 97 | color: #333; 98 | } 99 | 100 | .hljs a { 101 | color: inherit; 102 | } 103 | 104 | .hljs a:focus, 105 | .hljs a:hover { 106 | color: inherit; 107 | text-decoration: underline; 108 | } 109 | -------------------------------------------------------------------------------- /src/main/scala/com/knockdata/spark/highcharts/model/Exporting.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package com.knockdata.spark.highcharts.model 19 | 20 | import com.knockdata.spark.highcharts.base.BaseModel 21 | 22 | class Exporting() extends BaseModel with PublicApply { 23 | override def fieldName: String = "exporting" 24 | 25 | def enabled(value: Boolean): this.type = { 26 | append("enabled", value) 27 | } 28 | 29 | def filename(value: String): this.type = { 30 | append("filename", value) 31 | } 32 | 33 | def printMaxWidth(value: Int): this.type = { 34 | append("printMaxWidth", value) 35 | } 36 | 37 | def scale(value: Int): this.type = { 38 | append("scale", value) 39 | } 40 | 41 | def sourceHeight(value: Int): this.type = { 42 | append("sourceHeight", value) 43 | } 44 | 45 | def sourceWidth(value: Int): this.type = { 46 | append("sourceWidth", value) 47 | } 48 | 49 | def typ(value: String): this.type = { 50 | append("type", value) 51 | } 52 | 53 | def width(value: Int): this.type = { 54 | append("width", value) 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/main/scala/com/knockdata/spark/highcharts/plotoptions/SolidGauge.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package com.knockdata.spark.highcharts.plotoptions 19 | 20 | import com.knockdata.spark.highcharts.model._ 21 | import com.knockdata.spark.highcharts.base._ 22 | 23 | private[highcharts] class SolidGauge extends BasePlotOptions with PublicApply { 24 | def fieldName = "solidgauge" 25 | 26 | 27 | def animation(value: Boolean): this.type = { 28 | append("animation", value) 29 | } 30 | 31 | def dataLabels(values: (String, Any)*): this.type = { 32 | append("dataLabels", values.toMap) 33 | } 34 | 35 | def linecap(value: String): this.type = { 36 | append("linecap", value) 37 | } 38 | 39 | def overshoot(value: Int): this.type = { 40 | append("overshoot", value) 41 | } 42 | 43 | def showCheckbox(value: Boolean): this.type = { 44 | append("showCheckbox", value) 45 | } 46 | 47 | def showInLegend(value: Boolean): this.type = { 48 | append("showInLegend", value) 49 | } 50 | 51 | def wrap(value: Boolean): this.type = { 52 | append("wrap", value) 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /talks/highlight/styles/hybrid.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | vim-hybrid theme by w0ng (https://github.com/w0ng/vim-hybrid) 4 | 5 | */ 6 | 7 | /*background color*/ 8 | .hljs { 9 | display: block; 10 | overflow-x: auto; 11 | padding: 0.5em; 12 | background: #1d1f21; 13 | } 14 | 15 | /*selection color*/ 16 | .hljs::selection, 17 | .hljs span::selection { 18 | background: #373b41; 19 | } 20 | 21 | .hljs::-moz-selection, 22 | .hljs span::-moz-selection { 23 | background: #373b41; 24 | } 25 | 26 | /*foreground color*/ 27 | .hljs { 28 | color: #c5c8c6; 29 | } 30 | 31 | /*color: fg_yellow*/ 32 | .hljs-title, 33 | .hljs-name { 34 | color: #f0c674; 35 | } 36 | 37 | /*color: fg_comment*/ 38 | .hljs-comment, 39 | .hljs-meta, 40 | .hljs-meta .hljs-keyword { 41 | color: #707880; 42 | } 43 | 44 | /*color: fg_red*/ 45 | .hljs-number, 46 | .hljs-symbol, 47 | .hljs-literal, 48 | .hljs-deletion, 49 | .hljs-link { 50 | color: #cc6666 51 | } 52 | 53 | /*color: fg_green*/ 54 | .hljs-string, 55 | .hljs-doctag, 56 | .hljs-addition, 57 | .hljs-regexp, 58 | .hljs-selector-attr, 59 | .hljs-selector-pseudo { 60 | color: #b5bd68; 61 | } 62 | 63 | /*color: fg_purple*/ 64 | .hljs-attribute, 65 | .hljs-code, 66 | .hljs-selector-id { 67 | color: #b294bb; 68 | } 69 | 70 | /*color: fg_blue*/ 71 | .hljs-keyword, 72 | .hljs-selector-tag, 73 | .hljs-bullet, 74 | .hljs-tag { 75 | color: #81a2be; 76 | } 77 | 78 | /*color: fg_aqua*/ 79 | .hljs-subst, 80 | .hljs-variable, 81 | .hljs-template-tag, 82 | .hljs-template-variable { 83 | color: #8abeb7; 84 | } 85 | 86 | /*color: fg_orange*/ 87 | .hljs-type, 88 | .hljs-built_in, 89 | .hljs-builtin-name, 90 | .hljs-quote, 91 | .hljs-section, 92 | .hljs-selector-class { 93 | color: #de935f; 94 | } 95 | 96 | .hljs-emphasis { 97 | font-style: italic; 98 | } 99 | 100 | .hljs-strong { 101 | font-weight: bold; 102 | } 103 | -------------------------------------------------------------------------------- /src/main/scala/com/knockdata/spark/highcharts/CustomSinkProvider.scala: -------------------------------------------------------------------------------- 1 | package com.knockdata.spark.highcharts 2 | 3 | import com.knockdata.spark.highcharts.model.Highcharts 4 | import org.apache.spark.sql._ 5 | import org.apache.spark.sql.execution.streaming.Sink 6 | import org.apache.spark.sql.sources.StreamSinkProvider 7 | import org.apache.spark.sql.streaming.OutputMode 8 | 9 | class CustomSinkProvider extends StreamSinkProvider { 10 | def createSink( 11 | sqlContext: SQLContext, 12 | parameters: Map[String, String], 13 | partitionColumns: Seq[String], 14 | outputMode: OutputMode): Sink = { 15 | new Sink { 16 | override def addBatch(batchId: Long, data: DataFrame): Unit = { 17 | 18 | val chartId = parameters("chartId") 19 | val chartParagraphId = parameters("chartParagraphId") 20 | 21 | println(s"batchId: $batchId, chartId: $chartId, chartParagraphId: $chartParagraphId") 22 | // data.show(3) 23 | 24 | val z = Registry.get(s"$chartId-z").asInstanceOf[ZeppelinContextHolder] 25 | val seriesHolder = Registry.get(s"$chartId-seriesHolder").asInstanceOf[SeriesHolder] 26 | val outputMode = Registry.get(s"$chartId-outputMode").asInstanceOf[CustomOutputMode] 27 | 28 | seriesHolder.dataFrame = data 29 | 30 | val result = seriesHolder.result 31 | val (normalSeriesList, drilldownSeriesList) = outputMode.result(result._1, result._2) 32 | 33 | val chart = new Highcharts(normalSeriesList, seriesHolder.chartId) 34 | .drilldown(drilldownSeriesList) 35 | 36 | val plotData = chart.plotData 37 | // val escaped = plotData.replace("%angular", "") 38 | // println(s" put $chartParagraphId $escaped") 39 | z.put(chartParagraphId, plotData) 40 | println(s"run $chartParagraphId") 41 | z.run(chartParagraphId) 42 | } 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /docs/scaladocs/index/index-o.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Spark Highcharts POM 0.6.4_2.1 API 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
offset
15 | 16 |
17 |
opposite
18 | 19 |
20 |
option3d
21 | 22 |
23 |
options
24 | 25 |
26 |
outputMode
27 | 28 |
29 | 30 | -------------------------------------------------------------------------------- /src/test/scala/com/knockdata/spark/highcharts/SparkEnv.scala: -------------------------------------------------------------------------------- 1 | package com.knockdata.spark.highcharts 2 | 3 | import org.apache.spark.{SparkConf, SparkContext} 4 | import org.apache.commons.io.IOUtils 5 | import java.net.URL 6 | import java.nio.charset.Charset 7 | import java.nio.file.Files 8 | 9 | import org.apache.spark.sql.SparkSession 10 | 11 | 12 | /** 13 | * Created by Rockie Yang on 2016/06/16. 14 | */ 15 | object SparkEnv { 16 | 17 | 18 | // lazy val sc = { 19 | // val master = "local" 20 | //// val master = "spark://Rockies-MacBook-Pro.local:7077" 21 | // val conf = new SparkConf() 22 | // .setAppName("Simple Application") 23 | // .setMaster(master) 24 | //// .setJars(Seq("/Users/rockieyang/git/spark-highcharts/target/spark-highcharts-0.6.1.jar")) 25 | // new SparkContext(conf) 26 | // 27 | // 28 | // } 29 | 30 | val checkpointPath = Files.createTempDirectory("query") 31 | val checkpointDir = checkpointPath.toFile 32 | 33 | checkpointDir.deleteOnExit() 34 | 35 | def deleteRecursively(file: java.io.File): Unit = { 36 | if (file.isDirectory) { 37 | file.listFiles().foreach(deleteRecursively) 38 | file.delete() 39 | } 40 | else 41 | file.delete() 42 | } 43 | 44 | def clearCheckpointDir: Unit = { 45 | checkpointDir.listFiles().foreach(deleteRecursively) 46 | } 47 | 48 | lazy val spark = SparkSession 49 | .builder() 50 | .appName("Spark SQL basic example") 51 | .config("spark.sql.streaming.checkpointLocation", 52 | checkpointDir.getAbsolutePath) 53 | .master("local[*]") 54 | .appName("test") 55 | .getOrCreate() 56 | 57 | lazy val sc = spark.sparkContext 58 | 59 | // val sqlContext= new org.apache.spark.sql.SQLContext(sc) 60 | lazy val sqlContext = spark.sqlContext 61 | 62 | 63 | // def createDF(seq: Seq[Any]) = { 64 | // sqlContext.createDataFrame(seq) 65 | // } 66 | 67 | } 68 | -------------------------------------------------------------------------------- /docs/scaladocs/index/index-z.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Spark Highcharts POM 0.6.4_2.1 API 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
ZeppelinContextHolder
15 | 16 |
17 |
z
18 | 19 |
20 |
zoneAxis
21 | 22 |
23 |
zones
24 | 25 |
26 |
zoomType
27 | 28 |
29 | 30 | -------------------------------------------------------------------------------- /docs/DemoBubbleChart.md: -------------------------------------------------------------------------------- 1 | # Pie Chart Demo 2 | 3 | Based on [Pie Chart Demo](http://www.highcharts.com/demo/pie-basic) 4 | 5 | // ## Histogram 6 | // 7 | // Based on [plot-histograms-in-highcharts](http://stackoverflow.com/questions/18042165/plot-histograms-in-highcharts) 8 | // 9 | // an line chart with 10 | // 11 | // * x axis data from column $"age" 12 | // * y axis number of record for age 13 | // * data point order by age 14 | // 15 | @Test 16 | def demoBubble(): Unit = { 17 | 18 | val dataFrame = Seq( 19 | (95.0, 95.0, 13.8, "BE", "Belgium" ), 20 | (86.5, 102.9, 14.7, "DE", "Germany" ), 21 | (80.8, 91.5, 15.8, "FI", "Finland" ), 22 | (80.4, 102.5, 12.0, "NL", "Netherlands" ), 23 | (80.3, 86.1, 11.8, "SE", "Sweden" ), 24 | (78.4, 70.1, 16.6, "ES", "Spain" ), 25 | (74.2, 68.5, 14.5, "FR", "France" ), 26 | (73.5, 83.1, 10.0, "NO", "Norway" ), 27 | (71.0, 93.2, 24.7, "UK", "United Kingdom" ), 28 | (69.2, 57.6, 10.4, "IT", "Italy" ), 29 | (68.6, 20.0, 16.0, "RU", "Russia" ), 30 | (65.5, 126.4, 35.3, "US", "United States" ), 31 | (65.4, 50.8, 28.5, "HU", "Hungary" ), 32 | (63.4, 51.8, 15.4, "PT", "Portugal" ), 33 | (64.0, 82.9, 31.3, "NZ", "New Zealand") 34 | ).toDF("fat intake", "sugar intake", "obesity", "country code", "country") 35 | 36 | 37 | val chart = highcharts(dataFrame 38 | .series( 39 | "x" -> "fat intake", 40 | "y" -> "sugar intake", 41 | "z" -> "obesity", 42 | "name" -> "country code", 43 | "country" -> "country")) 44 | .chart(Chart.bubble) 45 | .plotOptions(PlotOptions.bubble.dataLabels("enabled" -> true, "format" -> "{point.name}")) 46 | .xAxis(XAxis("fat intake daily")) 47 | .yAxis(YAxis("sugar intake daily") 48 | .plotLine( 49 | "dashStyle" -> "dot", 50 | "color" -> "black", 51 | "value" -> 50, 52 | "width" -> 3, 53 | "label" -> Map("text" -> "Safe sugar intake 50g/day", "align" -> "right"), 54 | "zIndex" -> 3) 55 | ) 56 | .tooltip(new Tooltip().pointFormat("{point.country}")) 57 | 58 | chart.plot() 59 | new PrintWriter("target/demoBubble.json") { write(chart.replaced); close } 60 | } -------------------------------------------------------------------------------- /src/main/scala/com/knockdata/spark/highcharts/package.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package com.knockdata.spark 19 | 20 | import java.security.MessageDigest 21 | import java.util.UUID 22 | 23 | //import com.knockdata.spark.highcharts.model.HighchartsHolder 24 | import org.apache.spark.sql.DataFrame 25 | 26 | import scala.language.implicitConversions 27 | 28 | package object highcharts { 29 | 30 | // generate md5 string from data 31 | private [highcharts] def md5(data: String) = 32 | MessageDigest.getInstance("MD5").digest(data.getBytes) 33 | .map("%02X".format(_)).mkString 34 | 35 | // generate id 36 | private [highcharts] def id = UUID.randomUUID.toString.replace('-', '_') 37 | 38 | // implicit converter from DataFrame to SeriesHolder 39 | implicit def dataFrame2SeriesHolder(dataFrame: DataFrame): SeriesHolder = 40 | new SeriesHolder(dataFrame) 41 | 42 | // implicit def seriesHolder2ChartHolder(seriesHolder: SeriesHolder): HighchartsHolder = 43 | // new HighchartsHolder(seriesHolder) 44 | 45 | // 46 | // implicit def dataFrame2StreamingSeriesHolder(dataFrame: DataFrame): StreamingSeriesHolder = 47 | // new StreamingSeriesHolder(dataFrame) 48 | 49 | } 50 | 51 | --------------------------------------------------------------------------------