diff --git a/dist/adf-widget-redmine.js b/dist/adf-widget-redmine.js
index 0e14cf3..20df9d5 100644
--- a/dist/adf-widget-redmine.js
+++ b/dist/adf-widget-redmine.js
@@ -1,615 +1,714 @@
(function(window, undefined) {'use strict';
-angular.module('adf.widget.redmine', ['adf.provider', 'chart.js', 'ui.bootstrap.datepicker'])
- .constant('redmineEndpoint', 'http://localhost:3000/')
- .config(["dashboardProvider", function (dashboardProvider) {
- var category = 'Redmine';
-
- var editIssues = {
- templateUrl: '{widgetsPath}/redmine/src/main/issues/edit/edit.html',
- controller: 'editIssuesController',
+function createCustomQueriesEditController(isEasy) {
+ return {
+ templateUrl: isEasy ? '{widgetsPath}/redmine/src/main/issues/edit/easyedit.html' : '{widgetsPath}/redmine/src/main/issues/edit/edit.html',
+ controller: isEasy ? 'easyEditIssuesController' : 'editIssuesController',
+ controllerAs: 'vm',
+ resolve: {
+ /** @ngInject **/
+ projects: ["redmineService", "easyRedmineService", function (redmineService, easyRedmineService) {
+ if (isEasy) {
+ return easyRedmineService.getProjects();
+ } else {
+ return redmineService.getProjects();
+ }
+ }],
+ /** @ngInject **/
+ customQueries: ["redmineService", "easyRedmineService", function (redmineService, easyRedmineService) {
+ if (isEasy) {
+ return easyRedmineService.getCustomQueries().then(function (data){
+ return data.easy_queries;
+ });
+ } else {
+ return redmineService.getCustomQueries().then(function (data){
+ return data.queries;
+ });
+ }
+ }]
+ }
+ };
+}
+
+function createChartEditController(isEasy) {
+ return {
+ templateUrl: '{widgetsPath}/redmine/src/main/chart/edit/edit.html',
+ controller: isEasy ? 'easyEditChartController' : 'editChartController',
+ controllerAs: 'vm',
+ resolve: {
+ /** @ngInject **/
+ projects: ["redmineService", "easyRedmineService", function (redmineService, easyRedmineService) {
+ if (isEasy) {
+ return easyRedmineService.getProjects();
+ } else {
+ return redmineService.getProjects();
+ }
+ }]
+ }
+ };
+}
+
+function createCustomQueriesWidget(dashboardProvider, widgetID, title, category, isEasy) {
+ dashboardProvider
+ .widget(widgetID, {
+ title: title,
+ description: 'Displays issues from a custom query',
+ category: category,
+ templateUrl: '{widgetsPath}/redmine/src/main/issues/view.html',
+ controller: isEasy ? 'easyIssueController' : 'issueController',
controllerAs: 'vm',
resolve: {
/** @ngInject **/
- projects: ["redmineService", function (redmineService) {
- return redmineService.getProjects();
+ issues: ["redmineService", "easyRedmineService", "config", function (redmineService, easyRedmineService, config) {
+ if (config.customQuery) {
+ if (isEasy) {
+ return easyRedmineService.getIssuesByQueryId(config.customQuery.id, config.project.id);
+ } else {
+ return redmineService.getIssuesByQueryId(config.customQuery.id, config.customQuery.project_id);
+ }
+ }
}]
- }
- };
-
- var editChart = {
- templateUrl: '{widgetsPath}/redmine/src/main/chart/edit/edit.html',
- controller: 'editChartController',
+ },
+ edit: createCustomQueriesEditController(isEasy)
+ });
+}
+
+function createMyIssuesWidget(dashboardProvider, widgetID, title, category, isEasy) {
+ dashboardProvider
+ .widget(widgetID, {
+ title: title,
+ description: 'Displays all issues assigned to me',
+ category: category,
+ templateUrl: '{widgetsPath}/redmine/src/main/issues/view.html',
+ controller: isEasy ? 'easyIssueController' : 'issueController',
controllerAs: 'vm',
resolve: {
/** @ngInject **/
- projects: ["redmineService", function (redmineService) {
- return redmineService.getProjects();
+ issues: ["redmineService", "easyRedmineService", function (redmineService, easyRedmineService) {
+ if (isEasy) {
+ return easyRedmineService.getMyIssues();
+ } else {
+ return redmineService.getMyIssues();
+ }
}]
}
- };
-
- dashboardProvider
- .widget('redmine-custom-queries', {
- title: 'Redmine Custom Queries',
- description: 'Displays Issues from a Custom Query',
- category: category,
- templateUrl: '{widgetsPath}/redmine/src/main/issues/view.html',
- controller: 'IssueController',
- controllerAs: 'vm',
- resolve: {
- /** @ngInject **/
- issues: ["redmineService", "config", function (redmineService, config) {
- if(config.customQuery){
- return redmineService.getIssuesByQueryId(config.customQuery.id, config.customQuery.project_id);
+ });
+}
+
+function createChartWidget(dashboardProvider, widgetID, title, category, isEasy) {
+ dashboardProvider
+ .widget(widgetID, {
+ title: title,
+ description: 'Displays a burnup or burndown chart',
+ category: category,
+ templateUrl: '{widgetsPath}/redmine/src/main/chart/view.html',
+ controller: isEasy ? 'easyChartController' : 'chartController',
+ controllerAs: 'vm',
+ resolve: {
+ /** @ngInject **/
+ chartData: ["chartDataService", "easyChartDataService", "config", function (chartDataService, easyChartDataService, config) {
+ if (config.project) {
+ if (isEasy) {
+ return easyChartDataService.getChartData(config);
+ } else {
+ return chartDataService.getChartData(config);
}
+ }
+ }]
+ },
+ edit: createChartEditController(isEasy)
+ });
- }]
- },
- edit: editIssues
- });
+}
- dashboardProvider
- .widget('redmine-my-issues', {
- title: 'My Redmine Issues',
- description: 'Displays all issues assigned to me',
- category: category,
- templateUrl: '{widgetsPath}/redmine/src/main/issues/view.html',
- controller: 'IssueController',
- controllerAs: 'vm',
- resolve: {
- /** @ngInject **/
- issues: ["redmineService", function (redmineService) {
- return redmineService.getMyIssues();
- }]
- }
- });
- // widget is currently broken
- dashboardProvider
- .widget('redmine-chart', {
- title: 'Redmine Chart',
- description: 'Displays a burnup or burndown chart',
- category: category,
- templateUrl: '{widgetsPath}/redmine/src/main/chart/view.html',
- controller: 'ChartController',
- controllerAs: 'vm',
- resolve: {
- chartData: ["chartDataService", "config", function (chartDataService, config) {
- if(config.project) {
- return chartDataService.getChartData(config);
- }
- }]
- },
- edit: editChart
- });
+angular.module('adf.widget.redmine', ['adf.provider', 'chart.js', 'ui.bootstrap.datepicker'])
+ .constant('redmineEndpoint', 'http://192.168.56.2/redmine/')
+ .constant('redmineRedirectEndpoint', null)
+ .config(["dashboardProvider", function (dashboardProvider) {
+ var category = 'Redmine';
+
+ // Create widgets
+ createMyIssuesWidget(dashboardProvider, 'redmine-my-issues', 'My Issues', category, false);
+ createCustomQueriesWidget(dashboardProvider, 'redmine-custom-queries', 'Custom Queries', category, false);
+ createChartWidget(dashboardProvider, 'redmine-chart', 'Chart', category, false);
+ }]);
+
+angular.module('adf.widget.easyredmine', ['adf.provider', 'chart.js', 'ui.bootstrap.datepicker'])
+ .constant('easyRedmineEndpoint', 'http://192.168.56.2/easyredmine/')
+ .constant('easyRedmineRedirectEndpoint', null)
+ .config(["dashboardProvider", function (dashboardProvider) {
+ var category = 'EasyRedmine';
+ // Create widgets
+ createMyIssuesWidget(dashboardProvider, 'easyredmine-my-issues', 'My Issues', category, true);
+ createCustomQueriesWidget(dashboardProvider, 'easyredmine-custom-queries', 'Custom Queries', category, true);
+ //createChartWidget(dashboardProvider, 'easyredmine-chart', 'Chart', category, true);
}]);
+angular.module("adf.widget.easyredmine").run(["$templateCache", function($templateCache) {$templateCache.put("{widgetsPath}/redmine/src/main/chart/view.html","
Please configure the widget
");
+$templateCache.put("{widgetsPath}/redmine/src/main/issues/view.html","Please configure the widget
No issues found
");
+$templateCache.put("{widgetsPath}/redmine/src/main/chart/edit/edit.html","");
+$templateCache.put("{widgetsPath}/redmine/src/main/issues/edit/easyedit.html","");
+$templateCache.put("{widgetsPath}/redmine/src/main/issues/edit/edit.html","");}]);
angular.module("adf.widget.redmine").run(["$templateCache", function($templateCache) {$templateCache.put("{widgetsPath}/redmine/src/main/chart/view.html","Please configure the widget
");
$templateCache.put("{widgetsPath}/redmine/src/main/issues/view.html","Please configure the widget
No issues found
");
$templateCache.put("{widgetsPath}/redmine/src/main/chart/edit/edit.html","");
+$templateCache.put("{widgetsPath}/redmine/src/main/issues/edit/easyedit.html","");
$templateCache.put("{widgetsPath}/redmine/src/main/issues/edit/edit.html","");}]);
-angular.module('adf.widget.redmine')
- .controller('editIssuesController', ["projects", "config", "redmineService", function(projects, config, redmineService){
- var vm = this;
-
- vm.possibleColumns = {
- 'id':{'name':'ID', 'show': true},
- 'tracker':{'name':'Tracker','show': true},
- 'status':{'name':'Status','show': true},
- 'subject':{'name':'Subject','show': true},
- 'assignee':{'name':'Assignee','show': true},
- 'priority':{'name':'Priority','show': true}
- };
-
- redmineService.getCustomQueries().then(function(data){
- if (data && data.queries){
- vm.customQueries = data.queries;
- }else{
- vm.customQueries = null;
- }
- });
-
-
- if(angular.equals({},config)) {
- config.columns=vm.possibleColumns;
- config.project='';
- config.assigned_to_id='me';
- config.showClosed=false;
- }
-
- vm.projects = projects;
- }]);
-
-
+function createEditIssueController(vm, projects, customQueries, config){
+ vm.possibleColumns = {
+ 'id':{'name':'ID', 'show': true},
+ 'tracker':{'name':'Tracker','show': true},
+ 'status':{'name':'Status','show': true},
+ 'subject':{'name':'Subject','show': true},
+ 'assignee':{'name':'Assignee','show': true},
+ 'priority':{'name':'Priority','show': true}
+ };
+
+ if(angular.equals({},config)) {
+ config.columns=vm.possibleColumns;
+ config.customQuery='';
+ config.project='';
+ config.assigned_to_id='me';
+ config.showClosed=false;
+ }
+
+ vm.projects = projects;
+ vm.customQueries = customQueries;
+}
angular.module('adf.widget.redmine')
- .controller('editChartController', ["projects", "config", "chartDataService", "redmineService", function (projects, config, chartDataService, redmineService) {
- var vm = this;
- vm.config = config;
- vm.projects = projects;
- // functions
- vm.addFilter = addFilter;
- vm.converStringsToDateObjects = converStringsToDateObjects;
- vm.toggleMin = toggleMin;
- vm.open1 = function () {
- vm.popup1.opened = true;
- };
-
- vm.open2 = function () {
- vm.popup2.opened = true;
- };
- vm.updateVersions = updateVersions;
- vm.checkUpdates = checkUpdates;
- vm.updateVersionEnd = updateVersionEnd;
- vm.updateTracker = updateTracker;
-
- // init stuff
- vm.filters = [
- { id: 'version', name: 'Fixed Version' },
- { id: 'assigned', name: 'Assigned to' },
- { id: 'tracker', name: 'Tracker' }
- ]
-
- if (!vm.config.timespan) {
- vm.config.timespan = {};
- }
-
- vm.inlineOptions = {
- customClass: getDayClass,
- minDate: new Date(),
- showWeeks: true
- };
-
- if (!vm.dateOptions) {
- vm.dateOptions = {
- formatYear: 'yy',
- startingDay: 1
- };
- }
+ .controller('editIssuesController', ["projects", "customQueries", "config", function (projects, customQueries, config) {
+ return createEditIssueController(this, projects, customQueries, config);
+ }]);
+angular.module('adf.widget.easyredmine')
+ .controller('easyEditIssuesController', ["projects", "customQueries", "config", function (projects, customQueries, config) {
+ return createEditIssueController(this, projects, customQueries, config);
+ }]);
- vm.formats = ['yyyy-MM-dd', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate'];
- vm.format = vm.formats[0];
- vm.altInputFormats = ['M!/d!/yyyy'];
- vm.popup1 = {
- opened: false
- };
- vm.popup2 = {
- opened: false
+function createEditChartController(vm, projects, config, chartDataService, apiService) {
+ vm.config = config;
+ vm.projects = projects;
+ // functions
+ vm.addFilter = addFilter;
+ vm.converStringsToDateObjects = converStringsToDateObjects;
+ vm.toggleMin = toggleMin;
+ vm.open1 = function () {
+ vm.popup1.opened = true;
+ };
+
+ vm.open2 = function () {
+ vm.popup2.opened = true;
+ };
+ vm.updateVersions = updateVersions;
+ vm.checkUpdates = checkUpdates;
+ vm.updateVersionEnd = updateVersionEnd;
+ vm.updateTracker = updateTracker;
+
+ // init stuff
+ vm.filters = [
+ {id: 'version', name: 'Fixed Version'},
+ {id: 'assigned', name: 'Assigned to'},
+ {id: 'tracker', name: 'Tracker'}
+ ]
+
+ if (!vm.config.timespan) {
+ vm.config.timespan = {};
+ }
+
+ vm.inlineOptions = {
+ customClass: getDayClass,
+ minDate: new Date(),
+ showWeeks: true
+ };
+
+ if (!vm.dateOptions) {
+ vm.dateOptions = {
+ formatYear: 'yy',
+ startingDay: 1
};
-
- // calls
- vm.toggleMin();
- vm.converStringsToDateObjects();
-
- function addFilter(filter) {
- if (filter === 'version') {
- vm.config.filterWithVersion = true;
- } else if (filter === 'assigned') {
- vm.config.filterWithAssigned = true;
- } else if (filter === 'tracker') {
- vm.config.filterWithTracker = true;
- }
- vm.filterToAdd = 'none';
- }
-
- function converStringsToDateObjects() {
- if (vm.config.timespan.fromDateTime) {
- vm.config.timespan.fromDateTime = new Date(vm.config.timespan.fromDateTime);
- vm.config.timespan.toDateTime = new Date(vm.config.timespan.toDateTime);
- }
- }
-
- function toggleMin() {
- vm.inlineOptions.minDate = vm.inlineOptions.minDate ? null : new Date();
- vm.dateOptions.minDate = vm.inlineOptions.minDate;
- }
-
- function updateVersions() {
- if (vm.config.project) {
- if (vm.config.project === 'All') {
- vm.versions = [];
- return;
- }
- redmineService.getVersions(angular.fromJson(vm.config.project).identifier).then(function (versions) {
- vm.versions = versions;
- });
+ }
+
+ vm.formats = ['yyyy-MM-dd', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate'];
+ vm.format = vm.formats[0];
+ vm.altInputFormats = ['M!/d!/yyyy'];
+
+ vm.popup1 = {
+ opened: false
+ };
+
+ vm.popup2 = {
+ opened: false
+ };
+
+ // calls
+ vm.toggleMin();
+ vm.converStringsToDateObjects();
+
+ function addFilter(filter) {
+ if (filter === 'version') {
+ vm.config.filterWithVersion = true;
+ } else if (filter === 'assigned') {
+ vm.config.filterWithAssigned = true;
+ } else if (filter === 'tracker') {
+ vm.config.filterWithTracker = true;
+ }
+ vm.filterToAdd = 'none';
+ }
+
+ function converStringsToDateObjects() {
+ if (vm.config.timespan.fromDateTime) {
+ vm.config.timespan.fromDateTime = new Date(vm.config.timespan.fromDateTime);
+ vm.config.timespan.toDateTime = new Date(vm.config.timespan.toDateTime);
+ }
+ }
+
+ function toggleMin() {
+ vm.inlineOptions.minDate = vm.inlineOptions.minDate ? null : new Date();
+ vm.dateOptions.minDate = vm.inlineOptions.minDate;
+ }
+
+ function updateVersions() {
+ if (vm.config.project) {
+ if (vm.config.project === 'All') {
+ vm.versions = [];
+ return;
}
+ apiService.getVersions(angular.fromJson(vm.config.project).identifier).then(function (versions) {
+ vm.versions = versions;
+ });
}
+ }
- function checkUpdates() {
- if (vm.config.filterWithVersion) {
- vm.updateVersions();
- }
+ function checkUpdates() {
+ if (vm.config.filterWithVersion) {
+ vm.updateVersions();
}
+ }
- function updateVersionEnd() {
- vm.config.timespan.toDateTime = new Date(angular.fromJson(vm.config.version).due_date);
- var date = new Date(vm.config.timespan.toDateTime);
- vm.config.timespan.fromDateTime = date.setDate(date.getDate() - 14);
- }
+ function updateVersionEnd() {
+ vm.config.timespan.toDateTime = new Date(angular.fromJson(vm.config.version).due_date);
+ var date = new Date(vm.config.timespan.toDateTime);
+ vm.config.timespan.fromDateTime = date.setDate(date.getDate() - 14);
+ }
- function updateTracker() {
- redmineService.getTrackers().then(function (trackers) {
- vm.trackers = trackers;
- });
- }
+ function updateTracker() {
+ apiService.getTrackers().then(function (trackers) {
+ vm.trackers = trackers;
+ });
+ }
- function getDayClass(data) {
- var date = data.date,
- mode = data.mode;
- if (mode === 'day') {
- var dayToCheck = new Date(date).setHours(0, 0, 0, 0);
+ function getDayClass(data) {
+ var date = data.date,
+ mode = data.mode;
+ if (mode === 'day') {
+ var dayToCheck = new Date(date).setHours(0, 0, 0, 0);
- for (var i = 0; i < vm.events.length; i++) {
- var currentDay = new Date(vm.events[i].date).setHours(0, 0, 0, 0);
+ for (var i = 0; i < vm.events.length; i++) {
+ var currentDay = new Date(vm.events[i].date).setHours(0, 0, 0, 0);
- if (dayToCheck === currentDay) {
- return vm.events[i].status;
- }
+ if (dayToCheck === currentDay) {
+ return vm.events[i].status;
}
}
- return '';
}
+ return '';
+ }
+}
- }]);
-
+angular.module('adf.widget.redmine').controller('editChartController', ["projects", "config", "chartDataService", "redmineService", function (projects, config, chartDataService, redmineService) {
+ return createEditChartController(this, projects, config, chartDataService, redmineService);
+}]);
+angular.module('adf.widget.easyredmine').controller('easyEditChartController', ["projects", "config", "easyChartDataService", "easyRedmineService", function (projects, config, easyChartDataService, easyRedmineService) {
+ return createEditChartController(this, projects, config, easyChartDataService, easyRedmineService);
+}]);
-angular.module('adf.widget.redmine')
- .controller('IssueController', ["issues", "config", "redmineService", function (issues, config, redmineService) {
- var vm = this;
- if (config){
- vm.config = config;
- }
+function createIssueController(vm, issues, config, apiService) {
+ if (config) {
+ vm.config = config;
+ }
+
+ if (!config.columns) {
+ vm.config = {
+ columns: {
+ 'id': {'name': 'ID', 'show': true},
+ 'tracker': {'name': 'Tracker', 'show': true},
+ 'status': {'name': 'Status', 'show': true},
+ 'subject': {'name': 'Subject', 'show': true},
+ 'assignee': {'name': 'Assignee', 'show': false},
+ 'priority': {'name': 'Priority', 'show': true}
+ },
+ assigned_to_id: 'me'
+ };
+ }
- if (!config.columns){
- vm.config = {
- columns: {
- 'id':{'name':'ID', 'show': true},
- 'tracker':{'name':'Tracker','show': true},
- 'status':{'name':'Status','show': true},
- 'subject':{'name':'Subject','show': true},
- 'assignee':{'name':'Assignee','show': false},
- 'priority':{'name':'Priority','show': true}
- },
- assigned_to_id: 'me'
- };
+ if (issues) {
+ vm.issues = issues;
+ if (issues.issues) {
+ vm.issues = vm.issues.issues;
}
+ }
- if (issues){
- vm.issues = issues;
- if (issues.issues){
- vm.issues = vm.issues.issues;
- }
- }
+ var redirectEndpoint = apiService.getRedmineRedirectEndpoint();
+ if (!redirectEndpoint) {
+ redirectEndpoint = apiService.getRedmineEndpoint();
+ }
+ vm.issueUrl = redirectEndpoint + 'issues/';
- var redirectEndpoint = redmineService.getRedmineRedirectEndpoint();
- if (!redirectEndpoint) {
- redirectEndpoint = redmineService.getRedmineEndpoint();
- }
- vm.issueUrl = redirectEndpoint + 'issues/';
+ vm.order = 'id';
- vm.order = 'id';
+ vm.changeOrder = function (order) {
+ vm.order = order;
+ vm.reverse = !vm.reverse;
+ };
- vm.changeOrder = function(order){
- vm.order = order;
- vm.reverse = !vm.reverse;
- };
+}
+angular.module('adf.widget.redmine')
+ .controller('issueController', ["issues", "config", "redmineService", function (issues, config, redmineService) {
+ return createIssueController(this, issues, config, redmineService);
}]);
+angular.module('adf.widget.easyredmine')
+ .controller('easyIssueController', ["issues", "config", "easyRedmineService", function (issues, config, easyRedmineService) {
+ return createIssueController(this, issues, config, easyRedmineService);
+ }]);
-angular.module('adf.widget.redmine')
- .factory('chartDataService', ["$q", "redmineService", function ($q, redmineService) {
- function moveNewOpenIssues(allIssues, openIssues, date) {
- for (var i = 0; i < allIssues.length; i++) {
- var createDate = new Date(allIssues[i].created_on);
- if (createDate.getTime() <= date.getTime()) {
- openIssues.push(allIssues[i]);
- allIssues.splice(i, 1);
- i--;
- }
+function createChartDataService($q, apiService) {
+ function moveNewOpenIssues(allIssues, openIssues, date) {
+ for (var i = 0; i < allIssues.length; i++) {
+ var createDate = new Date(allIssues[i].created_on);
+ if (createDate.getTime() <= date.getTime()) {
+ openIssues.push(allIssues[i]);
+ allIssues.splice(i, 1);
+ i--;
}
}
+ }
- function removeNewClosedIssues(openIssues, date) {
- for (var i = 0; i < openIssues.length; i++) {
- if (openIssues[i].closed_on) {
- var closeDate = new Date(openIssues[i].closed_on);
- if (closeDate.getTime() <= date.getTime()) {
- openIssues.splice(i, 1);
- i--;
- }
+ function removeNewClosedIssues(openIssues, date) {
+ for (var i = 0; i < openIssues.length; i++) {
+ if (openIssues[i].closed_on) {
+ var closeDate = new Date(openIssues[i].closed_on);
+ if (closeDate.getTime() <= date.getTime()) {
+ openIssues.splice(i, 1);
+ i--;
}
}
}
-
- function calculateOpenIssuesPerDay(from, to, issues, config) {
- var timeDiff = Math.abs(from.getTime() - to.getTime());
- var pointThinningRate = timeDiff / config.numberPoints;
- var numberAllIssues = issues.length;
- var idealIssuesPerInterval = numberAllIssues / timeDiff;
- var idealData = [];
- var openIssues = [];
- var values = [];
- while ((from.getTime() <= to.getTime())) {
- moveNewOpenIssues(issues, openIssues, from);
- removeNewClosedIssues(openIssues, from);
- var value = {x: from.toISOString(),y:openIssues.length};
- values.push(value);
- if (config.showIdeal) {
- var idealValue = Math.round((numberAllIssues - idealData.length * idealIssuesPerInterval * pointThinningRate)*100)/100;
- var ideal = {x: from.toISOString(),y:idealValue};
- idealData.push(ideal);
- }
- from.setTime(from.getTime() + pointThinningRate);
- }
- var valueSets = [values];
+ }
+
+ function calculateOpenIssuesPerDay(from, to, issues, config) {
+ var timeDiff = Math.abs(from.getTime() - to.getTime());
+ var pointThinningRate = timeDiff / config.numberPoints;
+ var numberAllIssues = issues.length;
+ var idealIssuesPerInterval = numberAllIssues / timeDiff;
+ var idealData = [];
+ var openIssues = [];
+ var values = [];
+ while ((from.getTime() <= to.getTime())) {
+ moveNewOpenIssues(issues, openIssues, from);
+ removeNewClosedIssues(openIssues, from);
+ var value = {x: from.toISOString(), y: openIssues.length};
+ values.push(value);
if (config.showIdeal) {
- valueSets.push(idealData);
+ var idealValue = Math.round((numberAllIssues - idealData.length * idealIssuesPerInterval * pointThinningRate) * 100) / 100;
+ var ideal = {x: from.toISOString(), y: idealValue};
+ idealData.push(ideal);
}
- return valueSets;
+ from.setTime(from.getTime() + pointThinningRate);
}
-
- function getChartData(config) {
- return redmineService.getIssuesForChart(config).then(function (issues) {
- config.numberPoints = 50;
- var from = new Date(config.timespan.fromDateTime);
- var to = new Date(config.timespan.toDateTime);
- return calculateOpenIssuesPerDay(from, to, issues, config);
- });
+ var valueSets = [values];
+ if (config.showIdeal) {
+ valueSets.push(idealData);
}
+ return valueSets;
+ }
- return {
- getChartData: getChartData
- };
+ function getChartData(config) {
+ return apiService.getIssuesForChart(config).then(function (issues) {
+ config.numberPoints = 50;
+ var from = new Date(config.timespan.fromDateTime);
+ var to = new Date(config.timespan.toDateTime);
+ return calculateOpenIssuesPerDay(from, to, issues, config);
+ });
+ }
+
+ return {
+ getChartData: getChartData
+ };
+}
+
+angular.module('adf.widget.redmine')
+ .factory('chartDataService', ["$q", "redmineService", function ($q, redmineService) {
+ return createChartDataService($q, redmineService);
}]);
+angular.module('adf.widget.easyredmine')
+ .factory('easyChartDataService', ["$q", "easyRedmineService", function ($q, easyRedmineService) {
+ return createChartDataService($q, easyRedmineService);
+ }]);
-angular.module('adf.widget.redmine')
- .controller('ChartController', ["chartData", "config", function (chartData, config) {
- var vm = this;
- vm.config = config;
- var options = {
- scales: {
- yAxes: [
- {
- id: 'y-axis-1',
+function createChartController(vm, chartData, config) {
+ vm.config = config;
+ var options = {
+ scales: {
+ yAxes: [
+ {
+ id: 'y-axis-1',
+ display: true,
+ position: 'left',
+ scaleLabel: {
display: true,
- position: 'left',
- scaleLabel: {
- display: true,
- labelString: 'Open Issues'
- }
+ labelString: 'Open Issues'
}
- ],
- xAxes: [
- {
- id: 'x-axis-1',
- type: 'time', time: {
- displayFormats: {
- day: 'D.MMM',
- week: 'D.MMM',
- month: 'MMM/YY',
- quarter: '[Q]Q - YYYY',
- year: 'YYYY'
- }
+ }
+ ],
+ xAxes: [
+ {
+ id: 'x-axis-1',
+ type: 'time', time: {
+ displayFormats: {
+ day: 'D.MMM',
+ week: 'D.MMM',
+ month: 'MMM/YY',
+ quarter: '[Q]Q - YYYY',
+ year: 'YYYY'
}
}
- ]
- },
- legend: {
- display: true,
- position: "bottom"
- },
- responsive: true
- };
-
- vm.chart = {
- data: chartData,
- series: [],
- class: "chart-line",
- options: options
- };
-
- if (vm.config.project && vm.config.project !== 'All') {
- vm.chart.series.push(angular.fromJson(vm.config.project).name);
- } else {
- vm.chart.series.push("All Projects");
- }
-
- if (vm.config.showIdeal) {
- vm.chart.series.push("Ideal");
- }
+ }
+ ]
+ },
+ legend: {
+ display: true,
+ position: "bottom"
+ },
+ responsive: true
+ };
+
+ vm.chart = {
+ data: chartData,
+ series: [],
+ class: "chart-line",
+ options: options
+ };
+
+ if (vm.config.project && vm.config.project !== 'All') {
+ vm.chart.series.push(angular.fromJson(vm.config.project).name);
+ } else {
+ vm.chart.series.push("All Projects");
+ }
+
+ if (vm.config.showIdeal) {
+ vm.chart.series.push("Ideal");
+ }
+}
+angular.module('adf.widget.redmine')
+ .controller('chartController', ["chartData", "config", function (chartData, config) {
+ return createChartController(this, chartData, config);
}]);
+angular.module('adf.widget.easyredmine')
+ .controller('easyChartController', ["chartData", "config", function (chartData, config) {
+ return createChartController(this, chartData, config);
+ }]);
-angular.module('adf.widget.redmine')
- .factory('redmineService', ["$http", "redmineEndpoint", "redmineRedirectEndpoint", "$q", function ($http, redmineEndpoint, redmineRedirectEndpoint, $q) {
-
- function extractData(response) {
- return response.data;
- }
-
- function request(param) {
- return $http.get(redmineEndpoint + param).then(extractData);
- }
- function getProjects() {
- return request('projects.json').then(function (data) {
- return data.projects;
- });
- }
+function apiService($http, apiEndpoint, apiEndpointRedirect, $q) {
+ function extractData(response) {
+ return response.data;
+ }
- function getVersions(project) {
- return request('projects/' + project + '/versions.json').then(function (data) {
- return data.versions;
- });
- }
+ function request(param) {
+ return $http.get(apiEndpoint + param).then(extractData);
+ }
- function getIssues(config) {
- var params = generateGeneralIssuesParameters(config);
- var limit = config.limit ? config.limit : Number.MAX_SAFE_INTEGER;
- return getIssuesWithParamsAndLimit(params, limit);
- }
+ function getProjects() {
+ return request('projects.json').then(function (data) {
+ return data.projects;
+ });
+ }
- function getIssuesForChart(config) {
- var allIssues = [];
- var limit = config.limit ? config.limit : Number.MAX_SAFE_INTEGER;
- var params1 = generateParametersForIssuesOpenOnEnd(config);
- var params2 = generateParametersForIssuesClosedBetweenStartAndEnd(config);
- var params3 = generateParametersForIssuesOpen(config);
- return $q.all([getIssuesWithParamsAndLimit(params1, limit), getIssuesWithParamsAndLimit(params2, limit),
- getIssuesWithParamsAndLimit(params3, limit)]).then(function(responses){
- angular.forEach(responses, function (issues) {
- angular.forEach(issues, function (issue) {
- allIssues.push(issue);
- });
+ function getVersions(project) {
+ return request('projects/' + project + '/versions.json').then(function (data) {
+ return data.versions;
+ });
+ }
+
+ function getIssues(config) {
+ var params = generateGeneralIssuesParameters(config);
+ var limit = config.limit ? config.limit : Number.MAX_SAFE_INTEGER;
+ return getIssuesWithParamsAndLimit(params, limit);
+ }
+
+ function getIssuesForChart(config) {
+ var allIssues = [];
+ var limit = config.limit ? config.limit : Number.MAX_SAFE_INTEGER;
+ var params1 = generateParametersForIssuesOpenOnEnd(config);
+ var params2 = generateParametersForIssuesClosedBetweenStartAndEnd(config);
+ var params3 = generateParametersForIssuesOpen(config);
+ return $q.all([getIssuesWithParamsAndLimit(params1, limit), getIssuesWithParamsAndLimit(params2, limit),
+ getIssuesWithParamsAndLimit(params3, limit)]).then(function (responses) {
+ angular.forEach(responses, function (issues) {
+ angular.forEach(issues, function (issue) {
+ allIssues.push(issue);
});
- return allIssues;
});
- }
+ return allIssues;
+ });
+ }
- function getIssuesWithParamsAndLimit(params, limit){
- var allIssues = [];
- return collectPageIssues(params, 0).then(function (issues) {
- angular.forEach(issues.issues, function (issue) {
- allIssues.push(issue);
- });
- var requests = [];
- for (var i = 100; i < issues.total_count && i < limit; i = i + 100) {
- requests.push(collectPageIssues(params, i));
- }
- if (params.length > 0) {
- return $q.all(requests).then(function (responses) {
- angular.forEach(responses, function (response) {
- angular.forEach(response.issues, function (issue) {
- allIssues.push(issue);
- });
+ function getIssuesWithParamsAndLimit(params, limit) {
+ var allIssues = [];
+ return collectPageIssues(params, 0).then(function (issues) {
+ angular.forEach(issues.issues, function (issue) {
+ allIssues.push(issue);
+ });
+ var requests = [];
+ for (var i = 100; i < issues.total_count && i < limit; i = i + 100) {
+ requests.push(collectPageIssues(params, i));
+ }
+ if (params.length > 0) {
+ return $q.all(requests).then(function (responses) {
+ angular.forEach(responses, function (response) {
+ angular.forEach(response.issues, function (issue) {
+ allIssues.push(issue);
});
- return allIssues;
});
- } else {
return allIssues;
- }
- });
- }
-
- function collectPageIssues(params, offset) {
- return request('issues.json' + params + '&offset=' + offset).then(function (issues) {
- return issues;
- });
- }
+ });
+ } else {
+ return allIssues;
+ }
+ });
+ }
- function generateParametersForIssuesOpenOnEnd(data) {
- var params = generateGeneralIssuesParameters(data);
+ function collectPageIssues(params, offset) {
+ return request('issues.json' + params + '&offset=' + offset).then(function (issues) {
+ return issues;
+ });
+ }
+
+ function generateParametersForIssuesOpenOnEnd(data) {
+ var params = generateGeneralIssuesParameters(data);
+ params += '&status_id=*';
+ var toDate = new Date(data.timespan.toDateTime);
+ params += '&created_on=<=' + dateToYMD(toDate);
+ params += '&closed_on=>=' + dateToYMD(toDate);
+ return params;
+ }
+
+ function generateParametersForIssuesOpen(data) {
+ var params = generateGeneralIssuesParameters(data);
+ params += '&status_id=open';
+ var toDate = new Date(data.timespan.toDateTime);
+ params += '&created_on=<=' + dateToYMD(toDate);
+ return params;
+ }
+
+ function generateParametersForIssuesClosedBetweenStartAndEnd(data) {
+ var params = generateGeneralIssuesParameters(data);
+ params += '&status_id=*';
+ var fromDate = new Date(data.timespan.fromDateTime);
+ var toDate = new Date(data.timespan.toDateTime);
+ params += '&closed_on=><' + dateToYMD(fromDate) + '|' + dateToYMD(toDate);
+ return params;
+ }
+
+ function generateGeneralIssuesParameters(data) {
+ var params = '?limit=100&sort=created_on';
+ if (data.project && data.project !== "All") {
+ params += '&project_id=' + angular.fromJson(data.project).id;
+ }
+ if (data.filterWithAssigned && data.assigned_to_id) {
+ params += '&assigned_to_id=' + data.assigned_to_id;
+ }
+ if (data.showClosed) {
params += '&status_id=*';
- var toDate = new Date(data.timespan.toDateTime);
- params += '&created_on=<=' + dateToYMD(toDate);
- params += '&closed_on=>=' + dateToYMD(toDate);
- return params;
}
-
- function generateParametersForIssuesOpen(data) {
- var params = generateGeneralIssuesParameters(data);
- params += '&status_id=open';
- var toDate = new Date(data.timespan.toDateTime);
- params += '&created_on=<=' + dateToYMD(toDate);
- return params;
+ if (data.filterWithVersion && data.version) {
+ params += '&fixed_version_id=' + angular.fromJson(data.version).id;
}
-
- function generateParametersForIssuesClosedBetweenStartAndEnd(data) {
- var params = generateGeneralIssuesParameters(data);
- params += '&status_id=*';
- var fromDate = new Date(data.timespan.fromDateTime);
- var toDate = new Date(data.timespan.toDateTime);
- params += '&closed_on=><' + dateToYMD(fromDate) + '|' + dateToYMD(toDate);
- return params;
+ if (data.filterWithTracker && data.tracker) {
+ params += '&tracker_id=' + angular.fromJson(data.tracker).id;
}
+ return params;
+ }
- function generateGeneralIssuesParameters(data) {
- var params = '?limit=100&sort=created_on';
- if (data.project && data.project !== "All") {
- params += '&project_id=' + angular.fromJson(data.project).id;
- }
- if (data.filterWithAssigned && data.assigned_to_id) {
- params += '&assigned_to_id=' + data.assigned_to_id;
- }
- if (data.showClosed) {
- params += '&status_id=*';
- }
- if (data.filterWithVersion && data.version) {
- params += '&fixed_version_id=' + angular.fromJson(data.version).id;
- }
- if (data.filterWithTracker && data.tracker) {
- params += '&tracker_id='+angular.fromJson(data.tracker).id;
- }
- return params;
- }
+ function dateToYMD(date) {
+ var d = date.getDate();
+ var m = date.getMonth() + 1;
+ var y = date.getFullYear();
+ return '' + y + '-' + (m <= 9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
+ }
- function dateToYMD(date) {
- var d = date.getDate();
- var m = date.getMonth() + 1;
- var y = date.getFullYear();
- return '' + y + '-' + (m <= 9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
- }
+ function getCustomQueries() {
+ return request('queries.json?limit=100');
+ }
- function getCustomQueries() {
- return request('queries.json?limit=100');
- }
+ function getIssuesByQueryId(queryId, projectId) {
+ return request('issues.json?query_id=' + queryId + '&project_id=' + projectId).then(function (data) {
+ return data.issues;
+ });
+ }
- function getIssuesByQueryId(queryId, projectId) {
- return request('issues.json?query_id=' + queryId + '&project_id=' + projectId).then(function(data){
- return data.issues;
- });
- }
+ function getRedmineEndpoint() {
+ return apiEndpoint;
+ }
- function getRedmineEndpoint(){
- return redmineEndpoint;
- }
+ function getRedmineRedirectEndpoint() {
+ return apiEndpointRedirect;
+ }
- function getRedmineRedirectEndpoint(){
- return redmineRedirectEndpoint;
- }
+ function getTrackers() {
+ return request('trackers.json').then(function (data) {
+ return data.trackers;
+ });
+ }
- function getTrackers() {
- return request('trackers.json').then(function (data) {
- return data.trackers;
- });
- }
+ function getMyIssues() {
+ return request('issues.json?assigned_to_id=me').then(function (data) {
+ return data;
+ });
+ }
+
+ return {
+ getIssues: getIssues,
+ getIssuesForChart: getIssuesForChart,
+ getProjects: getProjects,
+ getVersions: getVersions,
+ getCustomQueries: getCustomQueries,
+ getIssuesByQueryId: getIssuesByQueryId,
+ getRedmineEndpoint: getRedmineEndpoint,
+ getRedmineRedirectEndpoint: getRedmineRedirectEndpoint,
+ getTrackers: getTrackers,
+ getMyIssues: getMyIssues
+ };
+}
- function getMyIssues(){
- return request('issues.json?assigned_to_id=me').then(function(data){
- return data;
- });
- }
- return {
- getIssues: getIssues,
- getIssuesForChart: getIssuesForChart,
- getProjects: getProjects,
- getVersions: getVersions,
- getCustomQueries: getCustomQueries,
- getIssuesByQueryId: getIssuesByQueryId,
- getRedmineEndpoint: getRedmineEndpoint,
- getRedmineRedirectEndpoint: getRedmineRedirectEndpoint,
- getTrackers: getTrackers,
- getMyIssues : getMyIssues
- };
+angular.module('adf.widget.redmine')
+ .factory('redmineService', ["$http", "redmineEndpoint", "redmineRedirectEndpoint", "$q", function ($http, redmineEndpoint, redmineRedirectEndpoint, $q) {
+ return apiService($http, redmineEndpoint, redmineRedirectEndpoint, $q);
+ }]);
+
+angular.module('adf.widget.easyredmine')
+ .factory('easyRedmineService', ["$http", "easyRedmineEndpoint", "easyRedmineRedirectEndpoint", "$q", function ($http, easyRedmineEndpoint, easyRedmineRedirectEndpoint, $q) {
+ return apiService($http, easyRedmineEndpoint, easyRedmineRedirectEndpoint, $q);
}]);
})(window);
\ No newline at end of file
diff --git a/dist/adf-widget-redmine.min.js b/dist/adf-widget-redmine.min.js
index 0b44c66..98b1a87 100644
--- a/dist/adf-widget-redmine.min.js
+++ b/dist/adf-widget-redmine.min.js
@@ -1 +1 @@
-!function(e,t){"use strict";angular.module("adf.widget.redmine",["adf.provider","chart.js","ui.bootstrap.datepicker"]).constant("redmineEndpoint","http://localhost:3000/").config(["dashboardProvider",function(e){var t="Redmine",n={templateUrl:"{widgetsPath}/redmine/src/main/issues/edit/edit.html",controller:"editIssuesController",controllerAs:"vm",resolve:{projects:["redmineService",function(e){return e.getProjects()}]}},i={templateUrl:"{widgetsPath}/redmine/src/main/chart/edit/edit.html",controller:"editChartController",controllerAs:"vm",resolve:{projects:["redmineService",function(e){return e.getProjects()}]}};e.widget("redmine-custom-queries",{title:"Redmine Custom Queries",description:"Displays Issues from a Custom Query",category:t,templateUrl:"{widgetsPath}/redmine/src/main/issues/view.html",controller:"IssueController",controllerAs:"vm",resolve:{issues:["redmineService","config",function(e,t){if(t.customQuery)return e.getIssuesByQueryId(t.customQuery.id,t.customQuery.project_id)}]},edit:n}),e.widget("redmine-my-issues",{title:"My Redmine Issues",description:"Displays all issues assigned to me",category:t,templateUrl:"{widgetsPath}/redmine/src/main/issues/view.html",controller:"IssueController",controllerAs:"vm",resolve:{issues:["redmineService",function(e){return e.getMyIssues()}]}}),e.widget("redmine-chart",{title:"Redmine Chart",description:"Displays a burnup or burndown chart",category:t,templateUrl:"{widgetsPath}/redmine/src/main/chart/view.html",controller:"ChartController",controllerAs:"vm",resolve:{chartData:["chartDataService","config",function(e,t){if(t.project)return e.getChartData(t)}]},edit:i})}]),angular.module("adf.widget.redmine").run(["$templateCache",function(e){e.put("{widgetsPath}/redmine/src/main/chart/view.html",'Please configure the widget
'),e.put("{widgetsPath}/redmine/src/main/issues/view.html",'Please configure the widget
No issues found
'),e.put("{widgetsPath}/redmine/src/main/chart/edit/edit.html",''),e.put("{widgetsPath}/redmine/src/main/issues/edit/edit.html",'')}]),angular.module("adf.widget.redmine").controller("editIssuesController",["projects","config","redmineService",function(e,t,n){var i=this;i.possibleColumns={id:{name:"ID",show:!0},tracker:{name:"Tracker",show:!0},status:{name:"Status",show:!0},subject:{name:"Subject",show:!0},assignee:{name:"Assignee",show:!0},priority:{name:"Priority",show:!0}},n.getCustomQueries().then(function(e){e&&e.queries?i.customQueries=e.queries:i.customQueries=null}),angular.equals({},t)&&(t.columns=i.possibleColumns,t.project="",t.assigned_to_id="me",t.showClosed=!1),i.projects=e}]),angular.module("adf.widget.redmine").controller("editChartController",["projects","config","chartDataService","redmineService",function(e,t,n,i){function r(e){"version"===e?m.config.filterWithVersion=!0:"assigned"===e?m.config.filterWithAssigned=!0:"tracker"===e&&(m.config.filterWithTracker=!0),m.filterToAdd="none"}function s(){m.config.timespan.fromDateTime&&(m.config.timespan.fromDateTime=new Date(m.config.timespan.fromDateTime),m.config.timespan.toDateTime=new Date(m.config.timespan.toDateTime))}function o(){m.inlineOptions.minDate=m.inlineOptions.minDate?null:new Date,m.dateOptions.minDate=m.inlineOptions.minDate}function a(){if(m.config.project){if("All"===m.config.project)return void(m.versions=[]);i.getVersions(angular.fromJson(m.config.project).identifier).then(function(e){m.versions=e})}}function c(){m.config.filterWithVersion&&m.updateVersions()}function l(){m.config.timespan.toDateTime=new Date(angular.fromJson(m.config.version).due_date);var e=new Date(m.config.timespan.toDateTime);m.config.timespan.fromDateTime=e.setDate(e.getDate()-14)}function u(){i.getTrackers().then(function(e){m.trackers=e})}function d(e){var t=e.date,n=e.mode;if("day"===n)for(var i=new Date(t).setHours(0,0,0,0),r=0;r0?i.all(s).then(function(e){return angular.forEach(e,function(e){angular.forEach(e.issues,function(e){n.push(e)})}),n}):n})}function d(e,t){return s("issues.json"+e+"&offset="+t).then(function(e){return e})}function m(e){var t=f(e);t+="&status_id=*";var n=new Date(e.timespan.toDateTime);return t+="&created_on=<="+h(n),t+="&closed_on=>="+h(n)}function g(e){var t=f(e);t+="&status_id=open";var n=new Date(e.timespan.toDateTime);return t+="&created_on=<="+h(n)}function p(e){var t=f(e);t+="&status_id=*";var n=new Date(e.timespan.fromDateTime),i=new Date(e.timespan.toDateTime);return t+="&closed_on=><"+h(n)+"|"+h(i)}function f(e){var t="?limit=100&sort=created_on";return e.project&&"All"!==e.project&&(t+="&project_id="+angular.fromJson(e.project).id),e.filterWithAssigned&&e.assigned_to_id&&(t+="&assigned_to_id="+e.assigned_to_id),e.showClosed&&(t+="&status_id=*"),e.filterWithVersion&&e.version&&(t+="&fixed_version_id="+angular.fromJson(e.version).id),e.filterWithTracker&&e.tracker&&(t+="&tracker_id="+angular.fromJson(e.tracker).id),t}function h(e){var t=e.getDate(),n=e.getMonth()+1,i=e.getFullYear();return""+i+"-"+(n<=9?"0"+n:n)+"-"+(t<=9?"0"+t:t)}function v(){return s("queries.json?limit=100")}function y(e,t){return s("issues.json?query_id="+e+"&project_id="+t).then(function(e){return e.issues})}function b(){return t}function w(){return n}function k(){return s("trackers.json").then(function(e){return e.trackers})}function D(){return s("issues.json?assigned_to_id=me").then(function(e){return e})}return{getIssues:c,getIssuesForChart:l,getProjects:o,getVersions:a,getCustomQueries:v,getIssuesByQueryId:y,getRedmineEndpoint:b,getRedmineRedirectEndpoint:w,getTrackers:k,getMyIssues:D}}])}(window);
\ No newline at end of file
+!function(e,t){"use strict";function n(e){return{templateUrl:e?"{widgetsPath}/redmine/src/main/issues/edit/easyedit.html":"{widgetsPath}/redmine/src/main/issues/edit/edit.html",controller:e?"easyEditIssuesController":"editIssuesController",controllerAs:"vm",resolve:{projects:["redmineService","easyRedmineService",function(t,n){return e?n.getProjects():t.getProjects()}],customQueries:["redmineService","easyRedmineService",function(t,n){return e?n.getCustomQueries().then(function(e){return e.easy_queries}):t.getCustomQueries().then(function(e){return e.queries})}]}}}function i(e){return{templateUrl:"{widgetsPath}/redmine/src/main/chart/edit/edit.html",controller:e?"easyEditChartController":"editChartController",controllerAs:"vm",resolve:{projects:["redmineService","easyRedmineService",function(t,n){return e?n.getProjects():t.getProjects()}]}}}function o(e,t,i,o,s){e.widget(t,{title:i,description:"Displays issues from a custom query",category:o,templateUrl:"{widgetsPath}/redmine/src/main/issues/view.html",controller:s?"easyIssueController":"issueController",controllerAs:"vm",resolve:{issues:["redmineService","easyRedmineService","config",function(e,t,n){if(n.customQuery)return s?t.getIssuesByQueryId(n.customQuery.id,n.project.id):e.getIssuesByQueryId(n.customQuery.id,n.customQuery.project_id)}]},edit:n(s)})}function s(e,t,n,i,o){e.widget(t,{title:n,description:"Displays all issues assigned to me",category:i,templateUrl:"{widgetsPath}/redmine/src/main/issues/view.html",controller:o?"easyIssueController":"issueController",controllerAs:"vm",resolve:{issues:["redmineService","easyRedmineService",function(e,t){return o?t.getMyIssues():e.getMyIssues()}]}})}function r(e,t,n,o,s){e.widget(t,{title:n,description:"Displays a burnup or burndown chart",category:o,templateUrl:"{widgetsPath}/redmine/src/main/chart/view.html",controller:s?"easyChartController":"chartController",controllerAs:"vm",resolve:{chartData:["chartDataService","easyChartDataService","config",function(e,t,n){if(n.project)return s?t.getChartData(n):e.getChartData(n)}]},edit:i(s)})}function a(e,t,n,i){e.possibleColumns={id:{name:"ID",show:!0},tracker:{name:"Tracker",show:!0},status:{name:"Status",show:!0},subject:{name:"Subject",show:!0},assignee:{name:"Assignee",show:!0},priority:{name:"Priority",show:!0}},angular.equals({},i)&&(i.columns=e.possibleColumns,i.customQuery="",i.project="",i.assigned_to_id="me",i.showClosed=!1),e.projects=t,e.customQueries=n}function c(e,t,n,i,o){function s(t){"version"===t?e.config.filterWithVersion=!0:"assigned"===t?e.config.filterWithAssigned=!0:"tracker"===t&&(e.config.filterWithTracker=!0),e.filterToAdd="none"}function r(){e.config.timespan.fromDateTime&&(e.config.timespan.fromDateTime=new Date(e.config.timespan.fromDateTime),e.config.timespan.toDateTime=new Date(e.config.timespan.toDateTime))}function a(){e.inlineOptions.minDate=e.inlineOptions.minDate?null:new Date,e.dateOptions.minDate=e.inlineOptions.minDate}function c(){if(e.config.project){if("All"===e.config.project)return void(e.versions=[]);o.getVersions(angular.fromJson(e.config.project).identifier).then(function(t){e.versions=t})}}function l(){e.config.filterWithVersion&&e.updateVersions()}function u(){e.config.timespan.toDateTime=new Date(angular.fromJson(e.config.version).due_date);var t=new Date(e.config.timespan.toDateTime);e.config.timespan.fromDateTime=t.setDate(t.getDate()-14)}function d(){o.getTrackers().then(function(t){e.trackers=t})}function m(t){var n=t.date,i=t.mode;if("day"===i)for(var o=new Date(n).setHours(0,0,0,0),s=0;s0?i.all(s).then(function(e){return angular.forEach(e,function(e){angular.forEach(e.issues,function(e){n.push(e)})}),n}):n})}function d(e,t){return s("issues.json"+e+"&offset="+t).then(function(e){return e})}function m(e){var t=f(e);t+="&status_id=*";var n=new Date(e.timespan.toDateTime);return t+="&created_on=<="+h(n),t+="&closed_on=>="+h(n)}function p(e){var t=f(e);t+="&status_id=open";var n=new Date(e.timespan.toDateTime);return t+="&created_on=<="+h(n)}function g(e){var t=f(e);t+="&status_id=*";var n=new Date(e.timespan.fromDateTime),i=new Date(e.timespan.toDateTime);return t+="&closed_on=><"+h(n)+"|"+h(i)}function f(e){var t="?limit=100&sort=created_on";return e.project&&"All"!==e.project&&(t+="&project_id="+angular.fromJson(e.project).id),e.filterWithAssigned&&e.assigned_to_id&&(t+="&assigned_to_id="+e.assigned_to_id),e.showClosed&&(t+="&status_id=*"),e.filterWithVersion&&e.version&&(t+="&fixed_version_id="+angular.fromJson(e.version).id),e.filterWithTracker&&e.tracker&&(t+="&tracker_id="+angular.fromJson(e.tracker).id),t}function h(e){var t=e.getDate(),n=e.getMonth()+1,i=e.getFullYear();return""+i+"-"+(n<=9?"0"+n:n)+"-"+(t<=9?"0"+t:t)}function v(){return s("queries.json?limit=100")}function y(e,t){return s("issues.json?query_id="+e+"&project_id="+t).then(function(e){return e.issues})}function b(){return t}function w(){return n}function k(){return s("trackers.json").then(function(e){return e.trackers})}function j(){return s("issues.json?assigned_to_id=me").then(function(e){return e})}return{getIssues:c,getIssuesForChart:l,getProjects:r,getVersions:a,getCustomQueries:v,getIssuesByQueryId:y,getRedmineEndpoint:b,getRedmineRedirectEndpoint:w,getTrackers:k,getMyIssues:j}}angular.module("adf.widget.redmine",["adf.provider","chart.js","ui.bootstrap.datepicker"]).constant("redmineEndpoint","http://192.168.56.2/redmine/").constant("redmineRedirectEndpoint",null).config(["dashboardProvider",function(e){var t="Redmine";s(e,"redmine-my-issues","My Issues",t,!1),o(e,"redmine-custom-queries","Custom Queries",t,!1),r(e,"redmine-chart","Chart",t,!1)}]),angular.module("adf.widget.easyredmine",["adf.provider","chart.js","ui.bootstrap.datepicker"]).constant("easyRedmineEndpoint","http://192.168.56.2/easyredmine/").constant("easyRedmineRedirectEndpoint",null).config(["dashboardProvider",function(e){var t="EasyRedmine";s(e,"easyredmine-my-issues","My Issues",t,!0),o(e,"easyredmine-custom-queries","Custom Queries",t,!0)}]),angular.module("adf.widget.easyredmine").run(["$templateCache",function(e){e.put("{widgetsPath}/redmine/src/main/chart/view.html",'Please configure the widget
'),e.put("{widgetsPath}/redmine/src/main/issues/view.html",'Please configure the widget
No issues found
'),e.put("{widgetsPath}/redmine/src/main/chart/edit/edit.html",''),e.put("{widgetsPath}/redmine/src/main/issues/edit/easyedit.html",''),e.put("{widgetsPath}/redmine/src/main/issues/edit/edit.html",'')}]),angular.module("adf.widget.redmine").run(["$templateCache",function(e){e.put("{widgetsPath}/redmine/src/main/chart/view.html",'Please configure the widget
'),e.put("{widgetsPath}/redmine/src/main/issues/view.html",'Please configure the widget
No issues found
'),e.put("{widgetsPath}/redmine/src/main/chart/edit/edit.html",''),e.put("{widgetsPath}/redmine/src/main/issues/edit/easyedit.html",''),e.put("{widgetsPath}/redmine/src/main/issues/edit/edit.html",'')}]),angular.module("adf.widget.redmine").controller("editIssuesController",["projects","customQueries","config",function(e,t,n){return a(this,e,t,n)}]),angular.module("adf.widget.easyredmine").controller("easyEditIssuesController",["projects","customQueries","config",function(e,t,n){return a(this,e,t,n)}]),angular.module("adf.widget.redmine").controller("editChartController",["projects","config","chartDataService","redmineService",function(e,t,n,i){return c(this,e,t,n,i)}]),angular.module("adf.widget.easyredmine").controller("easyEditChartController",["projects","config","easyChartDataService","easyRedmineService",function(e,t,n,i){return c(this,e,t,n,i)}]),angular.module("adf.widget.redmine").controller("issueController",["issues","config","redmineService",function(e,t,n){return l(this,e,t,n)}]),angular.module("adf.widget.easyredmine").controller("easyIssueController",["issues","config","easyRedmineService",function(e,t,n){return l(this,e,t,n)}]),angular.module("adf.widget.redmine").factory("chartDataService",["$q","redmineService",function(e,t){return u(e,t)}]),angular.module("adf.widget.easyredmine").factory("easyChartDataService",["$q","easyRedmineService",function(e,t){return u(e,t)}]),angular.module("adf.widget.redmine").controller("chartController",["chartData","config",function(e,t){return d(this,e,t)}]),angular.module("adf.widget.easyredmine").controller("easyChartController",["chartData","config",function(e,t){return d(this,e,t)}]),angular.module("adf.widget.redmine").factory("redmineService",["$http","redmineEndpoint","redmineRedirectEndpoint","$q",function(e,t,n,i){return m(e,t,n,i)}]),angular.module("adf.widget.easyredmine").factory("easyRedmineService",["$http","easyRedmineEndpoint","easyRedmineRedirectEndpoint","$q",function(e,t,n,i){return m(e,t,n,i)}])}(window);
\ No newline at end of file
diff --git a/gulpfile.js b/gulpfile.js
index 359a7c6..ab0ef6b 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -3,6 +3,7 @@ var connect = require('gulp-connect');
var wiredep = require('wiredep').stream;
var $ = require('gulp-load-plugins')();
var del = require('del');
+var addsrc = require('gulp-add-src');
var jsReporter = require('jshint-stylish');
var annotateAdfPlugin = require('ng-annotate-adf-plugin');
var pkg = require('./package.json');
@@ -13,10 +14,14 @@ var annotateOptions = {
]
};
-var templateOptions = {
+var redmineTemplate = {
root: '{widgetsPath}/redmine/src/main',
module: 'adf.widget.redmine'
};
+var easyRedmineTemplate = {
+ root: '{widgetsPath}/redmine/src/main',
+ module: 'adf.widget.easyredmine'
+};
/** lint **/
@@ -36,13 +41,19 @@ gulp.task('lint', ['csslint', 'jslint']);
/** serve **/
-gulp.task('templates', function(){
- return gulp.src('src/**/*.html')
- .pipe($.angularTemplatecache('templates.tpl.js', templateOptions))
- .pipe(gulp.dest('.tmp/dist'));
+gulp.task('redmineTemplate', function(){
+ return gulp.src('src/main/**/*.html')
+ .pipe($.angularTemplatecache('redmineTemplates.tpl.js', redmineTemplate))
+ .pipe(gulp.dest('.tmp/dist'));
});
-gulp.task('sample', ['templates'], function(){
+gulp.task('easyRedmineTemplate', function(){
+ return gulp.src('src/main/**/*.html')
+ .pipe($.angularTemplatecache('easyRedmineTemplates.tpl.js', easyRedmineTemplate))
+ .pipe(gulp.dest('.tmp/dist'));
+});
+
+gulp.task('sample', ['redmineTemplate', 'easyRedmineTemplate'], function(){
var files = gulp.src(['src/main/**/*.js', 'src/main/**/*.css', 'src/main/**/*.less', '.tmp/dist/*.js'])
.pipe($.if('*.js', $.angularFilesort()));
@@ -85,7 +96,10 @@ gulp.task('css', function(){
gulp.task('js', function() {
gulp.src(['src/main/**/*.js', 'src/main/**/*.html'])
.pipe($.if('*.html', $.minifyHtml()))
- .pipe($.if('*.html', $.angularTemplatecache(pkg.name + '.tpl.js', templateOptions)))
+ .pipe($.if('*.html', $.angularTemplatecache(pkg.name + '.js', redmineTemplate)))
+ .pipe(addsrc('src/main/**/*.html')) //Add again for easyredmine as angularTemplatecache purges all html files from the pipe
+ .pipe($.if('*.html', $.minifyHtml()))
+ .pipe($.if('*.html', $.angularTemplatecache('adf-widget-redmine.js', easyRedmineTemplate)))
.pipe($.angularFilesort())
.pipe($.if('*.js', $.replace(/'use strict';/g, '')))
.pipe($.concat(pkg.name + '.js'))
diff --git a/package-lock.json b/package-lock.json
index 1c65e0b..ce1b7df 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -161,6 +161,15 @@
"micromatch": "^2.1.5"
}
},
+ "append-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz",
+ "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=",
+ "dev": true,
+ "requires": {
+ "buffer-equal": "^1.0.0"
+ }
+ },
"archy": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
@@ -488,6 +497,12 @@
"integrity": "sha1-vj5TgvwCttYySVasGvmKqYsIU0w=",
"dev": true
},
+ "buffer-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz",
+ "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=",
+ "dev": true
+ },
"bufferstreams": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/bufferstreams/-/bufferstreams-1.0.1.tgz",
@@ -529,6 +544,16 @@
"integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=",
"dev": true
},
+ "call-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz",
+ "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.0"
+ }
+ },
"caller-path": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
@@ -1136,6 +1161,23 @@
"clone": "^1.0.2"
}
},
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ },
+ "dependencies": {
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ }
+ }
+ },
"del": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/del/-/del-1.2.1.tgz",
@@ -2236,6 +2278,48 @@
}
}
},
+ "flush-write-stream": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+ "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.3.6"
+ },
+ "dependencies": {
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
"for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@@ -2311,6 +2395,16 @@
"rimraf": "^2.2.8"
}
},
+ "fs-mkdirp-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz",
+ "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "through2": "^2.0.3"
+ }
+ },
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -2327,6 +2421,12 @@
"nan": "^2.12.1"
}
},
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
"gaze": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz",
@@ -2349,6 +2449,17 @@
"is-property": "^1.0.0"
}
},
+ "get-intrinsic": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz",
+ "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1"
+ }
+ },
"get-stdin": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
@@ -2646,6 +2757,318 @@
}
}
},
+ "gulp-add-src": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gulp-add-src/-/gulp-add-src-1.0.0.tgz",
+ "integrity": "sha512-wmqf71/V/W4Ffi9lduaWAgNFcJW60TRqgc2lRv94d6I7j4rjHtVMHjnbwDH8RF0czGfJqYbs+ruecZXmwJopCQ==",
+ "dev": true,
+ "requires": {
+ "event-stream": "~3.1.5",
+ "streamqueue": "^0.1.1",
+ "through2": "~0.4.1",
+ "vinyl-fs": "~3.0.2"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+ "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
+ "dev": true
+ },
+ "event-stream": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.1.7.tgz",
+ "integrity": "sha1-tMVAAS0P4UmEIPPYlGAI22OTw3o=",
+ "dev": true,
+ "requires": {
+ "duplexer": "~0.1.1",
+ "from": "~0",
+ "map-stream": "~0.1.0",
+ "pause-stream": "0.0.11",
+ "split": "0.2",
+ "stream-combiner": "~0.0.4",
+ "through": "~2.3.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ }
+ },
+ "glob-stream": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz",
+ "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=",
+ "dev": true,
+ "requires": {
+ "extend": "^3.0.0",
+ "glob": "^7.1.1",
+ "glob-parent": "^3.1.0",
+ "is-negated-glob": "^1.0.0",
+ "ordered-read-streams": "^1.0.0",
+ "pumpify": "^1.3.5",
+ "readable-stream": "^2.1.5",
+ "remove-trailing-separator": "^1.0.1",
+ "to-absolute-glob": "^2.0.0",
+ "unique-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "ordered-read-streams": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
+ "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "replace-ext": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
+ "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==",
+ "dev": true
+ },
+ "split": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz",
+ "integrity": "sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=",
+ "dev": true,
+ "requires": {
+ "through": "2"
+ }
+ },
+ "through2": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz",
+ "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~1.0.17",
+ "xtend": "~2.1.1"
+ }
+ },
+ "unique-stream": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz",
+ "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==",
+ "dev": true,
+ "requires": {
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "through2-filter": "^3.0.0"
+ }
+ },
+ "vinyl": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz",
+ "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==",
+ "dev": true,
+ "requires": {
+ "clone": "^2.1.1",
+ "clone-buffer": "^1.0.0",
+ "clone-stats": "^1.0.0",
+ "cloneable-readable": "^1.0.0",
+ "remove-trailing-separator": "^1.0.1",
+ "replace-ext": "^1.0.0"
+ }
+ },
+ "vinyl-fs": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz",
+ "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==",
+ "dev": true,
+ "requires": {
+ "fs-mkdirp-stream": "^1.0.0",
+ "glob-stream": "^6.1.0",
+ "graceful-fs": "^4.0.0",
+ "is-valid-glob": "^1.0.0",
+ "lazystream": "^1.0.0",
+ "lead": "^1.0.0",
+ "object.assign": "^4.0.4",
+ "pumpify": "^1.3.5",
+ "readable-stream": "^2.3.3",
+ "remove-bom-buffer": "^3.0.0",
+ "remove-bom-stream": "^1.2.0",
+ "resolve-options": "^1.1.0",
+ "through2": "^2.0.0",
+ "to-through": "^2.0.0",
+ "value-or-function": "^3.0.0",
+ "vinyl": "^2.0.0",
+ "vinyl-sourcemap": "^1.1.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true
+ }
+ }
+ },
+ "xtend": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+ "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
+ "dev": true,
+ "requires": {
+ "object-keys": "~0.4.0"
+ }
+ }
+ }
+ },
"gulp-angular-filesort": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/gulp-angular-filesort/-/gulp-angular-filesort-1.1.1.tgz",
@@ -3778,6 +4201,15 @@
"pinkie-promise": "^2.0.0"
}
},
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
"has-ansi": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
@@ -3824,6 +4256,12 @@
"sparkles": "^1.0.0"
}
},
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
"hasha": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz",
@@ -4127,6 +4565,12 @@
"xtend": "^4.0.0"
}
},
+ "is-negated-glob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz",
+ "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=",
+ "dev": true
+ },
"is-number": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
@@ -4237,6 +4681,12 @@
"integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
"dev": true
},
+ "is-valid-glob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
+ "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=",
+ "dev": true
+ },
"is-windows": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz",
@@ -4469,6 +4919,12 @@
"jsonify": "~0.0.0"
}
},
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
@@ -4834,6 +5290,24 @@
"integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
"dev": true
},
+ "lazystream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
+ "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.5"
+ }
+ },
+ "lead": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz",
+ "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=",
+ "dev": true,
+ "requires": {
+ "flush-write-stream": "^1.0.2"
+ }
+ },
"less": {
"version": "2.7.2",
"resolved": "https://registry.npmjs.org/less/-/less-2.7.2.tgz",
@@ -5869,6 +6343,15 @@
"remove-trailing-separator": "^1.0.1"
}
},
+ "now-and-later": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz",
+ "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.2"
+ }
+ },
"null-check": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz",
@@ -5904,6 +6387,26 @@
"integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
"dev": true
},
+ "object.assign": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
+ "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "has-symbols": "^1.0.1",
+ "object-keys": "^1.1.1"
+ },
+ "dependencies": {
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ }
+ }
+ },
"object.defaults": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
@@ -6146,6 +6649,12 @@
"integrity": "sha1-Llfc5u/dN8NRhwEDCUTCK/OIt7Q=",
"dev": true
},
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
"path-exists": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
@@ -6316,6 +6825,61 @@
"dev": true,
"optional": true
},
+ "pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ },
+ "dependencies": {
+ "end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ }
+ }
+ },
+ "pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+ "dev": true,
+ "requires": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ },
+ "dependencies": {
+ "duplexify": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ }
+ }
+ },
"punycode": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
@@ -6502,6 +7066,27 @@
"is-primitive": "^2.0.0"
}
},
+ "remove-bom-buffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz",
+ "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5",
+ "is-utf8": "^0.2.1"
+ }
+ },
+ "remove-bom-stream": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz",
+ "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=",
+ "dev": true,
+ "requires": {
+ "remove-bom-buffer": "^3.0.0",
+ "safe-buffer": "^5.1.0",
+ "through2": "^2.0.3"
+ }
+ },
"remove-trailing-separator": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz",
@@ -6630,6 +7215,15 @@
"integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
"dev": true
},
+ "resolve-options": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz",
+ "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=",
+ "dev": true,
+ "requires": {
+ "value-or-function": "^3.0.0"
+ }
+ },
"response-time": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/response-time/-/response-time-1.0.0.tgz",
@@ -7087,6 +7681,36 @@
"integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
"dev": true
},
+ "streamqueue": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/streamqueue/-/streamqueue-0.1.3.tgz",
+ "integrity": "sha1-sQ1lFYr1ec46X0jJJ20B2yPU+LU=",
+ "dev": true,
+ "requires": {
+ "isstream": "~0.1.1",
+ "readable-stream": "~1.0.33"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ }
+ }
+ },
"string-length": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz",
@@ -7287,6 +7911,16 @@
}
}
},
+ "through2-filter": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz",
+ "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==",
+ "dev": true,
+ "requires": {
+ "through2": "~2.0.0",
+ "xtend": "~4.0.0"
+ }
+ },
"tildify": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz",
@@ -7355,12 +7989,67 @@
"os-tmpdir": "~1.0.1"
}
},
+ "to-absolute-glob": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
+ "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=",
+ "dev": true,
+ "requires": {
+ "is-absolute": "^1.0.0",
+ "is-negated-glob": "^1.0.0"
+ },
+ "dependencies": {
+ "is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+ "dev": true,
+ "requires": {
+ "is-relative": "^1.0.0",
+ "is-windows": "^1.0.1"
+ }
+ },
+ "is-relative": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+ "dev": true,
+ "requires": {
+ "is-unc-path": "^1.0.0"
+ }
+ },
+ "is-unc-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+ "dev": true,
+ "requires": {
+ "unc-path-regex": "^0.1.2"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ }
+ }
+ },
"to-array": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
"integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
"dev": true
},
+ "to-through": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz",
+ "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=",
+ "dev": true,
+ "requires": {
+ "through2": "^2.0.3"
+ }
+ },
"toposort": {
"version": "0.2.12",
"resolved": "https://registry.npmjs.org/toposort/-/toposort-0.2.12.tgz",
@@ -7542,6 +8231,12 @@
"spdx-expression-parse": "~1.0.0"
}
},
+ "value-or-function": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz",
+ "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=",
+ "dev": true
+ },
"verror": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz",
@@ -7657,6 +8352,55 @@
}
}
},
+ "vinyl-sourcemap": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz",
+ "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=",
+ "dev": true,
+ "requires": {
+ "append-buffer": "^1.0.2",
+ "convert-source-map": "^1.5.0",
+ "graceful-fs": "^4.1.6",
+ "normalize-path": "^2.1.1",
+ "now-and-later": "^2.0.0",
+ "remove-bom-buffer": "^3.0.0",
+ "vinyl": "^2.0.0"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+ "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
+ "dev": true
+ },
+ "replace-ext": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
+ "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz",
+ "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==",
+ "dev": true,
+ "requires": {
+ "clone": "^2.1.1",
+ "clone-buffer": "^1.0.0",
+ "clone-stats": "^1.0.0",
+ "cloneable-readable": "^1.0.0",
+ "remove-trailing-separator": "^1.0.1",
+ "replace-ext": "^1.0.0"
+ }
+ }
+ }
+ },
"vinyl-sourcemaps-apply": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
diff --git a/package.json b/package.json
index 3e2010f..7447eb1 100644
--- a/package.json
+++ b/package.json
@@ -17,6 +17,7 @@
"eslint-plugin-angular": "^2.4.0",
"eslint-plugin-jasmine": "^2.2.0",
"gulp": "^3.8.11",
+ "gulp-add-src": "^1.0.0",
"gulp-angular-filesort": "^1.1.1",
"gulp-angular-templatecache": "^1.6.0",
"gulp-concat": "^2.5.2",
diff --git a/sample/index.html b/sample/index.html
index 0bef789..b2c2fbc 100644
--- a/sample/index.html
+++ b/sample/index.html
@@ -50,10 +50,10 @@