diff --git a/.gitignore b/.gitignore
index 93425f66..6f35ad76 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,7 @@ node_modules
/slush-dashboard
/slush-map
/slush-cards
+.idea/modules.xml
+.idea/slush-marklogic-node.iml
+.idea/vcs.xml
+.idea/workspace.xml
diff --git a/app/themes/dashboard/ui/app/landing/charts.service.js b/app/themes/dashboard/ui/app/landing/charts.service.js
new file mode 100644
index 00000000..36d1d30b
--- /dev/null
+++ b/app/themes/dashboard/ui/app/landing/charts.service.js
@@ -0,0 +1,185 @@
+(function () {
+ 'use strict';
+
+ angular.module('app.landing')
+ .factory('chartsService', ChartsService);
+
+ ChartsService.$inject = [];
+ function ChartsService() {
+
+ function top10Chart(title, type, xFacet, xLabel, limit, callback) {
+ return {
+ options: {
+ chart: {
+ type: type,
+ zoomType: 'xy'
+ },
+ tooltip: {
+ style: {
+ padding: 10,
+ fontWeight: 'bold'
+ },
+ shared: true,
+ crosshairs: true,
+ headerFormat: '{series.name}
',
+ pointFormatter: /* istanbul ignore next Unreachable */ function() {
+ return (this.xCategory || this.x) + ': ' + (this.yCategory || this.y) + '
';
+ }
+ },
+ legend: {
+ enabled: false
+ },
+ plotOptions: {
+ series: {
+ cursor: 'pointer',
+ point: {
+ events: {
+ click: function (e) {
+ var facet = this.series.name;
+ var x = this.xCategory || this.x;
+ var y = this.yCategory || this.y;
+ if (callback) callback(facet, x, y);
+ }
+ }
+ }
+ }
+ }
+ },
+ title: {
+ text: title
+ },
+
+ xAxis: {
+ title: {
+ text: xLabel
+ },
+ labels: (type !== 'bar' ? {
+ rotation: -45
+ } : {})
+ },
+ // constraint name for x axis
+ //xAxisMLConstraint: xFacet,
+ // optional constraint name for categorizing x axis values
+ xAxisCategoriesMLConstraint: xFacet,
+
+ // grouping results
+ //seriesNameMLConstraint: yFacet,
+ //dataPointNameMLConstraint: yFacet,
+
+ yAxis: {
+ title: {
+ text: 'Frequency'
+ }
+ },
+ // constraint name for y axis ($frequency is special value for value/tuple frequency)
+ yAxisMLConstraint: '$frequency',
+
+ // zAxis: {
+ // title: {
+ // text: null
+ // }
+ // },
+ //zAxisMLConstraint: '$frequency',
+ // limit of returned results
+
+ size: {
+ height: 250
+ },
+ resultLimit: limit || /* istanbul ignore next Unreachable */ 10,
+ credits: {
+ enabled: true
+ }
+ };
+ }
+
+ function top10Chartv2(title, type, xFacet, xLabel, yFacet, yLabel, limit, callback) {
+ return {
+ options: {
+ chart: {
+ type: type,
+ zoomType: 'xy'
+ },
+ tooltip: {
+ style: {
+ padding: 10,
+ fontWeight: 'bold'
+ },
+ shared: false,
+ split: true,
+ crosshairs: true,
+ headerFormat: '{series.name}
',
+ pointFormatter: /* istanbul ignore next Unreachable */ function() {
+ return (this.xCategory || this.x) + ': ' + (this.yCategory || this.y) + '
';
+ }
+ },
+ legend: {
+ enabled: true
+ },
+ plotOptions: {
+ series: {
+ cursor: 'pointer',
+ point: {
+ events: {
+ click: function (e) {
+ var facet = this.series.name;
+ var x = this.xCategory || this.x;
+ var y = this.yCategory || this.y;
+ if (callback) callback(facet, x, y);
+ }
+ }
+ }
+ }
+ }
+ },
+ title: {
+ text: title
+ },
+
+ xAxis: {
+ title: {
+ text: xLabel
+ },
+ labels: (type !== 'bar' ? {
+ rotation: -45
+ } : /* istanbul ignore next Unreachable */ {})
+ },
+ // constraint name for x axis
+ // xAxisMLConstraint: xFacet,
+ // optional constraint name for categorizing x axis values
+ xAxisCategoriesMLConstraint: xFacet,
+
+ // grouping results
+ seriesNameMLConstraint: yFacet,
+ //dataPointNameMLConstraint: yFacet,
+
+ yAxis: {
+ title: {
+ text: 'Frequency'
+ }
+ },
+ // constraint name for y axis ($frequency is special value for value/tuple frequency)
+ yAxisMLConstraint: '$frequency',
+
+ // zAxis: {
+ // title: {
+ // text: null
+ // }
+ // },
+ //zAxisMLConstraint: '$frequency',
+
+ size: {
+ height: 250
+ },
+ resultLimit: 0,
+ credits: {
+ enabled: true
+ }
+ };
+ }
+
+ return {
+ top10Chart: top10Chart,
+ top10Chartv2: top10Chartv2
+ };
+ }
+}());
diff --git a/app/themes/dashboard/ui/app/landing/landing.controller.js b/app/themes/dashboard/ui/app/landing/landing.controller.js
index 1293830f..813dc83f 100644
--- a/app/themes/dashboard/ui/app/landing/landing.controller.js
+++ b/app/themes/dashboard/ui/app/landing/landing.controller.js
@@ -4,16 +4,16 @@
angular.module('app.landing')
.controller('LandingCtrl', LandingCtrl);
- LandingCtrl.$inject = ['$scope', 'userService', 'MLSearchFactory'];
+ LandingCtrl.$inject = ['$scope', 'userService', 'MLSearchFactory', 'chartsService'];
- function LandingCtrl($scope, userService, searchFactory) {
+ function LandingCtrl($scope, userService, searchFactory, chartsService) {
var ctrl = this;
angular.extend(ctrl, {
- eyeColor: top10Chart('Eye Color', 'pie', 'eyeColor', 'Eye Color', 50),
- gender: top10Chart('Gender', 'bar', 'gender', 'Gender', 50),
- combined: top10Chartv2('Eye Color vs Gender', 'column', 'eyeColor', 'Eye Color',
+ eyeColor: chartsService.top10Chart('Eye Color', 'pie', 'eyeColor', 'Eye Color', 50),
+ gender: chartsService.top10Chart('Gender', 'bar', 'gender', 'Gender', 50),
+ combined: chartsService.top10Chartv2('Eye Color vs Gender', 'column', 'eyeColor', 'Eye Color',
'gender', 'Gender')
});
@@ -30,143 +30,4 @@
}
- function top10Chart(title, type, xFacet, xLabel, limit) {
- return {
- options: {
- chart: {
- type: type,
- zoomType: 'xy'
- },
- tooltip: {
- style: {
- padding: 10,
- fontWeight: 'bold'
- },
- shared: true,
- crosshairs: true,
- headerFormat: '{series.name}
',
- pointFormatter: /* istanbul ignore next Unreachable */ function() {
- return (this.xCategory || this.x) + ': ' + (this.yCategory || this.y) + '
';
- }
- },
- legend: {
- enabled: false
- }
- },
- title: {
- text: title
- },
-
- xAxis: {
- title: {
- text: xLabel
- },
- labels: (type !== 'bar' ? {
- rotation: -45
- } : {})
- },
- // constraint name for x axis
- //xAxisMLConstraint: xFacet,
- // optional constraint name for categorizing x axis values
- xAxisCategoriesMLConstraint: xFacet,
-
- // grouping results
- //seriesNameMLConstraint: yFacet,
- //dataPointNameMLConstraint: yFacet,
-
- yAxis: {
- title: {
- text: 'Frequency'
- }
- },
- // constraint name for y axis ($frequency is special value for value/tuple frequency)
- yAxisMLConstraint: '$frequency',
-
- // zAxis: {
- // title: {
- // text: null
- // }
- // },
- //zAxisMLConstraint: '$frequency',
- // limit of returned results
-
- size: {
- height: 250
- },
- resultLimit: limit || /* istanbul ignore next Unreachable */ 10,
- credits: {
- enabled: true
- }
- };
- }
-
- function top10Chartv2(title, type, xFacet, xLabel, yFacet, yLabel, limit) {
- return {
- options: {
- chart: {
- type: type,
- zoomType: 'xy'
- },
- tooltip: {
- style: {
- padding: 10,
- fontWeight: 'bold'
- },
- shared: false,
- split: true,
- crosshairs: true,
- headerFormat: '{series.name}
',
- pointFormatter: /* istanbul ignore next Unreachable */ function() {
- return (this.xCategory || this.x) + ': ' + (this.yCategory || this.y) + '
';
- }
- },
- legend: {
- enabled: true
- }
- },
- title: {
- text: title
- },
-
- xAxis: {
- title: {
- text: xLabel
- },
- labels: (type !== 'bar' ? {
- rotation: -45
- } : /* istanbul ignore next Unreachable */ {})
- },
- // constraint name for x axis
- // xAxisMLConstraint: xFacet,
- // optional constraint name for categorizing x axis values
- xAxisCategoriesMLConstraint: xFacet,
-
- // grouping results
- seriesNameMLConstraint: yFacet,
- //dataPointNameMLConstraint: yFacet,
-
- yAxis: {
- title: {
- text: 'Frequency'
- }
- },
- // constraint name for y axis ($frequency is special value for value/tuple frequency)
- yAxisMLConstraint: '$frequency',
-
- // zAxis: {
- // title: {
- // text: null
- // }
- // },
- //zAxisMLConstraint: '$frequency',
-
- size: {
- height: 250
- },
- resultLimit: 0,
- credits: {
- enabled: true
- }
- };
- }
}());