├── .gitignore ├── LICENSE ├── README.md └── reporting ├── README.md ├── final └── reports.html ├── libs ├── d3 │ ├── LICENSE │ ├── d3.js │ └── d3.min.js ├── nvd3 │ ├── .gitignore │ ├── .jshintrc │ ├── .travis.yml │ ├── GruntFile.js │ ├── LICENSE.md │ ├── README.md │ ├── bower.json │ ├── build │ │ ├── nv.d3.css │ │ ├── nv.d3.js │ │ ├── nv.d3.min.css │ │ └── nv.d3.min.js │ ├── examples │ │ ├── TimeSeries.html │ │ ├── boxPlot.html │ │ ├── bullet.html │ │ ├── bulletChart.html │ │ ├── candlestick.html │ │ ├── candlestickChart.html │ │ ├── cumulativeLineChart.html │ │ ├── discreteBarChart.html │ │ ├── documentation.html │ │ ├── donutChart.html │ │ ├── furiousLegend.html │ │ ├── historicalBar.html │ │ ├── historicalBarChart.html │ │ ├── images │ │ │ ├── background.png │ │ │ ├── body-background.png │ │ │ ├── bullet.png │ │ │ ├── hr.png │ │ │ └── octocat-logo.png │ │ ├── index.html │ │ ├── legend.html │ │ ├── lib │ │ │ ├── colorbrewer.js │ │ │ └── stream_layers.js │ │ ├── line.html │ │ ├── lineChart.html │ │ ├── lineChartSVGResize.html │ │ ├── linePlusBarChart.html │ │ ├── lineWithFocusChart.html │ │ ├── lineWithFocusChart_x2AxisLabel.html │ │ ├── monitoringChart.html │ │ ├── multiBarChart.html │ │ ├── multiBarChart2.html │ │ ├── multiBarHorizontalChart.html │ │ ├── multiChart.html │ │ ├── ohlc.html │ │ ├── ohlcChart.html │ │ ├── parallelCoordinates.html │ │ ├── pie.html │ │ ├── pieChart.html │ │ ├── scatter.html │ │ ├── scatterChart.html │ │ ├── scatterPlusLineChart.html │ │ ├── site.html │ │ ├── sparkline.html │ │ ├── sparklinePlus.html │ │ ├── stackedArea.html │ │ ├── stackedAreaChart.html │ │ ├── stylesheets │ │ │ ├── pygment_trac.css │ │ │ └── styles.css │ │ ├── sunburst.html │ │ └── tooltip.html │ ├── index.html │ ├── package.js │ ├── package.json │ ├── src │ │ ├── core.js │ │ ├── css │ │ │ ├── axis.css │ │ │ ├── bars.css │ │ │ ├── boxplot.css │ │ │ ├── bullet.css │ │ │ ├── candlestick.css │ │ │ ├── furiousLegend.css │ │ │ ├── lineplusbar.css │ │ │ ├── lines.css │ │ │ ├── main.css │ │ │ ├── ohlc.css │ │ │ ├── parallelcoordinates.css │ │ │ ├── pie.css │ │ │ ├── scatter.css │ │ │ ├── sparkline.css │ │ │ ├── stackedarea.css │ │ │ └── tooltip.css │ │ ├── dom.js │ │ ├── interactiveLayer.js │ │ ├── models │ │ │ ├── axis.js │ │ │ ├── boxPlot.js │ │ │ ├── boxPlotChart.js │ │ │ ├── bullet.js │ │ │ ├── bulletChart.js │ │ │ ├── candlestickBar.js │ │ │ ├── cumulativeLineChart.js │ │ │ ├── discreteBar.js │ │ │ ├── discreteBarChart.js │ │ │ ├── distribution.js │ │ │ ├── furiousLegend.js │ │ │ ├── historicalBar.js │ │ │ ├── historicalBarChart.js │ │ │ ├── legend.js │ │ │ ├── line.js │ │ │ ├── lineChart.js │ │ │ ├── linePlusBarChart.js │ │ │ ├── lineWithFocusChart.js │ │ │ ├── multiBar.js │ │ │ ├── multiBarChart.js │ │ │ ├── multiBarHorizontal.js │ │ │ ├── multiBarHorizontalChart.js │ │ │ ├── multiChart.js │ │ │ ├── ohlcBar.js │ │ │ ├── parallelCoordinates.js │ │ │ ├── pie.js │ │ │ ├── pieChart.js │ │ │ ├── scatter.js │ │ │ ├── scatterChart.js │ │ │ ├── sparkline.js │ │ │ ├── sparklinePlus.js │ │ │ ├── stackedArea.js │ │ │ ├── stackedAreaChart.js │ │ │ ├── sunburst.js │ │ │ └── sunburstChart.js │ │ ├── tooltip.js │ │ └── utils.js │ └── test │ │ ├── ScatterChartTest.html │ │ ├── boxPlotTest.html │ │ ├── cumulativeLineChart.html │ │ ├── lineChartTest.html │ │ ├── linePlusBarChart.html │ │ ├── linePlusBarWithFocusChart.html │ │ ├── lineWithFisheyeChart.html │ │ ├── lineWithFocusChart.html │ │ ├── lineWithFocusChartMissingData.html │ │ ├── mocha │ │ ├── axis.coffee │ │ ├── boxplot.coffee │ │ ├── bullet.coffee │ │ ├── core.coffee │ │ ├── cumulative-line.coffee │ │ ├── discretebar.coffee │ │ ├── historical-bar.coffee │ │ ├── legend.coffee │ │ ├── line.coffee │ │ ├── multibar-horizontal.coffee │ │ ├── multibar.coffee │ │ ├── pie.coffee │ │ ├── scatter.coffee │ │ ├── sparkline.coffee │ │ ├── stacked.coffee │ │ ├── sunburst.coffee │ │ ├── test-utils.coffee │ │ └── utils.coffee │ │ ├── multiBarChartTest.html │ │ ├── multiBarHorizontalChart.html │ │ ├── node │ │ ├── GruntFile.js │ │ ├── README.md │ │ ├── nodeTest.html │ │ ├── nodeTest.js │ │ └── package.json │ │ ├── pieChartTest.html │ │ ├── polylinearTest.html │ │ ├── realTimeChartTest.html │ │ ├── scatterPlusLineChart.html │ │ ├── stackedAreaChartMissingData.html │ │ ├── stackedAreaChartTest.html │ │ ├── stream_layers.js │ │ ├── testScript.js │ │ └── teststyle.css ├── styles.css ├── xAPI-Dashboard-development │ ├── .gitignore │ ├── API_collection.md │ ├── API_dashboard.md │ ├── Gruntfile.js │ ├── LICENSE │ ├── README.md │ ├── dist │ │ ├── xapicollection.js │ │ ├── xapicollection.min.js │ │ ├── xapidashboard.js │ │ └── xapidashboard.min.js │ ├── examples │ │ ├── childcharts.html │ │ ├── computation.html │ │ ├── liveUpdate │ │ │ ├── index.css │ │ │ ├── index.html │ │ │ └── model.js │ │ ├── livedata.html │ │ ├── multiAggregateExport.html │ │ ├── preprocessed.html │ │ ├── process.html │ │ └── simpletable.html │ ├── extra │ │ ├── chart_final.png │ │ ├── chart_initial.png │ │ ├── gen-lrs-data.js │ │ ├── knockout-3.1.0.js │ │ └── real-lrs-data.js │ ├── generateData │ │ ├── README.md │ │ ├── compress.js │ │ ├── generateData.py │ │ ├── lz-string-1.3.3.js │ │ ├── names.json │ │ └── package.json │ ├── lib │ │ ├── d3.v3.js │ │ ├── nv.d3.css │ │ ├── nv.d3.js │ │ └── xapiwrapper.min.js │ ├── package.json │ ├── src │ │ ├── chart.js │ │ ├── dashboard.js │ │ ├── parsers │ │ │ └── math.jison │ │ └── xapicollection.js │ └── wizard │ │ ├── index.html │ │ ├── model.js │ │ ├── prism.js │ │ ├── style.css │ │ └── themes │ │ └── prism.css └── xapiwrapper.min.js ├── packaged ├── cmi5.xml └── libs │ ├── d3 │ ├── LICENSE │ ├── d3.js │ └── d3.min.js │ ├── nvd3 │ ├── .gitignore │ ├── .jshintrc │ ├── .travis.yml │ ├── GruntFile.js │ ├── LICENSE.md │ ├── README.md │ ├── bower.json │ ├── build │ │ ├── nv.d3.css │ │ ├── nv.d3.js │ │ ├── nv.d3.min.css │ │ └── nv.d3.min.js │ ├── examples │ │ ├── TimeSeries.html │ │ ├── boxPlot.html │ │ ├── bullet.html │ │ ├── bulletChart.html │ │ ├── candlestick.html │ │ ├── candlestickChart.html │ │ ├── cumulativeLineChart.html │ │ ├── discreteBarChart.html │ │ ├── documentation.html │ │ ├── donutChart.html │ │ ├── furiousLegend.html │ │ ├── historicalBar.html │ │ ├── historicalBarChart.html │ │ ├── images │ │ │ ├── background.png │ │ │ ├── body-background.png │ │ │ ├── bullet.png │ │ │ ├── hr.png │ │ │ └── octocat-logo.png │ │ ├── index.html │ │ ├── legend.html │ │ ├── lib │ │ │ ├── colorbrewer.js │ │ │ └── stream_layers.js │ │ ├── line.html │ │ ├── lineChart.html │ │ ├── lineChartSVGResize.html │ │ ├── linePlusBarChart.html │ │ ├── lineWithFocusChart.html │ │ ├── lineWithFocusChart_x2AxisLabel.html │ │ ├── monitoringChart.html │ │ ├── multiBarChart.html │ │ ├── multiBarChart2.html │ │ ├── multiBarHorizontalChart.html │ │ ├── multiChart.html │ │ ├── ohlc.html │ │ ├── ohlcChart.html │ │ ├── parallelCoordinates.html │ │ ├── pie.html │ │ ├── pieChart.html │ │ ├── scatter.html │ │ ├── scatterChart.html │ │ ├── scatterPlusLineChart.html │ │ ├── site.html │ │ ├── sparkline.html │ │ ├── sparklinePlus.html │ │ ├── stackedArea.html │ │ ├── stackedAreaChart.html │ │ ├── stylesheets │ │ │ ├── pygment_trac.css │ │ │ └── styles.css │ │ ├── sunburst.html │ │ └── tooltip.html │ ├── index.html │ ├── package.js │ ├── package.json │ ├── src │ │ ├── core.js │ │ ├── css │ │ │ ├── axis.css │ │ │ ├── bars.css │ │ │ ├── boxplot.css │ │ │ ├── bullet.css │ │ │ ├── candlestick.css │ │ │ ├── furiousLegend.css │ │ │ ├── lineplusbar.css │ │ │ ├── lines.css │ │ │ ├── main.css │ │ │ ├── ohlc.css │ │ │ ├── parallelcoordinates.css │ │ │ ├── pie.css │ │ │ ├── scatter.css │ │ │ ├── sparkline.css │ │ │ ├── stackedarea.css │ │ │ └── tooltip.css │ │ ├── dom.js │ │ ├── interactiveLayer.js │ │ ├── models │ │ │ ├── axis.js │ │ │ ├── boxPlot.js │ │ │ ├── boxPlotChart.js │ │ │ ├── bullet.js │ │ │ ├── bulletChart.js │ │ │ ├── candlestickBar.js │ │ │ ├── cumulativeLineChart.js │ │ │ ├── discreteBar.js │ │ │ ├── discreteBarChart.js │ │ │ ├── distribution.js │ │ │ ├── furiousLegend.js │ │ │ ├── historicalBar.js │ │ │ ├── historicalBarChart.js │ │ │ ├── legend.js │ │ │ ├── line.js │ │ │ ├── lineChart.js │ │ │ ├── linePlusBarChart.js │ │ │ ├── lineWithFocusChart.js │ │ │ ├── multiBar.js │ │ │ ├── multiBarChart.js │ │ │ ├── multiBarHorizontal.js │ │ │ ├── multiBarHorizontalChart.js │ │ │ ├── multiChart.js │ │ │ ├── ohlcBar.js │ │ │ ├── parallelCoordinates.js │ │ │ ├── pie.js │ │ │ ├── pieChart.js │ │ │ ├── scatter.js │ │ │ ├── scatterChart.js │ │ │ ├── sparkline.js │ │ │ ├── sparklinePlus.js │ │ │ ├── stackedArea.js │ │ │ ├── stackedAreaChart.js │ │ │ ├── sunburst.js │ │ │ └── sunburstChart.js │ │ ├── tooltip.js │ │ └── utils.js │ └── test │ │ ├── ScatterChartTest.html │ │ ├── boxPlotTest.html │ │ ├── cumulativeLineChart.html │ │ ├── lineChartTest.html │ │ ├── linePlusBarChart.html │ │ ├── linePlusBarWithFocusChart.html │ │ ├── lineWithFisheyeChart.html │ │ ├── lineWithFocusChart.html │ │ ├── lineWithFocusChartMissingData.html │ │ ├── mocha │ │ ├── axis.coffee │ │ ├── boxplot.coffee │ │ ├── bullet.coffee │ │ ├── core.coffee │ │ ├── cumulative-line.coffee │ │ ├── discretebar.coffee │ │ ├── historical-bar.coffee │ │ ├── legend.coffee │ │ ├── line.coffee │ │ ├── multibar-horizontal.coffee │ │ ├── multibar.coffee │ │ ├── pie.coffee │ │ ├── scatter.coffee │ │ ├── sparkline.coffee │ │ ├── stacked.coffee │ │ ├── sunburst.coffee │ │ ├── test-utils.coffee │ │ └── utils.coffee │ │ ├── multiBarChartTest.html │ │ ├── multiBarHorizontalChart.html │ │ ├── node │ │ ├── GruntFile.js │ │ ├── README.md │ │ ├── nodeTest.html │ │ ├── nodeTest.js │ │ └── package.json │ │ ├── pieChartTest.html │ │ ├── polylinearTest.html │ │ ├── realTimeChartTest.html │ │ ├── scatterPlusLineChart.html │ │ ├── stackedAreaChartMissingData.html │ │ ├── stackedAreaChartTest.html │ │ ├── stream_layers.js │ │ ├── testScript.js │ │ └── teststyle.css │ ├── styles.css │ ├── xAPI-Dashboard-development │ ├── .gitignore │ ├── API_collection.md │ ├── API_dashboard.md │ ├── Gruntfile.js │ ├── LICENSE │ ├── README.md │ ├── dist │ │ ├── xapicollection.js │ │ ├── xapicollection.min.js │ │ ├── xapidashboard.js │ │ └── xapidashboard.min.js │ ├── examples │ │ ├── childcharts.html │ │ ├── computation.html │ │ ├── liveUpdate │ │ │ ├── index.css │ │ │ ├── index.html │ │ │ └── model.js │ │ ├── livedata.html │ │ ├── multiAggregateExport.html │ │ ├── preprocessed.html │ │ ├── process.html │ │ └── simpletable.html │ ├── extra │ │ ├── chart_final.png │ │ ├── chart_initial.png │ │ ├── gen-lrs-data.js │ │ ├── knockout-3.1.0.js │ │ └── real-lrs-data.js │ ├── generateData │ │ ├── README.md │ │ ├── compress.js │ │ ├── generateData.py │ │ ├── lz-string-1.3.3.js │ │ ├── names.json │ │ └── package.json │ ├── lib │ │ ├── d3.v3.js │ │ ├── nv.d3.css │ │ ├── nv.d3.js │ │ └── xapiwrapper.min.js │ ├── package.json │ ├── src │ │ ├── chart.js │ │ ├── dashboard.js │ │ ├── parsers │ │ │ └── math.jison │ │ └── xapicollection.js │ └── wizard │ │ ├── index.html │ │ ├── model.js │ │ ├── prism.js │ │ ├── style.css │ │ └── themes │ │ └── prism.css │ └── xapiwrapper.min.js ├── reports.html └── searchable.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # xAPI Data Visualization and Dashboards 2 | 3 | This project was created to support various xAPI Workshops. If you are interested in trying the code tutorial, refer to the steps in the 4 | [Instructions in the reporting Readme](https://github.com/adlnet/Intro-to-xAPI-Data-Visualization/tree/master/reporting/README.md). 5 | 6 | 7 | #### Facilitator(s) 8 | [Tom Creighton](https://www.linkedin.com/pub/tom-creighton/16/9b7/14) 9 | [Lou Wolford](https://www.linkedin.com/pub/lou-wolford/42/747/623) 10 | 11 | #### Session description 12 | This session will show how to retrieve data from an Experience API (xAPI) Learning Record Store (LRS) and usefully display it to a user using the xAPI Dashboard to produce charts. 13 | 14 | #### Prerequisites 15 | * Familiarity with web programming with HTML and Javascript 16 | * Familiarity with [d3](http://d3js.org/), [NVD3](http://nvd3.org/) 17 | 18 | #### Resources covered in session 19 | * [xAPI Wrapper](http://adlnet.github.io/xAPIWrapper and https://github.com/adlnet/xAPIWrapper) 20 | * [xAPI Dashboard](https://github.com/adlnet/xAPI-Dashboard) 21 | 22 | #### Other resources 23 | * [Example Charts from Previous Demos](http://creighton.github.io/xAPI-Charts/) 24 | 25 | ## License 26 | Copyright ©2016 Advanced Distributed Learning 27 | 28 | Licensed under the Apache License, Version 2.0 (the "License"); 29 | you may not use this file except in compliance with the License. 30 | You may obtain a copy of the License at 31 | 32 | http://www.apache.org/licenses/LICENSE-2.0 33 | 34 | Unless required by applicable law or agreed to in writing, software 35 | distributed under the License is distributed on an "AS IS" BASIS, 36 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 37 | See the License for the specific language governing permissions and 38 | limitations under the License. -------------------------------------------------------------------------------- /reporting/libs/d3/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010-2015, Michael Bostock 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | * The name Michael Bostock may not be used to endorse or promote products 15 | derived from this software without specific prior written permission. 16 | 17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 | DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, 21 | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 22 | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 24 | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 25 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 26 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .idea 3 | *.swp 4 | *~ 5 | *.log 6 | .DS_Store* 7 | ehthumbs.db 8 | Icon? 9 | Thumbs.db 10 | node_modules 11 | bower_components 12 | coverage 13 | test-results.xml 14 | *.orig 15 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "asi": true 3 | } 4 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.10" 4 | before_install: 5 | - "npm install -g bower" 6 | - "npm install -g grunt-cli" 7 | - "export DISPLAY=:99.0" 8 | - "sh -e /etc/init.d/xvfb start" 9 | install: 10 | - "npm install" 11 | - "bower install" 12 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/LICENSE.md: -------------------------------------------------------------------------------- 1 | ##nvd3.js License 2 | 3 | Copyright (c) 2011-2014 [Novus Partners, Inc.][novus] 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | 17 | [novus]: https://www.novus.com/ 18 | 19 | 20 | 21 | ##d3.js License 22 | 23 | Copyright (c) 2012, Michael Bostock 24 | All rights reserved. 25 | 26 | Redistribution and use in source and binary forms, with or without 27 | modification, are permitted provided that the following conditions are met: 28 | 29 | * Redistributions of source code must retain the above copyright notice, this 30 | list of conditions and the following disclaimer. 31 | 32 | * Redistributions in binary form must reproduce the above copyright notice, 33 | this list of conditions and the following disclaimer in the documentation 34 | and/or other materials provided with the distribution. 35 | 36 | * The name Michael Bostock may not be used to endorse or promote products 37 | derived from this software without specific prior written permission. 38 | 39 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 40 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 41 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 42 | DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, 43 | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 44 | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 45 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 46 | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 47 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 48 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 49 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nvd3", 3 | "homepage": "http://www.nvd3.org", 4 | "authors": [ 5 | "Bob Monteverde", 6 | "Tyler Wolf", 7 | "Robin Hu", 8 | "Frank Shao", 9 | "liquidpele" 10 | ], 11 | "description": "Re-usable charts and chart components for d3.", 12 | "main": [ 13 | "build/nv.d3.js", 14 | "build/nv.d3.css" 15 | ], 16 | "keywords": [ 17 | "d3", 18 | "visualization", 19 | "svg", 20 | "charts" 21 | ], 22 | "license": "Apache License, v2.0", 23 | "dependencies": { 24 | "d3": "^3.4.4" 25 | }, 26 | "ignore": [ 27 | "**/.*", 28 | "node_modules", 29 | "bower_components", 30 | "test", 31 | "src", 32 | "examples", 33 | "GruntFile.js", 34 | "*.html", 35 | "*.log", 36 | "*.xml", 37 | "*.json", 38 | "*.md" 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/examples/boxPlot.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 23 | 24 | 25 | 26 | 27 | 30 | 31 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/examples/bullet.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 59 | 60 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/examples/discreteBarChart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 23 | 24 | 25 | 26 |
27 | 28 |
29 | 30 | 92 | 93 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/examples/historicalBar.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 23 | 24 | 25 | 26 | 27 | 28 | 89 | 90 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/examples/historicalBarChart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 23 | 24 | 25 | 26 | 27 | 28 | 91 | 92 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/examples/images/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adlnet/Intro-to-xAPI-Data-Visualization/a44d3a1fd8d96566fe3c6ec869702251daa23d3d/reporting/libs/nvd3/examples/images/background.png -------------------------------------------------------------------------------- /reporting/libs/nvd3/examples/images/body-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adlnet/Intro-to-xAPI-Data-Visualization/a44d3a1fd8d96566fe3c6ec869702251daa23d3d/reporting/libs/nvd3/examples/images/body-background.png -------------------------------------------------------------------------------- /reporting/libs/nvd3/examples/images/bullet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adlnet/Intro-to-xAPI-Data-Visualization/a44d3a1fd8d96566fe3c6ec869702251daa23d3d/reporting/libs/nvd3/examples/images/bullet.png -------------------------------------------------------------------------------- /reporting/libs/nvd3/examples/images/octocat-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adlnet/Intro-to-xAPI-Data-Visualization/a44d3a1fd8d96566fe3c6ec869702251daa23d3d/reporting/libs/nvd3/examples/images/octocat-logo.png -------------------------------------------------------------------------------- /reporting/libs/nvd3/examples/legend.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 23 | 24 | 25 |

Legend 1

26 | 27 | 28 | 29 |

Legend 2

30 |

Setting align(false)

31 | 32 | 33 |

Legend 3

34 |

Setting legend padding distance

35 | 36 | 37 | 105 | 106 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/examples/lib/stream_layers.js: -------------------------------------------------------------------------------- 1 | 2 | /* Inspired by Lee Byron's test data generator. */ 3 | function stream_layers(n, m, o) { 4 | if (arguments.length < 3) o = 0; 5 | function bump(a) { 6 | var x = 1 / (.1 + Math.random()), 7 | y = 2 * Math.random() - .5, 8 | z = 10 / (.1 + Math.random()); 9 | for (var i = 0; i < m; i++) { 10 | var w = (i / m - y) * z; 11 | a[i] += x * Math.exp(-w * w); 12 | } 13 | } 14 | return d3.range(n).map(function() { 15 | var a = [], i; 16 | for (i = 0; i < m; i++) a[i] = o + o * Math.random(); 17 | for (i = 0; i < 5; i++) bump(a); 18 | return a.map(stream_index); 19 | }); 20 | } 21 | 22 | /* Another layer generator using gamma distributions. */ 23 | function stream_waves(n, m) { 24 | return d3.range(n).map(function(i) { 25 | return d3.range(m).map(function(j) { 26 | var x = 20 * j / m - i / 3; 27 | return 2 * x * Math.exp(-.5 * x); 28 | }).map(stream_index); 29 | }); 30 | } 31 | 32 | function stream_index(d, i) { 33 | return {x: i, y: Math.max(0, d)}; 34 | } 35 | 36 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/examples/lineWithFocusChart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 24 | 25 | 26 | 27 |
28 | 29 |
30 | 31 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/examples/lineWithFocusChart_x2AxisLabel.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 24 | 25 | 26 | 27 |
28 | 29 |
30 | 31 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/examples/multiBarChart2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 24 | 25 | 26 | 27 |
28 | 29 |
30 | 31 | 79 | 80 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/examples/multiChart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 24 | 25 | 26 | 27 |
28 | 29 |
30 | 31 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/examples/pie.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 27 | 28 | 29 | 30 |
31 |
32 | 33 | 90 | 91 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/examples/scatter.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 23 | 24 | 25 | 26 | 27 | 28 | 64 | 65 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/examples/scatterPlusLineChart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 23 | 24 | 25 | 26 |
27 | 28 |
29 | 30 | 83 | 84 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/examples/sparkline.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 24 | 25 | 26 | 27 |

Sparkline:

28 | 29 | 56 | 57 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/examples/sparklinePlus.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 27 | 28 | 29 | 30 |

31 |

32 |

33 | 34 | 88 | 89 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/index.html: -------------------------------------------------------------------------------- 1 | 2 | 11 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/package.js: -------------------------------------------------------------------------------- 1 | // Package metadata for Meteor.js full stack web framework 2 | // This file is defined in Meteor documentation at http://docs.meteor.com/#/full/packagejs 3 | // and used by Meteor https://www.meteor.com/ and its package repository Atmosphere https://atmospherejs.com 4 | 5 | Package.describe({ 6 | "name": 'nvd3:nvd3', 7 | summary: 'Nvd3.org charts.', 8 | version: '1.8.1', 9 | git: "https://github.com/novus/nvd3.git" 10 | }); 11 | Package.on_use(function (api) { 12 | api.versionsFrom("METEOR@1.0"); 13 | api.use('d3js:d3@3.5.5', 'client'); 14 | api.add_files('build/nv.d3.js', 'client'); 15 | api.add_files('build/nv.d3.css', 'client'); 16 | api.export("nv"); 17 | }); -------------------------------------------------------------------------------- /reporting/libs/nvd3/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nvd3", 3 | "version": "1.8.1", 4 | "description": "A reusable charting library written in d3.js", 5 | "url": "https://github.com/novus/nvd3", 6 | "main": "build/nv.d3.js", 7 | "scripts": { 8 | "test": "grunt" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/novus/nvd3" 13 | }, 14 | "keywords": ["nvd3", "d3", "chart", "graph"], 15 | "readmeFilename": "README.md", 16 | "license": "Apache-2.0", 17 | "peerDependencies": { 18 | "d3": "^3.4.4" 19 | }, 20 | "devDependencies": { 21 | "grunt": "^0.4.5", 22 | "grunt-contrib-concat": "~0.2.0", 23 | "grunt-contrib-copy": "~0.4.1", 24 | "grunt-contrib-cssmin": "~0.6.2", 25 | "grunt-contrib-jshint": "^0.11.0", 26 | "grunt-contrib-uglify": "~0.2.0", 27 | "grunt-contrib-watch": "~0.3.1", 28 | "grunt-text-replace": "^0.4.0", 29 | "grunt-karma": "^0.9.0", 30 | "karma": "^0.12.23", 31 | "karma-chrome-launcher": "^0.1.4", 32 | "karma-coffee-preprocessor": "^0.2.1", 33 | "karma-coverage": "^0.2.6", 34 | "karma-firefox-launcher": "^0.1.4", 35 | "karma-junit-reporter": "^0.2.2", 36 | "karma-mocha": "^0.1.9", 37 | "karma-sinon-chai": "^0.2.0", 38 | "karma-spec-reporter": "0.0.13", 39 | "mocha": "^1.21.4" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/src/css/axis.css: -------------------------------------------------------------------------------- 1 | .nvd3 .nv-axis { 2 | pointer-events:none; 3 | opacity: 1; 4 | } 5 | 6 | .nvd3 .nv-axis path { 7 | fill: none; 8 | stroke: #000; 9 | stroke-opacity: .75; 10 | shape-rendering: crispEdges; 11 | } 12 | 13 | .nvd3 .nv-axis path.domain { 14 | stroke-opacity: .75; 15 | } 16 | 17 | .nvd3 .nv-axis.nv-x path.domain { 18 | stroke-opacity: 0; 19 | } 20 | 21 | .nvd3 .nv-axis line { 22 | fill: none; 23 | stroke: #e5e5e5; 24 | shape-rendering: crispEdges; 25 | } 26 | 27 | .nvd3 .nv-axis .zero line, 28 | /*this selector may not be necessary*/ .nvd3 .nv-axis line.zero { 29 | stroke-opacity: .75; 30 | } 31 | 32 | .nvd3 .nv-axis .nv-axisMaxMin text { 33 | font-weight: bold; 34 | } 35 | 36 | .nvd3 .x .nv-axis .nv-axisMaxMin text, 37 | .nvd3 .x2 .nv-axis .nv-axisMaxMin text, 38 | .nvd3 .x3 .nv-axis .nv-axisMaxMin text { 39 | text-anchor: middle 40 | } 41 | 42 | .nvd3 .nv-axis.nv-disabled { 43 | opacity: 0; 44 | } 45 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/src/css/bars.css: -------------------------------------------------------------------------------- 1 | .nvd3 .nv-bars rect { 2 | fill-opacity: .75; 3 | 4 | transition: fill-opacity 250ms linear; 5 | -moz-transition: fill-opacity 250ms linear; 6 | -webkit-transition: fill-opacity 250ms linear; 7 | } 8 | 9 | .nvd3 .nv-bars rect.hover { 10 | fill-opacity: 1; 11 | } 12 | 13 | .nvd3 .nv-bars .hover rect { 14 | fill: lightblue; 15 | } 16 | 17 | .nvd3 .nv-bars text { 18 | fill: rgba(0,0,0,0); 19 | } 20 | 21 | .nvd3 .nv-bars .hover text { 22 | fill: rgba(0,0,0,1); 23 | } 24 | 25 | .nvd3 .nv-multibar .nv-groups rect, 26 | .nvd3 .nv-multibarHorizontal .nv-groups rect, 27 | .nvd3 .nv-discretebar .nv-groups rect { 28 | stroke-opacity: 0; 29 | 30 | transition: fill-opacity 250ms linear; 31 | -moz-transition: fill-opacity 250ms linear; 32 | -webkit-transition: fill-opacity 250ms linear; 33 | } 34 | 35 | .nvd3 .nv-multibar .nv-groups rect:hover, 36 | .nvd3 .nv-multibarHorizontal .nv-groups rect:hover, 37 | .nvd3 .nv-candlestickBar .nv-ticks rect:hover, 38 | .nvd3 .nv-discretebar .nv-groups rect:hover { 39 | fill-opacity: 1; 40 | } 41 | 42 | .nvd3 .nv-discretebar .nv-groups text, 43 | .nvd3 .nv-multibarHorizontal .nv-groups text { 44 | font-weight: bold; 45 | fill: rgba(0,0,0,1); 46 | stroke: rgba(0,0,0,0); 47 | } 48 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/src/css/boxplot.css: -------------------------------------------------------------------------------- 1 | /* boxplot CSS */ 2 | .nvd3 .nv-boxplot circle { 3 | fill-opacity: 0.5; 4 | } 5 | 6 | .nvd3 .nv-boxplot circle:hover { 7 | fill-opacity: 1; 8 | } 9 | 10 | .nvd3 .nv-boxplot rect:hover { 11 | fill-opacity: 1; 12 | } 13 | 14 | .nvd3 line.nv-boxplot-median { 15 | stroke: black; 16 | } 17 | 18 | .nv-boxplot-tick:hover { 19 | stroke-width: 2.5px; 20 | } -------------------------------------------------------------------------------- /reporting/libs/nvd3/src/css/bullet.css: -------------------------------------------------------------------------------- 1 | /* bullet */ 2 | .nvd3.nv-bullet { font: 10px sans-serif; } 3 | .nvd3.nv-bullet .nv-measure { fill-opacity: .8; } 4 | .nvd3.nv-bullet .nv-measure:hover { fill-opacity: 1; } 5 | .nvd3.nv-bullet .nv-marker { stroke: #000; stroke-width: 2px; } 6 | .nvd3.nv-bullet .nv-markerTriangle { stroke: #000; fill: #fff; stroke-width: 1.5px; } 7 | .nvd3.nv-bullet .nv-tick line { stroke: #666; stroke-width: .5px; } 8 | .nvd3.nv-bullet .nv-range.nv-s0 { fill: #eee; } 9 | .nvd3.nv-bullet .nv-range.nv-s1 { fill: #ddd; } 10 | .nvd3.nv-bullet .nv-range.nv-s2 { fill: #ccc; } 11 | .nvd3.nv-bullet .nv-title { font-size: 14px; font-weight: bold; } 12 | .nvd3.nv-bullet .nv-subtitle { fill: #999; } 13 | 14 | 15 | .nvd3.nv-bullet .nv-range { 16 | fill: #bababa; 17 | fill-opacity: .4; 18 | } 19 | .nvd3.nv-bullet .nv-range:hover { 20 | fill-opacity: .7; 21 | } 22 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/src/css/candlestick.css: -------------------------------------------------------------------------------- 1 | .nvd3.nv-candlestickBar .nv-ticks .nv-tick { 2 | stroke-width: 1px; 3 | } 4 | 5 | .nvd3.nv-candlestickBar .nv-ticks .nv-tick.hover { 6 | stroke-width: 2px; 7 | } 8 | 9 | .nvd3.nv-candlestickBar .nv-ticks .nv-tick.positive rect { 10 | stroke: #2ca02c; 11 | fill: #2ca02c; 12 | } 13 | 14 | .nvd3.nv-candlestickBar .nv-ticks .nv-tick.negative rect { 15 | stroke: #d62728; 16 | fill: #d62728; 17 | } 18 | 19 | .with-transitions .nv-candlestickBar .nv-ticks .nv-tick { 20 | transition: stroke-width 250ms linear, stroke-opacity 250ms linear; 21 | -moz-transition: stroke-width 250ms linear, stroke-opacity 250ms linear; 22 | -webkit-transition: stroke-width 250ms linear, stroke-opacity 250ms linear; 23 | 24 | } 25 | 26 | .nvd3.nv-candlestickBar .nv-ticks line { 27 | stroke: #333; 28 | } 29 | 30 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/src/css/furiousLegend.css: -------------------------------------------------------------------------------- 1 | .nvd3 .nv-legend .nv-disabled rect { 2 | /*fill-opacity: 0;*/ 3 | } 4 | 5 | .nvd3 .nv-check-box .nv-box { 6 | fill-opacity:0; 7 | stroke-width:2; 8 | } 9 | 10 | .nvd3 .nv-check-box .nv-check { 11 | fill-opacity:0; 12 | stroke-width:4; 13 | } 14 | 15 | .nvd3 .nv-series.nv-disabled .nv-check-box .nv-check { 16 | fill-opacity:0; 17 | stroke-opacity:0; 18 | } 19 | 20 | .nvd3 .nv-controlsWrap .nv-legend .nv-check-box .nv-check { 21 | opacity: 0; 22 | } 23 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/src/css/lineplusbar.css: -------------------------------------------------------------------------------- 1 | /* line plus bar */ 2 | .nvd3.nv-linePlusBar .nv-bar rect { 3 | fill-opacity: .75; 4 | } 5 | 6 | .nvd3.nv-linePlusBar .nv-bar rect:hover { 7 | fill-opacity: 1; 8 | } -------------------------------------------------------------------------------- /reporting/libs/nvd3/src/css/lines.css: -------------------------------------------------------------------------------- 1 | .nvd3 .nv-groups path.nv-line { 2 | fill: none; 3 | } 4 | 5 | .nvd3 .nv-groups path.nv-area { 6 | stroke: none; 7 | } 8 | 9 | .nvd3.nv-line .nvd3.nv-scatter .nv-groups .nv-point { 10 | fill-opacity: 0; 11 | stroke-opacity: 0; 12 | } 13 | 14 | .nvd3.nv-scatter.nv-single-point .nv-groups .nv-point { 15 | fill-opacity: .5 !important; 16 | stroke-opacity: .5 !important; 17 | } 18 | 19 | 20 | .with-transitions .nvd3 .nv-groups .nv-point { 21 | transition: stroke-width 250ms linear, stroke-opacity 250ms linear; 22 | -moz-transition: stroke-width 250ms linear, stroke-opacity 250ms linear; 23 | -webkit-transition: stroke-width 250ms linear, stroke-opacity 250ms linear; 24 | 25 | } 26 | 27 | .nvd3.nv-scatter .nv-groups .nv-point.hover, 28 | .nvd3 .nv-groups .nv-point.hover { 29 | stroke-width: 7px; 30 | fill-opacity: .95 !important; 31 | stroke-opacity: .95 !important; 32 | } 33 | 34 | 35 | .nvd3 .nv-point-paths path { 36 | stroke: #aaa; 37 | stroke-opacity: 0; 38 | fill: #eee; 39 | fill-opacity: 0; 40 | } 41 | 42 | 43 | 44 | .nvd3 .nv-indexLine { 45 | cursor: ew-resize; 46 | } 47 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/src/css/main.css: -------------------------------------------------------------------------------- 1 | /******************** 2 | * SVG CSS 3 | */ 4 | 5 | /******************** 6 | Default CSS for an svg element nvd3 used 7 | */ 8 | svg.nvd3-svg { 9 | -webkit-touch-callout: none; 10 | -webkit-user-select: none; 11 | -khtml-user-select: none; 12 | -ms-user-select: none; 13 | -moz-user-select: none; 14 | user-select: none; 15 | display: block; 16 | width:100%; 17 | height:100%; 18 | } 19 | 20 | /******************** 21 | Box shadow and border radius styling 22 | */ 23 | .nvtooltip.with-3d-shadow, .with-3d-shadow .nvtooltip { 24 | -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2); 25 | -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2); 26 | box-shadow: 0 5px 10px rgba(0,0,0,.2); 27 | 28 | -webkit-border-radius: 5px; 29 | -moz-border-radius: 5px; 30 | border-radius: 5px; 31 | } 32 | 33 | 34 | .nvd3 text { 35 | font: normal 12px Arial; 36 | } 37 | 38 | .nvd3 .title { 39 | font: bold 14px Arial; 40 | } 41 | 42 | .nvd3 .nv-background { 43 | fill: white; 44 | fill-opacity: 0; 45 | } 46 | 47 | .nvd3.nv-noData { 48 | font-size: 18px; 49 | font-weight: bold; 50 | } 51 | 52 | 53 | /********** 54 | * Brush 55 | */ 56 | 57 | .nv-brush .extent { 58 | fill-opacity: .125; 59 | shape-rendering: crispEdges; 60 | } 61 | 62 | .nv-brush .resize path { 63 | fill: #eee; 64 | stroke: #666; 65 | } 66 | 67 | 68 | /********** 69 | * Legend 70 | */ 71 | 72 | .nvd3 .nv-legend .nv-series { 73 | cursor: pointer; 74 | } 75 | 76 | .nvd3 .nv-legend .nv-disabled circle { 77 | fill-opacity: 0; 78 | } 79 | 80 | /* focus */ 81 | .nvd3 .nv-brush .extent { 82 | fill-opacity: 0 !important; 83 | } 84 | 85 | .nvd3 .nv-brushBackground rect { 86 | stroke: #000; 87 | stroke-width: .4; 88 | fill: #fff; 89 | fill-opacity: .7; 90 | } 91 | 92 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/src/css/ohlc.css: -------------------------------------------------------------------------------- 1 | .nvd3.nv-ohlcBar .nv-ticks .nv-tick { 2 | stroke-width: 1px; 3 | } 4 | 5 | .nvd3.nv-ohlcBar .nv-ticks .nv-tick.hover { 6 | stroke-width: 2px; 7 | } 8 | 9 | .nvd3.nv-ohlcBar .nv-ticks .nv-tick.positive { 10 | stroke: #2ca02c; 11 | } 12 | 13 | .nvd3.nv-ohlcBar .nv-ticks .nv-tick.negative { 14 | stroke: #d62728; 15 | } 16 | 17 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/src/css/parallelcoordinates.css: -------------------------------------------------------------------------------- 1 | .nvd3 .background path { 2 | fill: none; 3 | stroke: #EEE; 4 | stroke-opacity: .4; 5 | shape-rendering: crispEdges; 6 | } 7 | 8 | .nvd3 .foreground path { 9 | fill: none; 10 | stroke-opacity: .7; 11 | } 12 | 13 | .nvd3 .nv-parallelCoordinates-brush .extent 14 | { 15 | fill: #fff; 16 | fill-opacity: .6; 17 | stroke: gray; 18 | shape-rendering: crispEdges; 19 | } 20 | 21 | .nvd3 .nv-parallelCoordinates .hover { 22 | fill-opacity: 1; 23 | stroke-width: 3px; 24 | } 25 | 26 | 27 | .nvd3 .missingValuesline line { 28 | fill: none; 29 | stroke: black; 30 | stroke-width: 1; 31 | stroke-opacity: 1; 32 | stroke-dasharray: 5, 5; 33 | } -------------------------------------------------------------------------------- /reporting/libs/nvd3/src/css/pie.css: -------------------------------------------------------------------------------- 1 | .nvd3.nv-pie path { 2 | stroke-opacity: 0; 3 | transition: fill-opacity 250ms linear, stroke-width 250ms linear, stroke-opacity 250ms linear; 4 | -moz-transition: fill-opacity 250ms linear, stroke-width 250ms linear, stroke-opacity 250ms linear; 5 | -webkit-transition: fill-opacity 250ms linear, stroke-width 250ms linear, stroke-opacity 250ms linear; 6 | 7 | } 8 | 9 | .nvd3.nv-pie .nv-pie-title { 10 | font-size: 24px; 11 | fill: rgba(19, 196, 249, 0.59); 12 | } 13 | 14 | .nvd3.nv-pie .nv-slice text { 15 | stroke: #000; 16 | stroke-width: 0; 17 | } 18 | 19 | .nvd3.nv-pie path { 20 | stroke: #fff; 21 | stroke-width: 1px; 22 | stroke-opacity: 1; 23 | } 24 | 25 | .nvd3.nv-pie .hover path { 26 | fill-opacity: .7; 27 | } 28 | .nvd3.nv-pie .nv-label { 29 | pointer-events: none; 30 | } 31 | .nvd3.nv-pie .nv-label rect { 32 | fill-opacity: 0; 33 | stroke-opacity: 0; 34 | } 35 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/src/css/scatter.css: -------------------------------------------------------------------------------- 1 | /* scatter */ 2 | .nvd3 .nv-groups .nv-point.hover { 3 | stroke-width: 20px; 4 | stroke-opacity: .5; 5 | } 6 | 7 | .nvd3 .nv-scatter .nv-point.hover { 8 | fill-opacity: 1; 9 | } 10 | .nv-noninteractive { 11 | pointer-events: none; 12 | } 13 | 14 | .nv-distx, .nv-disty { 15 | pointer-events: none; 16 | } 17 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/src/css/sparkline.css: -------------------------------------------------------------------------------- 1 | /* sparkline */ 2 | .nvd3.nv-sparkline path { 3 | fill: none; 4 | } 5 | 6 | .nvd3.nv-sparklineplus g.nv-hoverValue { 7 | pointer-events: none; 8 | } 9 | 10 | .nvd3.nv-sparklineplus .nv-hoverValue line { 11 | stroke: #333; 12 | stroke-width: 1.5px; 13 | } 14 | 15 | .nvd3.nv-sparklineplus, 16 | .nvd3.nv-sparklineplus g { 17 | pointer-events: all; 18 | } 19 | 20 | .nvd3 .nv-hoverArea { 21 | fill-opacity: 0; 22 | stroke-opacity: 0; 23 | } 24 | 25 | .nvd3.nv-sparklineplus .nv-xValue, 26 | .nvd3.nv-sparklineplus .nv-yValue { 27 | stroke-width: 0; 28 | font-size: .9em; 29 | font-weight: normal; 30 | } 31 | 32 | .nvd3.nv-sparklineplus .nv-yValue { 33 | stroke: #f66; 34 | } 35 | 36 | .nvd3.nv-sparklineplus .nv-maxValue { 37 | stroke: #2ca02c; 38 | fill: #2ca02c; 39 | } 40 | 41 | .nvd3.nv-sparklineplus .nv-minValue { 42 | stroke: #d62728; 43 | fill: #d62728; 44 | } 45 | 46 | .nvd3.nv-sparklineplus .nv-currentValue { 47 | font-weight: bold; 48 | font-size: 1.1em; 49 | } -------------------------------------------------------------------------------- /reporting/libs/nvd3/src/css/stackedarea.css: -------------------------------------------------------------------------------- 1 | /* stacked area */ 2 | .nvd3.nv-stackedarea path.nv-area { 3 | fill-opacity: .7; 4 | stroke-opacity: 0; 5 | transition: fill-opacity 250ms linear, stroke-opacity 250ms linear; 6 | -moz-transition: fill-opacity 250ms linear, stroke-opacity 250ms linear; 7 | -webkit-transition: fill-opacity 250ms linear, stroke-opacity 250ms linear; 8 | } 9 | 10 | .nvd3.nv-stackedarea path.nv-area.hover { 11 | fill-opacity: .9; 12 | } 13 | 14 | 15 | .nvd3.nv-stackedarea .nv-groups .nv-point { 16 | stroke-opacity: 0; 17 | fill-opacity: 0; 18 | } -------------------------------------------------------------------------------- /reporting/libs/nvd3/src/dom.js: -------------------------------------------------------------------------------- 1 | /* Facade for queueing DOM write operations 2 | * with Fastdom (https://github.com/wilsonpage/fastdom) 3 | * if available. 4 | * This could easily be extended to support alternate 5 | * implementations in the future. 6 | */ 7 | nv.dom.write = function(callback) { 8 | if (window.fastdom !== undefined) { 9 | return fastdom.write(callback); 10 | } 11 | return callback(); 12 | }; 13 | 14 | /* Facade for queueing DOM read operations 15 | * with Fastdom (https://github.com/wilsonpage/fastdom) 16 | * if available. 17 | * This could easily be extended to support alternate 18 | * implementations in the future. 19 | */ 20 | nv.dom.read = function(callback) { 21 | if (window.fastdom !== undefined) { 22 | return fastdom.read(callback); 23 | } 24 | return callback(); 25 | }; -------------------------------------------------------------------------------- /reporting/libs/nvd3/test/lineWithFisheyeChart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 33 | 34 | 35 |
36 | 37 |
38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 104 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/test/lineWithFocusChart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 33 | 34 | 35 |
36 | 37 |
38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 90 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/test/lineWithFocusChartMissingData.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 24 | 25 | 26 | 27 |
28 | 29 |
30 | 31 | 78 | 79 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/test/mocha/core.coffee: -------------------------------------------------------------------------------- 1 | describe 'NVD3', -> 2 | 3 | describe 'Core', -> 4 | 5 | objects = [ 6 | 'window.nv' 7 | 'd3_time_range' 8 | 'nv.tooltip' 9 | 'nv.utils' 10 | 'nv.models' 11 | 'nv.charts' 12 | 'nv.graphs' 13 | 'nv.logs' 14 | 'nv.dispatch' 15 | 'nv.log' 16 | 'nv.deprecated' 17 | 'nv.render' 18 | 'nv.addGraph' 19 | ] 20 | 21 | describe 'has', -> 22 | for obj in objects 23 | it " #{obj} object", -> 24 | should.exist eval obj 25 | 26 | describe 'has nv.dispatch with default', -> 27 | dispatchDefaults = ['render_start', 'render_end'] 28 | for event in dispatchDefaults 29 | do (event) -> 30 | it "#{event} event", -> assert.isFunction nv.dispatch[event] 31 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/test/mocha/discretebar.coffee: -------------------------------------------------------------------------------- 1 | describe 'NVD3', -> 2 | describe 'Discrete Bar Chart', -> 3 | sampleData1 = [ 4 | key: 'Series 1' 5 | values: [ 6 | {label: 'America', value: 100} 7 | {label: 'Europe', value: 200} 8 | {label: 'Asia', value: 50} 9 | {label: 'Africa', value: 70} 10 | ] 11 | ] 12 | 13 | options = 14 | x: (d)-> d.label 15 | y: (d)-> d.value 16 | margin: 17 | top: 30 18 | right: 20 19 | bottom: 50 20 | left: 75 21 | color: nv.utils.defaultColor() 22 | showXAxis: true 23 | showYAxis: true 24 | rightAlignYAxis: false 25 | staggerLabels: true 26 | showValues: true 27 | valueFormat: (d)-> d.toFixed 2 28 | tooltips: true 29 | tooltipContent: (key,x,y)-> "

#{key}

" 30 | noData: 'No Data Available' 31 | duration: 0 32 | 33 | builder = null 34 | beforeEach -> 35 | builder = new ChartBuilder nv.models.discreteBarChart() 36 | builder.build options, sampleData1 37 | 38 | afterEach -> 39 | builder.teardown() 40 | 41 | it 'api check', -> 42 | should.exist builder.model.options, 'options exposed' 43 | for opt of options 44 | should.exist builder.model[opt](), "#{opt} can be called" 45 | 46 | it 'renders', -> 47 | wrap = builder.$ 'g.nvd3.nv-discreteBarWithAxes' 48 | should.exist wrap[0] 49 | 50 | it 'clears chart objects for no data', -> 51 | builder = new ChartBuilder nv.models.discreteBarChart() 52 | builder.buildover options, sampleData1, [] 53 | 54 | groups = builder.$ 'g' 55 | groups.length.should.equal 0, 'removes chart components' 56 | 57 | it 'has correct structure', -> 58 | cssClasses = [ 59 | '.nv-x.nv-axis' 60 | '.nv-y.nv-axis' 61 | '.nv-barsWrap' 62 | '.nv-discretebar' 63 | ] 64 | for cssClass in cssClasses 65 | do (cssClass) -> 66 | should.exist builder.$("g.nvd3.nv-discreteBarWithAxes #{cssClass}")[0] 67 | 68 | it 'can override axis ticks', -> 69 | builder.model.xAxis.ticks(34) 70 | builder.model.yAxis.ticks(56) 71 | builder.model.update() 72 | builder.model.xAxis.ticks().should.equal 34 73 | builder.model.yAxis.ticks().should.equal 56 74 | 75 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/test/mocha/historical-bar.coffee: -------------------------------------------------------------------------------- 1 | describe 'NVD3', -> 2 | describe 'Historical Bar Chart', -> 3 | sampleData1 = [ 4 | key: 'Series 1' 5 | values: [ 6 | [-1,-1] 7 | [0,0] 8 | [1,1] 9 | [2,2] 10 | ] 11 | ] 12 | 13 | options = 14 | x: (d,i)-> i 15 | y: (d)-> d[1] 16 | margin: 17 | top: 30 18 | right: 20 19 | bottom: 50 20 | left: 75 21 | width: 200 22 | height: 200 23 | color: nv.utils.defaultColor() 24 | showLegend: true 25 | showXAxis: true 26 | showYAxis: true 27 | rightAlignYAxis: false 28 | tooltips: true 29 | tooltipContent: (key,x,y)-> "

#{key}

" 30 | noData: 'No Data Available' 31 | 32 | builder = null 33 | beforeEach -> 34 | builder = new ChartBuilder nv.models.historicalBarChart() 35 | builder.build options, sampleData1 36 | 37 | afterEach -> 38 | builder.teardown() 39 | 40 | it 'api check', -> 41 | should.exist builder.model.options, 'options exposed' 42 | for opt of options 43 | should.exist builder.model[opt](), "#{opt} can be called" 44 | 45 | it 'renders', -> 46 | wrap = builder.$ 'g.nvd3.nv-historicalBarChart' 47 | should.exist wrap[0] 48 | 49 | it 'clears chart objects for no data', -> 50 | builder = new ChartBuilder nv.models.historicalBarChart() 51 | builder.buildover options, sampleData1, [] 52 | 53 | groups = builder.$ 'g' 54 | groups.length.should.equal 0, 'removes chart components' 55 | 56 | it 'has correct structure', -> 57 | cssClasses = [ 58 | '.nv-x.nv-axis' 59 | '.nv-y.nv-axis' 60 | '.nv-barsWrap' 61 | '.nv-bars' 62 | '.nv-legendWrap' 63 | ] 64 | for cssClass in cssClasses 65 | do (cssClass) -> 66 | should.exist builder.$("g.nvd3.nv-historicalBarChart #{cssClass}")[0] 67 | 68 | it 'can override axis ticks', -> 69 | builder.model.xAxis.ticks(34) 70 | builder.model.yAxis.ticks(56) 71 | builder.model.update() 72 | builder.model.xAxis.ticks().should.equal 34 73 | builder.model.yAxis.ticks().should.equal 56 -------------------------------------------------------------------------------- /reporting/libs/nvd3/test/mocha/sparkline.coffee: -------------------------------------------------------------------------------- 1 | describe 'NVD3', -> 2 | describe 'Sparkline Chart', -> 3 | sampleData1 = [ 4 | {x: 1, y: 100} 5 | {x: 2, y: 101} 6 | {x: 3, y: 99} 7 | {x: 4, y: 56} 8 | {x: 5, y: 87} 9 | ] 10 | 11 | options = 12 | x: (d)-> d.x 13 | y: (d)-> d.y 14 | margin: 15 | top: 30 16 | right: 20 17 | bottom: 50 18 | left: 75 19 | width: 200 20 | height: 50 21 | xTickFormat: (d)-> d 22 | yTickFormat: (d)-> d.toFixed 2 23 | showLastValue: true 24 | alignValue: true 25 | rightAlignValue: false 26 | noData: 'No Data Available' 27 | 28 | builder = null 29 | beforeEach -> 30 | builder = new ChartBuilder nv.models.sparklinePlus() 31 | builder.build options, sampleData1 32 | 33 | afterEach -> 34 | builder.teardown() 35 | 36 | it 'api check', -> 37 | should.exist builder.model.options, 'options exposed' 38 | for opt of options 39 | should.exist builder.model[opt](), "#{opt} can be called" 40 | 41 | it 'clears chart objects for no data', -> 42 | builder = new ChartBuilder nv.models.sparklinePlus() 43 | builder.buildover options, sampleData1, [] 44 | 45 | groups = builder.$ 'g' 46 | groups.length.should.equal 0, 'removes chart components' 47 | 48 | it 'renders', -> 49 | wrap = builder.$ 'g.nvd3.nv-sparklineplus' 50 | should.exist wrap[0] 51 | 52 | 53 | 54 | it 'has correct structure', -> 55 | cssClasses = [ 56 | '.nv-sparklineWrap' 57 | '.nv-sparkline' 58 | '.nv-minValue' 59 | '.nv-maxValue' 60 | '.nv-currentValue' 61 | '.nv-valueWrap' 62 | ] 63 | for cssClass in cssClasses 64 | do(cssClass) -> 65 | should.exist builder.$("g.nvd3.nv-sparklineplus #{cssClass}")[0] -------------------------------------------------------------------------------- /reporting/libs/nvd3/test/mocha/test-utils.coffee: -------------------------------------------------------------------------------- 1 | ### 2 | Utility to build an NVD3 chart. 3 | ### 4 | class ChartBuilder 5 | # @model should be something like nv.models.scatterChart() 6 | constructor: (@model)-> 7 | 8 | ### 9 | options: an object hash of chart options. 10 | data: sample data to pass in to chart. 11 | 12 | This method builds a chart and puts it on the element. 13 | ### 14 | build: (options, data)-> 15 | @svg = document.createElement 'svg' 16 | document.querySelector('body').appendChild @svg 17 | 18 | for opt, val of options 19 | unless @model[opt]? 20 | console.warn "#{opt} not property of model." 21 | else 22 | @model[opt](val) 23 | 24 | @updateData data 25 | 26 | ### 27 | Update the data while preserving the chart model. 28 | ### 29 | updateData: (data)-> 30 | d3.select(@svg).datum(data).call(@model) 31 | 32 | ### 33 | options: an object hash of chart options. 34 | data: sample data to pass in to initial chart render chart 35 | data2: sample data to pass to second chart render 36 | 37 | This method builds a chart, puts it on the element, and then rebuilds using the second set of data 38 | Useful for testing the results of transitioning and the 'noData' state after a chart has had data 39 | ### 40 | buildover: (options, data, data2)-> 41 | @svg = document.createElement 'svg' 42 | document.querySelector('body').appendChild @svg 43 | 44 | for opt, val of options 45 | unless @model[opt]? 46 | console.warn "#{opt} not property of model." 47 | else 48 | @model[opt](val) 49 | 50 | #Set initial data 51 | chart = d3.select(@svg) 52 | chart.datum(data) 53 | .call(@model) 54 | 55 | #Reset the data 56 | chart.datum(data2) 57 | .call(@model) 58 | 59 | 60 | 61 | # Removes chart from element. 62 | teardown: -> 63 | if @svg? 64 | document.querySelector('body').removeChild @svg 65 | 66 | # Runs a simple CSS selector to retrieve elements 67 | $: (cssSelector)-> 68 | @svg.querySelectorAll cssSelector 69 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/test/node/GruntFile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | grunt.initConfig({ 3 | browserify: { 4 | js: { 5 | src: './nodeTest.js', dest: './build/nodeTest.js', 6 | }, 7 | }, 8 | copy: { 9 | all: { 10 | src: ['../../build/nv.d3.css'], dest: './build/nv.d3.css', 11 | }, 12 | }, 13 | }); 14 | grunt.loadNpmTasks('grunt-browserify'); 15 | grunt.loadNpmTasks('grunt-contrib-copy'); 16 | grunt.registerTask('default', ['browserify', 'copy']); 17 | }; 18 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/test/node/README.md: -------------------------------------------------------------------------------- 1 | Build steps: 2 | 3 | - Build `nvd3`. 4 | - Build the example. 5 | - Start an HTTP server. 6 | 7 | nvd3 $ grunt production 8 | nvd3 $ cd test/node 9 | nvd3/test/node $ npm install . 10 | nvd3/test/node $ grunt 11 | nvd3/test/node $ python -m SimpleHTTPServer 8000 12 | 13 | Browse to `http://localhost:8000/nodeTest.html` 14 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/test/node/nodeTest.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Node Test 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/test/node/nodeTest.js: -------------------------------------------------------------------------------- 1 | window.d3 = require('d3'); 2 | var nv = require('../../build/nv.d3'); 3 | var invariant = require('invariant'); 4 | 5 | window.addEventListener("load", function load(event) { 6 | window.removeEventListener("load", load, false); 7 | invariant(typeof(nv) !== 'undefined', "Cannot resolve NVD3 via CommonJS"); 8 | nv.addGraph(function() { 9 | var chart = nv.models.bulletChart(); 10 | d3.select('#chart svg') 11 | .datum(exampleData()) 12 | .transition().duration(1000) 13 | .call(chart); 14 | return chart; 15 | }); 16 | }, false); 17 | 18 | function exampleData() { 19 | return { 20 | "title":"Revenue", 21 | "subtitle":"US$, in thousands", 22 | "ranges":[150,225,300], 23 | "measures":[220], 24 | "markers":[250] 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/test/node/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node-test", 3 | "version": "0.0.0", 4 | "private": true, 5 | "dependencies": { 6 | "d3": "<=3.4.4", 7 | "invariant": "1.0.2" 8 | }, 9 | "devDependencies": { 10 | "grunt-browserify": "3.3.0", 11 | "grunt-contrib-copy": "~0.4.1" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/test/realTimeChartTest.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 17 |

Example showing real time chart updating

18 | The chart below is a historical bar chart, which is ideal for visualizing time series data.
19 | First, you need to update the data model for the chart. In the example, we append a random number 20 | every half a second. Then, you call chart.update(). 21 | 22 |
23 | 24 | 25 |
26 | 27 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/test/scatterPlusLineChart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 40 | 41 | 42 | 43 |
44 |
45 | 46 |
47 |
48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 120 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/test/stream_layers.js: -------------------------------------------------------------------------------- 1 | 2 | /* Inspired by Lee Byron's test data generator. */ 3 | function stream_layers(n, m, o) { 4 | if (arguments.length < 3) o = 0; 5 | function bump(a) { 6 | var x = 1 / (.1 + Math.random()), 7 | y = 2 * Math.random() - .5, 8 | z = 10 / (.1 + Math.random()); 9 | for (var i = 0; i < m; i++) { 10 | var w = (i / m - y) * z; 11 | a[i] += x * Math.exp(-w * w); 12 | } 13 | } 14 | return d3.range(n).map(function() { 15 | var a = [], i; 16 | for (i = 0; i < m; i++) a[i] = o + o * Math.random(); 17 | for (i = 0; i < 5; i++) bump(a); 18 | return a.map(stream_index); 19 | }); 20 | } 21 | 22 | /* Another layer generator using gamma distributions. */ 23 | function stream_waves(n, m) { 24 | return d3.range(n).map(function(i) { 25 | return d3.range(m).map(function(j) { 26 | var x = 20 * j / m - i / 3; 27 | return 2 * x * Math.exp(-.5 * x); 28 | }).map(stream_index); 29 | }); 30 | } 31 | 32 | function stream_index(d, i) { 33 | return {x: i, y: Math.max(0, d)}; 34 | } 35 | 36 | -------------------------------------------------------------------------------- /reporting/libs/nvd3/test/testScript.js: -------------------------------------------------------------------------------- 1 | //A little snippet of D3 code that creates a button that lets you toggle whether a chart is the only one visible on a page or not. 2 | d3.selectAll(".chart button").on("click",function() { 3 | var thisId = this.parentElement.id; 4 | 5 | var chartContainer = d3.select("#" + thisId); 6 | if (chartContainer.attr("class").match("selected")) 7 | chartContainer.classed("selected",false); 8 | else 9 | chartContainer.classed("selected",true); 10 | 11 | d3.selectAll(".chart").style("display",function() { 12 | if (thisId === this.id) return "block"; 13 | 14 | if (d3.select(this).style("display") === "none") 15 | return "block"; 16 | else 17 | return "none"; 18 | }); 19 | window.onresize(); 20 | }); -------------------------------------------------------------------------------- /reporting/libs/nvd3/test/teststyle.css: -------------------------------------------------------------------------------- 1 | body { 2 | overflow-y:scroll; 3 | font-family: arial; 4 | } 5 | 6 | text { 7 | font: 12px sans-serif; 8 | } 9 | 10 | .chart { 11 | float:left; 12 | height: 500px; 13 | text-align: center; 14 | font-weight: bold; 15 | margin-bottom: 2em; 16 | } 17 | .chart.full { 18 | width: 100%; 19 | } 20 | 21 | .chart.half { 22 | width: 50%; 23 | } 24 | 25 | .chart.third { 26 | width: 33%; 27 | } 28 | 29 | .chart.selected { 30 | width: 100% !important; 31 | } 32 | 33 | .navigation a{ 34 | margin-right: 1em; 35 | } 36 | 37 | .navigation { 38 | margin-bottom: 1em; 39 | } 40 | -------------------------------------------------------------------------------- /reporting/libs/styles.css: -------------------------------------------------------------------------------- 1 | body 2 | { 3 | width: 1300px; 4 | padding-left: 20px; 5 | } 6 | 7 | svg 8 | { 9 | width: 600px; 10 | height: 400px; 11 | } 12 | 13 | .shadow 14 | { 15 | border: 1px solid #DDD; 16 | border-spacing: 3px; 17 | -webkit-box-shadow: 5px 5px 20px #AAA; 18 | -moz-box-shadow: 5px 5px 20px #AAA; 19 | box-shadow: 5px 5px 20px #AAA; 20 | 21 | } 22 | 23 | .bar, 24 | .circle 25 | { 26 | padding-top: 20px; 27 | padding-right: 20px; 28 | margin-left: 15px; 29 | margin-bottom: 15px; 30 | width: 650px; 31 | height: 450px; 32 | } 33 | 34 | .bar svg 35 | { 36 | padding-top: 15px; 37 | } 38 | 39 | .bar div.nvtooltip { margin-top: 30px; } 40 | 41 | .graphcontainer 42 | { 43 | display: flex; 44 | } 45 | -------------------------------------------------------------------------------- /reporting/libs/xAPI-Dashboard-development/.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | test.html 3 | node_modules 4 | dist/math.js 5 | -------------------------------------------------------------------------------- /reporting/libs/xAPI-Dashboard-development/Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | 3 | // Project configuration. 4 | grunt.initConfig({ 5 | pkg: grunt.file.readJSON('package.json'), 6 | jison: { 7 | target: { 8 | options: {moduleName: 'MathParser'}, 9 | files: { 10 | 'dist/math.js': 'src/parsers/math.jison' 11 | } 12 | } 13 | }, 14 | concat: { 15 | dist: { 16 | options: { 17 | separator: ';' 18 | }, 19 | files: { 20 | 'dist/xapidashboard.js': ['lib/d3.v3.js', 'lib/nv.d3.js', 'lib/xapiwrapper.min.js','src/dashboard.js', 'src/chart.js'], 21 | 'dist/xapicollection.js': ['dist/math.js', 'src/xapicollection.js'] 22 | } 23 | } 24 | }, 25 | uglify: { 26 | options: { 27 | banner: '/*! <%= pkg.name %> v<%= pkg.version %> | Built on <%= grunt.template.today("mm-dd-yyyy") %> */\n' 28 | }, 29 | build: { 30 | files: [{ 31 | src: 'dist/xapidashboard.js', 32 | dest: 'dist/xapidashboard.min.js' 33 | },{ 34 | src: 'dist/xapicollection.js', 35 | dest: 'dist/xapicollection.min.js' 36 | }] 37 | } 38 | } 39 | }); 40 | 41 | // Load the plugin that provides the "uglify" task. 42 | grunt.loadNpmTasks('grunt-jison'); 43 | grunt.loadNpmTasks('grunt-contrib-concat'); 44 | grunt.loadNpmTasks('grunt-contrib-uglify'); 45 | 46 | // Default task(s). 47 | grunt.registerTask('default', ['jison', 'concat', 'uglify']); 48 | 49 | }; 50 | -------------------------------------------------------------------------------- /reporting/libs/xAPI-Dashboard-development/examples/computation.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Collection Computation 5 | 6 | 7 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /reporting/libs/xAPI-Dashboard-development/examples/liveUpdate/index.css: -------------------------------------------------------------------------------- 1 | 2 | html { 3 | height: 100%; 4 | } 5 | 6 | body { 7 | margin: 0; 8 | display: flex; 9 | flex-direction: row; 10 | height: 100%; 11 | } 12 | 13 | p{ 14 | margin: 3px 0; 15 | } 16 | 17 | .container { 18 | padding: 10px; 19 | display: flex; 20 | flex-wrap: wrap; 21 | justify-content: center; 22 | align-content: flex-start; 23 | text-align: center; 24 | } 25 | 26 | .sidebar { 27 | padding: 10px; 28 | width: 20%; 29 | min-width: 200px; 30 | background-color: whitesmoke; 31 | } 32 | .sidebar span { 33 | display: block; 34 | color: blue; 35 | cursor: pointer; 36 | padding-left: 10px; 37 | text-indent: -10px; 38 | } 39 | .sidebar span:hover { 40 | text-decoration: underline; 41 | } 42 | 43 | .sidebar .active, .item-name { 44 | font-weight: bold; 45 | } 46 | 47 | .list { 48 | margin: 20px; 49 | width: 400px; 50 | } -------------------------------------------------------------------------------- /reporting/libs/xAPI-Dashboard-development/examples/liveUpdate/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 |
13 |

{{list.name}}

14 |

{{list.description}}

15 | {{list.caveat}}
16 |
    17 |
  1. 18 | {{item.name}} 19 | - {{item.value | number}} {{list.quality + (item.value!=1 ? 's' : '')}} ({{item.date | date : 'MMM dd'}}) 20 |
  2. 21 |
22 |

No Data

