diff --git a/ng-dashboard-0.0.1.js b/ng-dashboard-0.0.1.js index fc154cb..ac90ae4 100644 --- a/ng-dashboard-0.0.1.js +++ b/ng-dashboard-0.0.1.js @@ -123,8 +123,10 @@ } }); }, - template: '

{{groupData.title}}

' + - '' + template: '
' + + '

{{groupData.title}}

' + + '' + + '
' }; } ]); diff --git a/ng-dashboard-0.0.1.min.js b/ng-dashboard-0.0.1.min.js index c7c220a..e14756d 100644 --- a/ng-dashboard-0.0.1.min.js +++ b/ng-dashboard-0.0.1.min.js @@ -1 +1 @@ -(function(i){var r=i.module("ngDashboard",[]);r.factory("invokeIfDefined",function(){return function(r,e,n){if(i.isDefined(r[n])){e[n](r[n])}}})})(angular);(function(i,r){var e=i.module("ngDashboard");e.provider("widgetGroupLayout",[function(){var r={};this.registerLayoutManager=function(i,e){r[i]=e};this.$get=["$injector",function(e){i.forEach(r,function(i){if(i.initialize){e.invoke(i.initialize,i)}});return{handleLayout:function(i,e){var n=e.layout&&e.layout.type?e.layout.type:"flow";if(!r[n]){throw"No LayoutManager "+n+" registered"}r[n].layout(i,e)}}}]}]);e.directive("widgetGroup",["widgetGroupLayout",function(e){return{restrict:"E",scope:{groupData:"=groupData"},controller:["$scope","$http","crossfilterUtils",function(e,t,o){var a=[],s=false;this.registerWidgetInitializer=function(i){if(s){i(e.crossFilter,e.namedGroups)}else{a.push(i)}};function u(){s=true;for(var i in a){a[i](e.crossFilter,e.namedGroups)}a.length=0}if(i.isArray(e.groupData.data)){e.crossFilter=r(e.groupData.data);e.namedGroups=n(e.groupData.groups,e.crossFilter,o);u()}else if(i.isString(e.groupData.dataUrl)){t({method:"GET",url:e.groupData.dataUrl}).success(function(i){e.crossFilter=r(i);e.namedGroups=n(e.groupData.groups,e.crossFilter,o);u()}).error(function(i){throw i})}else{u()}}],link:function(i,r){r.addClass("widget-group");var n=i.$watch("groupData",function(i){if(i){e.handleLayout(r,i);n()}})},template:'

{{groupData.title}}

'+''}}]);function n(r,e,n){if(r&&e){var t={};i.forEach(r,function(i,r){if(!i.dimension){throw"A dimension is required for named groups"}if(!i.group){throw"A group is required for named groups"}var o=n.dimensionFunction(i.dimension);var a=e.dimension(o);var s=n.groupFunctions(i.group);var u=a.group().reduce(s.add,s.remove,s.init);t[r]={dimension:a,group:u}});return t}}})(angular,crossfilter);(function(i){var r=i.module("ngDashboard");function e(i){this.widgetProviders=i}e.prototype.createWidget=function(i,r,e){if(!this.widgetProviders[r]){throw"No widget with "+r+" registered"}return this.widgetProviders[r].createWidget(i,e)};r.provider("widgetFactory",[function(){var r={};var n={};this.registerWidgetProvider=function(i,e){r[i]=e};this.registerChartMixin=function(i,r){n[i]=r};this.$get=["$injector",function(t){i.forEach(n,function(i){if(i.initialize){t.invoke(i.initialize,i)}});i.forEach(r,function(i){if(i.initialize){t.invoke(i.initialize,i,n)}});return new e(r)}]}]);r.directive("widget",["widgetFactory",function(i){return{restrict:"E",scope:{widgetData:"=widgetData",crossFilter:"=crossFilter"},require:"^widgetGroup",link:function(r,e,t,o){var a,s;e.addClass("widget");o.registerWidgetInitializer(function(t,o){var u=e.find("widget-body");a=n(u,i,{crossfilter:t,namedGroups:o,rawData:r.widgetData});if(r.widgetData.overlays){s=[];for(var c in r.widgetData.overlays){var d=n(u,i,{crossfilter:t,namedGroups:o,rawData:r.widgetData.overlays[c]});s.push(d)}}})},templateUrl:"./template/widget.html"}}]);function n(i,r,e){return r.createWidget(i,e.rawData.type,e)}})(angular);(function(i){var r=i.module("ngDashboard");var e=/^([^\(]*)\(([^\)]*)\).*$/;r.factory("widgetExpressionParser",["$parse",function(i){return{parse:function(r){var n=e.exec(r);var t=n[1];var o=i(n[2]);return{functionName:t,parameters:o}},valueFunction:function(r,e){var n=i(r);var t=e?e:"d";function o(i){var r={};r[t]=i;var e=n(r);return e}return o}}}])})(angular);(function(i){var r=i.module("ngDashboard");r.provider("scaleParser",[function(){var r={};this.registerScaleProvider=function(i,e){r[i]=e};this.$get=["$injector",function(n){i.forEach(r,function(i){if(i.initialize){n.invoke(i.initialize,i)}});return new e(r)}]}]);function e(i){this.scaleProviders=i}e.prototype.parse=function(i){if(!this.scaleProviders[i.type]){throw"No scaleprovider "+i.type+" registered"}return this.scaleProviders[i.type].createScale(i.parameters)}})(angular);(function(i){var r=i.module("ngDashboard");r.provider("crossfilterUtils",[function(){var r={};this.addGroupFunctionProvider=function(i,e){r[i]=e};this.$get=["widgetExpressionParser","$injector",function(e,n){i.forEach(r,function(i){if(i.initialize){n.invoke(i.initialize,i)}});return{dimensionFunction:function(i){if(!i){throw"Expression is required to create crossfilter dimension"}return e.valueFunction(i)},groupFunctions:function(i){if(!i){throw"Expression is required to create crossfilter group"}if(!r[i.type]){throw"No groupfunction provider for "+i.type+" registered"}return r[i.type].buildGroup(i.parameters,i.debug)},getDistinctValuesFromDimension:function(i){if(!i){return[]}var r=i.group();var e=r.all();var n=[];if(e){for(var t in e){n.push(e[t].key)}}r.dispose();return n}}}]}])})(angular);(function(i){var r=i.module("ngDashboard");r.config(["widgetFactoryProvider",function(i){i.registerWidgetProvider("barchart",new e)}]);function e(){}e.prototype.initialize=["baseChartMixin","coordinateGridMixin","marginMixin","stackMixin","invokeIfDefined","colorMixin",function(i,r,e,n,t,o){this.baseChartMixin=i;this.coordinateGridMixin=r;this.invokeIfDefined=t;this.marginMixin=e;this.stackMixin=n;this.colorMixin=o}];e.prototype.createWidget=function(i,r){var e=dc.barChart(i[0]);var n=this.invokeIfDefined;var t=r.rawData;this.baseChartMixin.configureChart(e,r);this.stackMixin.configureChart(e,r);this.coordinateGridMixin.configureChart(e,r);this.marginMixin.configureChart(e,r);this.colorMixin.configureChart(e,r);n(t,e,"outerPadding");n(t,e,"gap");e.render();return e}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["widgetFactoryProvider",function(i){i.registerWidgetProvider("boxPlot",new e)}]);function e(){}e.prototype.initialize=["baseChartMixin","coordinateGridMixin","marginMixin","colorMixin",function(i,r,e,n){this.baseChartMixin=i;this.coordinateGridMixin=r;this.marginMixin=e;this.colorMixin=n}];e.prototype.createWidget=function(i,r){var e=dc.boxPlot(i[0]);this.baseChartMixin.configureChart(e,r);this.coordinateGridMixin.configureChart(e,r);this.marginMixin.configureChart(e,r);this.colorMixin.configureChart(e,r);e.render();return e}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["widgetFactoryProvider",function(i){i.registerWidgetProvider("heatmap",new e)}]);function e(){}e.prototype.initialize=["baseChartMixin","coordinateGridMixin","marginMixin","colorMixin","invokeIfDefined",function(i,r,e,n,t){this.baseChartMixin=i;this.coordinateGridMixin=r;this.invokeIfDefined=t;this.marginMixin=e;this.colorMixin=n}];e.prototype.createWidget=function(i,r){var e=dc.heatMap(i[0]);this.baseChartMixin.configureChart(e,r);this.coordinateGridMixin.configureChart(e,r);this.marginMixin.configureChart(e,r);this.colorMixin.configureChart(e,r);e.render();return e}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["widgetFactoryProvider",function(i){i.registerWidgetProvider("linechart",new e)}]);function e(){}e.prototype.initialize=["baseChartMixin","coordinateGridMixin","marginMixin","stackMixin","invokeIfDefined","colorMixin",function(i,r,e,n,t,o){this.baseChartMixin=i;this.coordinateGridMixin=r;this.invokeIfDefined=t;this.marginMixin=e;this.stackMixin=n;this.colorMixin=o}];e.prototype.createWidget=function(i,r){var e=dc.lineChart(i[0]);this.baseChartMixin.configureChart(e,r);this.stackMixin.configureChart(e,r);this.coordinateGridMixin.configureChart(e,r);this.marginMixin.configureChart(e,r);this.colorMixin.configureChart(e,r);this.invokeIfDefined(r.rawData,e,"renderArea");this.invokeIfDefined(r.rawData,e,"renderDataPoints");this.invokeIfDefined(r.rawData,e,"interpolate");e.render();return e}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["widgetFactoryProvider",function(i){i.registerWidgetProvider("piechart",new e)}]);function e(){}e.prototype.initialize=["baseChartMixin","invokeIfDefined","colorMixin",function(i,r,e){this.baseChartMixin=i;this.invokeIfDefined=r;this.colorMixin=e}];e.prototype.createWidget=function(i,r){var e=dc.pieChart(i[0]);var n=this.invokeIfDefined;var t=r.rawData;this.baseChartMixin.configureChart(e,r);this.colorMixin.configureChart(e,r);n(t,e,"slicesCap");n(t,e,"innerRadius");n(t,e,"radius");n(t,e,"cx");n(t,e,"cy");n(t,e,"minAngleForLabel");e.render();return e}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["scaleParserProvider",function(i){i.registerScaleProvider("linear",new e)}]);function e(){}e.prototype.initialize=["invokeIfDefined",function(i){this.invokeIfDefined=i}];e.prototype.createScale=function(i){var r=d3.scale.linear();var e=this.invokeIfDefined;if(i){e(i,r,"domain");e(i,r,"range");e(i,r,"rangeRound");e(i,r,"clamp");e(i,r,"ticks")}return r}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["widgetFactoryProvider",function(i){i.registerChartMixin("baseChartMixin",new e)}]);function e(){}e.prototype.initialize=["invokeIfDefined","widgetExpressionParser","crossfilterUtils",function(i,r,e){this.invokeIfDefined=i;this.widgetExpressionParser=r;this.crossfilterUtils=e}];e.prototype.configureChart=function(i,r){var e=r.rawData;var n=this.invokeIfDefined;var t=this.buildDimension(r);var o=this.buildGroup(t,r);i.dimension(t);if(e.namedGroup&&e.namedGroup.name){i.group(o,e.namedGroup.name)}else if(e.group&&e.group.name){i.group(o,e.group.name)}else{i.group(o)}n(e,i,"width");n(e,i,"minWidth");n(e,i,"height");n(e,i,"minHeight");n(e,i,"transitionDuration");n(e,i,"renderLabel");n(e,i,"renderTitle");if(e.data){i.data(this.widgetExpressionParser.valueFunction(e.data,"group"))}if(e.keyAccessor){i.keyAccessor(this.widgetExpressionParser.valueFunction(e.keyAccessor))}if(e.valueAccessor){i.valueAccessor(this.widgetExpressionParser.valueFunction(e.valueAccessor))}if(e.titleAccessor){i.title(this.widgetExpressionParser.valueFunction(e.titleAccessor))}if(e.labelAccessor){i.label(this.widgetExpressionParser.valueFunction(e.labelAccessor))}this.setupLegend(i,e.legend)};e.prototype.setupLegend=function(i,r){if(!r){return}var e=this.invokeIfDefined;var n=dc.legend();e(r,n,"x");e(r,n,"y");e(r,n,"gap");e(r,n,"itemHeight");e(r,n,"horizontal");e(r,n,"legendWidth");e(r,n,"itemWidth");i.legend(n)};e.prototype.buildDimension=function(i){if(i.rawData.namedGroup){var r=i.rawData.namedGroup.group;if(!i.namedGroups||!i.namedGroups[r]){throw"No named group "+r+" defined"}return i.namedGroups[r].dimension}else{var e=i.crossfilter;var n=this.crossfilterUtils.dimensionFunction(i.rawData.dimension);return e.dimension(n)}};e.prototype.buildGroup=function(i,r){if(r.rawData.namedGroup){var e=r.rawData.namedGroup.group;if(!r.namedGroups||!r.namedGroups[e]){throw"No named group "+e+" defined"}return r.namedGroups[e].group}else{var n=this.crossfilterUtils.groupFunctions(r.rawData.group);return i.group().reduce(n.add,n.remove,n.init)}}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["widgetFactoryProvider",function(i){i.registerChartMixin("colorMixin",new e)}]);function e(){}e.prototype.initialize=["invokeIfDefined","$parse","scaleParser",function(i,r,e){this.invokeIfDefined=i;this.$parse=r;this.scaleParser=e}];e.prototype.configureChart=function(i,r){var e=r.rawData;var t=this.invokeIfDefined;t(e,i,"colorDomain");t(e,i,"linearColors");t(e,i,"ordinalColors");if(e.colors){i.colors(this.scaleParser.parse(e.colors))}if(e.colorAccessor){i.colorAccessor(n(this.$parse(e.colorAccessor)))}if(e.calculateColorDomain){i.calculateColorDomain()}};function n(i){function r(r,e){return i({d:r,i:e})}return r}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["widgetFactoryProvider",function(i){i.registerChartMixin("coordinateGridMixin",new e)}]);function e(){}e.prototype.initialize=["scaleParser","invokeIfDefined","unitsParser",function(i,r,e){this.scaleParser=i;this.invokeIfDefined=r;this.unitsParser=e}];e.prototype.configureChart=function(i,r){var e=this.invokeIfDefined;var n=r.rawData;if(n.x){i.x(this.scaleParser.parse(n.x))}e(n,i,"yAxisPadding");e(n,i,"yAxisLabel");e(n,i,"brushOn");e(n,i,"elasticX");e(n,i,"elasticY");e(n,i,"mouseZoomable");e(n,i,"renderHorizontalGridLines");e(n,i,"renderVerticalGridLines");if(n.xUnits){i.xUnits(this.unitsParser.parse(n.xUnits))}if(n.xAxis){this.configureAxis(i.xAxis(),n.xAxis)}if(n.yAxis){this.configureAxis(i.yAxis(),n.yAxis)}};e.prototype.configureAxis=function(i,r){var e=this.invokeIfDefined;e(r,i,"orient");e(r,i,"ticks");e(r,i,"tickValues");e(r,i,"tickSize");e(r,i,"innerTickSize");e(r,i,"outerTickSize");e(r,i,"tickPadding");if(r.tickFormat){i.tickFormat(d3.format(r.tickFormat))}}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["widgetFactoryProvider",function(i){i.registerChartMixin("marginMixin",new e)}]);function e(){}e.prototype.initialize=["invokeIfDefined",function(i){this.invokeIfDefined=i}];e.prototype.configureChart=function(i,r){this.invokeIfDefined(r.rawData,i,"margins")}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["crossfilterUtilsProvider",function(i){i.addGroupFunctionProvider("array",new e)}]);function e(){}e.prototype.initialize=["$parse",function(i){this.$parse=i}];e.prototype.buildGroup=function(i){if(!i){throw"sum needs a groupParam"}return n(this.$parse(i.value))};function n(i){var r={init:function(){return[]},add:function(r,e){var n=i({v:e});r.push(n);return r},remove:function(r,e){var n=i({v:e});r.splice(r.indexOf(n),1);return r}};return r}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["crossfilterUtilsProvider",function(i){i.addGroupFunctionProvider("sum",new e)}]);function e(){}e.prototype.initialize=["$parse",function(i){this.$parse=i}];e.prototype.buildGroup=function(i){if(!i){throw"sum needs a groupParam"}return n(this.$parse(i.value))};function n(i){var r={init:function(){return 0},add:function(r,e){var n=i({v:e});return r+n},remove:function(r,e){var n=i({v:e});return r-n}};return r}})(angular); \ No newline at end of file +(function(i){var r=i.module("ngDashboard",[]);r.factory("invokeIfDefined",function(){return function(r,e,n){if(i.isDefined(r[n])){e[n](r[n])}}})})(angular);(function(i,r){var e=i.module("ngDashboard");e.provider("widgetGroupLayout",[function(){var r={};this.registerLayoutManager=function(i,e){r[i]=e};this.$get=["$injector",function(e){i.forEach(r,function(i){if(i.initialize){e.invoke(i.initialize,i)}});return{handleLayout:function(i,e){var n=e.layout&&e.layout.type?e.layout.type:"flow";if(!r[n]){throw"No LayoutManager "+n+" registered"}r[n].layout(i,e)}}}]}]);e.directive("widgetGroup",["widgetGroupLayout",function(e){return{restrict:"E",scope:{groupData:"=groupData"},controller:["$scope","$http","crossfilterUtils",function(e,t,o){var a=[],s=false;this.registerWidgetInitializer=function(i){if(s){i(e.crossFilter,e.namedGroups)}else{a.push(i)}};function u(){s=true;for(var i in a){a[i](e.crossFilter,e.namedGroups)}a.length=0}if(i.isArray(e.groupData.data)){e.crossFilter=r(e.groupData.data);e.namedGroups=n(e.groupData.groups,e.crossFilter,o);u()}else if(i.isString(e.groupData.dataUrl)){t({method:"GET",url:e.groupData.dataUrl}).success(function(i){e.crossFilter=r(i);e.namedGroups=n(e.groupData.groups,e.crossFilter,o);u()}).error(function(i){throw i})}else{u()}}],link:function(i,r){r.addClass("widget-group");var n=i.$watch("groupData",function(i){if(i){e.handleLayout(r,i);n()}})},template:'
'+'

{{groupData.title}}

'+''+"
"}}]);function n(r,e,n){if(r&&e){var t={};i.forEach(r,function(i,r){if(!i.dimension){throw"A dimension is required for named groups"}if(!i.group){throw"A group is required for named groups"}var o=n.dimensionFunction(i.dimension);var a=e.dimension(o);var s=n.groupFunctions(i.group);var u=a.group().reduce(s.add,s.remove,s.init);t[r]={dimension:a,group:u}});return t}}})(angular,crossfilter);(function(i){var r=i.module("ngDashboard");function e(i){this.widgetProviders=i}e.prototype.createWidget=function(i,r,e){if(!this.widgetProviders[r]){throw"No widget with "+r+" registered"}return this.widgetProviders[r].createWidget(i,e)};r.provider("widgetFactory",[function(){var r={};var n={};this.registerWidgetProvider=function(i,e){r[i]=e};this.registerChartMixin=function(i,r){n[i]=r};this.$get=["$injector",function(t){i.forEach(n,function(i){if(i.initialize){t.invoke(i.initialize,i)}});i.forEach(r,function(i){if(i.initialize){t.invoke(i.initialize,i,n)}});return new e(r)}]}]);r.directive("widget",["widgetFactory",function(i){return{restrict:"E",scope:{widgetData:"=widgetData",crossFilter:"=crossFilter"},require:"^widgetGroup",link:function(r,e,t,o){var a,s;e.addClass("widget");o.registerWidgetInitializer(function(t,o){var u=e.find("widget-body");a=n(u,i,{crossfilter:t,namedGroups:o,rawData:r.widgetData});if(r.widgetData.overlays){s=[];for(var c in r.widgetData.overlays){var d=n(u,i,{crossfilter:t,namedGroups:o,rawData:r.widgetData.overlays[c]});s.push(d)}}})},templateUrl:"./template/widget.html"}}]);function n(i,r,e){return r.createWidget(i,e.rawData.type,e)}})(angular);(function(i){var r=i.module("ngDashboard");var e=/^([^\(]*)\(([^\)]*)\).*$/;r.factory("widgetExpressionParser",["$parse",function(i){return{parse:function(r){var n=e.exec(r);var t=n[1];var o=i(n[2]);return{functionName:t,parameters:o}},valueFunction:function(r,e){var n=i(r);var t=e?e:"d";function o(i){var r={};r[t]=i;var e=n(r);return e}return o}}}])})(angular);(function(i){var r=i.module("ngDashboard");r.provider("scaleParser",[function(){var r={};this.registerScaleProvider=function(i,e){r[i]=e};this.$get=["$injector",function(n){i.forEach(r,function(i){if(i.initialize){n.invoke(i.initialize,i)}});return new e(r)}]}]);function e(i){this.scaleProviders=i}e.prototype.parse=function(i){if(!this.scaleProviders[i.type]){throw"No scaleprovider "+i.type+" registered"}return this.scaleProviders[i.type].createScale(i.parameters)}})(angular);(function(i){var r=i.module("ngDashboard");r.provider("crossfilterUtils",[function(){var r={};this.addGroupFunctionProvider=function(i,e){r[i]=e};this.$get=["widgetExpressionParser","$injector",function(e,n){i.forEach(r,function(i){if(i.initialize){n.invoke(i.initialize,i)}});return{dimensionFunction:function(i){if(!i){throw"Expression is required to create crossfilter dimension"}return e.valueFunction(i)},groupFunctions:function(i){if(!i){throw"Expression is required to create crossfilter group"}if(!r[i.type]){throw"No groupfunction provider for "+i.type+" registered"}return r[i.type].buildGroup(i.parameters,i.debug)},getDistinctValuesFromDimension:function(i){if(!i){return[]}var r=i.group();var e=r.all();var n=[];if(e){for(var t in e){n.push(e[t].key)}}r.dispose();return n}}}]}])})(angular);(function(i){var r=i.module("ngDashboard");r.config(["widgetFactoryProvider",function(i){i.registerWidgetProvider("barchart",new e)}]);function e(){}e.prototype.initialize=["baseChartMixin","coordinateGridMixin","marginMixin","stackMixin","invokeIfDefined","colorMixin",function(i,r,e,n,t,o){this.baseChartMixin=i;this.coordinateGridMixin=r;this.invokeIfDefined=t;this.marginMixin=e;this.stackMixin=n;this.colorMixin=o}];e.prototype.createWidget=function(i,r){var e=dc.barChart(i[0]);var n=this.invokeIfDefined;var t=r.rawData;this.baseChartMixin.configureChart(e,r);this.stackMixin.configureChart(e,r);this.coordinateGridMixin.configureChart(e,r);this.marginMixin.configureChart(e,r);this.colorMixin.configureChart(e,r);n(t,e,"outerPadding");n(t,e,"gap");e.render();return e}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["widgetFactoryProvider",function(i){i.registerWidgetProvider("boxPlot",new e)}]);function e(){}e.prototype.initialize=["baseChartMixin","coordinateGridMixin","marginMixin","colorMixin",function(i,r,e,n){this.baseChartMixin=i;this.coordinateGridMixin=r;this.marginMixin=e;this.colorMixin=n}];e.prototype.createWidget=function(i,r){var e=dc.boxPlot(i[0]);this.baseChartMixin.configureChart(e,r);this.coordinateGridMixin.configureChart(e,r);this.marginMixin.configureChart(e,r);this.colorMixin.configureChart(e,r);e.render();return e}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["widgetFactoryProvider",function(i){i.registerWidgetProvider("heatmap",new e)}]);function e(){}e.prototype.initialize=["baseChartMixin","coordinateGridMixin","marginMixin","colorMixin","invokeIfDefined",function(i,r,e,n,t){this.baseChartMixin=i;this.coordinateGridMixin=r;this.invokeIfDefined=t;this.marginMixin=e;this.colorMixin=n}];e.prototype.createWidget=function(i,r){var e=dc.heatMap(i[0]);this.baseChartMixin.configureChart(e,r);this.coordinateGridMixin.configureChart(e,r);this.marginMixin.configureChart(e,r);this.colorMixin.configureChart(e,r);e.render();return e}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["widgetFactoryProvider",function(i){i.registerWidgetProvider("linechart",new e)}]);function e(){}e.prototype.initialize=["baseChartMixin","coordinateGridMixin","marginMixin","stackMixin","invokeIfDefined","colorMixin",function(i,r,e,n,t,o){this.baseChartMixin=i;this.coordinateGridMixin=r;this.invokeIfDefined=t;this.marginMixin=e;this.stackMixin=n;this.colorMixin=o}];e.prototype.createWidget=function(i,r){var e=dc.lineChart(i[0]);this.baseChartMixin.configureChart(e,r);this.stackMixin.configureChart(e,r);this.coordinateGridMixin.configureChart(e,r);this.marginMixin.configureChart(e,r);this.colorMixin.configureChart(e,r);this.invokeIfDefined(r.rawData,e,"renderArea");this.invokeIfDefined(r.rawData,e,"renderDataPoints");this.invokeIfDefined(r.rawData,e,"interpolate");e.render();return e}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["widgetFactoryProvider",function(i){i.registerWidgetProvider("piechart",new e)}]);function e(){}e.prototype.initialize=["baseChartMixin","invokeIfDefined","colorMixin",function(i,r,e){this.baseChartMixin=i;this.invokeIfDefined=r;this.colorMixin=e}];e.prototype.createWidget=function(i,r){var e=dc.pieChart(i[0]);var n=this.invokeIfDefined;var t=r.rawData;this.baseChartMixin.configureChart(e,r);this.colorMixin.configureChart(e,r);n(t,e,"slicesCap");n(t,e,"innerRadius");n(t,e,"radius");n(t,e,"cx");n(t,e,"cy");n(t,e,"minAngleForLabel");e.render();return e}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["scaleParserProvider",function(i){i.registerScaleProvider("linear",new e)}]);function e(){}e.prototype.initialize=["invokeIfDefined",function(i){this.invokeIfDefined=i}];e.prototype.createScale=function(i){var r=d3.scale.linear();var e=this.invokeIfDefined;if(i){e(i,r,"domain");e(i,r,"range");e(i,r,"rangeRound");e(i,r,"clamp");e(i,r,"ticks")}return r}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["widgetFactoryProvider",function(i){i.registerChartMixin("baseChartMixin",new e)}]);function e(){}e.prototype.initialize=["invokeIfDefined","widgetExpressionParser","crossfilterUtils",function(i,r,e){this.invokeIfDefined=i;this.widgetExpressionParser=r;this.crossfilterUtils=e}];e.prototype.configureChart=function(i,r){var e=r.rawData;var n=this.invokeIfDefined;var t=this.buildDimension(r);var o=this.buildGroup(t,r);i.dimension(t);if(e.namedGroup&&e.namedGroup.name){i.group(o,e.namedGroup.name)}else if(e.group&&e.group.name){i.group(o,e.group.name)}else{i.group(o)}n(e,i,"width");n(e,i,"minWidth");n(e,i,"height");n(e,i,"minHeight");n(e,i,"transitionDuration");n(e,i,"renderLabel");n(e,i,"renderTitle");if(e.data){i.data(this.widgetExpressionParser.valueFunction(e.data,"group"))}if(e.keyAccessor){i.keyAccessor(this.widgetExpressionParser.valueFunction(e.keyAccessor))}if(e.valueAccessor){i.valueAccessor(this.widgetExpressionParser.valueFunction(e.valueAccessor))}if(e.titleAccessor){i.title(this.widgetExpressionParser.valueFunction(e.titleAccessor))}if(e.labelAccessor){i.label(this.widgetExpressionParser.valueFunction(e.labelAccessor))}this.setupLegend(i,e.legend)};e.prototype.setupLegend=function(i,r){if(!r){return}var e=this.invokeIfDefined;var n=dc.legend();e(r,n,"x");e(r,n,"y");e(r,n,"gap");e(r,n,"itemHeight");e(r,n,"horizontal");e(r,n,"legendWidth");e(r,n,"itemWidth");i.legend(n)};e.prototype.buildDimension=function(i){if(i.rawData.namedGroup){var r=i.rawData.namedGroup.group;if(!i.namedGroups||!i.namedGroups[r]){throw"No named group "+r+" defined"}return i.namedGroups[r].dimension}else{var e=i.crossfilter;var n=this.crossfilterUtils.dimensionFunction(i.rawData.dimension);return e.dimension(n)}};e.prototype.buildGroup=function(i,r){if(r.rawData.namedGroup){var e=r.rawData.namedGroup.group;if(!r.namedGroups||!r.namedGroups[e]){throw"No named group "+e+" defined"}return r.namedGroups[e].group}else{var n=this.crossfilterUtils.groupFunctions(r.rawData.group);return i.group().reduce(n.add,n.remove,n.init)}}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["widgetFactoryProvider",function(i){i.registerChartMixin("colorMixin",new e)}]);function e(){}e.prototype.initialize=["invokeIfDefined","$parse","scaleParser",function(i,r,e){this.invokeIfDefined=i;this.$parse=r;this.scaleParser=e}];e.prototype.configureChart=function(i,r){var e=r.rawData;var t=this.invokeIfDefined;t(e,i,"colorDomain");t(e,i,"linearColors");t(e,i,"ordinalColors");if(e.colors){i.colors(this.scaleParser.parse(e.colors))}if(e.colorAccessor){i.colorAccessor(n(this.$parse(e.colorAccessor)))}if(e.calculateColorDomain){i.calculateColorDomain()}};function n(i){function r(r,e){return i({d:r,i:e})}return r}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["widgetFactoryProvider",function(i){i.registerChartMixin("coordinateGridMixin",new e)}]);function e(){}e.prototype.initialize=["scaleParser","invokeIfDefined","unitsParser",function(i,r,e){this.scaleParser=i;this.invokeIfDefined=r;this.unitsParser=e}];e.prototype.configureChart=function(i,r){var e=this.invokeIfDefined;var n=r.rawData;if(n.x){i.x(this.scaleParser.parse(n.x))}e(n,i,"yAxisPadding");e(n,i,"yAxisLabel");e(n,i,"brushOn");e(n,i,"elasticX");e(n,i,"elasticY");e(n,i,"mouseZoomable");e(n,i,"renderHorizontalGridLines");e(n,i,"renderVerticalGridLines");if(n.xUnits){i.xUnits(this.unitsParser.parse(n.xUnits))}if(n.xAxis){this.configureAxis(i.xAxis(),n.xAxis)}if(n.yAxis){this.configureAxis(i.yAxis(),n.yAxis)}};e.prototype.configureAxis=function(i,r){var e=this.invokeIfDefined;e(r,i,"orient");e(r,i,"ticks");e(r,i,"tickValues");e(r,i,"tickSize");e(r,i,"innerTickSize");e(r,i,"outerTickSize");e(r,i,"tickPadding");if(r.tickFormat){i.tickFormat(d3.format(r.tickFormat))}}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["widgetFactoryProvider",function(i){i.registerChartMixin("marginMixin",new e)}]);function e(){}e.prototype.initialize=["invokeIfDefined",function(i){this.invokeIfDefined=i}];e.prototype.configureChart=function(i,r){this.invokeIfDefined(r.rawData,i,"margins")}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["crossfilterUtilsProvider",function(i){i.addGroupFunctionProvider("array",new e)}]);function e(){}e.prototype.initialize=["$parse",function(i){this.$parse=i}];e.prototype.buildGroup=function(i){if(!i){throw"sum needs a groupParam"}return n(this.$parse(i.value))};function n(i){var r={init:function(){return[]},add:function(r,e){var n=i({v:e});r.push(n);return r},remove:function(r,e){var n=i({v:e});r.splice(r.indexOf(n),1);return r}};return r}})(angular);(function(i){var r=i.module("ngDashboard");r.config(["crossfilterUtilsProvider",function(i){i.addGroupFunctionProvider("sum",new e)}]);function e(){}e.prototype.initialize=["$parse",function(i){this.$parse=i}];e.prototype.buildGroup=function(i){if(!i){throw"sum needs a groupParam"}return n(this.$parse(i.value))};function n(i){var r={init:function(){return 0},add:function(r,e){var n=i({v:e});return r+n},remove:function(r,e){var n=i({v:e});return r-n}};return r}})(angular); \ No newline at end of file diff --git a/sample/script/experiments.js b/sample/script/experiments.js index 79b75b3..13d2962 100644 --- a/sample/script/experiments.js +++ b/sample/script/experiments.js @@ -11,6 +11,7 @@ dataUrl: './sample/data/data.json', filters: [{ title: 'Experiments', + allTitle: 'All', type: 'select', dimension: 'd.Expt' }], diff --git a/script/filters/select-filter.js b/script/filters/select-filter.js index e1ed8e6..6d345f9 100644 --- a/script/filters/select-filter.js +++ b/script/filters/select-filter.js @@ -9,7 +9,7 @@ var template = '' + ''; function SelectFilter() {} diff --git a/script/widget-group.js b/script/widget-group.js index 473025f..3391567 100644 --- a/script/widget-group.js +++ b/script/widget-group.js @@ -103,8 +103,10 @@ } }); }, - template: '

{{groupData.title}}

' + - '' + template: '
' + + '

{{groupData.title}}

' + + '' + + '
' }; } ]); diff --git a/style/ng-dashboard.css b/style/ng-dashboard.css index 3ea25be..6ea0f45 100644 --- a/style/ng-dashboard.css +++ b/style/ng-dashboard.css @@ -2,10 +2,28 @@ padding: 20px; display: block; } +.widget-group-header { + display: flex; + align-items: center; + margin-bottom: 20px; +} +.widget-group-header h3 { + margin-top: 0; + margin-bottom: 0; + margin-right: 20px; +} widget-body { display: block; overflow: auto; } +/** + * Filters + */ + +.group-filter.select label { + margin-right: 5px; + margin-bottom: 0; +} /** * Flow Layout */ @@ -20,6 +38,7 @@ widget-body { /** * Grid Layout */ + @media (min-width: 768px) { .widget-group-grid { display: flex;