├── .eslintrc
├── .gitignore
├── CODEOWNERS
├── LICENSE
├── Makefile
├── README.md
├── SUMMARY.md
├── bin
├── unbundle_dist.js
└── unbundle_django.js
├── book.json
├── demo
├── api
│ └── README.md
├── css
│ ├── client.css
│ └── editor.css
├── fonts
│ ├── bootstrap
│ │ ├── glyphicons-halflings-regular.eot
│ │ ├── glyphicons-halflings-regular.svg
│ │ ├── glyphicons-halflings-regular.ttf
│ │ ├── glyphicons-halflings-regular.woff
│ │ └── glyphicons-halflings-regular.woff2
│ ├── kraftwerk.ttf
│ └── kraftwerk2.ttf
├── img
│ ├── eq-red.gif
│ ├── favicon.ico
│ ├── icons
│ │ ├── danger.png
│ │ ├── disallowed.png
│ │ ├── doubleColumn-disabled.png
│ │ ├── doubleColumn.png
│ │ ├── singleColumn-disabled.png
│ │ └── singleColumn.png
│ ├── loader.gif
│ ├── spinner.gif
│ └── tdmn.png
├── index.html
├── js
│ ├── client.js
│ ├── client.js.map
│ ├── editor.js
│ └── editor.js.map
└── test-api.json
├── dist
├── css
│ ├── client.css
│ └── editor.css
├── fonts
│ ├── bootstrap
│ │ ├── glyphicons-halflings-regular.eot
│ │ ├── glyphicons-halflings-regular.svg
│ │ ├── glyphicons-halflings-regular.ttf
│ │ ├── glyphicons-halflings-regular.woff
│ │ └── glyphicons-halflings-regular.woff2
│ ├── kraftwerk.ttf
│ └── kraftwerk2.ttf
├── img
│ ├── eq-red.gif
│ ├── favicon.ico
│ ├── icons
│ │ ├── danger.png
│ │ ├── disallowed.png
│ │ ├── doubleColumn-disabled.png
│ │ ├── doubleColumn.png
│ │ ├── singleColumn-disabled.png
│ │ └── singleColumn.png
│ ├── loader.gif
│ ├── spinner.gif
│ └── tdmn.png
├── index.html
├── js
│ ├── client.js
│ ├── client.js.map
│ ├── editor.js
│ └── editor.js.map
└── test-api.json
├── docs
├── api
│ ├── axes.md
│ ├── data.md
│ ├── datamap.md
│ ├── embed.md
│ ├── margins.md
│ ├── scripts.md
│ ├── template.md
│ ├── text.md
│ └── ui.md
├── chartwerk-api.md
├── chartwerk-backend.md
├── chartwerk_api.md
├── developing.md
├── embedding.md
├── how-chartwerk-makes-charts.md
├── img
│ ├── datamap
│ │ ├── base.png
│ │ ├── data_series.png
│ │ ├── scale.png
│ │ └── value.png
│ ├── how-chartwerk-makes-charts.png
│ └── screenshots
│ │ ├── api_tree.png
│ │ ├── base_axis_date.png
│ │ ├── color_legend.png
│ │ ├── color_scale.png
│ │ ├── color_scheme.png
│ │ ├── data_classify.png
│ │ ├── dependencies.png
│ │ ├── double_wide.png
│ │ ├── editor_full.png
│ │ ├── free_annotations.png
│ │ ├── margins.png
│ │ ├── raw_data.png
│ │ ├── save_chart.png
│ │ ├── screenshot.png
│ │ ├── scripr_editor_select.png
│ │ ├── script_editor.png
│ │ ├── shaded_regions.png
│ │ ├── single_wide.png
│ │ ├── size_select.png
│ │ ├── tabs.png
│ │ ├── template.png
│ │ ├── template_datamap.png
│ │ ├── template_tags.png
│ │ ├── template_text.png
│ │ ├── text.png
│ │ └── value_axis.png
├── introduction.md
├── logo.png
└── template-basics.md
├── gulp
├── index.js
├── server
│ └── server.js
└── tasks
│ ├── api.js
│ ├── dev.js
│ ├── nunjucks.js
│ └── production.js
├── gulpfile.js
├── misc
├── datamap.svg
├── logo.svg
└── swag.svg
├── package.json
├── postcss.config.js
├── src
├── js
│ ├── actions
│ │ ├── api.js
│ │ ├── axis.js
│ │ ├── data.js
│ │ ├── embed.js
│ │ ├── index.js
│ │ ├── margin.js
│ │ ├── script.js
│ │ ├── template.js
│ │ ├── text.js
│ │ └── ui.js
│ ├── client.js
│ ├── client
│ │ ├── annotations.js
│ │ ├── index.js
│ │ ├── legend.js
│ │ ├── size.js
│ │ └── text.js
│ ├── components
│ │ ├── annotations
│ │ │ ├── ColorPicker.jsx
│ │ │ ├── Editor.jsx
│ │ │ ├── Legend.jsx
│ │ │ ├── LegendDisplay.jsx
│ │ │ └── LegendKeys.jsx
│ │ ├── axes
│ │ │ ├── BaseAxis.jsx
│ │ │ ├── DateFormat.jsx
│ │ │ ├── NumericFormat.jsx
│ │ │ ├── ScaleAxis.jsx
│ │ │ ├── ShadedRegions.jsx
│ │ │ └── ValueAxis.jsx
│ │ ├── code
│ │ │ ├── ApiExplorer.jsx
│ │ │ ├── Dependencies.jsx
│ │ │ └── Editor.jsx
│ │ ├── data
│ │ │ ├── BaseTypePicker.jsx
│ │ │ ├── ColorPicker.jsx
│ │ │ ├── ColorScheme.jsx
│ │ │ ├── DataInput.jsx
│ │ │ ├── DataSelect.jsx
│ │ │ ├── Quantizer.jsx
│ │ │ ├── QuantizerViz-d3.js
│ │ │ └── QuantizerViz.jsx
│ │ ├── layout
│ │ │ ├── Margin.jsx
│ │ │ ├── MarginViz-d3.js
│ │ │ └── MarginViz.jsx
│ │ ├── preview
│ │ │ └── SizeSwitch.jsx
│ │ ├── publish
│ │ │ ├── DatamapOpts.jsx
│ │ │ ├── EmbedCode.jsx
│ │ │ ├── MDEditor.jsx
│ │ │ └── Publish.jsx
│ │ └── text
│ │ │ └── Inputs.jsx
│ ├── constants
│ │ ├── actions.js
│ │ ├── colors.js
│ │ ├── datamap.js
│ │ └── datetime.js
│ ├── containers
│ │ ├── App.jsx
│ │ ├── panes
│ │ │ ├── Editor.jsx
│ │ │ └── Preview.jsx
│ │ └── tabs
│ │ │ ├── Annotations.jsx
│ │ │ ├── Axes.jsx
│ │ │ ├── Code.jsx
│ │ │ ├── Data.jsx
│ │ │ ├── Layout.jsx
│ │ │ ├── Nav.jsx
│ │ │ ├── Publish.jsx
│ │ │ ├── Text.jsx
│ │ │ └── index.jsx
│ ├── editor.jsx
│ ├── misc
│ │ ├── api.js
│ │ ├── config.js
│ │ └── utils.js
│ ├── reducers
│ │ ├── axis.js
│ │ ├── data.js
│ │ ├── datamap.js
│ │ ├── embed.js
│ │ ├── index.js
│ │ ├── margin.js
│ │ ├── script.js
│ │ ├── template.js
│ │ ├── text.js
│ │ └── ui.js
│ └── stores
│ │ └── index.js
├── scss
│ ├── _annotations.scss
│ ├── _bootstrap.scss
│ ├── _chartwerkReset.scss
│ ├── _colors.scss
│ ├── _editor.scss
│ ├── _fonts.scss
│ ├── _form-controls.scss
│ ├── _header.scss
│ ├── _legend.scss
│ ├── _nav.scss
│ ├── _preview.scss
│ ├── _styles.scss
│ ├── _toggle.scss
│ ├── _variables.scss
│ ├── client.scss
│ ├── editor.scss
│ ├── modals
│ │ ├── _data-help.scss
│ │ ├── _data-preview.scss
│ │ └── _loading.scss
│ └── tabs
│ │ ├── annotations
│ │ └── _editor.scss
│ │ ├── axes
│ │ └── _base.scss
│ │ ├── code
│ │ └── _editor.scss
│ │ ├── data
│ │ ├── _color-picker.scss
│ │ ├── _color-scheme.scss
│ │ ├── _data-input.scss
│ │ ├── _data-select.scss
│ │ └── _quantizer.scss
│ │ ├── layout
│ │ └── _margin.scss
│ │ ├── publish
│ │ └── _publish.scss
│ │ └── text
│ │ ├── _inputs.scss
│ │ └── _legend.scss
└── templates
│ ├── base.html
│ ├── django-chartwerk-editor.html
│ └── index.html
├── styles
└── website.css
├── test
└── reducers
│ ├── axis-test.js
│ └── datamap-test.js
├── webpack-dev.config.js
├── webpack-prod.config.js
└── yarn.lock
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "airbnb",
3 | "rules": {
4 | "no-unsafe-finally": 0,
5 | "no-useless-computed-key": 0,
6 | "react/forbid-prop-types": 0,
7 | "react/require-render-return": 0,
8 | "react/jsx-first-prop-new-line": 0,
9 | "jsx-a11y/no-noninteractive-element-interactions": 0,
10 | "no-console": 0,
11 | "react/prefer-es6-class": 0,
12 | "no-eval": 0,
13 | "react/jsx-no-bind": 0,
14 | "react/sort-comp": 0
15 | },
16 | "env": {
17 | "browser": true
18 | },
19 | "globals": {
20 | "$": false
21 | },
22 | }
23 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 |
6 | # Runtime data
7 | pids
8 | *.pid
9 | *.seed
10 |
11 | # Directory for instrumented libs generated by jscoverage/JSCover
12 | lib-cov
13 |
14 | # Coverage directory used by tools like istanbul
15 | coverage
16 |
17 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
18 | .grunt
19 |
20 | # node-waf configuration
21 | .lock-wscript
22 |
23 | # Compiled binary addons (http://nodejs.org/api/addons.html)
24 | build/Release
25 |
26 | # Dependency directories
27 | node_modules
28 | bower_components
29 | jspm_packages
30 |
31 | # Optional npm cache directory
32 | .npm
33 |
34 | # Optional REPL history
35 | .node_repl_history
36 |
37 | .bowerrc
38 |
39 | # File used to divert post-install task
40 | installed
41 |
42 | .DS_Store
43 |
--------------------------------------------------------------------------------
/CODEOWNERS:
--------------------------------------------------------------------------------
1 | * @hobbes7878 @achavez
2 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | copydemo:
2 | cp -rp ./dist/js/* ./demo/js
3 | cp -rp ./dist/css/* ./demo/css
4 | cp -rp ./dist/fonts/* ./demo/fonts
5 | cp -rp ./dist/img/* ./demo/img
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | #
2 |
3 |
4 | A [React](https://facebook.github.io/react/)/[Redux](http://redux.js.org/)-based live editor for Chartwerk charts.
5 |
6 | This repository contains the chart editor. For the deployable Chartwerk app, see [django-chartwerk](https://github.com/DallasMorningNews/django-chartwerk/).
7 |
8 | See a demo of the editor [here](http://dallasmorningnews.github.io/chartwerk-editor/).
9 |
10 | Documentation hosted [on gitbook](https://the-dallas-morning-news.gitbooks.io/chartwerk-editor/content/docs/introduction.html).
11 |
--------------------------------------------------------------------------------
/SUMMARY.md:
--------------------------------------------------------------------------------
1 | # Summary
2 |
3 | * [README](README.md)
4 | * [Introduction](docs/introduction.md)
5 | * [How Chartwerk makes charts](docs/how-chartwerk-makes-charts.md)
6 | * [Chart template basics](docs/template-basics.md)
7 | * [Chartwerk's API](docs/chartwerk-api.md)
8 | * [Data](docs/api/data.md)
9 | * [Datamap](docs/api/datamap.md)
10 | * [Axes](docs/api/axes.md)
11 | * [Margins](docs/api/margins.md)
12 | * [Text](docs/api/text.md)
13 | * [Scripts](docs/api/scripts.md)
14 | * [Template](docs/api/template.md)
15 | * [UI](docs/api/ui.md)
16 | * [Embed](docs/api/embed.md)
17 | * [Integrating with a backend](docs/chartwerk-backend.md)
18 | * [Embedding Chartwerk charts](docs/embedding.md)
19 | * [Developing](docs/developing.md)
20 |
21 |
--------------------------------------------------------------------------------
/bin/unbundle_dist.js:
--------------------------------------------------------------------------------
1 | const vfs = require('vinyl-fs');
2 | const path = require('path');
3 |
4 | // Change working directory to lib
5 | process.chdir(path.join(__dirname, '/../'));
6 |
7 | vfs.src('./dist/**/*').pipe(vfs.dest('./../../dist/'));
8 |
--------------------------------------------------------------------------------
/bin/unbundle_django.js:
--------------------------------------------------------------------------------
1 | const vfs = require('vinyl-fs');
2 | const path = require('path');
3 |
4 | // Change working directory to lib
5 | process.chdir(path.join(__dirname, '/../'));
6 |
7 | vfs.src('./dist/js/**/*').pipe(vfs.dest('./../../../static/chartwerk/js'));
8 | vfs.src('./dist/css/**/*').pipe(vfs.dest('./../../../static/chartwerk/css'));
9 | vfs.src('./dist/img/**/*').pipe(vfs.dest('./../../../static/chartwerk/img'));
10 | vfs.src('./dist/fonts/**/*').pipe(vfs.dest('./../../../static/chartwerk/fonts'));
11 | vfs.src(['./src/templates/**/*.html', '!./**/index.html', '!./**/base.html'])
12 | .pipe(vfs.dest('./../../../templates/chartwerk'));
13 |
--------------------------------------------------------------------------------
/book.json:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": [
3 | "github"
4 | ],
5 | "pluginsConfig": {
6 | "github": {
7 | "url": "https://github.com/DallasMorningNews/chartwerk-editor"
8 | }
9 | }
10 | }
--------------------------------------------------------------------------------
/demo/api/README.md:
--------------------------------------------------------------------------------
1 | The API data for this demo is hosted on Amazon Web Services S3 and rendered RESTfully through AWS Lambda and API Gateway.
2 |
--------------------------------------------------------------------------------
/demo/fonts/bootstrap/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DallasMorningNews/chartwerk-editor/86f7a9d5db3ee980307ca6a84d3b3e53fe8a7751/demo/fonts/bootstrap/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/demo/fonts/bootstrap/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DallasMorningNews/chartwerk-editor/86f7a9d5db3ee980307ca6a84d3b3e53fe8a7751/demo/fonts/bootstrap/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/demo/fonts/bootstrap/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DallasMorningNews/chartwerk-editor/86f7a9d5db3ee980307ca6a84d3b3e53fe8a7751/demo/fonts/bootstrap/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/demo/fonts/bootstrap/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DallasMorningNews/chartwerk-editor/86f7a9d5db3ee980307ca6a84d3b3e53fe8a7751/demo/fonts/bootstrap/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/demo/fonts/kraftwerk.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DallasMorningNews/chartwerk-editor/86f7a9d5db3ee980307ca6a84d3b3e53fe8a7751/demo/fonts/kraftwerk.ttf
--------------------------------------------------------------------------------
/demo/fonts/kraftwerk2.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DallasMorningNews/chartwerk-editor/86f7a9d5db3ee980307ca6a84d3b3e53fe8a7751/demo/fonts/kraftwerk2.ttf
--------------------------------------------------------------------------------
/demo/img/eq-red.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DallasMorningNews/chartwerk-editor/86f7a9d5db3ee980307ca6a84d3b3e53fe8a7751/demo/img/eq-red.gif
--------------------------------------------------------------------------------
/demo/img/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DallasMorningNews/chartwerk-editor/86f7a9d5db3ee980307ca6a84d3b3e53fe8a7751/demo/img/favicon.ico
--------------------------------------------------------------------------------
/demo/img/icons/danger.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DallasMorningNews/chartwerk-editor/86f7a9d5db3ee980307ca6a84d3b3e53fe8a7751/demo/img/icons/danger.png
--------------------------------------------------------------------------------
/demo/img/icons/disallowed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DallasMorningNews/chartwerk-editor/86f7a9d5db3ee980307ca6a84d3b3e53fe8a7751/demo/img/icons/disallowed.png
--------------------------------------------------------------------------------
/demo/img/icons/doubleColumn-disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DallasMorningNews/chartwerk-editor/86f7a9d5db3ee980307ca6a84d3b3e53fe8a7751/demo/img/icons/doubleColumn-disabled.png
--------------------------------------------------------------------------------
/demo/img/icons/doubleColumn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DallasMorningNews/chartwerk-editor/86f7a9d5db3ee980307ca6a84d3b3e53fe8a7751/demo/img/icons/doubleColumn.png
--------------------------------------------------------------------------------
/demo/img/icons/singleColumn-disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DallasMorningNews/chartwerk-editor/86f7a9d5db3ee980307ca6a84d3b3e53fe8a7751/demo/img/icons/singleColumn-disabled.png
--------------------------------------------------------------------------------
/demo/img/icons/singleColumn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DallasMorningNews/chartwerk-editor/86f7a9d5db3ee980307ca6a84d3b3e53fe8a7751/demo/img/icons/singleColumn.png
--------------------------------------------------------------------------------
/demo/img/loader.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DallasMorningNews/chartwerk-editor/86f7a9d5db3ee980307ca6a84d3b3e53fe8a7751/demo/img/loader.gif
--------------------------------------------------------------------------------
/demo/img/spinner.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DallasMorningNews/chartwerk-editor/86f7a9d5db3ee980307ca6a84d3b3e53fe8a7751/demo/img/spinner.gif
--------------------------------------------------------------------------------
/demo/img/tdmn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DallasMorningNews/chartwerk-editor/86f7a9d5db3ee980307ca6a84d3b3e53fe8a7751/demo/img/tdmn.png
--------------------------------------------------------------------------------
/demo/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
${text}
26 |Categorical | 124 |Sequential | 125 |Diverging | 126 |
---|---|---|
{schemes.categorical} | 131 |{schemes.sequential} | 132 |{schemes.diverging} | 133 |
99 | Successfully parsed {this.state.format} data 100 | 105 |
106 |79 | Patch backpack journalist commenters newsroom cafe paywall he said 80 | she said reporting, analytics crowdfunding advertising just across 81 | the wire monetization blowing up on Twitter paidContent. 82 |
83 | 84 | 85 | 86 |87 | Article Skimmer Groupon should isn't a business model digital first 88 | location-based Snarkmarket curmudgeon tags. What Would Google Do try 89 | PR Arianna AOL metered model twitterati This Week in Review. 90 |
91 |92 | Pictures of Goats section #twittermakesyoustupid, curation Nook 93 | newspaper strike gotta grok it before you rock it newsonomics 94 | copyright bot paidContent, Wilonsky hot news doctrine media diet audience 95 | atomization overcome iPhone app filters horse-race coverage Gutenberg 96 | parenthesis. Josh Marshall just across the wire the audience knows 97 | more than I do social media Romenesko open source Sulzberger 98 |
102 | Pictures of Goats section filters abundance crowdsourcing 100 | rubber cement, paidContent startups should isn't a business model. 101 |