├── .codeclimate.yml ├── .github ├── CONTRIBUTING.md └── workflows │ └── codeql-analysis.yml ├── .gitignore ├── .travis.yml ├── BaseDockerfile ├── Dockerfile ├── EndpointsDockerfile ├── LICENSE ├── MANIFEST.in ├── Makefile ├── Procfile ├── README.md ├── docker-compose.yml ├── docs ├── config.md ├── data_utils.md └── schemas.md ├── example_app ├── __init__.py ├── app.py ├── app_wsgi.py ├── endpoints.py ├── endpoints_wsgi.py ├── examples │ ├── config │ │ ├── all-errors.json │ │ ├── cytoscape.json │ │ ├── datatables.json │ │ ├── digraph.json │ │ ├── embeddable.json │ │ ├── example.json │ │ ├── fixedlayout-c3.json │ │ ├── fixedlayout-d3.json │ │ ├── fixedlayout.json │ │ ├── flamegraph.json │ │ ├── images.json │ │ ├── inputs.json │ │ ├── kitchensink.json │ │ ├── numbergroups.json │ │ ├── plotly.json │ │ ├── random │ │ │ └── transantarctic.json │ │ ├── shared-data.json │ │ ├── sigma.json │ │ ├── stresstest.json │ │ └── vegalite-fixed.json │ ├── cytoscape │ │ ├── basic.json │ │ ├── circle.json │ │ ├── compound.json │ │ ├── grid.json │ │ └── labels.json │ ├── dtable-override.json │ ├── dtable.json │ ├── filetree_digraph.dot │ ├── flamegraph │ │ └── stacks.json │ ├── flare-simple.json │ ├── flare.json │ ├── overrides.json │ ├── plotly │ │ ├── bar_line_dynamic.json │ │ ├── boxplot.json │ │ ├── bubblemap.json │ │ ├── cat_dot_plot.json │ │ ├── clustering3d.json │ │ ├── contour-colorscale.json │ │ ├── contour-null.json │ │ ├── contour-plot-crazy.json │ │ ├── contour-plot-grad.json │ │ ├── contour-smooth.json │ │ ├── contour.json │ │ ├── error_bars.json │ │ ├── fancy-scatter-wind.json │ │ ├── fancy-scatter.json │ │ ├── heatmap.json │ │ ├── histogram-2d.json │ │ ├── histogram-contour.json │ │ ├── histogram.json │ │ ├── inset.json │ │ ├── labels_plot.json │ │ ├── logplot.json │ │ ├── orthographic.json │ │ ├── polar.json │ │ ├── randomwalk3d.json │ │ ├── ribbon3d.json │ │ ├── scatter.json │ │ ├── scatter3d.json │ │ ├── scattermap.json │ │ ├── subplot.json │ │ ├── subplot3d.json │ │ ├── surface3d.json │ │ ├── ternary-lines.json │ │ ├── ternary.json │ │ ├── windrose.json │ │ └── world-chloropleth.json │ ├── screenshots │ │ ├── addmodule.png │ │ ├── inputs.png │ │ ├── kitchensink1.png │ │ ├── kitchensink2.png │ │ ├── listview.png │ │ ├── numbergroups.png │ │ ├── plotly.png │ │ └── vegalite.png │ ├── sigma │ │ └── basic.json │ ├── testfile.json │ ├── timeline3.json │ └── vegalite │ │ ├── bar.json │ │ ├── bar_aggregate.json │ │ ├── bar_grouped.json │ │ ├── becker_barley_trellis.json │ │ ├── binned_scatterplot.json │ │ ├── data │ │ ├── anscombe.json │ │ ├── barley.json │ │ ├── cars.json │ │ ├── github.csv │ │ ├── movies.json │ │ ├── population.json │ │ └── unemployment-across-industries.json │ │ ├── horizontal_error_bars.json │ │ ├── lifelines.json │ │ ├── normalized_stacked_area.json │ │ ├── punchcard.json │ │ ├── rect_heatmap.json │ │ ├── scatterplot.json │ │ ├── stacked_area.json │ │ ├── stacked_area_stream.json │ │ ├── stacked_bar_h.json │ │ ├── stacked_normalized.json │ │ ├── tick_strip.json │ │ └── trellis_anscombe.json ├── static │ ├── css │ │ └── vendor │ │ │ ├── bootstrap.min.css │ │ │ ├── c3.min.css │ │ │ ├── d3.flameGraph.css │ │ │ ├── dataTables.bootstrap.min.css │ │ │ └── timeline.css │ └── js │ │ └── vendor │ │ ├── bootstrap.min.js │ │ ├── c3.min.js │ │ ├── cytoscape.min.js │ │ ├── d3.flameGraph.js │ │ ├── d3.layout.cloud.min.js │ │ ├── d3.min.js │ │ ├── d3.tip.v0.6.3.js │ │ ├── dagre-d3.min.js │ │ ├── dataTables.bootstrap.min.js │ │ ├── graphlib-dot.min.js │ │ ├── jquery.dataTables.min.js │ │ ├── jquery.min.js │ │ ├── jquery.sparkline.min.js │ │ ├── plotly-latest.min.js │ │ ├── sigma.min.js │ │ ├── timeline.js │ │ ├── vega-embed.min.js │ │ ├── vega-lite.min.js │ │ ├── vega.min.js │ │ └── venn.js └── templates │ ├── examples │ ├── carousel.html │ ├── custom.html │ ├── inline-chart-hexbin.html │ ├── inline-chart.html │ ├── inline-map.html │ ├── inline-sparklines.html │ ├── map.html │ ├── subpanels.html │ └── tabbed-widget.html │ └── layouts │ └── base.html ├── flask_jsondash ├── __init__.py ├── charts_builder.py ├── data_utils │ ├── __init__.py │ ├── filetree.py │ ├── filetree_digraph.py │ └── wordcloud.py ├── db.py ├── model_factories.py ├── mongo_adapter.py ├── schema.py ├── settings.py ├── static │ ├── __init__.py │ ├── css │ │ ├── app.css │ │ ├── fonts │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ │ ├── overrides.css │ │ └── vendor │ │ │ ├── font-awesome.css │ │ │ ├── images │ │ │ ├── ui-icons_444444_256x240.png │ │ │ ├── ui-icons_555555_256x240.png │ │ │ ├── ui-icons_777620_256x240.png │ │ │ ├── ui-icons_777777_256x240.png │ │ │ ├── ui-icons_cc0000_256x240.png │ │ │ └── ui-icons_ffffff_256x240.png │ │ │ ├── jquery-ui.min.css │ │ │ └── timeline.css │ └── js │ │ ├── api.js │ │ ├── app.js │ │ ├── handlers.js │ │ ├── utils.js │ │ └── vendor │ │ ├── jRespond.min.js │ │ ├── jquery-ui.min.js │ │ └── packery.pkgd.min.js ├── templates │ ├── __init__.py │ ├── layouts │ │ └── charts_base.html │ ├── pages │ │ ├── chart_detail.html │ │ └── charts_index.html │ └── partials │ │ ├── dashboard-edit-modal.html │ │ ├── dashboard-global-form.html │ │ ├── dashboard-json-form.html │ │ ├── dashboard-options.html │ │ └── form-diagram-options.html └── utils.py ├── setup.cfg ├── setup.py ├── test_js ├── appSpec.js ├── runner.py └── utilsSpec.js ├── tests ├── conftest.py ├── test_auth.py ├── test_charts_builder.py ├── test_config.py ├── test_config_examples.py ├── test_data_utils_filetree.py ├── test_data_utils_filetree_digraph.py ├── test_db.py ├── test_filters.py ├── test_global_flags.py ├── test_jsonschema.py ├── test_layouts_freeform.py ├── test_layouts_grid.py ├── test_metadata.py ├── test_model_factories.py ├── test_mongo_adapter.py ├── test_paginator.py ├── test_utils.py └── test_wordcloud.py └── tox.ini /.codeclimate.yml: -------------------------------------------------------------------------------- 1 | languages: 2 | javascript: true 3 | python: true 4 | exclude_paths: 5 | - "example_app" 6 | - "flask_jsondash/static/js/vendor" 7 | - "flask_jsondash/static/css/vendor" 8 | - "tests" 9 | - "tests_js" 10 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | ## Filing issues 2 | 3 | ### Requirements 4 | 5 | 1. Please be as detailed as possible and provide plenty of context. 6 | 2. Please use as many relevant labels as necessary to ensure work is properly categorized. 7 | 8 | ## Contributing 9 | 10 | ### A couple requirements: 11 | 12 | 1. Where appropriate (all python code) unit tests are required. JS unit tests are encouraged but at the moment are not well instrumented. 13 | 2. Coverage must meet or exceed percentage set in the tox file (usually 98%) 14 | 3. Massive changes should be proposed as issues before any work is done (e.g. I don't like jquery - let's switch to X will be closed if a PR is submitted without discussion). 15 | 4. Create a README.md with as much useful info as possible in your services module (e.g. `/services//README.md`) 16 | 17 | ### If adding new chart types, examples, etc... you must: 18 | 19 | 1. Provide example configurations to load the dashboard. 20 | 2. Provide example endpoints to pull data from (that correspond to the configuration in 1.) or: 21 | 3. Provide example raw data (as json) if no endpoints are specified 22 | 4. Ensure all configurations are validated as a correct schema (the tool does this automatically when editing via "raw json" mode). 23 | 24 | **Adding** new charts - tips for integration: 25 | 26 | 1. Add you chart config in the `settings.py` file. 27 | 2. Add your handler in `handlers.js` 28 | 3. Reference the handler in the `app.js` code. 29 | 4. Add example endpoint as needed. 30 | 5. Add local library to the example app, and add remote urls for CDN (cdnjs works great.) in the config. 31 | 6. Ensure it works and all assets are available. 32 | 33 | Then add the requirements above to ensure everything is complete. 34 | -------------------------------------------------------------------------------- /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | # For most projects, this workflow file will not need changing; you simply need 2 | # to commit it to your repository. 3 | # 4 | # You may wish to alter this file to override the set of languages analyzed, 5 | # or to provide custom queries or build logic. 6 | # 7 | # ******** NOTE ******** 8 | # We have attempted to detect the languages in your repository. Please check 9 | # the `language` matrix defined below to confirm you have the correct set of 10 | # supported CodeQL languages. 11 | # 12 | name: "CodeQL" 13 | 14 | on: 15 | push: 16 | branches: [ "master" ] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [ "master" ] 20 | schedule: 21 | - cron: '15 6 * * 1' 22 | 23 | jobs: 24 | analyze: 25 | name: Analyze 26 | runs-on: ubuntu-latest 27 | permissions: 28 | actions: read 29 | contents: read 30 | security-events: write 31 | 32 | strategy: 33 | fail-fast: false 34 | matrix: 35 | language: [ 'javascript', 'python' ] 36 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] 37 | # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support 38 | 39 | steps: 40 | - name: Checkout repository 41 | uses: actions/checkout@v3 42 | 43 | # Initializes the CodeQL tools for scanning. 44 | - name: Initialize CodeQL 45 | uses: github/codeql-action/init@v2 46 | with: 47 | languages: ${{ matrix.language }} 48 | # If you wish to specify custom queries, you can do so here or in a config file. 49 | # By default, queries listed here will override any specified in a config file. 50 | # Prefix the list here with "+" to use these queries and those in the config file. 51 | 52 | # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs 53 | # queries: security-extended,security-and-quality 54 | 55 | 56 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). 57 | # If this step fails, then you should remove it and run the build manually (see below) 58 | - name: Autobuild 59 | uses: github/codeql-action/autobuild@v2 60 | 61 | # ℹ️ Command-line programs to run using the OS shell. 62 | # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun 63 | 64 | # If the Autobuild fails above, remove it and uncomment the following three lines. 65 | # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. 66 | 67 | # - run: | 68 | # echo "Run, Build Application using script" 69 | # ./location_of_script_within_repo/buildscript.sh 70 | 71 | - name: Perform CodeQL Analysis 72 | uses: github/codeql-action/analyze@v2 73 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # ---------- Misc --------- # 2 | 3 | /**/geckodriver.log 4 | *.sublime-* 5 | *.log 6 | *.pyc 7 | settings_dev.py 8 | *.db 9 | node_modules/ 10 | /**/node_modules/ 11 | /**/*.log 12 | ignored 13 | .DS_Store 14 | .idea 15 | *.log 16 | src/ensemble-app 17 | __pycache__ 18 | 19 | # Byte-compiled / optimized / DLL files 20 | __pycache__/ 21 | *.py[cod] 22 | *$py.class 23 | 24 | python3* 25 | python2.* 26 | 27 | # C extensions 28 | *.so 29 | 30 | # Distribution / packaging 31 | .Python 32 | env/ 33 | build/ 34 | develop-eggs/ 35 | ./dist/ 36 | downloads/ 37 | eggs/ 38 | .eggs/ 39 | lib/ 40 | lib64/ 41 | parts/ 42 | sdist/ 43 | var/ 44 | *.egg-info/ 45 | .installed.cfg 46 | *.egg 47 | 48 | # PyInstaller 49 | # Usually these files are written by a python script from a template 50 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 51 | *.manifest 52 | *.spec 53 | 54 | # Installer logs 55 | pip-log.txt 56 | pip-delete-this-directory.txt 57 | 58 | # Unit test / coverage reports 59 | htmlcov/ 60 | .tox/ 61 | .coverage 62 | .coverage.* 63 | .cache 64 | nosetests.xml 65 | coverage.xml 66 | *,cover 67 | .hypothesis/ 68 | 69 | # Translations 70 | *.mo 71 | *.pot 72 | 73 | # Django stuff: 74 | *.log 75 | local_settings.py 76 | 77 | # Flask stuff: 78 | instance/ 79 | .webassets-cache 80 | 81 | # Scrapy stuff: 82 | .scrapy 83 | 84 | # Sphinx documentation 85 | docs/_build/ 86 | 87 | # PyBuilder 88 | target/ 89 | 90 | # IPython Notebook 91 | .ipynb_checkpoints 92 | 93 | # pyenv 94 | .python-version 95 | 96 | # celery beat schedule file 97 | celerybeat-schedule 98 | 99 | # dotenv 100 | .env 101 | 102 | # virtualenv 103 | venv/ 104 | ENV/ 105 | 106 | # Spyder project settings 107 | .spyderproject 108 | 109 | # Rope project settings 110 | .ropeproject 111 | 112 | # ---------- Virtual Env --------- # 113 | bin/ 114 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | test: 2 | pytest tests 3 | sudo: false 4 | language: python 5 | cache: pip 6 | matrix: 7 | include: 8 | - python: 2.7 9 | env: 10 | - TOXENV=py27 11 | - python: 3.5 12 | env: 13 | - TOXENV=py35 14 | - python: 3.6 15 | env: 16 | - TOXENV=py36 17 | notifications: 18 | email: 19 | recipients: 20 | - dxdstudio@gmail.com 21 | on_failure: always 22 | on_success: always 23 | install: 24 | - pip install -U coveralls 25 | - pip install -U tox 26 | - pip install -U pytest 27 | - pip install -U pyquery 28 | - python setup.py install 29 | script: tox -e $TOXENV 30 | after_success: 31 | coveralls 32 | -------------------------------------------------------------------------------- /BaseDockerfile: -------------------------------------------------------------------------------- 1 | FROM python:2.7-slim 2 | MAINTAINER Chris Tabor "dxdstudio@gmail.com" 3 | 4 | RUN apt-get update -y 5 | RUN apt-get install python-pip python-dev build-essential --assume-yes 6 | RUN pip install --upgrade pip 7 | RUN pip install gunicorn 8 | 9 | COPY . /app 10 | WORKDIR /app 11 | 12 | RUN pip install -e . 13 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM jsondash_base:latest 2 | MAINTAINER Chris Tabor "dxdstudio@gmail.com" 3 | 4 | WORKDIR /app/example_app 5 | 6 | EXPOSE 8080 7 | ENTRYPOINT ["gunicorn", "--bind", "0.0.0.0:8080", "app_wsgi:app"] 8 | -------------------------------------------------------------------------------- /EndpointsDockerfile: -------------------------------------------------------------------------------- 1 | FROM jsondash_base:latest 2 | MAINTAINER Chris Tabor "dxdstudio@gmail.com" 3 | 4 | WORKDIR /app/example_app 5 | 6 | RUN pip install flask-cors 7 | 8 | EXPOSE 5004 9 | ENTRYPOINT ["gunicorn", "--bind", "0.0.0.0:5004", "endpoints_wsgi:app"] 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Chris Tabor 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | graft flask_jsondash 2 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: cleanpyc cleanbuild clean tests coverage dockerize help pypi testdata analysis fixtures fixturize 2 | all: clean cleanpyc cleanbuild tests 3 | analysis: 4 | prospector -s veryhigh flask_jsondash 5 | clean: 6 | rm -rf .tox/ 7 | rm -rf coverage_report 8 | cleanbuild: 9 | rm -rf build 10 | rm -rf dist 11 | cleanpyc: 12 | find . -name '*.pyc' -exec rm -f {} + 13 | find . -name '*.pyo' -exec rm -f {} + 14 | find . -name '*~' -exec rm -f {} + 15 | coverage: clean 16 | pytest -s -v --cov-report html:coverage_report --cov=flask_jsondash tests ; open coverage_report/index.html 17 | dockerize: 18 | docker build --tag jsondash_base:latest -f BaseDockerfile . 19 | docker-compose build ; docker-compose up 20 | dropall: 21 | python -m flask_jsondash.model_factories --delete 22 | fixtures: 23 | python -m flask_jsondash.model_factories --fixtures example_app/examples/config 24 | fixturize: 25 | mkdir -p fixtures/ 26 | python -m flask_jsondash.model_factories --dump fixtures 27 | pypi: 28 | python setup.py sdist upload -r pypi 29 | sort: 30 | # https://github.com/timothycrosley/isort 31 | isort -rc flask_jsondash 32 | tests: 33 | tox 34 | testdata: 35 | python -m flask_jsondash.model_factories --records 10 36 | help: 37 | @echo "all ......... Runs cleanup and tests" 38 | @echo "analysis .... Run prospector analysis" 39 | @echo "clean ....... Cleanup coverage" 40 | @echo "cleanbuild .. Cleanup build and packaging related bits" 41 | @echo "cleanpyc .... Remove .pyc files." 42 | @echo "coverage .... Generate coverage statistics and html" 43 | @echo "dockerize ... Setup docker containers and initialize example apps" 44 | @echo "dropall ..... Delete all dashboards" 45 | @echo "fixtures .... Load all example dashboards" 46 | @echo "fixturize ... Convert existing database records to fixtures" 47 | @echo "tests ....... Run all tests" 48 | @echo "testdata .... Generate some test data" 49 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | mongodb: 4 | container_name: 'jsondash-db' 5 | image: mongo:latest 6 | ports: 7 | - "27017:27017" 8 | endpoints: 9 | container_name: 'endpoints-web' 10 | build: 11 | context: . 12 | dockerfile: EndpointsDockerfile 13 | ports: 14 | - "5004:5004" 15 | environment: 16 | - PORT=5004 17 | - HOST=0.0.0.0 18 | jsondash: 19 | container_name: 'jsondash-web' 20 | build: 21 | context: . 22 | dockerfile: Dockerfile 23 | ports: 24 | - "8080:8080" 25 | environment: 26 | - PORT=8080 27 | - HOST=0.0.0.0 28 | - CHARTS_DB_HOST=jsondash-db 29 | links: 30 | - endpoints 31 | - mongodb 32 | -------------------------------------------------------------------------------- /docs/data_utils.md: -------------------------------------------------------------------------------- 1 | # Data utilities 2 | 3 | Python scripts for generating schema appropriate data from various contexts. 4 | 5 | ## How it's organized 6 | 7 | Below is a list of python modules and their methods. When in doubt, check the overall [data utils](../flask_jsondash/data_utils/) module for more. 8 | 9 | For certain modules, extra packages need to be installed. These are all specified where the namespace matches the module name, in `setup.py`, which you [can see here](../setup.py) 10 | 11 | Any module that supports command line usage will be accessible via `python MODULE_NAME.py`. To find out how to use them, just run `python MODULE_NAME.py --help`, or look at the source. 12 | 13 | ## Modules 14 | 15 | ### `filetree.py` 16 | 17 | `get_tree`: build a json representation of a filesystem tree appropriate for creating dendrograms, treemaps and radial dendrograms. See [schemas](schemas.md#d3) for more info on these chart types. 18 | 19 | ### `filetree_digraph.py` 20 | 21 | `get_dotfile_tree`: build a [dotfile](http://www.graphviz.org/doc/info/lang.html) representation of a filesystem tree appropriate for creating graphs and digraphs. See [schemas](schemas.md#graph) for more info on these chart types. 22 | 23 | ### `wordcloud.py` 24 | 25 | `get_word_freq_distribution`: create a counter with word frequencies. 26 | 27 | `format_4_wordcloud`: create wordcloud friendly config from words. 28 | 29 | `url2wordcloud`: Get the html content of a url, clean up, find the word frequency, and format in a way suitable for use directly in a wordcloud. 30 | -------------------------------------------------------------------------------- /example_app/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/christabor/flask_jsondash/0a6690da56492cf3fbda3053e200592bcae2aa37/example_app/__init__.py -------------------------------------------------------------------------------- /example_app/app.py: -------------------------------------------------------------------------------- 1 | """This is an example app, demonstrating usage.""" 2 | 3 | import os 4 | 5 | from flask import Flask 6 | 7 | from flask_jsondash.charts_builder import charts 8 | 9 | app = Flask(__name__) 10 | app.config['SECRET_KEY'] = 'NOTSECURELOL' 11 | app.config.update( 12 | JSONDASH_FILTERUSERS=False, 13 | JSONDASH_GLOBALDASH=True, 14 | JSONDASH_GLOBAL_USER='global', 15 | ) 16 | app.debug = True 17 | app.register_blueprint(charts) 18 | 19 | 20 | def _can_edit_global(): 21 | return True 22 | 23 | 24 | def _can_delete(): 25 | return True 26 | 27 | 28 | def _can_clone(): 29 | return True 30 | 31 | 32 | def _get_username(): 33 | return 'anonymous' 34 | 35 | 36 | # Config examples. 37 | app.config['JSONDASH'] = dict( 38 | metadata=dict( 39 | created_by=_get_username, 40 | username=_get_username, 41 | ), 42 | static=dict( 43 | js_path='js/vendor/', 44 | css_path='css/vendor/', 45 | ), 46 | auth=dict( 47 | edit_global=_can_edit_global, 48 | clone=_can_clone, 49 | delete=_can_delete, 50 | ) 51 | ) 52 | 53 | 54 | @app.route('/', methods=['GET']) 55 | def index(): 56 | """Sample index.""" 57 | return 'Visit the charts blueprint.' 58 | 59 | 60 | if __name__ == '__main__': 61 | PORT = int(os.getenv('PORT', 8080)) 62 | HOST = os.getenv('HOST', '0.0.0.0') 63 | app.run(debug=True, host=HOST, port=PORT) 64 | -------------------------------------------------------------------------------- /example_app/app_wsgi.py: -------------------------------------------------------------------------------- 1 | """WSGI entrypoint for gunicorn et al.""" 2 | 3 | from app import app 4 | -------------------------------------------------------------------------------- /example_app/endpoints_wsgi.py: -------------------------------------------------------------------------------- 1 | """WSGI entrypoint for gunicorn et al.""" 2 | 3 | from endpoints import app 4 | -------------------------------------------------------------------------------- /example_app/examples/config/all-errors.json: -------------------------------------------------------------------------------- 1 | { 2 | "username": "anonymous", 3 | "layout": "grid", 4 | "category": "Stress & Error testing", 5 | "name": "Endpoint Error Testing", 6 | "modules": [ 7 | { 8 | "name": "Fail 500", 9 | "family": "C3", 10 | "refresh": false, 11 | "height": 300, 12 | "width": "col-3", 13 | "dataSource": "http://127.0.0.1:5004/deadend?sleep=1&sleep_for=1&error_code=500", 14 | "override": true, 15 | "refreshInterval": null, 16 | "guid": "01-abc-123-456-1", 17 | "type": "bar", 18 | "row": 1 19 | }, 20 | { 21 | "name": "Fail 501", 22 | "family": "C3", 23 | "refresh": false, 24 | "height": 300, 25 | "width": "col-3", 26 | "dataSource": "http://127.0.0.1:5004/deadend?sleep=1&sleep_for=1&error_code=501", 27 | "override": true, 28 | "refreshInterval": null, 29 | "guid": "01-abc-123-456-2", 30 | "type": "bar", 31 | "row": 1 32 | }, 33 | { 34 | "name": "Fail 502", 35 | "family": "C3", 36 | "refresh": false, 37 | "height": 300, 38 | "width": "col-3", 39 | "dataSource": "http://127.0.0.1:5004/deadend?sleep=1&sleep_for=1&error_code=502", 40 | "override": true, 41 | "refreshInterval": null, 42 | "guid": "01-abc-123-456-3", 43 | "type": "bar", 44 | "row": 1 45 | }, 46 | { 47 | "name": "Fail 503", 48 | "family": "C3", 49 | "refresh": false, 50 | "height": 300, 51 | "width": "col-3", 52 | "dataSource": "http://127.0.0.1:5004/deadend?sleep=1&sleep_for=1&error_code=503", 53 | "override": true, 54 | "refreshInterval": null, 55 | "guid": "01-abc-123-456-4", 56 | "type": "bar", 57 | "row": 1 58 | }, 59 | { 60 | "name": "Fail 504", 61 | "family": "C3", 62 | "refresh": false, 63 | "height": 300, 64 | "width": "col-3", 65 | "dataSource": "http://127.0.0.1:5004/deadend?sleep=1&sleep_for=1&error_code=504", 66 | "override": true, 67 | "refreshInterval": null, 68 | "guid": "01-abc-123-456-5", 69 | "type": "bar", 70 | "row": 2 71 | }, 72 | { 73 | "name": "Fail 505", 74 | "family": "C3", 75 | "refresh": false, 76 | "height": 300, 77 | "width": "col-3", 78 | "dataSource": "http://127.0.0.1:5004/deadend?sleep=1&sleep_for=1&error_code=505", 79 | "override": true, 80 | "refreshInterval": null, 81 | "guid": "01-abc-123-456-6", 82 | "type": "bar", 83 | "row": 2 84 | } 85 | ], 86 | "created_by": "global", 87 | "date": "2017-05-11 12:13:02.612000", 88 | "id": "a7e3d5ad-9959-45fe-abe8-9b98b6417623" 89 | } 90 | -------------------------------------------------------------------------------- /example_app/examples/config/cytoscape.json: -------------------------------------------------------------------------------- 1 | { 2 | "username": "anonymous", 3 | "layout": "grid", 4 | "category": "Graphs", 5 | "name": "Cytoscape core layouts examples", 6 | "modules": [ 7 | { 8 | "name": "Grid", 9 | "family": "Cytoscape", 10 | "refresh": false, 11 | "height": 500, 12 | "width": "col-4", 13 | "dataSource": "http://127.0.0.1:5004/cytoscape?name=grid", 14 | "override": false, 15 | "refreshInterval": null, 16 | "guid": "e5b750b3-3375-c04a-2307-920f4b8fc173", 17 | "type": "cytoscape", 18 | "order": 3, 19 | "row": 1 20 | }, 21 | { 22 | "name": "Compound nodes", 23 | "family": "Cytoscape", 24 | "refresh": false, 25 | "height": 500, 26 | "width": "col-4", 27 | "dataSource": "http://127.0.0.1:5004/cytoscape?name=compound", 28 | "override": false, 29 | "refreshInterval": null, 30 | "guid": "63802c53-37c5-b2af-ac88-8a5e5b2ff5e4", 31 | "type": "cytoscape", 32 | "order": 1, 33 | "row": 1 34 | }, 35 | { 36 | "name": "Grid of labels", 37 | "family": "Cytoscape", 38 | "refresh": false, 39 | "height": 620, 40 | "width": "col-6", 41 | "dataSource": "http://127.0.0.1:5004/cytoscape?name=labels", 42 | "override": false, 43 | "refreshInterval": null, 44 | "guid": "94820093-c2e8-a0c9-83b8-788e1d254a82", 45 | "type": "cytoscape", 46 | "order": 0, 47 | "row": 2 48 | }, 49 | { 50 | "name": "Basic", 51 | "family": "Cytoscape", 52 | "refresh": false, 53 | "height": 500, 54 | "width": "col-4", 55 | "dataSource": "http://127.0.0.1:5004/cytoscape?name=basic", 56 | "override": false, 57 | "refreshInterval": null, 58 | "guid": "7a86178e-90ae-e3e9-74de-19786d12afca", 59 | "type": "cytoscape", 60 | "order": 2, 61 | "row": 1 62 | }, 63 | { 64 | "name": "Circle", 65 | "family": "Cytoscape", 66 | "refresh": false, 67 | "height": 620, 68 | "width": "col-6", 69 | "dataSource": "http://127.0.0.1:5004/cytoscape?name=circle", 70 | "override": false, 71 | "refreshInterval": null, 72 | "guid": "6871916a-561c-cafb-13e9-a9ff9daf1cc9", 73 | "type": "cytoscape", 74 | "order": 1, 75 | "row": 2 76 | } 77 | ], 78 | "created_by": "global", 79 | "date": "2017-05-14 15:23:08.304219", 80 | "id": "55aab6f3-38e7-11e7-96fb-a0999b0aebbf" 81 | } 82 | -------------------------------------------------------------------------------- /example_app/examples/config/datatables.json: -------------------------------------------------------------------------------- 1 | { 2 | "date": "2016-08-23 15:03:49.178000", 3 | "layout": "grid", 4 | "modules": [ 5 | { 6 | "name": "datatable", 7 | "family": "DataTable", 8 | "height": 600, 9 | "width": "col-6", 10 | "dataSource": "http://127.0.0.1:5004/dtable", 11 | "override": false, 12 | "guid": "c3a9c36b-edc1-6627-340c-07da627b2175", 13 | "type": "datatable", 14 | "row": 1 15 | }, 16 | { 17 | "name": "Datatable override", 18 | "family": "DataTable", 19 | "refresh": false, 20 | "height": 600, 21 | "width": "col-6", 22 | "dataSource": "http://127.0.0.1:5004/dtable?override=1", 23 | "override": true, 24 | "refreshInterval": 10000, 25 | "guid": "c1a9c36b-edc1-6627-340c-333aaaa", 26 | "type": "datatable", 27 | "row": 1 28 | } 29 | ], 30 | "id": "a16401b0-1c4e-11e6-b9a3-a0999asdok02223d", 31 | "name": "Datatable" 32 | } 33 | -------------------------------------------------------------------------------- /example_app/examples/config/digraph.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "5d63f70e-43c2-4eae-9334-a1565e8d96c9", 3 | "layout": "freeform", 4 | "date": "2017-04-17 09:36:22.194277", 5 | "username": "global", 6 | "category": "Graphs", 7 | "name": "Digraph examples", 8 | "modules": [ 9 | { 10 | "name": "Digraph example", 11 | "family": "Graph", 12 | "refresh": false, 13 | "height": 332, 14 | "width": 383, 15 | "dataSource": "http://127.0.0.1:5004/digraph?simple=true", 16 | "override": false, 17 | "refreshInterval": null, 18 | "guid": "541ebad2-dfbe-2c51-ac4a-b960f992ed06", 19 | "type": "graph", 20 | "order": 0 21 | }, 22 | { 23 | "name": "Simple graph", 24 | "family": "Graph", 25 | "refresh": false, 26 | "height": 414, 27 | "width": 550, 28 | "dataSource": "http://127.0.0.1:5004/digraph", 29 | "override": false, 30 | "refreshInterval": null, 31 | "guid": "6070041f-fd39-7c80-2889-05f524644533", 32 | "type": "graph", 33 | "order": 1 34 | }, 35 | { 36 | "name": "digraph file example", 37 | "family": "Graph", 38 | "refresh": false, 39 | "height": 241, 40 | "width": 488, 41 | "dataSource": "http://127.0.0.1:5004/digraph?filetree=1", 42 | "override": false, 43 | "refreshInterval": null, 44 | "guid": "61dafd6e-cb25-f247-3a0b-3b2f47fcb173", 45 | "type": "graph", 46 | "order": 2 47 | } 48 | ], 49 | "created_by": "global" 50 | } 51 | -------------------------------------------------------------------------------- /example_app/examples/config/embeddable.json: -------------------------------------------------------------------------------- 1 | { 2 | "username": "anonymous", 3 | "layout": "grid", 4 | "category": "Performance & Tricks", 5 | "name": "Embeddable", 6 | "modules": [ 7 | { 8 | "name": "Embedded 1", 9 | "family": "Basic", 10 | "refresh": false, 11 | "height": 1300, 12 | "width": "col-12", 13 | "classes": [], 14 | "dataSource": "http://127.0.0.1:8080/charts/e078c535-368b-11e7-93d6-a0999b0aebbf?embeddable=1", 15 | "override": false, 16 | "refreshInterval": null, 17 | "guid": "cf938d99-b29c-0838-63de-8d3092af29d6", 18 | "type": "iframe", 19 | "order": 0, 20 | "row": 1 21 | } 22 | ], 23 | "created_by": "global", 24 | "date": "2017-06-15 12:15:36.571120", 25 | "id": "dd7ad84f-51fd-11e7-9eaa-a0999b0aebbf" 26 | } 27 | -------------------------------------------------------------------------------- /example_app/examples/config/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "28d8aa4c-c98b-46ae-af86-1593025a3f7c", 3 | "date" : "2015-12-28T00:39:04.209Z", 4 | "name": "basic view", 5 | "layout": "freeform", 6 | "modules": [ 7 | { 8 | "family": "C3", 9 | "type": "timeseries", 10 | "name": "name3", 11 | "width": 510, 12 | "height": 400, 13 | "guid": "0123-abc-def-ghi-jkl", 14 | "dataSource": "http://localhost:5001/test1" 15 | }, 16 | { 17 | "family": "Basic", 18 | "type" : "iframe", 19 | "name" : "sparklines1", 20 | "height" : 200, 21 | "width" : 400, 22 | "guid": "0123-abc-def-ghi-jkl2", 23 | "dataSource": "/examples/inline-sparklines.html" 24 | }, 25 | { 26 | "family": "Timeline", 27 | "type" : "timeline", 28 | "name" : "timeline", 29 | "height" : 500, 30 | "width" : 1000, 31 | "guid": "0123-abc-def-ghi-jkl3", 32 | "dataSource" : "http://localhost:5001/timeline/" 33 | }, 34 | { 35 | "family": "C3", 36 | "type": "pie", 37 | "name": "name4", 38 | "width": 510, 39 | "height": 400, 40 | "guid": "0123-abc-def-ghi-jkl4", 41 | "dataSource": "http://localhost:5001/test1" 42 | }, 43 | { 44 | "family": "Basic", 45 | "type": "iframe", 46 | "name": "hexbin1", 47 | "width": 600, 48 | "height": 400, 49 | "guid": "0123-abc-def-ghi-jkl5", 50 | "dataSource": "/examples/inline-chart-hexbin.html" 51 | }, 52 | { 53 | "family": "Basic", 54 | "type": "iframe", 55 | "name": "inline1", 56 | "width": 600, 57 | "height": 400, 58 | "guid": "0123-abc-def-ghi-jkl6", 59 | "dataSource": "/examples/inline-chart.html" 60 | }, 61 | { 62 | "family": "Basic", 63 | "type": "custom", 64 | "name": "tabsthing", 65 | "width": 510, 66 | "height": 400, 67 | "guid": "0123-abc-def-ghi-jkl7", 68 | "dataSource": "/examples/tabbed-widget.html" 69 | }, 70 | { 71 | "family": "C3", 72 | "type": "line", 73 | "name": "name5", 74 | "width": 510, 75 | "height": 400, 76 | "guid": "0123-abc-def-ghi-jkl8", 77 | "dataSource": "http://localhost:5001/test1" 78 | }, 79 | { 80 | "family": "C3", 81 | "type": "step", 82 | "name": "name6", 83 | "width": 510, 84 | "height": 400, 85 | "guid": "0123-abc-def-ghi-jkl9", 86 | "dataSource": "http://localhost:5001/test1" 87 | }, 88 | { 89 | "family": "C3", 90 | "type": "bar", 91 | "name": "name7", 92 | "width": 510, 93 | "height": 400, 94 | "guid": "0123-abc-def-ghi-jkl10", 95 | "dataSource": "http://localhost:5001/test1" 96 | }, 97 | { 98 | "family": "DataTable", 99 | "type": "datatable", 100 | "name": "name8", 101 | "width": 510, 102 | "height": 400, 103 | "guid": "0123-abc-def-ghi-jkl11", 104 | "dataSource": "http://localhost:5001/test1" 105 | } 106 | ] 107 | } 108 | -------------------------------------------------------------------------------- /example_app/examples/config/fixedlayout-d3.json: -------------------------------------------------------------------------------- 1 | { 2 | "username": "anonymous", 3 | "layout": "grid", 4 | "name": "Fixed layout d3 only", 5 | "modules": [ 6 | { 7 | "name": "circlepack", 8 | "family": "D3", 9 | "height": 900, 10 | "width": "col-6", 11 | "dataSource": "http://127.0.0.1:5004/circlepack", 12 | "override": false, 13 | "refreshInterval": null, 14 | "guid": "79178d58-a690-37ec-3594-84516d263e9e", 15 | "type": "circlepack", 16 | "order": null, 17 | "row": 3 18 | }, 19 | { 20 | "name": "Treemap", 21 | "family": "D3", 22 | "height": 900, 23 | "width": "col-6", 24 | "dataSource": "http://127.0.0.1:5004/treemap", 25 | "override": false, 26 | "refreshInterval": null, 27 | "guid": "139b6c94-99ae-4aa3-d525-812642d91b03", 28 | "type": "treemap", 29 | "order": null, 30 | "row": 3 31 | }, 32 | { 33 | "name": "Radial dendrogram", 34 | "family": "D3", 35 | "height": 900, 36 | "width": "col-6", 37 | "dataSource": "http://127.0.0.1:5004/dendrogram?radial=1&simple=1", 38 | "override": false, 39 | "refreshInterval": null, 40 | "guid": "61dca3d8-c713-2b0b-ce68-5d93fff19fa5", 41 | "type": "radial-dendrogram", 42 | "order": null, 43 | "row": 2 44 | }, 45 | { 46 | "name": "Voronoi", 47 | "family": "D3", 48 | "refresh": false, 49 | "height": 380, 50 | "width": "col-6", 51 | "dataSource": "http://127.0.0.1:5004/voronoi", 52 | "override": false, 53 | "refreshInterval": null, 54 | "guid": "0dfd4215-94f1-f5b0-51ea-5898f7f2798a", 55 | "type": "voronoi", 56 | "order": null, 57 | "row": 2 58 | }, 59 | { 60 | "name": "Dendrogram", 61 | "family": "D3", 62 | "height": 900, 63 | "width": "col-12", 64 | "dataSource": "http://127.0.0.1:5004/dendrogram?simple=1", 65 | "override": false, 66 | "guid": "0b7e0c94-e526-4821-706c-b038ec42322b", 67 | "type": "dendrogram", 68 | "row": 1 69 | } 70 | ], 71 | "created_by": "global", 72 | "date": "2017-04-17 09:36:22.194277", 73 | "id": "6880f947-21b6-11e7-b27a-a0999b0aebbf" 74 | } 75 | -------------------------------------------------------------------------------- /example_app/examples/config/flamegraph.json: -------------------------------------------------------------------------------- 1 | { 2 | "username": "anonymous", 3 | "category": "uncategorized", 4 | "layout": "grid", 5 | "name": "D3-flamegraph-demo", 6 | "modules": [ 7 | { 8 | "name": "Basic Flamegraph", 9 | "family": "FlameGraph", 10 | "refresh": false, 11 | "height": 500, 12 | "width": "col-6", 13 | "classes": [], 14 | "dataSource": "http://127.0.0.1:5004/flamegraph", 15 | "override": false, 16 | "refreshInterval": null, 17 | "guid": "3fb2e83f-03b0-a81c-415d-696da49f5e85", 18 | "type": "flamegraph", 19 | "order": 0, 20 | "row": 1 21 | }, 22 | { 23 | "name": "Basic Flamegraph - wide", 24 | "family": "FlameGraph", 25 | "refresh": false, 26 | "height": 500, 27 | "width": "col-12", 28 | "classes": [], 29 | "dataSource": "http://127.0.0.1:5004/flamegraph", 30 | "override": false, 31 | "refreshInterval": null, 32 | "guid": "3fb2e83f-03b0-a81c-415d-696da49f53ad2", 33 | "type": "flamegraph", 34 | "order": 0, 35 | "row": 1 36 | } 37 | ], 38 | "created_by": "global", 39 | "date": "2017-07-31 22:55:34.267273", 40 | "id": "f8a9c740-767d-11e7-9b3a-a0999b0aebbf" 41 | } 42 | -------------------------------------------------------------------------------- /example_app/examples/config/images.json: -------------------------------------------------------------------------------- 1 | { 2 | "username": "anonymous", 3 | "layout": "grid", 4 | "name": "image embeds", 5 | "category": "Basic", 6 | "modules": [ 7 | { 8 | "name": "Big time", 9 | "family": "Basic", 10 | "refresh": false, 11 | "height": 620, 12 | "width": "col-4", 13 | "dataSource": "https://pbs.twimg.com/profile_images/829758077335437318/iOVad51D.jpg", 14 | "override": false, 15 | "refreshInterval": null, 16 | "guid": "0ea095dd-463e-856b-9a88-d5fa99d842e7", 17 | "type": "image", 18 | "order": 0, 19 | "row": 1 20 | }, 21 | { 22 | "name": "Cool dog gif", 23 | "family": "Basic", 24 | "refresh": false, 25 | "height": 400, 26 | "width": "col-4", 27 | "dataSource": "http://i.imgur.com/OLmsCMt.gif", 28 | "override": false, 29 | "refreshInterval": null, 30 | "guid": "1e9a358d-5ca0-0e2d-4758-36c75d297b40", 31 | "type": "image", 32 | "order": 1, 33 | "row": 1 34 | }, 35 | { 36 | "name": "Image 1", 37 | "family": "Basic", 38 | "refresh": false, 39 | "height": 400, 40 | "width": "col-4", 41 | "dataSource": "https://lh3.googleusercontent.com/2urmHNbLjpUzzOJw8lSzvKdvCif97l-GrjajX29gQclCOSuvRGbUXvndo1RlV5RgKCQ=h310", 42 | "override": false, 43 | "refreshInterval": null, 44 | "guid": "da7c35b6-ea8c-463a-80d5-da59d83c1b20", 45 | "type": "image", 46 | "order": 2, 47 | "row": 1 48 | } 49 | ], 50 | "created_by": "global", 51 | "date": "2017-05-15 21:25:18.949961", 52 | "id": "caeea800-39ee-11e7-ba93-a0999b0aebbf" 53 | } 54 | -------------------------------------------------------------------------------- /example_app/examples/config/inputs.json: -------------------------------------------------------------------------------- 1 | { 2 | "date": "2016-09-19 11:01:05.886000", 3 | "layout": "freeform", 4 | "category": "Interactivity", 5 | "modules": [ 6 | { 7 | "family": "C3", 8 | "name": "line - no inputs", 9 | "height": 400, 10 | "width": 500, 11 | "dataSource": "http://127.0.0.1:5004/custom-inputs", 12 | "override": false, 13 | "guid": "a6eb10e7-26fa-7814-818a-3010292929c2", 14 | "type": "line" 15 | }, 16 | { 17 | "family": "C3", 18 | "name": "line - with inputs", 19 | "height": 400, 20 | "width": 500, 21 | "dataSource": "http://127.0.0.1:5004/custom-inputs?override=true", 22 | "override": true, 23 | "guid": "a6eb10e7-26fa-7814-818a-3699b24415c5", 24 | "type": "line", 25 | "inputs": { 26 | "btn_classes": ["btn", "btn-info", "btn-sm"], 27 | "submit_text": "Submit", 28 | "options": [ 29 | { 30 | "type": "checkbox", 31 | "name": "show_axes", 32 | "default": true, 33 | "validator_regex": null, 34 | "label": "Show axes?" 35 | }, 36 | { 37 | "type": "radio", 38 | "name": "starting_num", 39 | "options": [ 40 | [0, 0], 41 | [10, 10], 42 | [20, 20], 43 | [50, 50] 44 | ], 45 | "default": 0, 46 | "placeholder": "e.g. 10", 47 | "validator_regex": null, 48 | "input_classes": ["form-control"], 49 | "label": "The lowest number to start from" 50 | }, 51 | { 52 | "type": "select", 53 | "name": "range", 54 | "options": [ 55 | [5, "Show 5"], 56 | [10, "Show 10"], 57 | [25, "Show 25"], 58 | [50, "Show 50"], 59 | [100, "Show 100"] 60 | ], 61 | "default": 10, 62 | "placeholder": "e.g. 10", 63 | "validator_regex": null, 64 | "input_classes": ["form-control", "input-sm"], 65 | "label": "Number of results", 66 | "help_text": "Change the number of results shown" 67 | }, 68 | { 69 | "type": "text", 70 | "name": "prefix", 71 | "default": 10, 72 | "placeholder": "e.g. item #", 73 | "validator_regex": null, 74 | "input_classes": ["form-control", "input-sm"], 75 | "label": "A prefix to use for each time" 76 | }, 77 | { 78 | "type": "number", 79 | "name": "entries", 80 | "placeholder": "e.g. 10", 81 | "validator_regex": null, 82 | "input_classes": ["form-control", "input-sm"], 83 | "label": "Number of points", 84 | "help_text": "Change the number of points per entry shown" 85 | } 86 | ] 87 | } 88 | } 89 | ], 90 | "id": "f01fab97-7e92-11e6-b71d-a0999b0aebbf", 91 | "name": "Custom inputs demo" 92 | } 93 | -------------------------------------------------------------------------------- /example_app/examples/config/numbergroups.json: -------------------------------------------------------------------------------- 1 | { 2 | "username": "anonymous", 3 | "category": "Basic", 4 | "layout": "grid", 5 | "name": "Number groups demo", 6 | "modules": [ 7 | { 8 | "name": "Custom width overrides", 9 | "family": "Basic", 10 | "type": "numbergroup", 11 | "refresh": false, 12 | "height": 260, 13 | "width": "col-12", 14 | "classes": [], 15 | "dataSource": "http://127.0.0.1:5004/numbergroup?dataset=1", 16 | "override": false, 17 | "refreshInterval": null, 18 | "guid": "e2b5c59d-c491-449a-0472-8c4bc0950085", 19 | "order": 2, 20 | "row": 1 21 | }, 22 | { 23 | "name": "Custom units example", 24 | "family": "Basic", 25 | "type": "numbergroup", 26 | "refresh": false, 27 | "height": 300, 28 | "width": "col-12", 29 | "classes": [], 30 | "dataSource": "http://127.0.0.1:5004/numbergroup?dataset=2", 31 | "override": false, 32 | "refreshInterval": null, 33 | "guid": "f6bd4afe-e2a7-31ed-01f1-ffad9ba6286c", 34 | "order": 0, 35 | "row": 1 36 | }, 37 | { 38 | "name": "Row 2", 39 | "family": "Basic", 40 | "type": "numbergroup", 41 | "refresh": false, 42 | "height": 260, 43 | "width": "col-12", 44 | "classes": [], 45 | "dataSource": "http://127.0.0.1:5004/numbergroup", 46 | "override": false, 47 | "refreshInterval": null, 48 | "guid": "38747931-fe19-e660-b2d1-4f13b950ab1c", 49 | "order": 1, 50 | "row": 1 51 | } 52 | ], 53 | "created_by": "global", 54 | "date": "2017-07-26 22:40:39.300054", 55 | "id": "72ea3c5c-7288-11e7-b810-a0999b0aebbf" 56 | } 57 | -------------------------------------------------------------------------------- /example_app/examples/config/random/transantarctic.json: -------------------------------------------------------------------------------- 1 | { 2 | "username": "ctabor", 3 | "category": "uncategorized", 4 | "layout": "grid", 5 | "name": "Antarctica", 6 | "modules": [ 7 | { 8 | "name": "Wiki page", 9 | "family": "Basic", 10 | "refresh": false, 11 | "height": 500, 12 | "width": "col-7", 13 | "classes": [], 14 | "dataSource": "https://en.wikipedia.org/wiki/Transantarctic_Mountains", 15 | "override": false, 16 | "refreshInterval": null, 17 | "guid": "7f1ac8bd-6aeb-786a-6d10-3870c7579444", 18 | "type": "iframe", 19 | "order": 2, 20 | "row": 2 21 | }, 22 | { 23 | "name": "Mtns", 24 | "family": "Basic", 25 | "refresh": false, 26 | "height": 500, 27 | "width": "col-5", 28 | "classes": [], 29 | "dataSource": "http://3.bp.blogspot.com/-xAb8WA3dvSU/VM4gsawLrfI/AAAAAAAALTk/WKckcSP4Hpw/s1600/antarctica4.png", 30 | "override": false, 31 | "refreshInterval": null, 32 | "guid": "a2e67d92-c81d-5df7-001d-86eec7c893b0", 33 | "type": "image", 34 | "order": 3, 35 | "row": 2 36 | }, 37 | { 38 | "name": "Flyover youtube", 39 | "family": "Basic", 40 | "refresh": false, 41 | "height": 380, 42 | "width": "col-12", 43 | "classes": [], 44 | "dataSource": "", 45 | "override": false, 46 | "refreshInterval": null, 47 | "guid": "99f78879-5167-9252-4fa3-d04fdad47457", 48 | "type": "youtube", 49 | "order": 0, 50 | "row": 1 51 | } 52 | ], 53 | "created_by": "global", 54 | "date": "2017-08-04 01:10:52.178962", 55 | "id": "482e5e47-78ea-11e7-a3fe-a0999b0aebbf" 56 | } 57 | -------------------------------------------------------------------------------- /example_app/examples/config/shared-data.json: -------------------------------------------------------------------------------- 1 | { 2 | "username": "ctabor", 3 | "layout": "grid", 4 | "category": "Performance & Tricks", 5 | "name": "Shared data demo", 6 | "modules": [ 7 | { 8 | "name": "Pie graph", 9 | "family": "C3", 10 | "type": "pie", 11 | "override": false, 12 | "row": 1, 13 | "height": 500, 14 | "width": "col-4", 15 | "dataSource": "http://127.0.0.1:5004/shared", 16 | "guid": "cc570d99-8eec-42d5-b730-d7a1fc1212e9", 17 | "key": "pie" 18 | }, 19 | { 20 | "name": "Bar graph", 21 | "family": "C3", 22 | "type": "line", 23 | "override": false, 24 | "row": 1, 25 | "height": 500, 26 | "width": "col-4", 27 | "guid": "cc570d99-8eec-42d5-b730-d7a1fc1212e1", 28 | "dataSource": "http://127.0.0.1:5004/shared", 29 | "key": "bar" 30 | }, 31 | { 32 | "name": "Line graph", 33 | "family": "C3", 34 | "type": "line", 35 | "override": false, 36 | "row": 1, 37 | "height": 500, 38 | "width": "col-4", 39 | "guid": "cc570d99-8eec-42d5-b730-d7a1fc1212e3", 40 | "dataSource": "http://127.0.0.1:5004/shared", 41 | "key": "line" 42 | }, 43 | { 44 | "name": "Pie graph - not shared", 45 | "family": "C3", 46 | "type": "pie", 47 | "override": false, 48 | "row": 1, 49 | "height": 500, 50 | "width": "col-4", 51 | "guid": "cc570d99-8eec-42d5-b730-d7a1fc1212c9", 52 | "dataSource": "http://127.0.0.1:5004/pie" 53 | }, 54 | { 55 | "name": "Bar graph - not shared", 56 | "family": "C3", 57 | "type": "line", 58 | "override": false, 59 | "row": 1, 60 | "height": 500, 61 | "width": "col-4", 62 | "guid": "cc570d99-8eec-42d5-b730-d7a1fc1212c1", 63 | "dataSource": "http://127.0.0.1:5004/bar" 64 | }, 65 | { 66 | "name": "Line graph - not shared", 67 | "family": "C3", 68 | "type": "line", 69 | "override": false, 70 | "row": 1, 71 | "height": 500, 72 | "width": "col-4", 73 | "guid": "cc570d99-8eec-42d5-b730-d7a1fc1212c3", 74 | "dataSource": "http://127.0.0.1:5004/line" 75 | } 76 | ], 77 | "created_by": "global", 78 | "date": "2017-07-19 10:23:12.689738", 79 | "id": "f14e3c78-6ca6-11e7-9ac9-a0999b0aebbf" 80 | } 81 | -------------------------------------------------------------------------------- /example_app/examples/config/sigma.json: -------------------------------------------------------------------------------- 1 | { 2 | "username": "anonymous", 3 | "layout": "grid", 4 | "category": "Graphs", 5 | "name": "SigmaJS examples", 6 | "modules": [ 7 | { 8 | "name": "Grid", 9 | "family": "SigmaJS", 10 | "refresh": false, 11 | "height": 600, 12 | "width": "col-4", 13 | "dataSource": "http://127.0.0.1:5004/sigma?name=basic", 14 | "override": false, 15 | "refreshInterval": null, 16 | "guid": "e5b750b3-3375-c04a-2307-920f4b8fc173", 17 | "type": "sigma", 18 | "order": 0, 19 | "row": 1 20 | }, 21 | { 22 | "name": "Grid - randomized with colors, sizes, and nodes", 23 | "family": "SigmaJS", 24 | "refresh": false, 25 | "height": 600, 26 | "width": "col-4", 27 | "dataSource": "http://127.0.0.1:5004/sigma?name=random", 28 | "override": false, 29 | "refreshInterval": null, 30 | "guid": "ea07c8fa-f5ee-4813-b3ff-43d20a1d9dc0", 31 | "type": "sigma", 32 | "order": 1, 33 | "row": 1 34 | }, 35 | { 36 | "name": "Grid - randomized, complex", 37 | "family": "SigmaJS", 38 | "refresh": false, 39 | "height": 600, 40 | "width": "col-4", 41 | "dataSource": "http://127.0.0.1:5004/sigma?name=random&nodes=abcdefghijklmnopqrstuvwxyz0123456789", 42 | "override": false, 43 | "refreshInterval": null, 44 | "guid": "849c970d-4095-461a-96b4-d7c9fda13645", 45 | "type": "sigma", 46 | "order": 2, 47 | "row": 1 48 | } 49 | ], 50 | "created_by": "global", 51 | "date": "2017-05-14 15:23:08.304219", 52 | "id": "55aab6f3-38e7-11e7-96fb-a0999b0aebbasdc" 53 | } 54 | -------------------------------------------------------------------------------- /example_app/examples/config/stresstest.json: -------------------------------------------------------------------------------- 1 | { 2 | "date": "2016-10-18 21:38:45.323000", 3 | "layout": "freeform", 4 | "category": "Stress & Error testing", 5 | "modules": [ 6 | { 7 | "name": "circlepack", 8 | "height": 900, 9 | "width": 1200, 10 | "dataSource": "http://127.0.0.1:5004/circlepack?stress=true", 11 | "override": false, 12 | "guid": "79178d58-a690-37ec-3594-84516d263e9e", 13 | "family": "D3", 14 | "type": "circlepack" 15 | }, 16 | { 17 | "name": "Spline", 18 | "height": 900, 19 | "width": 1200, 20 | "dataSource": "http://127.0.0.1:5004/bar?stress=true", 21 | "override": false, 22 | "guid": "1318edad-4fe6-e521-1cb5-c8556bf2f51d", 23 | "family": "C3", 24 | "type": "spline" 25 | }, 26 | { 27 | "name": "line", 28 | "height": 900, 29 | "width": 1200, 30 | "dataSource": "http://127.0.0.1:5004/line?stress=true", 31 | "override": false, 32 | "guid": "a6eb10e7-26fa-7814-818a-3699b24415c5", 33 | "family": "C3", 34 | "type": "line" 35 | }, 36 | { 37 | "name": "Pie chart", 38 | "height": 900, 39 | "width": 1200, 40 | "dataSource": "http://127.0.0.1:5004/pie?stress=true", 41 | "override": false, 42 | "guid": "1546e622-8973-62f5-4c10-cf2f2474f9c3", 43 | "family": "C3", 44 | "type": "pie" 45 | }, 46 | { 47 | "name": "bar", 48 | "height": 900, 49 | "width": 1200, 50 | "dataSource": "http://127.0.0.1:5004/bar?stress=true", 51 | "override": false, 52 | "guid": "24b8bd6c-77a8-9548-9232-86d75459a700", 53 | "family": "C3", 54 | "type": "bar" 55 | }, 56 | { 57 | "name": "Datatable override", 58 | "refresh": false, 59 | "height": 900, 60 | "width": 1200, 61 | "dataSource": "http://127.0.0.1:5004/dtable?override=1&stress=true", 62 | "override": false, 63 | "refreshInterval": 10000, 64 | "guid": "c1a9c36b-edc1-6627-340c-333aaaa", 65 | "family": "DataTable", 66 | "type": "datatable" 67 | }, 68 | { 69 | "name": "Voronoi", 70 | "height": 900, 71 | "width": 1200, 72 | "dataSource": "http://127.0.0.1:5004/voronoi?stress=true", 73 | "guid": "e139611b-9ce0-8bdd-4de7-d3c15d3ee55c", 74 | "family": "D3", 75 | "type": "voronoi" 76 | }, 77 | { 78 | "name": "Radial dendrogram", 79 | "height": 900, 80 | "width": 1200, 81 | "dataSource": "http://127.0.0.1:5004/dendrogram?radial=1&simple=1&stress=true", 82 | "override": false, 83 | "guid": "61dca3d8-c713-2b0b-ce68-5d93fff19fa5", 84 | "family": "D3", 85 | "type": "radial-dendrogram" 86 | }, 87 | { 88 | "name": "Dendrogram", 89 | "height": 900, 90 | "width": 12000, 91 | "dataSource": "http://127.0.0.1:5004/dendrogram?stress=true", 92 | "override": false, 93 | "guid": "0b7e0c94-e526-4821-706c-b038ec42322b", 94 | "family": "D3", 95 | "type": "dendrogram" 96 | } 97 | ], 98 | "id": "eb73e5a1-95b5-11e6-abdc-14109fe50a55", 99 | "name": "Stress test" 100 | } 101 | -------------------------------------------------------------------------------- /example_app/examples/cytoscape/basic.json: -------------------------------------------------------------------------------- 1 | { 2 | "container": "", 3 | "elements": [ 4 | { 5 | "data": {"id": "a"} 6 | }, 7 | { 8 | "data": {"id": "b"} 9 | }, 10 | { 11 | "data": {"id": "c"} 12 | }, 13 | { 14 | "data": {"id": "d", "position": {"x": 10, "y": 100}} 15 | }, 16 | { 17 | "data": {"id": "ab", "source": "a", "target": "b"} 18 | }, 19 | { 20 | "data": {"id": "bc", "source": "b", "target": "c"} 21 | }, 22 | { 23 | "data": {"id": "ac", "source": "a", "target": "c"} 24 | }, 25 | { 26 | "data": {"id": "bd", "source": "b", "target": "d"} 27 | }, 28 | { 29 | "data": {"id": "ad", "source": "a", "target": "d"} 30 | } 31 | ], 32 | "style": [ 33 | { 34 | "selector": "node", 35 | "style": { 36 | "background-color": "blue", 37 | "label": "data(id)" 38 | } 39 | }, 40 | { 41 | "selector": "edge", 42 | "style": { 43 | "width": 3, 44 | "line-color": "green", 45 | "target-arrow-color": "#ccc", 46 | "target-arrow-shape": "triangle" 47 | } 48 | } 49 | ], 50 | "layout": { 51 | "name": "grid", 52 | "rows": 1 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /example_app/examples/cytoscape/compound.json: -------------------------------------------------------------------------------- 1 | { 2 | "container": "", 3 | "boxSelectionEnabled": false, 4 | "autounselectify": true, 5 | "style": [{ 6 | "selector": "node", 7 | "css": { 8 | "content": "data(id)", 9 | "text-valign": "center", 10 | "text-halign": "center" 11 | } 12 | }, { 13 | "selector": "$node > node", 14 | "css": { 15 | "padding-top": "10px", 16 | "padding-left": "10px", 17 | "padding-bottom": "10px", 18 | "padding-right": "10px", 19 | "text-valign": "top", 20 | "text-halign": "center", 21 | "background-color": "#bbb" 22 | } 23 | }, { 24 | "selector": "edge", 25 | "css": { 26 | "target-arrow-shape": "triangle" 27 | } 28 | }, { 29 | "selector": ":selected", 30 | "css": { 31 | "background-color": "black", 32 | "line-color": "black", 33 | "target-arrow-color": "black", 34 | "source-arrow-color": "black" 35 | } 36 | }], 37 | "elements": { 38 | "nodes": [{ 39 | "data": { 40 | "id": "a", 41 | "parent": "b" 42 | }, 43 | "position": { 44 | "x": 215, 45 | "y": 85 46 | } 47 | }, { 48 | "data": { 49 | "id": "b" 50 | } 51 | }, { 52 | "data": { 53 | "id": "c", 54 | "parent": "b" 55 | }, 56 | "position": { 57 | "x": 300, 58 | "y": 85 59 | } 60 | }, { 61 | "data": { 62 | "id": "d" 63 | }, 64 | "position": { 65 | "x": 215, 66 | "y": 175 67 | } 68 | }, { 69 | "data": { 70 | "id": "e" 71 | } 72 | }, { 73 | "data": { 74 | "id": "f", 75 | "parent": "e" 76 | }, 77 | "position": { 78 | "x": 300, 79 | "y": 175 80 | } 81 | }], 82 | "edges": [{ 83 | "data": { 84 | "id": "ad", 85 | "source": "a", 86 | "target": "d" 87 | } 88 | }, { 89 | "data": { 90 | "id": "eb", 91 | "source": "e", 92 | "target": "b" 93 | } 94 | } 95 | ] 96 | }, 97 | "layout": { 98 | "name": "preset" 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /example_app/examples/dtable-override.json: -------------------------------------------------------------------------------- 1 | { 2 | "searching": false, 3 | "columns": [ 4 | {"data": "name", "title": "Name"}, 5 | {"data": "position", "title": "Position"}, 6 | {"data": "salary", "title": "Salary ($)"}, 7 | {"data": "start_date", "title": "Start Date"}, 8 | {"data": "office", "title": "Office"}, 9 | {"data": "extn", "title": "Extension"} 10 | ], 11 | "lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]], 12 | "pagingType": "numbers", 13 | "data": [ 14 | { 15 | "name": "Tiger Nixon", 16 | "position": "System Architect", 17 | "salary": "$320,800", 18 | "start_date": "2011/04/25", 19 | "office": "Edinburgh", 20 | "extn": "5421" 21 | }, 22 | { 23 | "name": "Garrett Winters", 24 | "position": "Accountant", 25 | "salary": "$170,750", 26 | "start_date": "2011/07/25", 27 | "office": "Tokyo", 28 | "extn": "8422" 29 | }, 30 | { 31 | "name": "Ashton Cox", 32 | "position": "Junior Technical Author", 33 | "salary": "$86,000", 34 | "start_date": "2009/01/12", 35 | "office": "San Francisco", 36 | "extn": "1562" 37 | }, 38 | { 39 | "name": "Shad Decker", 40 | "position": "Regional Director", 41 | "salary": "$183,000", 42 | "start_date": "2008/11/13", 43 | "office": "Edinburgh", 44 | "extn": "6373" 45 | }, 46 | { 47 | "name": "Michael Bruce", 48 | "position": "Javascript Developer", 49 | "salary": "$183,000", 50 | "start_date": "2011/06/27", 51 | "office": "Singapore", 52 | "extn": "5384" 53 | }, 54 | { 55 | "name": "Donna Snider", 56 | "position": "Customer Support", 57 | "salary": "$112,000", 58 | "start_date": "2011/01/25", 59 | "office": "New York", 60 | "extn": "4226" 61 | } 62 | ] 63 | } 64 | -------------------------------------------------------------------------------- /example_app/examples/filetree_digraph.dot: -------------------------------------------------------------------------------- 1 | digraph { 2 | "data_utils" -> "__init__.py"; 3 | "data_utils" -> "filetree.py"; 4 | "data_utils" -> "filetree_digraph.py"; 5 | } 6 | -------------------------------------------------------------------------------- /example_app/examples/flare-simple.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "flare", 3 | "children": [ 4 | { 5 | "name": "analytics", 6 | "children": [ 7 | { 8 | "name": "cluster", 9 | "children": [ 10 | ] 11 | }, 12 | { 13 | "name": "graph" 14 | }, 15 | { 16 | "name": "optimization", 17 | "children": [ 18 | {"name": "AspectRatioBanker", "size": 7074} 19 | ] 20 | } 21 | ] 22 | }, 23 | { 24 | "name": "animate", 25 | "children": [ 26 | {"name": "Easing", "size": 17010}, 27 | {"name": "FunctionSequence", "size": 5842}, 28 | { 29 | "name": "interpolate" 30 | }, 31 | {"name": "Tween", "size": 6006} 32 | ] 33 | }, 34 | { 35 | "name": "data", 36 | "children": [ 37 | { 38 | "name": "converters", 39 | "children": [ 40 | {"name": "Converters", "size": 721}, 41 | {"name": "DelimitedTextConverter", "size": 4294}, 42 | {"name": "GraphMLConverter", "size": 9800}, 43 | {"name": "IDataConverter", "size": 1314}, 44 | {"name": "JSONConverter", "size": 2220} 45 | ] 46 | } 47 | ] 48 | }, 49 | { 50 | "name": "display", 51 | "children": [ 52 | {"name": "DirtySprite", "size": 8833}, 53 | {"name": "LineSprite", "size": 1732}, 54 | {"name": "RectSprite", "size": 3623}, 55 | {"name": "TextSprite", "size": 10066} 56 | ] 57 | }, 58 | { 59 | "name": "flex", 60 | "children": [ 61 | {"name": "FlareVis", "size": 4116} 62 | ] 63 | }, 64 | { 65 | "name": "physics", 66 | "children": [ 67 | ] 68 | }, 69 | { 70 | "name": "query", 71 | "children": [ 72 | ] 73 | }, 74 | { 75 | "name": "vis", 76 | "children": [ 77 | { 78 | "name": "axis", 79 | "children": [ 80 | {"name": "Axes", "size": 1302}, 81 | {"name": "Axis", "size": 24593}, 82 | {"name": "AxisGridLine", "size": 652}, 83 | {"name": "AxisLabel", "size": 636}, 84 | {"name": "CartesianAxes", "size": 6703} 85 | ] 86 | }, 87 | { 88 | "name": "controls", 89 | "children": [ 90 | ] 91 | }, 92 | { 93 | "name": "data", 94 | "children": [ 95 | {"name": "Data", "size": 20544}, 96 | {"name": "DataList", "size": 19788}, 97 | {"name": "DataSprite", "size": 10349}, 98 | {"name": "EdgeSprite", "size": 3301}, 99 | {"name": "NodeSprite", "size": 19382}, 100 | { 101 | "name": "render", 102 | "children": [ 103 | ] 104 | } 105 | ] 106 | }, 107 | { 108 | "name": "events", 109 | "children": [ 110 | ] 111 | }, 112 | { 113 | "name": "legend", 114 | "children": [ 115 | ] 116 | }, 117 | { 118 | "name": "operator", 119 | "children": [ 120 | { 121 | "name": "distortion", 122 | "children": [ 123 | ] 124 | }, 125 | { 126 | "name": "encoder", 127 | "children": [ 128 | ] 129 | }, 130 | { 131 | "name": "filter", 132 | "children": [ 133 | ] 134 | }, 135 | {"name": "IOperator", "size": 1286}, 136 | { 137 | "name": "label", 138 | "children": [ 139 | ] 140 | }, 141 | { 142 | "name": "layout", 143 | "children": [ 144 | ] 145 | }, 146 | {"name": "Operator", "size": 2490}, 147 | {"name": "OperatorList", "size": 5248}, 148 | {"name": "OperatorSequence", "size": 4190}, 149 | {"name": "OperatorSwitch", "size": 2581}, 150 | {"name": "SortOperator", "size": 2023} 151 | ] 152 | }, 153 | {"name": "Visualization", "size": 16540} 154 | ] 155 | } 156 | ] 157 | } 158 | -------------------------------------------------------------------------------- /example_app/examples/overrides.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "xs": { 4 | "setosa": "setosa_x", 5 | "versicolor": "versicolor_x" 6 | }, 7 | "columns": [ 8 | ["setosa_x", 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7, 3.4, 3.0, 3.0, 4.0, 4.4, 3.9, 3.5, 3.8, 3.8, 3.4, 3.7, 3.6, 3.3, 3.4, 3.0, 3.4, 3.5, 3.4, 3.2, 3.1, 3.4, 4.1, 4.2, 3.1, 3.2, 3.5, 3.6, 3.0, 3.4, 3.5, 2.3, 3.2, 3.5, 3.8, 3.0, 3.8, 3.2, 3.7, 3.3], 9 | ["versicolor_x", 3.2, 3.2, 3.1, 2.3, 2.8, 2.8, 3.3, 2.4, 2.9, 2.7, 2.0, 3.0, 2.2, 2.9, 2.9, 3.1, 3.0, 2.7, 2.2, 2.5, 3.2, 2.8, 2.5, 2.8, 2.9, 3.0, 2.8, 3.0, 2.9, 2.6, 2.4, 2.4, 2.7, 2.7, 3.0, 3.4, 3.1, 2.3, 3.0, 2.5, 2.6, 3.0, 2.6, 2.3, 2.7, 3.0, 2.9, 2.9, 2.5, 2.8], 10 | ["setosa", 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, 0.2, 0.1, 0.1, 0.2, 0.4, 0.4, 0.3, 0.3, 0.3, 0.2, 0.4, 0.2, 0.5, 0.2, 0.2, 0.4, 0.2, 0.2, 0.2, 0.2, 0.4, 0.1, 0.2, 0.2, 0.2, 0.2, 0.1, 0.2, 0.2, 0.3, 0.3, 0.2, 0.6, 0.4, 0.3, 0.2, 0.2, 0.2, 0.2], 11 | ["versicolor", 1.4, 1.5, 1.5, 1.3, 1.5, 1.3, 1.6, 1.0, 1.3, 1.4, 1.0, 1.5, 1.0, 1.4, 1.3, 1.4, 1.5, 1.0, 1.5, 1.1, 1.8, 1.3, 1.5, 1.2, 1.3, 1.4, 1.4, 1.7, 1.5, 1.0, 1.1, 1.0, 1.2, 1.6, 1.5, 1.6, 1.5, 1.3, 1.3, 1.3, 1.2, 1.4, 1.2, 1.0, 1.3, 1.2, 1.3, 1.3, 1.1, 1.3] 12 | ], 13 | "type": "scatter" 14 | }, 15 | "axis": { 16 | "x": { 17 | "label": "Sepal.Width", 18 | "tick": {"fit": false} 19 | }, 20 | "y": {"label": "Petal.Width"} 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /example_app/examples/plotly/bar_line_dynamic.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": [ 3 | { 4 | "x": ["Japan", "United Kingdom", "Canada", "Netherlands", "United States", "Belgium", "Sweden", "Switzerland"], 5 | "y": ["Japan", "United Kingdom", "Canada", "Netherlands", "United States", "Belgium", "Sweden", "Switzerland"], 6 | "xaxis": "x1", 7 | "yaxis": "y1", 8 | "type": "bar", 9 | "marker": { 10 | "color": "rgba(50,171,96,0.6)", 11 | "line": { 12 | "color": "rgba(50,171,96,1.0)", 13 | "width": 1 14 | } 15 | }, 16 | "name": "Household savings, percentage of household disposable income", 17 | "orientation": "h" 18 | }, 19 | { 20 | "x": [93453.919999999998, 81666.570000000007, 69889.619999999995, 78381.529999999999, 141395.29999999999, 92969.020000000004, 66090.179999999993, 122379.3], 21 | "y": [1.3586, 2.2623000000000002, 4.9821999999999997, 6.5096999999999996, 22 | 7.4812000000000003, 7.5133000000000001, 15.2148, 17.520499999999998], 23 | "xaxis": "x2", 24 | "yaxis": "y1", 25 | "mode": "lines+markers", 26 | "line": { 27 | "color": "rgb(128,0,128)" 28 | }, 29 | "name": "Household net worth, Million USD/capita" 30 | } 31 | ], 32 | "layout": { 33 | "title": "Household Savings & Net Worth for Eight OECD Countries", 34 | "xaxis1": { 35 | "range": [0, 20], 36 | "domain": [0, 0.5], 37 | "zeroline": false, 38 | "showline": false, 39 | "showticklabels": true, 40 | "showgrid": true 41 | }, 42 | "xaxis2": { 43 | "range": [25000, 150000], 44 | "domain": [0.5, 1], 45 | "zeroline": false, 46 | "showline": false, 47 | "showticklabels": true, 48 | "showgrid": true, 49 | "side": "top", 50 | "dtick": 25000 51 | }, 52 | "legend": { 53 | "x": 0.029, 54 | "y": 1.238, 55 | "font": { 56 | "size": 10 57 | } 58 | }, 59 | "paper_bgcolor": "rgb(248,248,255)", 60 | "plot_bgcolor": "rgb(248,248,255)", 61 | "annotations": [ 62 | { 63 | "xref": "paper", 64 | "yref": "paper", 65 | "x": -0.2, 66 | "y": -0.109, 67 | "text": "OECD (2015), Household savings (indicator), Household net worth (indicator). doi: 10.1787/cfc6f499-en (Accessed on 05 June 2015)", 68 | "showarrow": false, 69 | "font":{ 70 | "family": "Arial", 71 | "size": 10, 72 | "color": "rgb(150,150,150)" 73 | } 74 | } 75 | ] 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /example_app/examples/plotly/boxplot.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": [ 3 | { 4 | "x": [0.2, 0.2, 0.6, 1.0, 0.5, 0.4, 0.2, 0.7, 0.9, 0.1, 0.5, 0.3], 5 | "y": ["day 1", "day 1", "day 1", "day 1", "day 1", "day 1", "day 2", "day 2", "day 2", "day 2", "day 2", "day 2"], 6 | "name": "kale", 7 | "marker": {"color": "#3D9970"}, 8 | "type": "box", 9 | "boxmean": false, 10 | "orientation": "h" 11 | }, 12 | { 13 | "x": [0.6, 0.7, 0.3, 0.6, 0.0, 0.5, 0.7, 0.9, 0.5, 0.8, 0.7, 0.2], 14 | "y": ["day 1", "day 1", "day 1", "day 1", "day 1", "day 1", "day 2", "day 2", "day 2", "day 2", "day 2", "day 2"], 15 | "name": "radishes", 16 | "marker": {"color": "#FF4136"}, 17 | "type": "box", 18 | "boxmean": false, 19 | "orientation": "h" 20 | }, 21 | { 22 | "x": [0.1, 0.3, 0.1, 0.9, 0.6, 0.6, 0.9, 1.0, 0.3, 0.6, 0.8, 0.5], 23 | "y": ["day 1", "day 1", "day 1", "day 1", "day 1", "day 1", "day 2", "day 2", "day 2", "day 2", "day 2", "day 2"], 24 | "name": "carrots", 25 | "marker": {"color": "#FF851B"}, 26 | "type": "box", 27 | "boxmean": false, 28 | "orientation": "h" 29 | } 30 | ], 31 | "layout": { 32 | "title": "Grouped Horizontal Box Plot", 33 | "xaxis": { 34 | "title": "normalized moisture", 35 | "zeroline": false 36 | }, 37 | "boxmode": "group" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /example_app/examples/plotly/cat_dot_plot.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": [ 3 | { 4 | "type": "scatter", 5 | "x": [40, 45.7, 52, 53.6, 54.1, 54.2, 54.5, 54.7, 55.1, 56.6], 6 | "y": ["Switzerland (2011)", "Chile (2013)", "Japan (2014)", "United States (2012)", "Slovenia (2014)", "Canada (2011)", "Poland (2010)", "Estonia (2015)", "Luxembourg (2013)", "Portugal (2011)"], 7 | "mode": "markers", 8 | "name": "Percent of estimated voting age population", 9 | "marker": { 10 | "color": "rgba(156, 165, 196, 0.95)", 11 | "line": { 12 | "color": "rgba(156, 165, 196, 1.0)", 13 | "width": 1 14 | }, 15 | "symbol": "circle", 16 | "size": 16 17 | } 18 | }, 19 | { 20 | "x": [49.1, 42, 52.7, 84.3, 51.7, 61.1, 55.3, 64.2, 91.1, 58.9], 21 | "y": ["Switzerland (2011)", "Chile (2013)", "Japan (2014)", "United States (2012)", "Slovenia (2014)", "Canada (2011)", "Poland (2010)", "Estonia (2015)", "Luxembourg (2013)", "Portugal (2011)"], 22 | "mode": "markers", 23 | "name": "Percent of estimated registered voters", 24 | "marker": { 25 | "color": "rgba(204, 204, 204, 0.95)", 26 | "line": { 27 | "color": "rgba(217, 217, 217, 1.0)", 28 | "width": 1 29 | }, 30 | "symbol": "circle", 31 | "size": 16 32 | } 33 | } 34 | ], 35 | "layout": { 36 | "title": "Votes cast for ten lowest voting age population in OECD countries", 37 | "xaxis": { 38 | "showgrid": false, 39 | "showline": true, 40 | "linecolor": "rgb(102, 102, 102)", 41 | "titlefont": { 42 | "font": { 43 | "color": "rgb(204, 204, 204)" 44 | } 45 | }, 46 | "tickfont": { 47 | "font": { 48 | "color": "rgb(102, 102, 102)" 49 | } 50 | }, 51 | "autotick": false, 52 | "dtick": 10, 53 | "ticks": "outside", 54 | "tickcolor": "rgb(102, 102, 102)" 55 | }, 56 | "margin": { 57 | "l": 140, 58 | "r": 40, 59 | "b": 50, 60 | "t": 80 61 | }, 62 | "legend": { 63 | "font": { 64 | "size": 10 65 | }, 66 | "yanchor": "middle", 67 | "xanchor": "right" 68 | }, 69 | "paper_bgcolor": "rgb(254, 247, 234)", 70 | "plot_bgcolor": "rgb(254, 247, 234)", 71 | "hovermode": "closest" 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /example_app/examples/plotly/contour-plot-grad.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": [ 3 | { 4 | "z": [ 5 | [ 6 | 10, 7 | 10.625, 8 | 12.5, 9 | 15.625, 10 | 20 11 | ], 12 | [ 13 | 5.625, 14 | 6.25, 15 | 8.125, 16 | 11.25, 17 | 15.625 18 | ], 19 | [ 20 | 2.5, 21 | 3.125, 22 | 5, 23 | 8.125, 24 | 12.5 25 | ], 26 | [ 27 | 0.625, 28 | 1.25, 29 | 3.125, 30 | 6.25, 31 | 10.625 32 | ], 33 | [ 34 | 0, 35 | 0.625, 36 | 2.5, 37 | 5.625, 38 | 10 39 | ] 40 | ], 41 | "type": "contour", 42 | "colorscale": [ 43 | [ 44 | 0, 45 | "rgb(166,206,227)" 46 | ], 47 | [ 48 | 0.25, 49 | "rgb(31,120,180)" 50 | ], 51 | [ 52 | 0.45, 53 | "rgb(178,223,138)" 54 | ], 55 | [ 56 | 0.65, 57 | "rgb(51,160,44)" 58 | ], 59 | [ 60 | 0.85, 61 | "rgb(251,154,153)" 62 | ], 63 | [ 64 | 1, 65 | "rgb(227,26,28)" 66 | ] 67 | ] 68 | } 69 | ], 70 | "layout": {"title": "Custom color scale"} 71 | } 72 | -------------------------------------------------------------------------------- /example_app/examples/plotly/contour-smooth.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": [ 3 | { 4 | "z": [ 5 | [ 6 | 2, 7 | 4, 8 | 7, 9 | 12, 10 | 13, 11 | 14, 12 | 15, 13 | 16 14 | ], 15 | [ 16 | 3, 17 | 1, 18 | 6, 19 | 11, 20 | 12, 21 | 13, 22 | 16, 23 | 17 24 | ], 25 | [ 26 | 4, 27 | 2, 28 | 7, 29 | 7, 30 | 11, 31 | 14, 32 | 17, 33 | 18 34 | ], 35 | [ 36 | 5, 37 | 3, 38 | 8, 39 | 8, 40 | 13, 41 | 15, 42 | 18, 43 | 19 44 | ], 45 | [ 46 | 7, 47 | 4, 48 | 10, 49 | 9, 50 | 16, 51 | 18, 52 | 20, 53 | 19 54 | ], 55 | [ 56 | 9, 57 | 10, 58 | 5, 59 | 27, 60 | 23, 61 | 21, 62 | 21, 63 | 21 64 | ], 65 | [ 66 | 11, 67 | 14, 68 | 17, 69 | 26, 70 | 25, 71 | 24, 72 | 23, 73 | 22 74 | ] 75 | ], 76 | "type": "contour", 77 | "line": { 78 | "smoothing": 0 79 | }, 80 | "xaxis": "x1", 81 | "yaxis": "y1" 82 | }, 83 | { 84 | "z": [ 85 | [ 86 | 2, 87 | 4, 88 | 7, 89 | 12, 90 | 13, 91 | 14, 92 | 15, 93 | 16 94 | ], 95 | [ 96 | 3, 97 | 1, 98 | 6, 99 | 11, 100 | 12, 101 | 13, 102 | 16, 103 | 17 104 | ], 105 | [ 106 | 4, 107 | 2, 108 | 7, 109 | 7, 110 | 11, 111 | 14, 112 | 17, 113 | 18 114 | ], 115 | [ 116 | 5, 117 | 3, 118 | 8, 119 | 8, 120 | 13, 121 | 15, 122 | 18, 123 | 19 124 | ], 125 | [ 126 | 7, 127 | 4, 128 | 10, 129 | 9, 130 | 16, 131 | 18, 132 | 20, 133 | 19 134 | ], 135 | [ 136 | 9, 137 | 10, 138 | 5, 139 | 27, 140 | 23, 141 | 21, 142 | 21, 143 | 21 144 | ], 145 | [ 146 | 11, 147 | 14, 148 | 17, 149 | 26, 150 | 25, 151 | 24, 152 | 23, 153 | 22 154 | ] 155 | ], 156 | "type": "contour", 157 | "line": { 158 | "smoothing": 0.85 159 | }, 160 | "xaxis": "x2", 161 | "yaxis": "y2" 162 | } 163 | ], 164 | "layout": { 165 | "title": "Smoothing Contour Lines", 166 | "xaxis": { 167 | "domain": [ 168 | 0, 169 | 0.45 170 | ], 171 | "anchor": "y1" 172 | }, 173 | "yaxis": { 174 | "domain": [ 175 | 0, 176 | 1 177 | ], 178 | "anchor": "x1" 179 | }, 180 | "xaxis2": { 181 | "domain": [ 182 | 0.55, 183 | 1 184 | ], 185 | "anchor": "y2" 186 | }, 187 | "yaxis2": { 188 | "domain": [ 189 | 0, 190 | 1 191 | ], 192 | "anchor": "x2" 193 | } 194 | } 195 | } 196 | -------------------------------------------------------------------------------- /example_app/examples/plotly/contour.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": [ 3 | { 4 | "z": [[1.5, 1.23469387755, 1.01020408163, 0.826530612245, 0.683673469388, 0.581632653061, 0.520408163265, 0.5, 0.520408163265, 0.581632653061, 0.683673469388, 0.826530612245, 1.01020408163, 1.23469387755, 1.5], [1.36734693878, 1.10204081633, 0.877551020408, 0.69387755102, 0.551020408163, 0.448979591837, 0.387755102041, 0.367346938776, 0.387755102041, 0.448979591837, 0.551020408163, 0.69387755102, 0.877551020408, 1.10204081633, 1.36734693878], [1.25510204082, 0.989795918367, 0.765306122449, 0.581632653061, 0.438775510204, 0.336734693878, 0.275510204082, 0.255102040816, 0.275510204082, 0.336734693878, 0.438775510204, 0.581632653061, 0.765306122449, 0.989795918367, 1.25510204082], [1.16326530612, 0.897959183673, 0.673469387755, 0.489795918367, 0.34693877551, 0.244897959184, 0.183673469388, 0.163265306122, 0.183673469388, 0.244897959184, 0.34693877551, 0.489795918367, 0.673469387755, 0.897959183673, 1.16326530612], [1.09183673469, 0.826530612245, 0.602040816327, 0.418367346939, 0.275510204082, 0.173469387755, 0.112244897959, 0.0918367346939, 0.112244897959, 0.173469387755, 0.275510204082, 0.418367346939, 0.602040816327, 0.826530612245, 1.09183673469], [1.04081632653, 0.775510204082, 0.551020408163, 0.367346938776, 0.224489795918, 0.122448979592, 0.0612244897959, 0.0408163265306, 0.0612244897959, 0.122448979592, 0.224489795918, 0.367346938776, 0.551020408163, 0.775510204082, 1.04081632653], [1.01020408163, 0.744897959184, 0.520408163265, 0.336734693878, 0.19387755102, 0.0918367346939, 0.030612244898, 0.0102040816327, 0.030612244898, 0.0918367346939, 0.19387755102, 0.336734693878, 0.520408163265, 0.744897959184, 1.01020408163], [1.0, 0.734693877551, 0.510204081633, 0.326530612245, 0.183673469388, 0.0816326530612, 0.0204081632653, 0.0, 0.0204081632653, 0.0816326530612, 0.183673469388, 0.326530612245, 0.510204081633, 0.734693877551, 1.0], [1.01020408163, 0.744897959184, 0.520408163265, 0.336734693878, 0.19387755102, 0.0918367346939, 0.030612244898, 0.0102040816327, 0.030612244898, 0.0918367346939, 0.19387755102, 0.336734693878, 0.520408163265, 0.744897959184, 1.01020408163], [1.04081632653, 0.775510204082, 0.551020408163, 0.367346938776, 0.224489795918, 0.122448979592, 0.0612244897959, 0.0408163265306, 0.0612244897959, 0.122448979592, 0.224489795918, 0.367346938776, 0.551020408163, 0.775510204082, 1.04081632653], [1.09183673469, 0.826530612245, 0.602040816327, 0.418367346939, 0.275510204082, 0.173469387755, 0.112244897959, 0.0918367346939, 0.112244897959, 0.173469387755, 0.275510204082, 0.418367346939, 0.602040816327, 0.826530612245, 1.09183673469], [1.16326530612, 0.897959183673, 0.673469387755, 0.489795918367, 0.34693877551, 0.244897959184, 0.183673469388, 0.163265306122, 0.183673469388, 0.244897959184, 0.34693877551, 0.489795918367, 0.673469387755, 0.897959183673, 1.16326530612], [1.25510204082, 0.989795918367, 0.765306122449, 0.581632653061, 0.438775510204, 0.336734693878, 0.275510204082, 0.255102040816, 0.275510204082, 0.336734693878, 0.438775510204, 0.581632653061, 0.765306122449, 0.989795918367, 1.25510204082], [1.36734693878, 1.10204081633, 0.877551020408, 0.69387755102, 0.551020408163, 0.448979591837, 0.387755102041, 0.367346938776, 0.387755102041, 0.448979591837, 0.551020408163, 0.69387755102, 0.877551020408, 1.10204081633, 1.36734693878], [1.5, 1.23469387755, 1.01020408163, 0.826530612245, 0.683673469388, 0.581632653061, 0.520408163265, 0.5, 0.520408163265, 0.581632653061, 0.683673469388, 0.826530612245, 1.01020408163, 1.23469387755, 1.5]], 5 | "x": [-1.0, -0.857142857143, -0.714285714286, -0.571428571429, -0.428571428571, -0.285714285714, -0.142857142857, 0.0, 0.142857142857, 0.285714285714, 0.428571428571, 0.571428571429, 0.714285714286, 0.857142857143, 1.0], 6 | "y": [-1.0, -0.857142857143, -0.714285714286, -0.571428571429, -0.428571428571, -0.285714285714, -0.142857142857, 0.0, 0.142857142857, 0.285714285714, 0.428571428571, 0.571428571429, 0.714285714286, 0.857142857143, 1.0], 7 | "ncontours": 30, 8 | "showscale": false, 9 | "type": "contour" 10 | }, 11 | { 12 | "x": [-0.8, -0.48, -0.288, -0.1728, -0.10368, -0.062208, -0.0373248, -0.02239488, -0.013436928, -0.0080621568, -0.00483729408, -0.002902376448, -0.0017414258688, -0.00104485552128, -0.000626913312768, -0.000376147987661], 13 | "y": [-0.9, -0.72, -0.576, -0.4608, -0.36864, -0.294912, -0.2359296, -0.18874368, -0.150994944, -0.1207959552, -0.09663676416, -0.077309411328, -0.0618475290624, -0.0494780232499, -0.0395824185999, -0.0316659348799], 14 | "mode": "markers+lines", 15 | "name": "steepest", 16 | "line": {"color": "black"}, 17 | "type": "scatter" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /example_app/examples/plotly/error_bars.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": [ 3 | { 4 | "x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1], 5 | "y": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0], 6 | "fill": "tozerox", 7 | "fillcolor": "rgba(0,100,80,0.2)", 8 | "line": {"color": "transparent"}, 9 | "name": "Fair", 10 | "showlegend": false, 11 | "type": "scatter" 12 | }, 13 | { 14 | "x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1], 15 | "y": [5.5, 3, 5.5, 8, 6, 3, 8, 5, 6, 5.5, 4.75, 5, 4, 7, 2, 4, 7, 4.4, 2, 4.5], 16 | "fill": "tozerox", 17 | "fillcolor": "rgba(0,176,246,0.2)", 18 | "line": {"color": "transparent"}, 19 | "name": "Premium", 20 | "showlegend": false, 21 | "type": "scatter" 22 | }, 23 | { 24 | "x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1], 25 | "y": [11, 9, 7, 5, 3, 1, 3, 5, 3, 1, -1, 1, 3, 1, -0.5, 1, 3, 5, 7, 9], 26 | "fill": "tozerox", 27 | "fillcolor": "rgba(231,107,243,0.2)", 28 | "line": {"color": "transparent"}, 29 | "name": "Fair", 30 | "showlegend": false, 31 | "type": "scatter" 32 | }, 33 | { 34 | "x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 35 | "y": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 36 | "line": {"color": "rgb(0,100,80)"}, 37 | "mode": "lines", 38 | "name": "Fair", 39 | "type": "scatter" 40 | }, 41 | { 42 | "x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 43 | "y": [5, 2.5, 5, 7.5, 5, 2.5, 7.5, 4.5, 5.5, 5], 44 | "line": {"color": "rgb(0,176,246)"}, 45 | "mode": "lines", 46 | "name": "Premium", 47 | "type": "scatter" 48 | }, 49 | { 50 | "x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 51 | "y": [10, 8, 6, 4, 2, 0, 2, 4, 2, 0], 52 | "line": {"color": "rgb(231,107,243)"}, 53 | "mode": "lines", 54 | "name": "Ideal", 55 | "type": "scatter" 56 | } 57 | ], 58 | "layout": { 59 | "title": "Continous error bars", 60 | "paper_bgcolor": "rgb(255,255,255)", 61 | "plot_bgcolor": "rgb(229,229,229)", 62 | "xaxis": { 63 | "gridcolor": "rgb(255,255,255)", 64 | "range": [1, 10], 65 | "showgrid": true, 66 | "showline": false, 67 | "showticklabels": true, 68 | "tickcolor": "rgb(127,127,127)", 69 | "ticks": "outside", 70 | "zeroline": false 71 | }, 72 | "yaxis": { 73 | "gridcolor": "rgb(255,255,255)", 74 | "showgrid": true, 75 | "showline": false, 76 | "showticklabels": true, 77 | "tickcolor": "rgb(127,127,127)", 78 | "ticks": "outside", 79 | "zeroline": false 80 | } 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /example_app/examples/plotly/heatmap.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": [ 3 | { 4 | "z": [ 5 | [ 6 | 1, 7 | 20, 8 | 30, 9 | 50, 10 | 1 11 | ], 12 | [ 13 | 20, 14 | 1, 15 | 60, 16 | 80, 17 | 30 18 | ], 19 | [ 20 | 30, 21 | 60, 22 | 1, 23 | -10, 24 | 20 25 | ] 26 | ], 27 | "x": [ 28 | "Monday", 29 | "Tuesday", 30 | "Wednesday", 31 | "Thursday", 32 | "Friday" 33 | ], 34 | "y": [ 35 | "Morning", 36 | "Afternoon", 37 | "Evening" 38 | ], 39 | "type": "heatmap" 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /example_app/examples/plotly/inset.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": [ 3 | { 4 | "x": [1, 2, 3], 5 | "y": [4, 3, 2], 6 | "type": "scatter" 7 | }, 8 | { 9 | "x": [20, 30, 40], 10 | "y": [30, 40, 50], 11 | "xaxis": "x2", 12 | "yaxis": "y2", 13 | "type": "scatter" 14 | } 15 | ], 16 | "layout": { 17 | "yaxis2": { 18 | "domain": [0.6, 0.95], 19 | "anchor": "x2" 20 | }, 21 | "xaxis2": { 22 | "domain": [0.6, 0.95], 23 | "anchor": "y2" 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /example_app/examples/plotly/labels_plot.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": [ 3 | { 4 | "x": [1, 2, 3, 4, 5], 5 | "y": [1, 6, 3, 6, 1], 6 | "mode": "markers+text", 7 | "type": "scatter", 8 | "name": "Team A", 9 | "text": ["A-1", "A-2", "A-3", "A-4", "A-5"], 10 | "textposition": "top center", 11 | "textfont": { 12 | "family": "Raleway, sans-serif" 13 | }, 14 | "marker": { "size": 12 } 15 | }, 16 | { 17 | "x": [1.5, 2.5, 3.5, 4.5, 5.5], 18 | "y": [4, 1, 7, 1, 4], 19 | "mode": "markers+text", 20 | "type": "scatter", 21 | "name": "Team B", 22 | "text": ["B-a", "B-b", "B-c", "B-d", "B-e"], 23 | "textfont" : { 24 | "family": "Times New Roman" 25 | }, 26 | "textposition": "bottom center", 27 | "marker": { "size": 12 } 28 | } 29 | ], 30 | "layout": { 31 | "xaxis": { 32 | "range": [0.75, 5.25] 33 | }, 34 | "yaxis": { 35 | "range": [0, 8] 36 | }, 37 | "legend": { 38 | "y": 0.5, 39 | "yref": "paper", 40 | "font": { 41 | "family": "Arial, sans-serif", 42 | "size": 20, 43 | "color": "grey" 44 | } 45 | }, 46 | "title": "Data Labels on the Plot" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /example_app/examples/plotly/logplot.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": [ 3 | { 4 | "x": [ 5 | 0, 6 | 1, 7 | 2, 8 | 3, 9 | 4, 10 | 5, 11 | 6, 12 | 7, 13 | 8 14 | ], 15 | "y": [ 16 | 8, 17 | 7, 18 | 6, 19 | 5, 20 | 4, 21 | 3, 22 | 2, 23 | 1, 24 | 0 25 | ], 26 | "type": "scatter" 27 | }, 28 | { 29 | "x": [ 30 | 0, 31 | 1, 32 | 2, 33 | 3, 34 | 4, 35 | 5, 36 | 6, 37 | 7, 38 | 8 39 | ], 40 | "y": [ 41 | 0, 42 | 1, 43 | 2, 44 | 3, 45 | 4, 46 | 5, 47 | 6, 48 | 7, 49 | 8 50 | ], 51 | "type": "scatter" 52 | } 53 | ], 54 | "layout": { 55 | "title": "Logarithmic plot" 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /example_app/examples/plotly/scatter.json: -------------------------------------------------------------------------------- 1 | { 2 | "layout": { 3 | "title": "My cool chart." 4 | }, 5 | "options": { 6 | }, 7 | "data": [ 8 | { 9 | "x": [1, 2, 3, 4], 10 | "y": [10, 15, 13, 17], 11 | "mode": "markers", 12 | "type": "scatter" 13 | }, 14 | { 15 | "x": [2, 3, 4, 5], 16 | "y": [16, 5, 11, 9], 17 | "mode": "lines", 18 | "type": "scatter" 19 | }, 20 | { 21 | "x": [1, 2, 3, 4], 22 | "y": [12, 9, 15, 12], 23 | "mode": "lines+markers", 24 | "type": "scatter" 25 | } 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /example_app/examples/plotly/subplot.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": [ 3 | { 4 | "x": [1, 2, 3], 5 | "y": [4, 5, 6], 6 | "type": "scatter" 7 | }, 8 | { 9 | "x": [20, 30, 40], 10 | "y": [50, 60, 70], 11 | "xaxis": "x2", 12 | "yaxis": "y2", 13 | "type": "scatter" 14 | }, 15 | { 16 | "x": [300, 400, 500], 17 | "y": [600, 700, 800], 18 | "xaxis": "x3", 19 | "yaxis": "y3", 20 | "type": "scatter" 21 | }, 22 | { 23 | "x": [4000, 5000, 6000], 24 | "y": [7000, 8000, 9000], 25 | "xaxis": "x4", 26 | "yaxis": "y4", 27 | "type": "scatter" 28 | } 29 | ], 30 | "layout": { 31 | "title": "Subplot examples", 32 | "xaxis": { 33 | "domain": [0, 0.45] 34 | }, 35 | "yaxis": { 36 | "domain": [0, 0.45] 37 | }, 38 | "xaxis4": { 39 | "domain": [0.55, 1], 40 | "anchor": "y4" 41 | }, 42 | "xaxis3": { 43 | "domain": [0, 0.45], 44 | "anchor": "y3" 45 | }, 46 | "xaxis2": { 47 | "domain": [0.55, 1] 48 | }, 49 | "yaxis2": { 50 | "domain": [0, 0.45], 51 | "anchor": "x2" 52 | }, 53 | "yaxis3": { 54 | "domain": [0.55, 1] 55 | }, 56 | "yaxis4": { 57 | "domain": [0.55, 1], 58 | "anchor": "x4" 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /example_app/examples/plotly/ternary.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": [{"type":"scatterternary","mode":"lines","name":"sand","a":[0,10,0,0],"b":[100,90,90,100],"c":[0,0,10,0],"line":{"color":"#444"},"fill":"toself","fillcolor":"#8dd3c7","hoveron":"fills+points"},{"type":"scatterternary","mode":"lines","name":"loamy sand","a":[0,10,15,0,0],"b":[90,90,85,70,90],"c":[10,0,0,30,10],"line":{"color":"#444"},"fill":"toself","fillcolor":"#ffffb3","hoveron":"fills+points"},{"type":"scatterternary","mode":"lines","name":"sandy loam","a":[0,15,20,20,5,5,0,0],"b":[70,85,80,53,53,45,50,70],"c":[30,0,0,32,42,50,50,30],"line":{"color":"#444"},"fill":"toself","fillcolor":"#bebada","hoveron":"fills+points"},{"type":"scatterternary","mode":"lines","name":"sandy clay loam","a":[20,35,35,28,20,20],"b":[80,65,45,45,53,80],"c":[0,0,20,27,32,0],"line":{"color":"#444"},"fill":"toself","fillcolor":"#fb8072","hoveron":"fills+points"},{"type":"scatterternary","mode":"lines","name":"sandy clay","a":[35,35,55,35],"b":[65,45,45,65],"c":[0,20,0,0],"line":{"color":"#444"},"fill":"toself","fillcolor":"#80b1d3","hoveron":"fills+points"},{"type":"scatterternary","mode":"lines","name":"clay","a":[55,100,60,40,40,55],"b":[45,0,0,20,45,45],"c":[0,0,40,40,15,0],"line":{"color":"#444"},"fill":"toself","fillcolor":"#fdb462","hoveron":"fills+points"},{"type":"scatterternary","mode":"lines","name":"clay loam","a":[40,40,28,28,40],"b":[45,20,20,45,45],"c":[15,40,52,27,15],"line":{"color":"#444"},"fill":"toself","fillcolor":"#b3de69","hoveron":"fills+points"},{"type":"scatterternary","mode":"lines","name":"silty clay","a":[60,40,40,60],"b":[0,0,20,0],"c":[40,60,40,40],"line":{"color":"#444"},"fill":"toself","fillcolor":"#fccde5","hoveron":"fills+points"},{"type":"scatterternary","mode":"lines","name":"silty clay loam","a":[28,28,40,40,28],"b":[0,20,20,0,0],"c":[72,52,40,60,72],"line":{"color":"#444"},"fill":"toself","fillcolor":"#d9d9d9","hoveron":"fills+points"},{"type":"scatterternary","mode":"lines","name":"silty loam","a":[0,28,28,12,12,0,0],"b":[50,22,0,0,8,20,50],"c":[50,50,72,88,80,80,50],"line":{"color":"#444"},"fill":"toself","fillcolor":"#bc80bd","hoveron":"fills+points"},{"type":"scatterternary","mode":"lines","name":"silt","a":[0,0,12,12,0],"b":[0,20,8,0,0],"c":[100,80,80,88,100],"line":{"color":"#444"},"fill":"toself","fillcolor":"#ccebc5","hoveron":"fills+points"},{"type":"scatterternary","mode":"lines","name":"loam","a":[28,28,5,5,20,28],"b":[45,22,45,53,53,45],"c":[27,50,50,42,32,27],"line":{"color":"#444"},"fill":"toself","fillcolor":"#ffed6f","hoveron":"fills+points"}], 3 | "layout": { 4 | "ternary": { 5 | "sum": 100, 6 | "aaxis": { 7 | "title": "Clay", 8 | "ticksuffix": "%", 9 | "min": 0.01, 10 | "linewidth": 2, 11 | "ticks": "outside", 12 | "ticklen": 8, 13 | "showgrid": true 14 | }, 15 | "baxis": { 16 | "title": "Sand", 17 | "ticksuffix": "%", 18 | "min": 0.01, 19 | "linewidth": 2, 20 | "ticks": "outside", 21 | "ticklen": 8, 22 | "showgrid": true 23 | }, 24 | "caxis": { 25 | "title": "Silt", 26 | "ticksuffix": "%", 27 | "min": 0.01, 28 | "linewidth": 2, 29 | "ticks": "outside", 30 | "ticklen": 8, 31 | "showgrid": true 32 | } 33 | }, 34 | "showlegend": false, 35 | "width": 700, 36 | "annotations": [{ 37 | "showarrow": false, 38 | "text": "Soil Types Fill Plot", 39 | "x": 0.15, 40 | "y": 1.1 41 | }] 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /example_app/examples/plotly/windrose.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": [ 3 | { 4 | "r": [77.5, 72.5, 70.0, 45.0, 22.5, 42.5, 40.0, 62.5], 5 | "t": ["North", "N-E", "East", "S-E", "South", "S-W", "West", "N-W"], 6 | "name": "11-14 m/s", 7 | "marker": {"color": "rgb(106,81,163)"}, 8 | "type": "area" 9 | }, 10 | { 11 | "r": [57.5, 50.0, 45.0, 35.0, 20.0, 22.5, 37.5, 55.0], 12 | "t": ["North", "N-E", "East", "S-E", "South", "S-W", "West", "N-W"], 13 | "name": "8-11 m/s", 14 | "marker": {"color": "rgb(158,154,200)"}, 15 | "type": "area" 16 | }, 17 | { 18 | "r": [40.0, 30.0, 30.0, 35.0, 7.5, 7.5, 32.5, 40.0], 19 | "t": ["North", "N-E", "East", "S-E", "South", "S-W", "West", "N-W"], 20 | "name": "5-8 m/s", 21 | "marker": {"color": "rgb(203,201,226)"}, 22 | "type": "area" 23 | }, 24 | { 25 | "r": [20.0, 7.5, 15.0, 22.5, 2.5, 2.5, 12.5, 22.5], 26 | "t": ["North", "N-E", "East", "S-E", "South", "S-W", "West", "N-W"], 27 | "name": "< 5 m/s", 28 | "marker": {"color": "rgb(242,240,247)"}, 29 | "type": "area" 30 | } 31 | ], 32 | "layout": { 33 | "title": "Wind Speed Distribution in Laurel, NE", 34 | "font": {"size": 16}, 35 | "legend": {"font": {"size": 16}}, 36 | "radialaxis": {"ticksuffix": "%"}, 37 | "orientation": 270 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /example_app/examples/screenshots/addmodule.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/christabor/flask_jsondash/0a6690da56492cf3fbda3053e200592bcae2aa37/example_app/examples/screenshots/addmodule.png -------------------------------------------------------------------------------- /example_app/examples/screenshots/inputs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/christabor/flask_jsondash/0a6690da56492cf3fbda3053e200592bcae2aa37/example_app/examples/screenshots/inputs.png -------------------------------------------------------------------------------- /example_app/examples/screenshots/kitchensink1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/christabor/flask_jsondash/0a6690da56492cf3fbda3053e200592bcae2aa37/example_app/examples/screenshots/kitchensink1.png -------------------------------------------------------------------------------- /example_app/examples/screenshots/kitchensink2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/christabor/flask_jsondash/0a6690da56492cf3fbda3053e200592bcae2aa37/example_app/examples/screenshots/kitchensink2.png -------------------------------------------------------------------------------- /example_app/examples/screenshots/listview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/christabor/flask_jsondash/0a6690da56492cf3fbda3053e200592bcae2aa37/example_app/examples/screenshots/listview.png -------------------------------------------------------------------------------- /example_app/examples/screenshots/numbergroups.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/christabor/flask_jsondash/0a6690da56492cf3fbda3053e200592bcae2aa37/example_app/examples/screenshots/numbergroups.png -------------------------------------------------------------------------------- /example_app/examples/screenshots/plotly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/christabor/flask_jsondash/0a6690da56492cf3fbda3053e200592bcae2aa37/example_app/examples/screenshots/plotly.png -------------------------------------------------------------------------------- /example_app/examples/screenshots/vegalite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/christabor/flask_jsondash/0a6690da56492cf3fbda3053e200592bcae2aa37/example_app/examples/screenshots/vegalite.png -------------------------------------------------------------------------------- /example_app/examples/sigma/basic.json: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": [ 3 | { 4 | "id": "a", 5 | "label": "A node", 6 | "x": 0, 7 | "y": 0, 8 | "size": 3 9 | }, 10 | { 11 | "id": "b", 12 | "label": "Another node", 13 | "x": 3, 14 | "y": 1, 15 | "size": 2 16 | }, 17 | { 18 | "id": "c", 19 | "label": "And a last one", 20 | "x": 1, 21 | "y": 3, 22 | "size": 1 23 | } 24 | ], 25 | "edges": [ 26 | { 27 | "id": "e0", 28 | "source": "a", 29 | "target": "b" 30 | }, 31 | { 32 | "id": "e1", 33 | "source": "b", 34 | "target": "c" 35 | }, 36 | { 37 | "id": "e2", 38 | "source": "c", 39 | "target": "a" 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /example_app/examples/vegalite/bar.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://vega.github.io/schema/vega-lite/v2.json", 3 | "description": "A simple bar chart with embedded data.", 4 | "data": { 5 | "values": [ 6 | { 7 | "a": "A", 8 | "b": 28 9 | }, 10 | { 11 | "a": "B", 12 | "b": 55 13 | }, 14 | { 15 | "a": "C", 16 | "b": 43 17 | }, 18 | { 19 | "a": "D", 20 | "b": 91 21 | }, 22 | { 23 | "a": "E", 24 | "b": 81 25 | }, 26 | { 27 | "a": "F", 28 | "b": 53 29 | }, 30 | { 31 | "a": "G", 32 | "b": 19 33 | }, 34 | { 35 | "a": "H", 36 | "b": 87 37 | }, 38 | { 39 | "a": "I", 40 | "b": 52 41 | } 42 | ] 43 | }, 44 | "mark": "bar", 45 | "encoding": { 46 | "x": { 47 | "field": "a", 48 | "type": "ordinal" 49 | }, 50 | "y": { 51 | "field": "b", 52 | "type": "quantitative" 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /example_app/examples/vegalite/bar_aggregate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://vega.github.io/schema/vega-lite/v2.json", 3 | "description": "A bar chart showing the US population distribution of age groups in 2000.", 4 | "data": { 5 | "url": "data/population.json" 6 | }, 7 | "transform": [ 8 | { 9 | "filter": "datum.year == 2000" 10 | } 11 | ], 12 | "mark": "bar", 13 | "encoding": { 14 | "y": { 15 | "field": "age", 16 | "type": "ordinal", 17 | "scale": { 18 | "rangeStep": 17 19 | } 20 | }, 21 | "x": { 22 | "aggregate": "sum", 23 | "field": "people", 24 | "type": "quantitative", 25 | "axis": { 26 | "title": "population" 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /example_app/examples/vegalite/bar_grouped.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { "url": "data/population.json"}, 3 | "transform": { 4 | "filter": "datum.year == 2000", 5 | "calculate": [{"field": "gender", "expr": "datum.sex == 2 ? \"Female\" : \"Male\""}] 6 | }, 7 | "mark": "bar", 8 | "encoding": { 9 | "column": { 10 | "field": "age", "type": "ordinal", 11 | "scale": {"padding": 4}, 12 | "axis": {"orient": "bottom", "axisWidth": 1, "offset": -8} 13 | }, 14 | "y": { 15 | "aggregate": "sum", "field": "people", "type": "quantitative", 16 | "axis": {"title": "population", "grid": false} 17 | }, 18 | "x": { 19 | "field": "gender", "type": "nominal", 20 | "scale": {"bandSize": 6}, 21 | "axis": false 22 | }, 23 | "color": { 24 | "field": "gender", "type": "nominal", 25 | "scale": {"range": ["#EA98D2", "#659CCA"]} 26 | } 27 | }, 28 | "config": {"facet": {"cell": {"strokeWidth": 0}}} 29 | } 30 | -------------------------------------------------------------------------------- /example_app/examples/vegalite/becker_barley_trellis.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "The Trellis display by Becker et al. helped establish small multiples as a “powerful mechanism for understanding interactions in studies of how a response depends on explanatory variables”. Here we reproduce a trellis of Barley yields from the 1930s, complete with main-effects ordering to facilitate comparison.", 3 | "data": {"url": "data/barley.json"}, 4 | "mark": "point", 5 | "encoding": { 6 | "row": {"field": "site", "type": "ordinal"}, 7 | "x": {"aggregate": "mean", "field": "yield", "type": "quantitative"}, 8 | "y": { 9 | "field": "variety", "type": "ordinal", 10 | "sort": {"field": "yield","op": "mean"}, 11 | "scale": {"bandSize": 12} 12 | }, 13 | "color": {"field": "year", "type": "nominal"} 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /example_app/examples/vegalite/binned_scatterplot.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://vega.github.io/schema/vega-lite/v2.json", 3 | "data": { 4 | "url": "data/movies.json" 5 | }, 6 | "mark": "circle", 7 | "encoding": { 8 | "x": { 9 | "bin": { 10 | "maxbins": 10 11 | }, 12 | "field": "IMDB_Rating", 13 | "type": "quantitative" 14 | }, 15 | "y": { 16 | "bin": { 17 | "maxbins": 10 18 | }, 19 | "field": "Rotten_Tomatoes_Rating", 20 | "type": "quantitative" 21 | }, 22 | "size": { 23 | "aggregate": "count", 24 | "type": "quantitative" 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /example_app/examples/vegalite/data/anscombe.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "Series": "I", 4 | "X": 10.0, 5 | "Y": 8.04 6 | }, 7 | { 8 | "Series": "I", 9 | "X": 8.0, 10 | "Y": 6.95 11 | }, 12 | { 13 | "Series": "I", 14 | "X": 13.0, 15 | "Y": 7.58 16 | }, 17 | { 18 | "Series": "I", 19 | "X": 9.0, 20 | "Y": 8.81 21 | }, 22 | { 23 | "Series": "I", 24 | "X": 11.0, 25 | "Y": 8.33 26 | }, 27 | { 28 | "Series": "I", 29 | "X": 14.0, 30 | "Y": 9.96 31 | }, 32 | { 33 | "Series": "I", 34 | "X": 6.0, 35 | "Y": 7.24 36 | }, 37 | { 38 | "Series": "I", 39 | "X": 4.0, 40 | "Y": 4.26 41 | }, 42 | { 43 | "Series": "I", 44 | "X": 12.0, 45 | "Y": 10.84 46 | }, 47 | { 48 | "Series": "I", 49 | "X": 7.0, 50 | "Y": 4.81 51 | }, 52 | { 53 | "Series": "I", 54 | "X": 5.0, 55 | "Y": 5.68 56 | }, 57 | { 58 | "Series": "II", 59 | "X": 10.0, 60 | "Y": 9.14 61 | }, 62 | { 63 | "Series": "II", 64 | "X": 8.0, 65 | "Y": 8.14 66 | }, 67 | { 68 | "Series": "II", 69 | "X": 13.0, 70 | "Y": 8.74 71 | }, 72 | { 73 | "Series": "II", 74 | "X": 9.0, 75 | "Y": 8.77 76 | }, 77 | { 78 | "Series": "II", 79 | "X": 11.0, 80 | "Y": 9.26 81 | }, 82 | { 83 | "Series": "II", 84 | "X": 14.0, 85 | "Y": 8.10 86 | }, 87 | { 88 | "Series": "II", 89 | "X": 6.0, 90 | "Y": 6.13 91 | }, 92 | { 93 | "Series": "II", 94 | "X": 4.0, 95 | "Y": 3.10 96 | }, 97 | { 98 | "Series": "II", 99 | "X": 12.0, 100 | "Y": 9.13 101 | }, 102 | { 103 | "Series": "II", 104 | "X": 7.0, 105 | "Y": 7.26 106 | }, 107 | { 108 | "Series": "II", 109 | "X": 5.0, 110 | "Y": 4.74 111 | }, 112 | { 113 | "Series": "III", 114 | "X": 10.0, 115 | "Y": 7.46 116 | }, 117 | { 118 | "Series": "III", 119 | "X": 8.0, 120 | "Y": 6.77 121 | }, 122 | { 123 | "Series": "III", 124 | "X": 13.0, 125 | "Y": 12.74 126 | }, 127 | { 128 | "Series": "III", 129 | "X": 9.0, 130 | "Y": 7.11 131 | }, 132 | { 133 | "Series": "III", 134 | "X": 11.0, 135 | "Y": 7.81 136 | }, 137 | { 138 | "Series": "III", 139 | "X": 14.0, 140 | "Y": 8.84 141 | }, 142 | { 143 | "Series": "III", 144 | "X": 6.0, 145 | "Y": 6.08 146 | }, 147 | { 148 | "Series": "III", 149 | "X": 4.0, 150 | "Y": 5.39 151 | }, 152 | { 153 | "Series": "III", 154 | "X": 12.0, 155 | "Y": 8.15 156 | }, 157 | { 158 | "Series": "III", 159 | "X": 7.0, 160 | "Y": 6.42 161 | }, 162 | { 163 | "Series": "III", 164 | "X": 5.0, 165 | "Y": 5.73 166 | }, 167 | { 168 | "Series": "IV", 169 | "X": 8.0, 170 | "Y": 6.58 171 | }, 172 | { 173 | "Series": "IV", 174 | "X": 8.0, 175 | "Y": 5.76 176 | }, 177 | { 178 | "Series": "IV", 179 | "X": 8.0, 180 | "Y": 7.71 181 | }, 182 | { 183 | "Series": "IV", 184 | "X": 8.0, 185 | "Y": 8.84 186 | }, 187 | { 188 | "Series": "IV", 189 | "X": 8.0, 190 | "Y": 8.47 191 | }, 192 | { 193 | "Series": "IV", 194 | "X": 8.0, 195 | "Y": 7.04 196 | }, 197 | { 198 | "Series": "IV", 199 | "X": 8.0, 200 | "Y": 5.25 201 | }, 202 | { 203 | "Series": "IV", 204 | "X": 19.0, 205 | "Y": 12.50 206 | }, 207 | { 208 | "Series": "IV", 209 | "X": 8.0, 210 | "Y": 5.56 211 | }, 212 | { 213 | "Series": "IV", 214 | "X": 8.0, 215 | "Y": 7.91 216 | }, 217 | { 218 | "Series": "IV", 219 | "X": 8.0, 220 | "Y": 6.89 221 | } 222 | ] 223 | -------------------------------------------------------------------------------- /example_app/examples/vegalite/horizontal_error_bars.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "A bar chart showing the US population distribution of age groups in 2000.", 3 | "data": {"url": "data/population.json"}, 4 | "transform": {"filter": "datum.year == 2000"}, 5 | "layers": [ 6 | { 7 | "mark": "rule", 8 | "encoding": { 9 | "y": {"field": "age","type": "ordinal"}, 10 | "x": { 11 | "aggregate": "min", 12 | "field": "people", 13 | "type": "quantitative", 14 | "axis": {"title": "population"} 15 | }, 16 | "x2": { 17 | "aggregate": "max", 18 | "field": "people", 19 | "type": "quantitative" 20 | } 21 | } 22 | }, 23 | { 24 | "mark": "tick", 25 | "encoding": { 26 | "y": {"field": "age","type": "ordinal"}, 27 | "x": { 28 | "aggregate": "min", 29 | "field": "people", 30 | "type": "quantitative", 31 | "axis": {"title": "population"} 32 | }, 33 | "size": {"value": 5} 34 | } 35 | }, 36 | { 37 | "mark": "tick", 38 | "encoding": { 39 | "y": {"field": "age","type": "ordinal"}, 40 | "x": { 41 | "aggregate": "max", 42 | "field": "people", 43 | "type": "quantitative", 44 | "axis": {"title": "population"} 45 | }, 46 | "size": {"value": 5} 47 | } 48 | }, 49 | { 50 | "mark": "point", 51 | "encoding": { 52 | "y": {"field": "age","type": "ordinal"}, 53 | "x": { 54 | "aggregate": "mean", 55 | "field": "people", 56 | "type": "quantitative", 57 | "axis": {"title": "population"} 58 | }, 59 | "size": {"value": 2} 60 | } 61 | } 62 | ] 63 | } 64 | -------------------------------------------------------------------------------- /example_app/examples/vegalite/normalized_stacked_area.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": {"url": "data/unemployment-across-industries.json"}, 3 | "mark": "area", 4 | "encoding": { 5 | "x": { 6 | "timeUnit": "yearmonth", "field": "date", "type": "temporal", 7 | "scale": {"nice": "month"}, 8 | "axis": {"axisWidth": 0, "format": "%Y", "labelAngle": 0} 9 | }, 10 | "y": { 11 | "aggregate": "sum", "field": "count","type": "quantitative", 12 | "axis": false 13 | }, 14 | "color": {"field":"series", "type":"nominal", "scale":{"range": "category20b"}} 15 | }, 16 | "config": {"cell": {"width": 300, "height": 200}, "mark": {"stacked": "normalize"}} 17 | } 18 | -------------------------------------------------------------------------------- /example_app/examples/vegalite/punchcard.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://vega.github.io/schema/vega-lite/v2.json", 3 | "data": { 4 | "url": "data/github.csv" 5 | }, 6 | "mark": "circle", 7 | "encoding": { 8 | "y": { 9 | "field": "time", 10 | "type": "temporal", 11 | "timeUnit": "day" 12 | }, 13 | "x": { 14 | "field": "time", 15 | "type": "temporal", 16 | "timeUnit": "hours" 17 | }, 18 | "size": { 19 | "field": "count", 20 | "type": "quantitative", 21 | "aggregate": "sum" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /example_app/examples/vegalite/rect_heatmap.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://vega.github.io/schema/vega-lite/v2.json", 3 | "data": { 4 | "url": "data/cars.json" 5 | }, 6 | "mark": "rect", 7 | "encoding": { 8 | "y": { 9 | "field": "Origin", 10 | "type": "ordinal" 11 | }, 12 | "x": { 13 | "field": "Cylinders", 14 | "type": "ordinal" 15 | }, 16 | "color": { 17 | "aggregate": "mean", 18 | "field": "Horsepower", 19 | "type": "quantitative" 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /example_app/examples/vegalite/scatterplot.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://vega.github.io/schema/vega-lite/v2.json", 3 | "description": "A scatterplot showing horsepower and miles per gallons for various cars.", 4 | "data": { 5 | "url": "data/cars.json" 6 | }, 7 | "mark": "point", 8 | "encoding": { 9 | "x": { 10 | "field": "Horsepower", 11 | "type": "quantitative" 12 | }, 13 | "y": { 14 | "field": "Miles_per_Gallon", 15 | "type": "quantitative" 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /example_app/examples/vegalite/stacked_area.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://vega.github.io/schema/vega-lite/v2.json", 3 | "description": "Area chart showing weight of cars over time.", 4 | "width": 300, 5 | "height": 200, 6 | "data": { 7 | "url": "data/unemployment-across-industries.json" 8 | }, 9 | "mark": "area", 10 | "encoding": { 11 | "x": { 12 | "timeUnit": "yearmonth", 13 | "field": "date", 14 | "type": "temporal", 15 | "scale": { 16 | "nice": "month" 17 | }, 18 | "axis": { 19 | "format": "%Y", 20 | "labelAngle": 0 21 | } 22 | }, 23 | "y": { 24 | "aggregate": "sum", 25 | "field": "count", 26 | "type": "quantitative" 27 | }, 28 | "color": { 29 | "field": "series", 30 | "type": "nominal", 31 | "scale": { 32 | "scheme": "category20b" 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /example_app/examples/vegalite/stacked_area_stream.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://vega.github.io/schema/vega-lite/v2.json", 3 | "data": { 4 | "url": "data/unemployment-across-industries.json" 5 | }, 6 | "mark": "area", 7 | "encoding": { 8 | "x": { 9 | "timeUnit": "yearmonth", 10 | "field": "date", 11 | "type": "temporal", 12 | "scale": { 13 | "nice": "month" 14 | }, 15 | "axis": { 16 | "domain": false, 17 | "format": "%Y", 18 | "labelAngle": 0, 19 | "tickSize": 0 20 | } 21 | }, 22 | "y": { 23 | "aggregate": "sum", 24 | "field": "count", 25 | "type": "quantitative", 26 | "axis": null, 27 | "stack": "center" 28 | }, 29 | "color": { 30 | "field": "series", 31 | "type": "nominal", 32 | "scale": { 33 | "scheme": "category20b" 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /example_app/examples/vegalite/stacked_bar_h.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://vega.github.io/schema/vega-lite/v2.json", 3 | "data": { 4 | "url": "data/barley.json" 5 | }, 6 | "mark": "bar", 7 | "encoding": { 8 | "x": { 9 | "aggregate": "sum", 10 | "field": "yield", 11 | "type": "quantitative" 12 | }, 13 | "y": { 14 | "field": "variety", 15 | "type": "nominal" 16 | }, 17 | "color": { 18 | "field": "site", 19 | "type": "nominal" 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /example_app/examples/vegalite/stacked_normalized.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { "url": "data/population.json"}, 3 | "transform": { 4 | "filter": "datum.year == 2000", 5 | "calculate": [{"field": "gender", "expr": "datum.sex == 2 ? \"Female\" : \"Male\""}] 6 | }, 7 | "mark": "bar", 8 | "encoding": { 9 | "y": { 10 | "aggregate": "sum", "field": "people", "type": "quantitative", 11 | "axis": {"title": "population"} 12 | }, 13 | "x": { 14 | "field": "age", "type": "ordinal", 15 | "scale": {"bandSize": 17} 16 | }, 17 | "color": { 18 | "field": "gender", "type": "nominal", 19 | "scale": {"range": ["#EA98D2", "#659CCA"]} 20 | } 21 | }, 22 | "config": {"mark": {"stacked": "normalize"}} 23 | } 24 | -------------------------------------------------------------------------------- /example_app/examples/vegalite/tick_strip.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://vega.github.io/schema/vega-lite/v2.json", 3 | "description": "Shows the relationship between horsepower and the numbver of cylinders using tick marks.", 4 | "data": { 5 | "url": "data/cars.json" 6 | }, 7 | "mark": "tick", 8 | "encoding": { 9 | "x": { 10 | "field": "Horsepower", 11 | "type": "quantitative" 12 | }, 13 | "y": { 14 | "field": "Cylinders", 15 | "type": "ordinal" 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /example_app/examples/vegalite/trellis_anscombe.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "Anscombe's Quartet", 3 | "data": {"url": "data/anscombe.json"}, 4 | "mark": "circle", 5 | "encoding": { 6 | "column": {"field": "Series", "type": "nominal"}, 7 | "x": { 8 | "field": "X", 9 | "type": "quantitative", 10 | "scale": {"zero": false} 11 | }, 12 | "y": { 13 | "field": "Y", 14 | "type": "quantitative", 15 | "scale": {"zero": false} 16 | } 17 | }, 18 | "config": {"mark": {"opacity": 1}} 19 | } 20 | -------------------------------------------------------------------------------- /example_app/static/css/vendor/c3.min.css: -------------------------------------------------------------------------------- 1 | .c3 svg{font:10px sans-serif;-webkit-tap-highlight-color:transparent}.c3 line,.c3 path{fill:none;stroke:#000}.c3 text{-webkit-user-select:none;-moz-user-select:none;user-select:none}.c3-bars path,.c3-event-rect,.c3-legend-item-tile,.c3-xgrid-focus,.c3-ygrid{shape-rendering:crispEdges}.c3-chart-arc path{stroke:#fff}.c3-chart-arc text{fill:#fff;font-size:13px}.c3-grid line{stroke:#aaa}.c3-grid text{fill:#aaa}.c3-xgrid,.c3-ygrid{stroke-dasharray:3 3}.c3-text.c3-empty{fill:gray;font-size:2em}.c3-line{stroke-width:1px}.c3-circle._expanded_{stroke-width:1px;stroke:#fff}.c3-selected-circle{fill:#fff;stroke-width:2px}.c3-bar{stroke-width:0}.c3-bar._expanded_{fill-opacity:.75}.c3-target.c3-focused{opacity:1}.c3-target.c3-focused path.c3-line,.c3-target.c3-focused path.c3-step{stroke-width:2px}.c3-target.c3-defocused{opacity:.3!important}.c3-region{fill:#4682b4;fill-opacity:.1}.c3-brush .extent{fill-opacity:.1}.c3-legend-item{font-size:12px}.c3-legend-item-hidden{opacity:.15}.c3-legend-background{opacity:.75;fill:#fff;stroke:#d3d3d3;stroke-width:1}.c3-title{font:14px sans-serif}.c3-tooltip-container{z-index:10}.c3-tooltip{border-collapse:collapse;border-spacing:0;background-color:#fff;empty-cells:show;-webkit-box-shadow:7px 7px 12px -9px #777;-moz-box-shadow:7px 7px 12px -9px #777;box-shadow:7px 7px 12px -9px #777;opacity:.9}.c3-tooltip tr{border:1px solid #CCC}.c3-tooltip th{background-color:#aaa;font-size:14px;padding:2px 5px;text-align:left;color:#FFF}.c3-tooltip td{font-size:13px;padding:3px 6px;background-color:#fff;border-left:1px dotted #999}.c3-tooltip td>span{display:inline-block;width:10px;height:10px;margin-right:6px}.c3-tooltip td.value{text-align:right}.c3-area{stroke-width:0;opacity:.2}.c3-chart-arcs-title{dominant-baseline:middle;font-size:1.3em}.c3-chart-arcs .c3-chart-arcs-background{fill:#e0e0e0;stroke:none}.c3-chart-arcs .c3-chart-arcs-gauge-unit{fill:#000;font-size:16px}.c3-chart-arcs .c3-chart-arcs-gauge-max,.c3-chart-arcs .c3-chart-arcs-gauge-min{fill:#777}.c3-chart-arc .c3-gauge-value{fill:#000} -------------------------------------------------------------------------------- /example_app/static/css/vendor/d3.flameGraph.css: -------------------------------------------------------------------------------- 1 | .d3-flame-graph rect { 2 | stroke: #EEEEEE; 3 | fill-opacity: .8; 4 | } 5 | 6 | .d3-flame-graph rect:hover { 7 | stroke: #474747; 8 | stroke-width: 0.5; 9 | cursor: pointer; 10 | } 11 | 12 | .d3-flame-graph .label { 13 | pointer-events: none; 14 | white-space: nowrap; 15 | text-overflow: ellipsis; 16 | overflow: hidden; 17 | font-size: 12px; 18 | font-family: Verdana; 19 | margin-left: 4px; 20 | margin-right: 4px; 21 | line-height: 1.5; 22 | padding: 0 0 0; 23 | font-weight: 400; 24 | color: black; 25 | text-align: left; 26 | } 27 | 28 | .d3-flame-graph .fade { 29 | opacity: 0.6 !important; 30 | } 31 | 32 | .d3-flame-graph .title { 33 | font-size: 20px; 34 | font-family: Verdana; 35 | } 36 | 37 | .d3-flame-graph-tip { 38 | line-height: 1; 39 | font-family: Verdana; 40 | font-size: 12px; 41 | padding: 12px; 42 | background: rgba(0, 0, 0, 0.8); 43 | color: #fff; 44 | border-radius: 2px; 45 | pointer-events: none; 46 | } 47 | 48 | /* Creates a small triangle extender for the tooltip */ 49 | .d3-flame-graph-tip:after { 50 | box-sizing: border-box; 51 | display: inline; 52 | font-size: 10px; 53 | width: 100%; 54 | line-height: 1; 55 | color: rgba(0, 0, 0, 0.8); 56 | position: absolute; 57 | pointer-events: none; 58 | } 59 | 60 | /* Northward tooltips */ 61 | .d3-flame-graph-tip.n:after { 62 | content: "\25BC"; 63 | margin: -1px 0 0 0; 64 | top: 100%; 65 | left: 0; 66 | text-align: center; 67 | } 68 | 69 | /* Eastward tooltips */ 70 | .d3-flame-graph-tip.e:after { 71 | content: "\25C0"; 72 | margin: -4px 0 0 0; 73 | top: 50%; 74 | left: -8px; 75 | } 76 | 77 | /* Southward tooltips */ 78 | .d3-flame-graph-tip.s:after { 79 | content: "\25B2"; 80 | margin: 0 0 1px 0; 81 | top: -8px; 82 | left: 0; 83 | text-align: center; 84 | } 85 | 86 | /* Westward tooltips */ 87 | .d3-flame-graph-tip.w:after { 88 | content: "\25B6"; 89 | margin: -4px 0 0 -1px; 90 | top: 50%; 91 | left: 100%; 92 | } -------------------------------------------------------------------------------- /example_app/static/css/vendor/dataTables.bootstrap.min.css: -------------------------------------------------------------------------------- 1 | table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:75px;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:8px;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:8px;right:8px;display:block;font-family:'Glyphicons Halflings';opacity:0.5}table.dataTable thead .sorting:after{opacity:0.2;content:"\e150"}table.dataTable thead .sorting_asc:after{content:"\e155"}table.dataTable thead .sorting_desc:after{content:"\e156"}table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{color:#eee}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.table-condensed>thead>tr>th{padding-right:20px}table.dataTable.table-condensed .sorting:after,table.dataTable.table-condensed .sorting_asc:after,table.dataTable.table-condensed .sorting_desc:after{top:6px;right:6px}table.table-bordered.dataTable{border-collapse:separate !important}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:0}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0} 2 | -------------------------------------------------------------------------------- /example_app/static/js/vendor/dataTables.bootstrap.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | DataTables Bootstrap 3 integration 3 | ©2011-2015 SpryMedia Ltd - datatables.net/license 4 | */ 5 | (function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return b(a,window,document)}):"object"===typeof exports?module.exports=function(a,e){a||(a=window);if(!e||!e.fn.dataTable)e=require("datatables.net")(a,e).$;return b(e,a,a.document)}:b(jQuery,window,document)})(function(b,a,e){var d=b.fn.dataTable;b.extend(!0,d.defaults,{dom:"<'row'<'col-sm-6'l><'col-sm-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-5'i><'col-sm-7'p>>",renderer:"bootstrap"});b.extend(d.ext.classes, 6 | {sWrapper:"dataTables_wrapper form-inline dt-bootstrap",sFilterInput:"form-control input-sm",sLengthSelect:"form-control input-sm",sProcessing:"dataTables_processing panel panel-default"});d.ext.renderer.pageButton.bootstrap=function(a,h,r,m,j,n){var o=new d.Api(a),s=a.oClasses,k=a.oLanguage.oPaginate,t=a.oLanguage.oAria.paginate||{},f,g,p=0,q=function(d,e){var l,h,i,c,m=function(a){a.preventDefault();!b(a.currentTarget).hasClass("disabled")&&o.page()!=a.data.action&&o.page(a.data.action).draw("page")}; 7 | l=0;for(h=e.length;l",{"class":s.sPageButton+" "+g,id:0===r&&"string"===typeof c?a.sTableId+"_"+c:null}).append(b("",{href:"#", 8 | "aria-controls":a.sTableId,"aria-label":t[c],"data-dt-idx":p,tabindex:a.iTabIndex}).html(f)).appendTo(d),a.oApi._fnBindAction(i,{action:c},m),p++)}},i;try{i=b(h).find(e.activeElement).data("dt-idx")}catch(u){}q(b(h).empty().html('
    ').children("ul"),m);i&&b(h).find("[data-dt-idx="+i+"]").focus()};d.TableTools&&(b.extend(!0,d.TableTools.classes,{container:"DTTT btn-group",buttons:{normal:"btn btn-default",disabled:"disabled"},collection:{container:"DTTT_dropdown dropdown-menu", 9 | buttons:{normal:"",disabled:"disabled"}},print:{info:"DTTT_print_info"},select:{row:"active"}}),b.extend(!0,d.TableTools.DEFAULTS.oTags,{collection:{container:"ul",button:"li",liner:"a"}}));return d}); 10 | -------------------------------------------------------------------------------- /example_app/templates/examples/custom.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
    6 |

    Welcome

    7 |

    I am a custom page!

    8 |

    Random number: {{ number }}

    9 |
    10 | 11 | 12 | -------------------------------------------------------------------------------- /example_app/templates/examples/inline-chart-hexbin.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 23 | 24 | 25 | 29 | 98 | 99 | -------------------------------------------------------------------------------- /example_app/templates/examples/inline-map.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
    7 | 8 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /example_app/templates/examples/inline-sparklines.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 20 |
    21 |

    22 | Inline Sparkline: 1,4,4,7,5,9,10. 23 |

    24 |

    25 | Sparkline with dynamic data: Loading.. 26 |

    27 |

    28 | Bar chart with dynamic data: Loading.. 29 |

    30 |

    31 | Bar chart with inline data: 1,3,4,5,3,5 32 |

    33 |
    34 |