23 |
24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /reporting/libs/xAPI-Dashboard-development/examples/preprocessed.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Live LRS Demo 5 | 6 | 7 | 8 | 9 | 27 | 28 | 29 | 30 |
31 |
32 | 33 |
34 |
35 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /reporting/libs/xAPI-Dashboard-development/examples/process.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | xAPI Dashboard 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 24 | 25 | 26 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /reporting/libs/xAPI-Dashboard-development/examples/simpletable.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Sample Table 5 | 6 | 7 | 8 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 53 | 54 |
NameTest 1Test 2Test 3Test 4FinalAverage
46 | 47 | 48 | 49 | 50 | 51 | 52 |
55 | 56 | 57 | -------------------------------------------------------------------------------- /reporting/libs/xAPI-Dashboard-development/extra/chart_final.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adlnet/Intro-to-xAPI-Data-Visualization/a44d3a1fd8d96566fe3c6ec869702251daa23d3d/reporting/libs/xAPI-Dashboard-development/extra/chart_final.png -------------------------------------------------------------------------------- /reporting/libs/xAPI-Dashboard-development/extra/chart_initial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adlnet/Intro-to-xAPI-Data-Visualization/a44d3a1fd8d96566fe3c6ec869702251daa23d3d/reporting/libs/xAPI-Dashboard-development/extra/chart_initial.png -------------------------------------------------------------------------------- /reporting/libs/xAPI-Dashboard-development/generateData/compress.js: -------------------------------------------------------------------------------- 1 | var uglify = require('uglify-js2'), 2 | lz = require('lz-string'); 3 | 4 | var data = ''; 5 | process.stdin.on('readable', function(){ 6 | var chunk = process.stdin.read(); 7 | if(chunk) 8 | data += chunk; 9 | }); 10 | 11 | process.stdin.on('end', function(){ 12 | var stmts = JSON.parse(data); 13 | var lib = uglify.minify('lz-string-1.3.3.js'); 14 | var output = lib.code+'window.statements=JSON.parse(LZString.decompressFromBase64("'+lz.compressToBase64(JSON.stringify(stmts))+'"));'; 15 | process.stdout.write(output); 16 | }); 17 | -------------------------------------------------------------------------------- /reporting/libs/xAPI-Dashboard-development/generateData/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "generateData", 3 | "version": "0.0.0", 4 | "description": "", 5 | "main": "getStatements.js", 6 | "dependencies": { 7 | "lz-string": "~1.3.3", 8 | "request": "~2.34.0", 9 | "uglify-js2": "~2.1.11" 10 | }, 11 | "devDependencies": {}, 12 | "scripts": { 13 | "test": "echo \"Error: no test specified\" && exit 1" 14 | }, 15 | "author": "", 16 | "license": "BSD" 17 | } 18 | -------------------------------------------------------------------------------- /reporting/libs/xAPI-Dashboard-development/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "xAPI-Dashboard", 3 | "version": "1.2.1", 4 | "devDependencies": { 5 | "grunt": "~0.4.2", 6 | "grunt-contrib-jshint": "~0.6.3", 7 | "grunt-contrib-nodeunit": "~0.2.0", 8 | "grunt-contrib-uglify": "~0.2.2", 9 | "grunt-contrib-concat": "~0.4.0", 10 | "grunt-jison": "~1.3.1" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /reporting/libs/xAPI-Dashboard-development/wizard/style.css: -------------------------------------------------------------------------------- 1 | html, body{ 2 | height: 100%; 3 | width: 100%; 4 | margin: 0; 5 | padding: 0; 6 | } 7 | 8 | h1{ 9 | text-align:center; 10 | margin-top:0; 11 | } 12 | 13 | ul{ 14 | padding: 0; 15 | text-align: left; 16 | } 17 | 18 | ul li a{ 19 | color: black; 20 | } 21 | 22 | pre{ 23 | width: 100%; 24 | height: 270px !important; 25 | } 26 | 27 | #verbs{ 28 | height: 95%; 29 | } 30 | 31 | #container{ 32 | height: 100%; 33 | } 34 | 35 | #graphContainer{ 36 | height: 80%; 37 | } 38 | 39 | .sidebar{ 40 | 41 | float:left; 42 | width:12%; 43 | background-color: #79A3C7; 44 | height: 100%; 45 | margin: 0; 46 | padding : 20px; 47 | border-right: 1px solid #4D94D1; 48 | display:block; 49 | } 50 | 51 | .side-element{ 52 | border-bottom: 1px solid #9CB6CC; 53 | text-align:center; 54 | padding: 15px 0; 55 | } 56 | 57 | .main{ 58 | 59 | float:right; 60 | width:88%; 61 | margin:0; 62 | height: 100%; 63 | } 64 | 65 | .default-header{ 66 | text-align: center; 67 | color: #aaa; 68 | } 69 | 70 | .chart-footer{ 71 | 72 | width: 100%; 73 | background-color: #eee; 74 | border-top: 1px solid #DFDFDF; 75 | float: left; 76 | height: 20%; 77 | } 78 | 79 | .modal-body{ 80 | min-height: 300px; 81 | } 82 | 83 | .modal-body > *{ 84 | margin:15px auto; 85 | float:left; 86 | clear:both; 87 | min-width: 40%; 88 | height: 30px; 89 | } 90 | 91 | .placeholder{ 92 | display:none; 93 | } 94 | 95 | .key{ 96 | color: #428BCA; 97 | text-decoration: underline; 98 | } 99 | .key:hover{ 100 | cursor: pointer; 101 | } 102 | 103 | .single-option{ 104 | border-bottom: 1px solid #D8D8D8; 105 | text-align: center; 106 | padding: 13px; 107 | } -------------------------------------------------------------------------------- /reporting/libs/xAPI-Dashboard-development/wizard/themes/prism.css: -------------------------------------------------------------------------------- 1 | /* http://prismjs.com/download.html?themes=prism&languages=clike+javascript */ 2 | /** 3 | * prism.js default theme for JavaScript, CSS and HTML 4 | * Based on dabblet (http://dabblet.com) 5 | * @author Lea Verou 6 | */ 7 | 8 | code[class*="language-"], 9 | pre[class*="language-"] { 10 | color: black; 11 | text-shadow: 0 1px white; 12 | font-family: Consolas, Monaco, 'Andale Mono', monospace; 13 | direction: ltr; 14 | text-align: left; 15 | white-space: pre; 16 | word-spacing: normal; 17 | word-break: normal; 18 | 19 | 20 | -moz-tab-size: 4; 21 | -o-tab-size: 4; 22 | tab-size: 4; 23 | 24 | -webkit-hyphens: none; 25 | -moz-hyphens: none; 26 | -ms-hyphens: none; 27 | hyphens: none; 28 | } 29 | 30 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, 31 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { 32 | text-shadow: none; 33 | background: #b3d4fc; 34 | } 35 | 36 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection, 37 | code[class*="language-"]::selection, code[class*="language-"] ::selection { 38 | text-shadow: none; 39 | background: #b3d4fc; 40 | } 41 | 42 | @media print { 43 | code[class*="language-"], 44 | pre[class*="language-"] { 45 | text-shadow: none; 46 | } 47 | } 48 | 49 | /* Code blocks */ 50 | pre[class*="language-"] { 51 | padding: 1em; 52 | margin: .5em 0; 53 | overflow: auto; 54 | } 55 | 56 | :not(pre) > code[class*="language-"], 57 | pre[class*="language-"] { 58 | background: #f5f2f0; 59 | } 60 | 61 | /* Inline code */ 62 | :not(pre) > code[class*="language-"] { 63 | padding: .1em; 64 | border-radius: .3em; 65 | } 66 | 67 | .token.comment, 68 | .token.prolog, 69 | .token.doctype, 70 | .token.cdata { 71 | color: slategray; 72 | } 73 | 74 | .token.punctuation { 75 | color: #999; 76 | } 77 | 78 | .namespace { 79 | opacity: .7; 80 | } 81 | 82 | .token.property, 83 | .token.tag, 84 | .token.boolean, 85 | .token.number, 86 | .token.constant, 87 | .token.symbol { 88 | color: #905; 89 | } 90 | 91 | .token.selector, 92 | .token.attr-name, 93 | .token.string, 94 | .token.builtin { 95 | color: #690; 96 | } 97 | 98 | .token.operator, 99 | .token.entity, 100 | .token.url, 101 | .language-css .token.string, 102 | .style .token.string, 103 | .token.variable { 104 | color: #a67f59; 105 | background: hsla(0,0%,100%,.5); 106 | } 107 | 108 | .token.atrule, 109 | .token.attr-value, 110 | .token.keyword { 111 | color: #07a; 112 | } 113 | 114 | 115 | .token.regex, 116 | .token.important { 117 | color: #e90; 118 | } 119 | 120 | .token.important { 121 | font-weight: bold; 122 | } 123 | 124 | .token.entity { 125 | cursor: help; 126 | } 127 | 128 | -------------------------------------------------------------------------------- /reporting/packaged/cmi5.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <langstring lang="en-US">Intro to xAPI Data Visualization</langstring> 6 | 7 | 8 | 9 | This course will show how to retrieve data from an Experience API (xAPI) Learning Record Store (LRS) 10 | and usefully display it to a user using the xAPI Dashboard to produce charts. 11 | 12 | 13 | 14 | 15 | 16 | <langstring lang="en-US">xAPI Dashboard Charts</langstring> 17 | 18 | 19 | 20 | These charts read data from the LRS about player who play the Guess a Number game. 21 | 22 | 23 | ./reports.html 24 | 25 | -------------------------------------------------------------------------------- /reporting/packaged/libs/d3/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010-2015, Michael Bostock 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | * The name Michael Bostock may not be used to endorse or promote products 15 | derived from this software without specific prior written permission. 16 | 17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 | DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, 21 | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 22 | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 24 | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 25 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 26 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .idea 3 | *.swp 4 | *~ 5 | *.log 6 | .DS_Store* 7 | ehthumbs.db 8 | Icon? 9 | Thumbs.db 10 | node_modules 11 | bower_components 12 | coverage 13 | test-results.xml 14 | *.orig 15 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "asi": true 3 | } 4 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.10" 4 | before_install: 5 | - "npm install -g bower" 6 | - "npm install -g grunt-cli" 7 | - "export DISPLAY=:99.0" 8 | - "sh -e /etc/init.d/xvfb start" 9 | install: 10 | - "npm install" 11 | - "bower install" 12 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/LICENSE.md: -------------------------------------------------------------------------------- 1 | ##nvd3.js License 2 | 3 | Copyright (c) 2011-2014 [Novus Partners, Inc.][novus] 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | 17 | [novus]: https://www.novus.com/ 18 | 19 | 20 | 21 | ##d3.js License 22 | 23 | Copyright (c) 2012, Michael Bostock 24 | All rights reserved. 25 | 26 | Redistribution and use in source and binary forms, with or without 27 | modification, are permitted provided that the following conditions are met: 28 | 29 | * Redistributions of source code must retain the above copyright notice, this 30 | list of conditions and the following disclaimer. 31 | 32 | * Redistributions in binary form must reproduce the above copyright notice, 33 | this list of conditions and the following disclaimer in the documentation 34 | and/or other materials provided with the distribution. 35 | 36 | * The name Michael Bostock may not be used to endorse or promote products 37 | derived from this software without specific prior written permission. 38 | 39 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 40 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 41 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 42 | DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, 43 | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 44 | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 45 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 46 | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 47 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 48 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 49 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nvd3", 3 | "homepage": "http://www.nvd3.org", 4 | "authors": [ 5 | "Bob Monteverde", 6 | "Tyler Wolf", 7 | "Robin Hu", 8 | "Frank Shao", 9 | "liquidpele" 10 | ], 11 | "description": "Re-usable charts and chart components for d3.", 12 | "main": [ 13 | "build/nv.d3.js", 14 | "build/nv.d3.css" 15 | ], 16 | "keywords": [ 17 | "d3", 18 | "visualization", 19 | "svg", 20 | "charts" 21 | ], 22 | "license": "Apache License, v2.0", 23 | "dependencies": { 24 | "d3": "^3.4.4" 25 | }, 26 | "ignore": [ 27 | "**/.*", 28 | "node_modules", 29 | "bower_components", 30 | "test", 31 | "src", 32 | "examples", 33 | "GruntFile.js", 34 | "*.html", 35 | "*.log", 36 | "*.xml", 37 | "*.json", 38 | "*.md" 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/examples/boxPlot.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 23 | 24 | 25 | 26 | 27 | 30 | 31 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/examples/bullet.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 59 | 60 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/examples/discreteBarChart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 23 | 24 | 25 | 26 |
27 | 28 |
29 | 30 | 92 | 93 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/examples/historicalBar.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 23 | 24 | 25 | 26 | 27 | 28 | 89 | 90 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/examples/historicalBarChart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 23 | 24 | 25 | 26 | 27 | 28 | 91 | 92 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/examples/images/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adlnet/Intro-to-xAPI-Data-Visualization/a44d3a1fd8d96566fe3c6ec869702251daa23d3d/reporting/packaged/libs/nvd3/examples/images/background.png -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/examples/images/body-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adlnet/Intro-to-xAPI-Data-Visualization/a44d3a1fd8d96566fe3c6ec869702251daa23d3d/reporting/packaged/libs/nvd3/examples/images/body-background.png -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/examples/images/bullet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adlnet/Intro-to-xAPI-Data-Visualization/a44d3a1fd8d96566fe3c6ec869702251daa23d3d/reporting/packaged/libs/nvd3/examples/images/bullet.png -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/examples/images/octocat-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adlnet/Intro-to-xAPI-Data-Visualization/a44d3a1fd8d96566fe3c6ec869702251daa23d3d/reporting/packaged/libs/nvd3/examples/images/octocat-logo.png -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/examples/legend.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 23 | 24 | 25 |

Legend 1

26 | 27 | 28 | 29 |

Legend 2

30 |

Setting align(false)

31 | 32 | 33 |

Legend 3

34 |

Setting legend padding distance

35 | 36 | 37 | 105 | 106 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/examples/lib/stream_layers.js: -------------------------------------------------------------------------------- 1 | 2 | /* Inspired by Lee Byron's test data generator. */ 3 | function stream_layers(n, m, o) { 4 | if (arguments.length < 3) o = 0; 5 | function bump(a) { 6 | var x = 1 / (.1 + Math.random()), 7 | y = 2 * Math.random() - .5, 8 | z = 10 / (.1 + Math.random()); 9 | for (var i = 0; i < m; i++) { 10 | var w = (i / m - y) * z; 11 | a[i] += x * Math.exp(-w * w); 12 | } 13 | } 14 | return d3.range(n).map(function() { 15 | var a = [], i; 16 | for (i = 0; i < m; i++) a[i] = o + o * Math.random(); 17 | for (i = 0; i < 5; i++) bump(a); 18 | return a.map(stream_index); 19 | }); 20 | } 21 | 22 | /* Another layer generator using gamma distributions. */ 23 | function stream_waves(n, m) { 24 | return d3.range(n).map(function(i) { 25 | return d3.range(m).map(function(j) { 26 | var x = 20 * j / m - i / 3; 27 | return 2 * x * Math.exp(-.5 * x); 28 | }).map(stream_index); 29 | }); 30 | } 31 | 32 | function stream_index(d, i) { 33 | return {x: i, y: Math.max(0, d)}; 34 | } 35 | 36 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/examples/lineWithFocusChart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 24 | 25 | 26 | 27 |
28 | 29 |
30 | 31 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/examples/lineWithFocusChart_x2AxisLabel.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 24 | 25 | 26 | 27 |
28 | 29 |
30 | 31 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/examples/multiBarChart2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 24 | 25 | 26 | 27 |
28 | 29 |
30 | 31 | 79 | 80 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/examples/multiChart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 24 | 25 | 26 | 27 |
28 | 29 |
30 | 31 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/examples/pie.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 27 | 28 | 29 | 30 |
31 |
32 | 33 | 90 | 91 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/examples/scatter.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 23 | 24 | 25 | 26 | 27 | 28 | 64 | 65 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/examples/scatterPlusLineChart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 23 | 24 | 25 | 26 |
27 | 28 |
29 | 30 | 83 | 84 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/examples/sparkline.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 24 | 25 | 26 | 27 |

Sparkline:

28 | 29 | 56 | 57 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/examples/sparklinePlus.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 27 | 28 | 29 | 30 |

31 |

32 |

33 | 34 | 88 | 89 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/index.html: -------------------------------------------------------------------------------- 1 | 2 | 11 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/package.js: -------------------------------------------------------------------------------- 1 | // Package metadata for Meteor.js full stack web framework 2 | // This file is defined in Meteor documentation at http://docs.meteor.com/#/full/packagejs 3 | // and used by Meteor https://www.meteor.com/ and its package repository Atmosphere https://atmospherejs.com 4 | 5 | Package.describe({ 6 | "name": 'nvd3:nvd3', 7 | summary: 'Nvd3.org charts.', 8 | version: '1.8.1', 9 | git: "https://github.com/novus/nvd3.git" 10 | }); 11 | Package.on_use(function (api) { 12 | api.versionsFrom("METEOR@1.0"); 13 | api.use('d3js:d3@3.5.5', 'client'); 14 | api.add_files('build/nv.d3.js', 'client'); 15 | api.add_files('build/nv.d3.css', 'client'); 16 | api.export("nv"); 17 | }); -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nvd3", 3 | "version": "1.8.1", 4 | "description": "A reusable charting library written in d3.js", 5 | "url": "https://github.com/novus/nvd3", 6 | "main": "build/nv.d3.js", 7 | "scripts": { 8 | "test": "grunt" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/novus/nvd3" 13 | }, 14 | "keywords": ["nvd3", "d3", "chart", "graph"], 15 | "readmeFilename": "README.md", 16 | "license": "Apache-2.0", 17 | "peerDependencies": { 18 | "d3": "^3.4.4" 19 | }, 20 | "devDependencies": { 21 | "grunt": "^0.4.5", 22 | "grunt-contrib-concat": "~0.2.0", 23 | "grunt-contrib-copy": "~0.4.1", 24 | "grunt-contrib-cssmin": "~0.6.2", 25 | "grunt-contrib-jshint": "^0.11.0", 26 | "grunt-contrib-uglify": "~0.2.0", 27 | "grunt-contrib-watch": "~0.3.1", 28 | "grunt-text-replace": "^0.4.0", 29 | "grunt-karma": "^0.9.0", 30 | "karma": "^0.12.23", 31 | "karma-chrome-launcher": "^0.1.4", 32 | "karma-coffee-preprocessor": "^0.2.1", 33 | "karma-coverage": "^0.2.6", 34 | "karma-firefox-launcher": "^0.1.4", 35 | "karma-junit-reporter": "^0.2.2", 36 | "karma-mocha": "^0.1.9", 37 | "karma-sinon-chai": "^0.2.0", 38 | "karma-spec-reporter": "0.0.13", 39 | "mocha": "^1.21.4" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/src/css/axis.css: -------------------------------------------------------------------------------- 1 | .nvd3 .nv-axis { 2 | pointer-events:none; 3 | opacity: 1; 4 | } 5 | 6 | .nvd3 .nv-axis path { 7 | fill: none; 8 | stroke: #000; 9 | stroke-opacity: .75; 10 | shape-rendering: crispEdges; 11 | } 12 | 13 | .nvd3 .nv-axis path.domain { 14 | stroke-opacity: .75; 15 | } 16 | 17 | .nvd3 .nv-axis.nv-x path.domain { 18 | stroke-opacity: 0; 19 | } 20 | 21 | .nvd3 .nv-axis line { 22 | fill: none; 23 | stroke: #e5e5e5; 24 | shape-rendering: crispEdges; 25 | } 26 | 27 | .nvd3 .nv-axis .zero line, 28 | /*this selector may not be necessary*/ .nvd3 .nv-axis line.zero { 29 | stroke-opacity: .75; 30 | } 31 | 32 | .nvd3 .nv-axis .nv-axisMaxMin text { 33 | font-weight: bold; 34 | } 35 | 36 | .nvd3 .x .nv-axis .nv-axisMaxMin text, 37 | .nvd3 .x2 .nv-axis .nv-axisMaxMin text, 38 | .nvd3 .x3 .nv-axis .nv-axisMaxMin text { 39 | text-anchor: middle 40 | } 41 | 42 | .nvd3 .nv-axis.nv-disabled { 43 | opacity: 0; 44 | } 45 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/src/css/bars.css: -------------------------------------------------------------------------------- 1 | .nvd3 .nv-bars rect { 2 | fill-opacity: .75; 3 | 4 | transition: fill-opacity 250ms linear; 5 | -moz-transition: fill-opacity 250ms linear; 6 | -webkit-transition: fill-opacity 250ms linear; 7 | } 8 | 9 | .nvd3 .nv-bars rect.hover { 10 | fill-opacity: 1; 11 | } 12 | 13 | .nvd3 .nv-bars .hover rect { 14 | fill: lightblue; 15 | } 16 | 17 | .nvd3 .nv-bars text { 18 | fill: rgba(0,0,0,0); 19 | } 20 | 21 | .nvd3 .nv-bars .hover text { 22 | fill: rgba(0,0,0,1); 23 | } 24 | 25 | .nvd3 .nv-multibar .nv-groups rect, 26 | .nvd3 .nv-multibarHorizontal .nv-groups rect, 27 | .nvd3 .nv-discretebar .nv-groups rect { 28 | stroke-opacity: 0; 29 | 30 | transition: fill-opacity 250ms linear; 31 | -moz-transition: fill-opacity 250ms linear; 32 | -webkit-transition: fill-opacity 250ms linear; 33 | } 34 | 35 | .nvd3 .nv-multibar .nv-groups rect:hover, 36 | .nvd3 .nv-multibarHorizontal .nv-groups rect:hover, 37 | .nvd3 .nv-candlestickBar .nv-ticks rect:hover, 38 | .nvd3 .nv-discretebar .nv-groups rect:hover { 39 | fill-opacity: 1; 40 | } 41 | 42 | .nvd3 .nv-discretebar .nv-groups text, 43 | .nvd3 .nv-multibarHorizontal .nv-groups text { 44 | font-weight: bold; 45 | fill: rgba(0,0,0,1); 46 | stroke: rgba(0,0,0,0); 47 | } 48 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/src/css/boxplot.css: -------------------------------------------------------------------------------- 1 | /* boxplot CSS */ 2 | .nvd3 .nv-boxplot circle { 3 | fill-opacity: 0.5; 4 | } 5 | 6 | .nvd3 .nv-boxplot circle:hover { 7 | fill-opacity: 1; 8 | } 9 | 10 | .nvd3 .nv-boxplot rect:hover { 11 | fill-opacity: 1; 12 | } 13 | 14 | .nvd3 line.nv-boxplot-median { 15 | stroke: black; 16 | } 17 | 18 | .nv-boxplot-tick:hover { 19 | stroke-width: 2.5px; 20 | } -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/src/css/bullet.css: -------------------------------------------------------------------------------- 1 | /* bullet */ 2 | .nvd3.nv-bullet { font: 10px sans-serif; } 3 | .nvd3.nv-bullet .nv-measure { fill-opacity: .8; } 4 | .nvd3.nv-bullet .nv-measure:hover { fill-opacity: 1; } 5 | .nvd3.nv-bullet .nv-marker { stroke: #000; stroke-width: 2px; } 6 | .nvd3.nv-bullet .nv-markerTriangle { stroke: #000; fill: #fff; stroke-width: 1.5px; } 7 | .nvd3.nv-bullet .nv-tick line { stroke: #666; stroke-width: .5px; } 8 | .nvd3.nv-bullet .nv-range.nv-s0 { fill: #eee; } 9 | .nvd3.nv-bullet .nv-range.nv-s1 { fill: #ddd; } 10 | .nvd3.nv-bullet .nv-range.nv-s2 { fill: #ccc; } 11 | .nvd3.nv-bullet .nv-title { font-size: 14px; font-weight: bold; } 12 | .nvd3.nv-bullet .nv-subtitle { fill: #999; } 13 | 14 | 15 | .nvd3.nv-bullet .nv-range { 16 | fill: #bababa; 17 | fill-opacity: .4; 18 | } 19 | .nvd3.nv-bullet .nv-range:hover { 20 | fill-opacity: .7; 21 | } 22 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/src/css/candlestick.css: -------------------------------------------------------------------------------- 1 | .nvd3.nv-candlestickBar .nv-ticks .nv-tick { 2 | stroke-width: 1px; 3 | } 4 | 5 | .nvd3.nv-candlestickBar .nv-ticks .nv-tick.hover { 6 | stroke-width: 2px; 7 | } 8 | 9 | .nvd3.nv-candlestickBar .nv-ticks .nv-tick.positive rect { 10 | stroke: #2ca02c; 11 | fill: #2ca02c; 12 | } 13 | 14 | .nvd3.nv-candlestickBar .nv-ticks .nv-tick.negative rect { 15 | stroke: #d62728; 16 | fill: #d62728; 17 | } 18 | 19 | .with-transitions .nv-candlestickBar .nv-ticks .nv-tick { 20 | transition: stroke-width 250ms linear, stroke-opacity 250ms linear; 21 | -moz-transition: stroke-width 250ms linear, stroke-opacity 250ms linear; 22 | -webkit-transition: stroke-width 250ms linear, stroke-opacity 250ms linear; 23 | 24 | } 25 | 26 | .nvd3.nv-candlestickBar .nv-ticks line { 27 | stroke: #333; 28 | } 29 | 30 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/src/css/furiousLegend.css: -------------------------------------------------------------------------------- 1 | .nvd3 .nv-legend .nv-disabled rect { 2 | /*fill-opacity: 0;*/ 3 | } 4 | 5 | .nvd3 .nv-check-box .nv-box { 6 | fill-opacity:0; 7 | stroke-width:2; 8 | } 9 | 10 | .nvd3 .nv-check-box .nv-check { 11 | fill-opacity:0; 12 | stroke-width:4; 13 | } 14 | 15 | .nvd3 .nv-series.nv-disabled .nv-check-box .nv-check { 16 | fill-opacity:0; 17 | stroke-opacity:0; 18 | } 19 | 20 | .nvd3 .nv-controlsWrap .nv-legend .nv-check-box .nv-check { 21 | opacity: 0; 22 | } 23 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/src/css/lineplusbar.css: -------------------------------------------------------------------------------- 1 | /* line plus bar */ 2 | .nvd3.nv-linePlusBar .nv-bar rect { 3 | fill-opacity: .75; 4 | } 5 | 6 | .nvd3.nv-linePlusBar .nv-bar rect:hover { 7 | fill-opacity: 1; 8 | } -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/src/css/lines.css: -------------------------------------------------------------------------------- 1 | .nvd3 .nv-groups path.nv-line { 2 | fill: none; 3 | } 4 | 5 | .nvd3 .nv-groups path.nv-area { 6 | stroke: none; 7 | } 8 | 9 | .nvd3.nv-line .nvd3.nv-scatter .nv-groups .nv-point { 10 | fill-opacity: 0; 11 | stroke-opacity: 0; 12 | } 13 | 14 | .nvd3.nv-scatter.nv-single-point .nv-groups .nv-point { 15 | fill-opacity: .5 !important; 16 | stroke-opacity: .5 !important; 17 | } 18 | 19 | 20 | .with-transitions .nvd3 .nv-groups .nv-point { 21 | transition: stroke-width 250ms linear, stroke-opacity 250ms linear; 22 | -moz-transition: stroke-width 250ms linear, stroke-opacity 250ms linear; 23 | -webkit-transition: stroke-width 250ms linear, stroke-opacity 250ms linear; 24 | 25 | } 26 | 27 | .nvd3.nv-scatter .nv-groups .nv-point.hover, 28 | .nvd3 .nv-groups .nv-point.hover { 29 | stroke-width: 7px; 30 | fill-opacity: .95 !important; 31 | stroke-opacity: .95 !important; 32 | } 33 | 34 | 35 | .nvd3 .nv-point-paths path { 36 | stroke: #aaa; 37 | stroke-opacity: 0; 38 | fill: #eee; 39 | fill-opacity: 0; 40 | } 41 | 42 | 43 | 44 | .nvd3 .nv-indexLine { 45 | cursor: ew-resize; 46 | } 47 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/src/css/main.css: -------------------------------------------------------------------------------- 1 | /******************** 2 | * SVG CSS 3 | */ 4 | 5 | /******************** 6 | Default CSS for an svg element nvd3 used 7 | */ 8 | svg.nvd3-svg { 9 | -webkit-touch-callout: none; 10 | -webkit-user-select: none; 11 | -khtml-user-select: none; 12 | -ms-user-select: none; 13 | -moz-user-select: none; 14 | user-select: none; 15 | display: block; 16 | width:100%; 17 | height:100%; 18 | } 19 | 20 | /******************** 21 | Box shadow and border radius styling 22 | */ 23 | .nvtooltip.with-3d-shadow, .with-3d-shadow .nvtooltip { 24 | -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2); 25 | -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2); 26 | box-shadow: 0 5px 10px rgba(0,0,0,.2); 27 | 28 | -webkit-border-radius: 5px; 29 | -moz-border-radius: 5px; 30 | border-radius: 5px; 31 | } 32 | 33 | 34 | .nvd3 text { 35 | font: normal 12px Arial; 36 | } 37 | 38 | .nvd3 .title { 39 | font: bold 14px Arial; 40 | } 41 | 42 | .nvd3 .nv-background { 43 | fill: white; 44 | fill-opacity: 0; 45 | } 46 | 47 | .nvd3.nv-noData { 48 | font-size: 18px; 49 | font-weight: bold; 50 | } 51 | 52 | 53 | /********** 54 | * Brush 55 | */ 56 | 57 | .nv-brush .extent { 58 | fill-opacity: .125; 59 | shape-rendering: crispEdges; 60 | } 61 | 62 | .nv-brush .resize path { 63 | fill: #eee; 64 | stroke: #666; 65 | } 66 | 67 | 68 | /********** 69 | * Legend 70 | */ 71 | 72 | .nvd3 .nv-legend .nv-series { 73 | cursor: pointer; 74 | } 75 | 76 | .nvd3 .nv-legend .nv-disabled circle { 77 | fill-opacity: 0; 78 | } 79 | 80 | /* focus */ 81 | .nvd3 .nv-brush .extent { 82 | fill-opacity: 0 !important; 83 | } 84 | 85 | .nvd3 .nv-brushBackground rect { 86 | stroke: #000; 87 | stroke-width: .4; 88 | fill: #fff; 89 | fill-opacity: .7; 90 | } 91 | 92 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/src/css/ohlc.css: -------------------------------------------------------------------------------- 1 | .nvd3.nv-ohlcBar .nv-ticks .nv-tick { 2 | stroke-width: 1px; 3 | } 4 | 5 | .nvd3.nv-ohlcBar .nv-ticks .nv-tick.hover { 6 | stroke-width: 2px; 7 | } 8 | 9 | .nvd3.nv-ohlcBar .nv-ticks .nv-tick.positive { 10 | stroke: #2ca02c; 11 | } 12 | 13 | .nvd3.nv-ohlcBar .nv-ticks .nv-tick.negative { 14 | stroke: #d62728; 15 | } 16 | 17 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/src/css/parallelcoordinates.css: -------------------------------------------------------------------------------- 1 | .nvd3 .background path { 2 | fill: none; 3 | stroke: #EEE; 4 | stroke-opacity: .4; 5 | shape-rendering: crispEdges; 6 | } 7 | 8 | .nvd3 .foreground path { 9 | fill: none; 10 | stroke-opacity: .7; 11 | } 12 | 13 | .nvd3 .nv-parallelCoordinates-brush .extent 14 | { 15 | fill: #fff; 16 | fill-opacity: .6; 17 | stroke: gray; 18 | shape-rendering: crispEdges; 19 | } 20 | 21 | .nvd3 .nv-parallelCoordinates .hover { 22 | fill-opacity: 1; 23 | stroke-width: 3px; 24 | } 25 | 26 | 27 | .nvd3 .missingValuesline line { 28 | fill: none; 29 | stroke: black; 30 | stroke-width: 1; 31 | stroke-opacity: 1; 32 | stroke-dasharray: 5, 5; 33 | } -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/src/css/pie.css: -------------------------------------------------------------------------------- 1 | .nvd3.nv-pie path { 2 | stroke-opacity: 0; 3 | transition: fill-opacity 250ms linear, stroke-width 250ms linear, stroke-opacity 250ms linear; 4 | -moz-transition: fill-opacity 250ms linear, stroke-width 250ms linear, stroke-opacity 250ms linear; 5 | -webkit-transition: fill-opacity 250ms linear, stroke-width 250ms linear, stroke-opacity 250ms linear; 6 | 7 | } 8 | 9 | .nvd3.nv-pie .nv-pie-title { 10 | font-size: 24px; 11 | fill: rgba(19, 196, 249, 0.59); 12 | } 13 | 14 | .nvd3.nv-pie .nv-slice text { 15 | stroke: #000; 16 | stroke-width: 0; 17 | } 18 | 19 | .nvd3.nv-pie path { 20 | stroke: #fff; 21 | stroke-width: 1px; 22 | stroke-opacity: 1; 23 | } 24 | 25 | .nvd3.nv-pie .hover path { 26 | fill-opacity: .7; 27 | } 28 | .nvd3.nv-pie .nv-label { 29 | pointer-events: none; 30 | } 31 | .nvd3.nv-pie .nv-label rect { 32 | fill-opacity: 0; 33 | stroke-opacity: 0; 34 | } 35 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/src/css/scatter.css: -------------------------------------------------------------------------------- 1 | /* scatter */ 2 | .nvd3 .nv-groups .nv-point.hover { 3 | stroke-width: 20px; 4 | stroke-opacity: .5; 5 | } 6 | 7 | .nvd3 .nv-scatter .nv-point.hover { 8 | fill-opacity: 1; 9 | } 10 | .nv-noninteractive { 11 | pointer-events: none; 12 | } 13 | 14 | .nv-distx, .nv-disty { 15 | pointer-events: none; 16 | } 17 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/src/css/sparkline.css: -------------------------------------------------------------------------------- 1 | /* sparkline */ 2 | .nvd3.nv-sparkline path { 3 | fill: none; 4 | } 5 | 6 | .nvd3.nv-sparklineplus g.nv-hoverValue { 7 | pointer-events: none; 8 | } 9 | 10 | .nvd3.nv-sparklineplus .nv-hoverValue line { 11 | stroke: #333; 12 | stroke-width: 1.5px; 13 | } 14 | 15 | .nvd3.nv-sparklineplus, 16 | .nvd3.nv-sparklineplus g { 17 | pointer-events: all; 18 | } 19 | 20 | .nvd3 .nv-hoverArea { 21 | fill-opacity: 0; 22 | stroke-opacity: 0; 23 | } 24 | 25 | .nvd3.nv-sparklineplus .nv-xValue, 26 | .nvd3.nv-sparklineplus .nv-yValue { 27 | stroke-width: 0; 28 | font-size: .9em; 29 | font-weight: normal; 30 | } 31 | 32 | .nvd3.nv-sparklineplus .nv-yValue { 33 | stroke: #f66; 34 | } 35 | 36 | .nvd3.nv-sparklineplus .nv-maxValue { 37 | stroke: #2ca02c; 38 | fill: #2ca02c; 39 | } 40 | 41 | .nvd3.nv-sparklineplus .nv-minValue { 42 | stroke: #d62728; 43 | fill: #d62728; 44 | } 45 | 46 | .nvd3.nv-sparklineplus .nv-currentValue { 47 | font-weight: bold; 48 | font-size: 1.1em; 49 | } -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/src/css/stackedarea.css: -------------------------------------------------------------------------------- 1 | /* stacked area */ 2 | .nvd3.nv-stackedarea path.nv-area { 3 | fill-opacity: .7; 4 | stroke-opacity: 0; 5 | transition: fill-opacity 250ms linear, stroke-opacity 250ms linear; 6 | -moz-transition: fill-opacity 250ms linear, stroke-opacity 250ms linear; 7 | -webkit-transition: fill-opacity 250ms linear, stroke-opacity 250ms linear; 8 | } 9 | 10 | .nvd3.nv-stackedarea path.nv-area.hover { 11 | fill-opacity: .9; 12 | } 13 | 14 | 15 | .nvd3.nv-stackedarea .nv-groups .nv-point { 16 | stroke-opacity: 0; 17 | fill-opacity: 0; 18 | } -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/src/dom.js: -------------------------------------------------------------------------------- 1 | /* Facade for queueing DOM write operations 2 | * with Fastdom (https://github.com/wilsonpage/fastdom) 3 | * if available. 4 | * This could easily be extended to support alternate 5 | * implementations in the future. 6 | */ 7 | nv.dom.write = function(callback) { 8 | if (window.fastdom !== undefined) { 9 | return fastdom.write(callback); 10 | } 11 | return callback(); 12 | }; 13 | 14 | /* Facade for queueing DOM read operations 15 | * with Fastdom (https://github.com/wilsonpage/fastdom) 16 | * if available. 17 | * This could easily be extended to support alternate 18 | * implementations in the future. 19 | */ 20 | nv.dom.read = function(callback) { 21 | if (window.fastdom !== undefined) { 22 | return fastdom.read(callback); 23 | } 24 | return callback(); 25 | }; -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/test/lineWithFisheyeChart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 33 | 34 | 35 |
36 | 37 |
38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 104 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/test/lineWithFocusChart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 33 | 34 | 35 |
36 | 37 |
38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 90 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/test/lineWithFocusChartMissingData.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 24 | 25 | 26 | 27 |
28 | 29 |
30 | 31 | 78 | 79 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/test/mocha/core.coffee: -------------------------------------------------------------------------------- 1 | describe 'NVD3', -> 2 | 3 | describe 'Core', -> 4 | 5 | objects = [ 6 | 'window.nv' 7 | 'd3_time_range' 8 | 'nv.tooltip' 9 | 'nv.utils' 10 | 'nv.models' 11 | 'nv.charts' 12 | 'nv.graphs' 13 | 'nv.logs' 14 | 'nv.dispatch' 15 | 'nv.log' 16 | 'nv.deprecated' 17 | 'nv.render' 18 | 'nv.addGraph' 19 | ] 20 | 21 | describe 'has', -> 22 | for obj in objects 23 | it " #{obj} object", -> 24 | should.exist eval obj 25 | 26 | describe 'has nv.dispatch with default', -> 27 | dispatchDefaults = ['render_start', 'render_end'] 28 | for event in dispatchDefaults 29 | do (event) -> 30 | it "#{event} event", -> assert.isFunction nv.dispatch[event] 31 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/test/mocha/discretebar.coffee: -------------------------------------------------------------------------------- 1 | describe 'NVD3', -> 2 | describe 'Discrete Bar Chart', -> 3 | sampleData1 = [ 4 | key: 'Series 1' 5 | values: [ 6 | {label: 'America', value: 100} 7 | {label: 'Europe', value: 200} 8 | {label: 'Asia', value: 50} 9 | {label: 'Africa', value: 70} 10 | ] 11 | ] 12 | 13 | options = 14 | x: (d)-> d.label 15 | y: (d)-> d.value 16 | margin: 17 | top: 30 18 | right: 20 19 | bottom: 50 20 | left: 75 21 | color: nv.utils.defaultColor() 22 | showXAxis: true 23 | showYAxis: true 24 | rightAlignYAxis: false 25 | staggerLabels: true 26 | showValues: true 27 | valueFormat: (d)-> d.toFixed 2 28 | tooltips: true 29 | tooltipContent: (key,x,y)-> "

#{key}

" 30 | noData: 'No Data Available' 31 | duration: 0 32 | 33 | builder = null 34 | beforeEach -> 35 | builder = new ChartBuilder nv.models.discreteBarChart() 36 | builder.build options, sampleData1 37 | 38 | afterEach -> 39 | builder.teardown() 40 | 41 | it 'api check', -> 42 | should.exist builder.model.options, 'options exposed' 43 | for opt of options 44 | should.exist builder.model[opt](), "#{opt} can be called" 45 | 46 | it 'renders', -> 47 | wrap = builder.$ 'g.nvd3.nv-discreteBarWithAxes' 48 | should.exist wrap[0] 49 | 50 | it 'clears chart objects for no data', -> 51 | builder = new ChartBuilder nv.models.discreteBarChart() 52 | builder.buildover options, sampleData1, [] 53 | 54 | groups = builder.$ 'g' 55 | groups.length.should.equal 0, 'removes chart components' 56 | 57 | it 'has correct structure', -> 58 | cssClasses = [ 59 | '.nv-x.nv-axis' 60 | '.nv-y.nv-axis' 61 | '.nv-barsWrap' 62 | '.nv-discretebar' 63 | ] 64 | for cssClass in cssClasses 65 | do (cssClass) -> 66 | should.exist builder.$("g.nvd3.nv-discreteBarWithAxes #{cssClass}")[0] 67 | 68 | it 'can override axis ticks', -> 69 | builder.model.xAxis.ticks(34) 70 | builder.model.yAxis.ticks(56) 71 | builder.model.update() 72 | builder.model.xAxis.ticks().should.equal 34 73 | builder.model.yAxis.ticks().should.equal 56 74 | 75 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/test/mocha/historical-bar.coffee: -------------------------------------------------------------------------------- 1 | describe 'NVD3', -> 2 | describe 'Historical Bar Chart', -> 3 | sampleData1 = [ 4 | key: 'Series 1' 5 | values: [ 6 | [-1,-1] 7 | [0,0] 8 | [1,1] 9 | [2,2] 10 | ] 11 | ] 12 | 13 | options = 14 | x: (d,i)-> i 15 | y: (d)-> d[1] 16 | margin: 17 | top: 30 18 | right: 20 19 | bottom: 50 20 | left: 75 21 | width: 200 22 | height: 200 23 | color: nv.utils.defaultColor() 24 | showLegend: true 25 | showXAxis: true 26 | showYAxis: true 27 | rightAlignYAxis: false 28 | tooltips: true 29 | tooltipContent: (key,x,y)-> "

#{key}

" 30 | noData: 'No Data Available' 31 | 32 | builder = null 33 | beforeEach -> 34 | builder = new ChartBuilder nv.models.historicalBarChart() 35 | builder.build options, sampleData1 36 | 37 | afterEach -> 38 | builder.teardown() 39 | 40 | it 'api check', -> 41 | should.exist builder.model.options, 'options exposed' 42 | for opt of options 43 | should.exist builder.model[opt](), "#{opt} can be called" 44 | 45 | it 'renders', -> 46 | wrap = builder.$ 'g.nvd3.nv-historicalBarChart' 47 | should.exist wrap[0] 48 | 49 | it 'clears chart objects for no data', -> 50 | builder = new ChartBuilder nv.models.historicalBarChart() 51 | builder.buildover options, sampleData1, [] 52 | 53 | groups = builder.$ 'g' 54 | groups.length.should.equal 0, 'removes chart components' 55 | 56 | it 'has correct structure', -> 57 | cssClasses = [ 58 | '.nv-x.nv-axis' 59 | '.nv-y.nv-axis' 60 | '.nv-barsWrap' 61 | '.nv-bars' 62 | '.nv-legendWrap' 63 | ] 64 | for cssClass in cssClasses 65 | do (cssClass) -> 66 | should.exist builder.$("g.nvd3.nv-historicalBarChart #{cssClass}")[0] 67 | 68 | it 'can override axis ticks', -> 69 | builder.model.xAxis.ticks(34) 70 | builder.model.yAxis.ticks(56) 71 | builder.model.update() 72 | builder.model.xAxis.ticks().should.equal 34 73 | builder.model.yAxis.ticks().should.equal 56 -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/test/mocha/sparkline.coffee: -------------------------------------------------------------------------------- 1 | describe 'NVD3', -> 2 | describe 'Sparkline Chart', -> 3 | sampleData1 = [ 4 | {x: 1, y: 100} 5 | {x: 2, y: 101} 6 | {x: 3, y: 99} 7 | {x: 4, y: 56} 8 | {x: 5, y: 87} 9 | ] 10 | 11 | options = 12 | x: (d)-> d.x 13 | y: (d)-> d.y 14 | margin: 15 | top: 30 16 | right: 20 17 | bottom: 50 18 | left: 75 19 | width: 200 20 | height: 50 21 | xTickFormat: (d)-> d 22 | yTickFormat: (d)-> d.toFixed 2 23 | showLastValue: true 24 | alignValue: true 25 | rightAlignValue: false 26 | noData: 'No Data Available' 27 | 28 | builder = null 29 | beforeEach -> 30 | builder = new ChartBuilder nv.models.sparklinePlus() 31 | builder.build options, sampleData1 32 | 33 | afterEach -> 34 | builder.teardown() 35 | 36 | it 'api check', -> 37 | should.exist builder.model.options, 'options exposed' 38 | for opt of options 39 | should.exist builder.model[opt](), "#{opt} can be called" 40 | 41 | it 'clears chart objects for no data', -> 42 | builder = new ChartBuilder nv.models.sparklinePlus() 43 | builder.buildover options, sampleData1, [] 44 | 45 | groups = builder.$ 'g' 46 | groups.length.should.equal 0, 'removes chart components' 47 | 48 | it 'renders', -> 49 | wrap = builder.$ 'g.nvd3.nv-sparklineplus' 50 | should.exist wrap[0] 51 | 52 | 53 | 54 | it 'has correct structure', -> 55 | cssClasses = [ 56 | '.nv-sparklineWrap' 57 | '.nv-sparkline' 58 | '.nv-minValue' 59 | '.nv-maxValue' 60 | '.nv-currentValue' 61 | '.nv-valueWrap' 62 | ] 63 | for cssClass in cssClasses 64 | do(cssClass) -> 65 | should.exist builder.$("g.nvd3.nv-sparklineplus #{cssClass}")[0] -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/test/mocha/test-utils.coffee: -------------------------------------------------------------------------------- 1 | ### 2 | Utility to build an NVD3 chart. 3 | ### 4 | class ChartBuilder 5 | # @model should be something like nv.models.scatterChart() 6 | constructor: (@model)-> 7 | 8 | ### 9 | options: an object hash of chart options. 10 | data: sample data to pass in to chart. 11 | 12 | This method builds a chart and puts it on the element. 13 | ### 14 | build: (options, data)-> 15 | @svg = document.createElement 'svg' 16 | document.querySelector('body').appendChild @svg 17 | 18 | for opt, val of options 19 | unless @model[opt]? 20 | console.warn "#{opt} not property of model." 21 | else 22 | @model[opt](val) 23 | 24 | @updateData data 25 | 26 | ### 27 | Update the data while preserving the chart model. 28 | ### 29 | updateData: (data)-> 30 | d3.select(@svg).datum(data).call(@model) 31 | 32 | ### 33 | options: an object hash of chart options. 34 | data: sample data to pass in to initial chart render chart 35 | data2: sample data to pass to second chart render 36 | 37 | This method builds a chart, puts it on the element, and then rebuilds using the second set of data 38 | Useful for testing the results of transitioning and the 'noData' state after a chart has had data 39 | ### 40 | buildover: (options, data, data2)-> 41 | @svg = document.createElement 'svg' 42 | document.querySelector('body').appendChild @svg 43 | 44 | for opt, val of options 45 | unless @model[opt]? 46 | console.warn "#{opt} not property of model." 47 | else 48 | @model[opt](val) 49 | 50 | #Set initial data 51 | chart = d3.select(@svg) 52 | chart.datum(data) 53 | .call(@model) 54 | 55 | #Reset the data 56 | chart.datum(data2) 57 | .call(@model) 58 | 59 | 60 | 61 | # Removes chart from element. 62 | teardown: -> 63 | if @svg? 64 | document.querySelector('body').removeChild @svg 65 | 66 | # Runs a simple CSS selector to retrieve elements 67 | $: (cssSelector)-> 68 | @svg.querySelectorAll cssSelector 69 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/test/node/GruntFile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | grunt.initConfig({ 3 | browserify: { 4 | js: { 5 | src: './nodeTest.js', dest: './build/nodeTest.js', 6 | }, 7 | }, 8 | copy: { 9 | all: { 10 | src: ['../../build/nv.d3.css'], dest: './build/nv.d3.css', 11 | }, 12 | }, 13 | }); 14 | grunt.loadNpmTasks('grunt-browserify'); 15 | grunt.loadNpmTasks('grunt-contrib-copy'); 16 | grunt.registerTask('default', ['browserify', 'copy']); 17 | }; 18 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/test/node/README.md: -------------------------------------------------------------------------------- 1 | Build steps: 2 | 3 | - Build `nvd3`. 4 | - Build the example. 5 | - Start an HTTP server. 6 | 7 | nvd3 $ grunt production 8 | nvd3 $ cd test/node 9 | nvd3/test/node $ npm install . 10 | nvd3/test/node $ grunt 11 | nvd3/test/node $ python -m SimpleHTTPServer 8000 12 | 13 | Browse to `http://localhost:8000/nodeTest.html` 14 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/test/node/nodeTest.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Node Test 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/test/node/nodeTest.js: -------------------------------------------------------------------------------- 1 | window.d3 = require('d3'); 2 | var nv = require('../../build/nv.d3'); 3 | var invariant = require('invariant'); 4 | 5 | window.addEventListener("load", function load(event) { 6 | window.removeEventListener("load", load, false); 7 | invariant(typeof(nv) !== 'undefined', "Cannot resolve NVD3 via CommonJS"); 8 | nv.addGraph(function() { 9 | var chart = nv.models.bulletChart(); 10 | d3.select('#chart svg') 11 | .datum(exampleData()) 12 | .transition().duration(1000) 13 | .call(chart); 14 | return chart; 15 | }); 16 | }, false); 17 | 18 | function exampleData() { 19 | return { 20 | "title":"Revenue", 21 | "subtitle":"US$, in thousands", 22 | "ranges":[150,225,300], 23 | "measures":[220], 24 | "markers":[250] 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/test/node/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node-test", 3 | "version": "0.0.0", 4 | "private": true, 5 | "dependencies": { 6 | "d3": "<=3.4.4", 7 | "invariant": "1.0.2" 8 | }, 9 | "devDependencies": { 10 | "grunt-browserify": "3.3.0", 11 | "grunt-contrib-copy": "~0.4.1" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/test/realTimeChartTest.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 17 |

Example showing real time chart updating

18 | The chart below is a historical bar chart, which is ideal for visualizing time series data.
19 | First, you need to update the data model for the chart. In the example, we append a random number 20 | every half a second. Then, you call chart.update(). 21 | 22 |
23 | 24 | 25 |
26 | 27 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/test/scatterPlusLineChart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 40 | 41 | 42 | 43 |
44 |
45 | 46 |
47 |
48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 120 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/test/stream_layers.js: -------------------------------------------------------------------------------- 1 | 2 | /* Inspired by Lee Byron's test data generator. */ 3 | function stream_layers(n, m, o) { 4 | if (arguments.length < 3) o = 0; 5 | function bump(a) { 6 | var x = 1 / (.1 + Math.random()), 7 | y = 2 * Math.random() - .5, 8 | z = 10 / (.1 + Math.random()); 9 | for (var i = 0; i < m; i++) { 10 | var w = (i / m - y) * z; 11 | a[i] += x * Math.exp(-w * w); 12 | } 13 | } 14 | return d3.range(n).map(function() { 15 | var a = [], i; 16 | for (i = 0; i < m; i++) a[i] = o + o * Math.random(); 17 | for (i = 0; i < 5; i++) bump(a); 18 | return a.map(stream_index); 19 | }); 20 | } 21 | 22 | /* Another layer generator using gamma distributions. */ 23 | function stream_waves(n, m) { 24 | return d3.range(n).map(function(i) { 25 | return d3.range(m).map(function(j) { 26 | var x = 20 * j / m - i / 3; 27 | return 2 * x * Math.exp(-.5 * x); 28 | }).map(stream_index); 29 | }); 30 | } 31 | 32 | function stream_index(d, i) { 33 | return {x: i, y: Math.max(0, d)}; 34 | } 35 | 36 | -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/test/testScript.js: -------------------------------------------------------------------------------- 1 | //A little snippet of D3 code that creates a button that lets you toggle whether a chart is the only one visible on a page or not. 2 | d3.selectAll(".chart button").on("click",function() { 3 | var thisId = this.parentElement.id; 4 | 5 | var chartContainer = d3.select("#" + thisId); 6 | if (chartContainer.attr("class").match("selected")) 7 | chartContainer.classed("selected",false); 8 | else 9 | chartContainer.classed("selected",true); 10 | 11 | d3.selectAll(".chart").style("display",function() { 12 | if (thisId === this.id) return "block"; 13 | 14 | if (d3.select(this).style("display") === "none") 15 | return "block"; 16 | else 17 | return "none"; 18 | }); 19 | window.onresize(); 20 | }); -------------------------------------------------------------------------------- /reporting/packaged/libs/nvd3/test/teststyle.css: -------------------------------------------------------------------------------- 1 | body { 2 | overflow-y:scroll; 3 | font-family: arial; 4 | } 5 | 6 | text { 7 | font: 12px sans-serif; 8 | } 9 | 10 | .chart { 11 | float:left; 12 | height: 500px; 13 | text-align: center; 14 | font-weight: bold; 15 | margin-bottom: 2em; 16 | } 17 | .chart.full { 18 | width: 100%; 19 | } 20 | 21 | .chart.half { 22 | width: 50%; 23 | } 24 | 25 | .chart.third { 26 | width: 33%; 27 | } 28 | 29 | .chart.selected { 30 | width: 100% !important; 31 | } 32 | 33 | .navigation a{ 34 | margin-right: 1em; 35 | } 36 | 37 | .navigation { 38 | margin-bottom: 1em; 39 | } 40 | -------------------------------------------------------------------------------- /reporting/packaged/libs/styles.css: -------------------------------------------------------------------------------- 1 | body 2 | { 3 | width: 1300px; 4 | padding-left: 20px; 5 | } 6 | 7 | svg 8 | { 9 | width: 600px; 10 | height: 400px; 11 | } 12 | 13 | .shadow 14 | { 15 | border: 1px solid #DDD; 16 | border-spacing: 3px; 17 | -webkit-box-shadow: 5px 5px 20px #AAA; 18 | -moz-box-shadow: 5px 5px 20px #AAA; 19 | box-shadow: 5px 5px 20px #AAA; 20 | 21 | } 22 | 23 | .bar, 24 | .circle 25 | { 26 | padding-top: 20px; 27 | padding-right: 20px; 28 | margin-left: 15px; 29 | margin-bottom: 15px; 30 | width: 650px; 31 | height: 450px; 32 | } 33 | 34 | .bar svg 35 | { 36 | padding-top: 15px; 37 | } 38 | 39 | .bar div.nvtooltip { margin-top: 30px; } 40 | 41 | .graphcontainer 42 | { 43 | display: flex; 44 | } 45 | -------------------------------------------------------------------------------- /reporting/packaged/libs/xAPI-Dashboard-development/.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | test.html 3 | node_modules 4 | dist/math.js 5 | -------------------------------------------------------------------------------- /reporting/packaged/libs/xAPI-Dashboard-development/Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | 3 | // Project configuration. 4 | grunt.initConfig({ 5 | pkg: grunt.file.readJSON('package.json'), 6 | jison: { 7 | target: { 8 | options: {moduleName: 'MathParser'}, 9 | files: { 10 | 'dist/math.js': 'src/parsers/math.jison' 11 | } 12 | } 13 | }, 14 | concat: { 15 | dist: { 16 | options: { 17 | separator: ';' 18 | }, 19 | files: { 20 | 'dist/xapidashboard.js': ['lib/d3.v3.js', 'lib/nv.d3.js', 'lib/xapiwrapper.min.js','src/dashboard.js', 'src/chart.js'], 21 | 'dist/xapicollection.js': ['dist/math.js', 'src/xapicollection.js'] 22 | } 23 | } 24 | }, 25 | uglify: { 26 | options: { 27 | banner: '/*! <%= pkg.name %> v<%= pkg.version %> | Built on <%= grunt.template.today("mm-dd-yyyy") %> */\n' 28 | }, 29 | build: { 30 | files: [{ 31 | src: 'dist/xapidashboard.js', 32 | dest: 'dist/xapidashboard.min.js' 33 | },{ 34 | src: 'dist/xapicollection.js', 35 | dest: 'dist/xapicollection.min.js' 36 | }] 37 | } 38 | } 39 | }); 40 | 41 | // Load the plugin that provides the "uglify" task. 42 | grunt.loadNpmTasks('grunt-jison'); 43 | grunt.loadNpmTasks('grunt-contrib-concat'); 44 | grunt.loadNpmTasks('grunt-contrib-uglify'); 45 | 46 | // Default task(s). 47 | grunt.registerTask('default', ['jison', 'concat', 'uglify']); 48 | 49 | }; 50 | -------------------------------------------------------------------------------- /reporting/packaged/libs/xAPI-Dashboard-development/examples/computation.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Collection Computation 5 | 6 | 7 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /reporting/packaged/libs/xAPI-Dashboard-development/examples/liveUpdate/index.css: -------------------------------------------------------------------------------- 1 | 2 | html { 3 | height: 100%; 4 | } 5 | 6 | body { 7 | margin: 0; 8 | display: flex; 9 | flex-direction: row; 10 | height: 100%; 11 | } 12 | 13 | p{ 14 | margin: 3px 0; 15 | } 16 | 17 | .container { 18 | padding: 10px; 19 | display: flex; 20 | flex-wrap: wrap; 21 | justify-content: center; 22 | align-content: flex-start; 23 | text-align: center; 24 | } 25 | 26 | .sidebar { 27 | padding: 10px; 28 | width: 20%; 29 | min-width: 200px; 30 | background-color: whitesmoke; 31 | } 32 | .sidebar span { 33 | display: block; 34 | color: blue; 35 | cursor: pointer; 36 | padding-left: 10px; 37 | text-indent: -10px; 38 | } 39 | .sidebar span:hover { 40 | text-decoration: underline; 41 | } 42 | 43 | .sidebar .active, .item-name { 44 | font-weight: bold; 45 | } 46 | 47 | .list { 48 | margin: 20px; 49 | width: 400px; 50 | } -------------------------------------------------------------------------------- /reporting/packaged/libs/xAPI-Dashboard-development/examples/liveUpdate/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 |
13 |

{{list.name}}

14 |

{{list.description}}

15 | {{list.caveat}}
16 |
    17 |
  1. 18 | {{item.name}} 19 | - {{item.value | number}} {{list.quality + (item.value!=1 ? 's' : '')}} ({{item.date | date : 'MMM dd'}}) 20 |
  2. 21 |
22 |

No Data

23 |
24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /reporting/packaged/libs/xAPI-Dashboard-development/examples/preprocessed.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Live LRS Demo 5 | 6 | 7 | 8 | 9 | 27 | 28 | 29 | 30 |
31 |
32 | 33 |
34 |
35 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /reporting/packaged/libs/xAPI-Dashboard-development/examples/process.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | xAPI Dashboard 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 24 | 25 | 26 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /reporting/packaged/libs/xAPI-Dashboard-development/examples/simpletable.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Sample Table 5 | 6 | 7 | 8 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 53 | 54 |
NameTest 1Test 2Test 3Test 4FinalAverage
46 | 47 | 48 | 49 | 50 | 51 | 52 |
55 | 56 | 57 | -------------------------------------------------------------------------------- /reporting/packaged/libs/xAPI-Dashboard-development/extra/chart_final.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adlnet/Intro-to-xAPI-Data-Visualization/a44d3a1fd8d96566fe3c6ec869702251daa23d3d/reporting/packaged/libs/xAPI-Dashboard-development/extra/chart_final.png -------------------------------------------------------------------------------- /reporting/packaged/libs/xAPI-Dashboard-development/extra/chart_initial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adlnet/Intro-to-xAPI-Data-Visualization/a44d3a1fd8d96566fe3c6ec869702251daa23d3d/reporting/packaged/libs/xAPI-Dashboard-development/extra/chart_initial.png -------------------------------------------------------------------------------- /reporting/packaged/libs/xAPI-Dashboard-development/generateData/compress.js: -------------------------------------------------------------------------------- 1 | var uglify = require('uglify-js2'), 2 | lz = require('lz-string'); 3 | 4 | var data = ''; 5 | process.stdin.on('readable', function(){ 6 | var chunk = process.stdin.read(); 7 | if(chunk) 8 | data += chunk; 9 | }); 10 | 11 | process.stdin.on('end', function(){ 12 | var stmts = JSON.parse(data); 13 | var lib = uglify.minify('lz-string-1.3.3.js'); 14 | var output = lib.code+'window.statements=JSON.parse(LZString.decompressFromBase64("'+lz.compressToBase64(JSON.stringify(stmts))+'"));'; 15 | process.stdout.write(output); 16 | }); 17 | -------------------------------------------------------------------------------- /reporting/packaged/libs/xAPI-Dashboard-development/generateData/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "generateData", 3 | "version": "0.0.0", 4 | "description": "", 5 | "main": "getStatements.js", 6 | "dependencies": { 7 | "lz-string": "~1.3.3", 8 | "request": "~2.34.0", 9 | "uglify-js2": "~2.1.11" 10 | }, 11 | "devDependencies": {}, 12 | "scripts": { 13 | "test": "echo \"Error: no test specified\" && exit 1" 14 | }, 15 | "author": "", 16 | "license": "BSD" 17 | } 18 | -------------------------------------------------------------------------------- /reporting/packaged/libs/xAPI-Dashboard-development/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "xAPI-Dashboard", 3 | "version": "1.2.1", 4 | "devDependencies": { 5 | "grunt": "~0.4.2", 6 | "grunt-contrib-jshint": "~0.6.3", 7 | "grunt-contrib-nodeunit": "~0.2.0", 8 | "grunt-contrib-uglify": "~0.2.2", 9 | "grunt-contrib-concat": "~0.4.0", 10 | "grunt-jison": "~1.3.1" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /reporting/packaged/libs/xAPI-Dashboard-development/wizard/style.css: -------------------------------------------------------------------------------- 1 | html, body{ 2 | height: 100%; 3 | width: 100%; 4 | margin: 0; 5 | padding: 0; 6 | } 7 | 8 | h1{ 9 | text-align:center; 10 | margin-top:0; 11 | } 12 | 13 | ul{ 14 | padding: 0; 15 | text-align: left; 16 | } 17 | 18 | ul li a{ 19 | color: black; 20 | } 21 | 22 | pre{ 23 | width: 100%; 24 | height: 270px !important; 25 | } 26 | 27 | #verbs{ 28 | height: 95%; 29 | } 30 | 31 | #container{ 32 | height: 100%; 33 | } 34 | 35 | #graphContainer{ 36 | height: 80%; 37 | } 38 | 39 | .sidebar{ 40 | 41 | float:left; 42 | width:12%; 43 | background-color: #79A3C7; 44 | height: 100%; 45 | margin: 0; 46 | padding : 20px; 47 | border-right: 1px solid #4D94D1; 48 | display:block; 49 | } 50 | 51 | .side-element{ 52 | border-bottom: 1px solid #9CB6CC; 53 | text-align:center; 54 | padding: 15px 0; 55 | } 56 | 57 | .main{ 58 | 59 | float:right; 60 | width:88%; 61 | margin:0; 62 | height: 100%; 63 | } 64 | 65 | .default-header{ 66 | text-align: center; 67 | color: #aaa; 68 | } 69 | 70 | .chart-footer{ 71 | 72 | width: 100%; 73 | background-color: #eee; 74 | border-top: 1px solid #DFDFDF; 75 | float: left; 76 | height: 20%; 77 | } 78 | 79 | .modal-body{ 80 | min-height: 300px; 81 | } 82 | 83 | .modal-body > *{ 84 | margin:15px auto; 85 | float:left; 86 | clear:both; 87 | min-width: 40%; 88 | height: 30px; 89 | } 90 | 91 | .placeholder{ 92 | display:none; 93 | } 94 | 95 | .key{ 96 | color: #428BCA; 97 | text-decoration: underline; 98 | } 99 | .key:hover{ 100 | cursor: pointer; 101 | } 102 | 103 | .single-option{ 104 | border-bottom: 1px solid #D8D8D8; 105 | text-align: center; 106 | padding: 13px; 107 | } -------------------------------------------------------------------------------- /reporting/packaged/libs/xAPI-Dashboard-development/wizard/themes/prism.css: -------------------------------------------------------------------------------- 1 | /* http://prismjs.com/download.html?themes=prism&languages=clike+javascript */ 2 | /** 3 | * prism.js default theme for JavaScript, CSS and HTML 4 | * Based on dabblet (http://dabblet.com) 5 | * @author Lea Verou 6 | */ 7 | 8 | code[class*="language-"], 9 | pre[class*="language-"] { 10 | color: black; 11 | text-shadow: 0 1px white; 12 | font-family: Consolas, Monaco, 'Andale Mono', monospace; 13 | direction: ltr; 14 | text-align: left; 15 | white-space: pre; 16 | word-spacing: normal; 17 | word-break: normal; 18 | 19 | 20 | -moz-tab-size: 4; 21 | -o-tab-size: 4; 22 | tab-size: 4; 23 | 24 | -webkit-hyphens: none; 25 | -moz-hyphens: none; 26 | -ms-hyphens: none; 27 | hyphens: none; 28 | } 29 | 30 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, 31 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { 32 | text-shadow: none; 33 | background: #b3d4fc; 34 | } 35 | 36 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection, 37 | code[class*="language-"]::selection, code[class*="language-"] ::selection { 38 | text-shadow: none; 39 | background: #b3d4fc; 40 | } 41 | 42 | @media print { 43 | code[class*="language-"], 44 | pre[class*="language-"] { 45 | text-shadow: none; 46 | } 47 | } 48 | 49 | /* Code blocks */ 50 | pre[class*="language-"] { 51 | padding: 1em; 52 | margin: .5em 0; 53 | overflow: auto; 54 | } 55 | 56 | :not(pre) > code[class*="language-"], 57 | pre[class*="language-"] { 58 | background: #f5f2f0; 59 | } 60 | 61 | /* Inline code */ 62 | :not(pre) > code[class*="language-"] { 63 | padding: .1em; 64 | border-radius: .3em; 65 | } 66 | 67 | .token.comment, 68 | .token.prolog, 69 | .token.doctype, 70 | .token.cdata { 71 | color: slategray; 72 | } 73 | 74 | .token.punctuation { 75 | color: #999; 76 | } 77 | 78 | .namespace { 79 | opacity: .7; 80 | } 81 | 82 | .token.property, 83 | .token.tag, 84 | .token.boolean, 85 | .token.number, 86 | .token.constant, 87 | .token.symbol { 88 | color: #905; 89 | } 90 | 91 | .token.selector, 92 | .token.attr-name, 93 | .token.string, 94 | .token.builtin { 95 | color: #690; 96 | } 97 | 98 | .token.operator, 99 | .token.entity, 100 | .token.url, 101 | .language-css .token.string, 102 | .style .token.string, 103 | .token.variable { 104 | color: #a67f59; 105 | background: hsla(0,0%,100%,.5); 106 | } 107 | 108 | .token.atrule, 109 | .token.attr-value, 110 | .token.keyword { 111 | color: #07a; 112 | } 113 | 114 | 115 | .token.regex, 116 | .token.important { 117 | color: #e90; 118 | } 119 | 120 | .token.important { 121 | font-weight: bold; 122 | } 123 | 124 | .token.entity { 125 | cursor: help; 126 | } 127 | 128 | -------------------------------------------------------------------------------- /reporting/searchable.md: -------------------------------------------------------------------------------- 1 | # Reporting 2 | 3 | 4 | ## Searchable Properties in a Statement 5 | The following table lists the properties of a statement that can be used to query the LRS. See the xAPI spec [for more details](https://github.com/adlnet/xAPI-Spec/blob/master/xAPI-Communication.md#213-get-statements). 6 | 7 | ### id 8 | >__GET Params:__ statementId 9 | >__Example:__ /statements?statementId=9847e454-6ae7-4d00-ba6b-04f209171de6 10 | >__GET Params:__ voidedStatementId 11 | >__Example:__ /statements?voidedStatementId=9847e454-6ae7-4d00-ba6b-04f209171de6 12 | 13 | ### actor/object 14 | >__GET Params:__ agent 15 | >__Example:__ /statements?agent={"mbox":"mailto:learner@example.com"} 16 | 17 | ### verb 18 | >__GET Params:__ verb 19 | >__Example:__ /statements?verb=http://adlnet.gov/expapi/verbs/experienced 20 | 21 | ### object (when it is an Activity) 22 | >__GET Params:__ activity 23 | >__Example:__ /statements?activity=http://adlnet.gov/event/xapiworkshop/tecom/guess-the-number 24 | 25 | ### stored 26 | >__GET Params:__ since or until 27 | >__Example:__ /statements?since=2015-07-02T11:59:19.353Z 28 | >__NOTE:__ since parameter is exclusive, until parameter is inclusive 29 | 30 | ### context properties 31 | #### registration 32 | >__GET Params:__ registration 33 | >__Example:__ /statements?registration=9bb3f7a2-91eb-44a4-ac18-761b11160292 34 | 35 | #### instructor or team 36 | >__GET Params:__ agent and related_agents 37 | >__Example:__ /statements?agent={"mbox":"mailto:learner@example.com"}&related_agents=true 38 | 39 | #### contextActivities 40 | >__GET Params:__ activity and related_activities 41 | >__Example:__ /statements?activity=http://adlnet.gov/event/xapibootcamp/tecom&related_activities=true 42 | 43 | ### authority 44 | >__GET Params:__ agent and related_agents 45 | 46 | >__Example:__ /statements?agent={"mbox":"mailto:admin@example.com"}&related_agents=true 47 | --------------------------------------------------------------------------------