Skip to content

Instantly share code, notes, and snippets.

@nbering
Created May 11, 2015 11:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nbering/04280a344cd641c25f67 to your computer and use it in GitHub Desktop.
Save nbering/04280a344cd641c25f67 to your computer and use it in GitHub Desktop.
Google-chart directives for Smiffy6969
(function(){
angular.module('googlechart.smiffy', ['googlechart'])
.directive('onPage', onPageDirective)
.directive('onSort', onSortDirective)
.directive('smiffySelect', smiffySelectDirective)
.directive('smiffyDeselect', smiffyDeselectDirective);
/* Example:
<div google-chart chart="myChart" on-page="myPageHandler(page)"></div>
*/
function onPageDirective(){
return {
restrict: 'A',
scope: false,
require: 'googleChart',
link: function(scope, element, attrs, googleChartController){
callback.$inject = ['chartWrapper', 'chart', 'args'];
function callback(chartWrapper, chart, args){
var returnParams = {
chartWrapper: chartWrapper,
chart: chart,
args: args,
page: args[0].page
};
scope.$apply(function () {
scope.$eval(attrs.onPage, returnParams);
});
}
googleChartController.registerChartListener('page', callback, this);
}
};
}
/* Example:
<div google-chart chart="myChart" on-sort="mySortHandler(column, ascending, sortedIndexes)"></div>
*/
function onSortDirective(){
return {
restrict: 'A',
scope: false,
require: 'googleChart',
link: function(scope, element, attrs, googleChartController){
callback.$inject = ['chartWrapper', 'chart', 'args'];
function callback(chartWrapper, chart, args){
var returnParams = {
chartWrapper: chartWrapper,
chart: chart,
args: args,
column: args[0].column,
ascending: args[0].ascending,
sortedIndexes: args[0].sortedIndexes
};
scope.$apply(function () {
scope.$eval(attrs.onSort, returnParams);
});
}
googleChartController.registerChartListener('sort', callback, this);
}
};
}
/* Example:
<div google-chart chart="myChart" smiffy-select="mySelectHandler(selectedItem, selectedItems, chartWrapper, chart)"></div>
*/
function smiffySelectDirective(){
return {
restrict: 'A',
scope: false,
require: 'googleChart',
link: function(scope, element, attrs, googleChartController){
callback.$inject = ['chartWrapper', 'chart'];
function callback(chartWrapper, chart){
var selectEventRetParams = { selectedItems: chart.getSelection() };
// This is for backwards compatibility for people using 'selectedItem' that only wanted the first selection.
selectEventRetParams.selectedItem = selectEventRetParams.selectedItems[0];
selectEventRetParams.chartWrapper = chartWrapper;
selectEventRetParams.chart = chart;
if (selectEventRetParams.selectedItem){
scope.$apply(function () {
scope.$eval(attrs.smiffySelect, selectEventRetParams);
});
}
}
googleChartController.registerWrapperListener('select', callback, this);
}
};
}
/* Example:
<div google-chart chart="myChart" on-page="myDeselectHandler(previousItem, previousItems, chartWrapper, chart)"></div>
*/
function smiffyDeselectDirective(){
return {
restrict: 'A',
scope: false,
require: 'googleChart',
link: function(scope, element, attrs, googleChartController){
var previousSelection;
callback.$inject = ['chartWrapper', 'chart'];
function callback(chartWrapper, chart){
var selectEventRetParams = { selectedItems: chart.getSelection() };
// This is for backwards compatibility for people using 'selectedItem' that only wanted the first selection.
selectEventRetParams.selectedItem = selectEventRetParams.selectedItems[0];
selectEventRetParams.chartWrapper = chartWrapper;
selectEventRetParams.chart = chart;
if (previousSelection){
selectEventRetParams.previousItems = previousSelection,
selectEventRetParams.previousItem = previousSelection[0];
}
if (!selectEventRetParams.selectedItem){
scope.$apply(function () {
scope.$eval(attrs.smiffyDeselect, selectEventRetParams);
});
}
previousSelection = selectEventRetParams.selectedItems;
}
googleChartController.registerWrapperListener('select', callback, this);
}
};
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment