angular-gantt
Version:
Gantt chart component for AngularJS
137 lines (114 loc) • 5.45 kB
JavaScript
/*
Project: angular-gantt v1.2.9 - Gantt chart component for AngularJS
Authors: Marco Schweighauser, Rémi Alvergnat
License: MIT
Homepage: https://www.angular-gantt.com
Github: https://github.com/angular-gantt/angular-gantt.git
*/
(function(){
'use strict';
var moduleName = 'gantt.sortable';
var directiveName = 'ganttSortable';
var pluginDependencies = [
'gantt',
{module:'ang-drag-drop', url:'https://github.com/ganarajpr/angular-dragdrop.git#master'}
];
var failedDependencies = [];
var loadedDependencies = [];
var failedDependency;
for (var i = 0, l = pluginDependencies.length; i < l; i++) {
var currentDependency = pluginDependencies[i];
try {
if (angular.isString(currentDependency)) {
currentDependency = {module: currentDependency};
pluginDependencies[i] = currentDependency;
}
angular.module(currentDependency.module);
loadedDependencies.push(currentDependency.module);
} catch (e) {
currentDependency.exception = e;
failedDependencies.push(currentDependency);
}
}
if (failedDependencies.length > 0) {
angular.module(moduleName, []).directive(directiveName, ['$log', function($log) {
return {
restrict: 'E',
require: '^gantt',
scope: {
enabled: '=?'
},
link: function() {
$log.warn(moduleName + ' module can\'t require some dependencies:');
for (var i= 0,l =failedDependencies.length; i<l; i++) {
failedDependency = failedDependencies[i];
var errorMessage = failedDependency.module;
if (failedDependency.url) {
errorMessage += ' (' + failedDependency.url + ')';
}
if (failedDependency.exception && failedDependency.exception.message) {
errorMessage += ': ' + failedDependency.exception.message;
}
$log.warn(errorMessage);
}
$log.warn(directiveName + ' plugin directive won\'t be available');
}
};
}]);
} else {
angular.module(moduleName, loadedDependencies).directive(directiveName, ['ganttUtils', '$compile', function(utils, $compile) {
// Provides the row sort functionality to any Gantt row
// Uses the sortableState to share the current row
return {
restrict: 'E',
require: '^gantt',
scope: {
enabled: '=?'
},
link: function(scope, element, attrs, ganttCtrl) {
var api = ganttCtrl.gantt.api;
// Load options from global options attribute.
if (scope.options && typeof(scope.options.sortable) === 'object') {
for (var option in scope.options.sortable) {
scope[option] = scope.options[option];
}
}
if (scope.enabled === undefined) {
scope.enabled = true;
}
api.directives.on.new(scope, function(directiveName, rowScope, rowElement) {
if (directiveName === 'ganttRowLabel' && rowElement.attr('drag') === undefined) {
rowScope.checkDraggable = function() {
var rowSortable = rowScope.row.model.sortable;
if (typeof(rowSortable) === 'boolean') {
rowSortable = {enabled: rowSortable};
}
return utils.firstProperty([rowSortable], 'enabled', scope.enabled);
};
rowScope.onDropSuccess = function() {
rowScope.$evalAsync();
};
rowScope.onDrop = function(evt, data) {
var row = rowScope.row.rowsManager.rowsMap[data.id];
if (row !== rowScope) {
rowScope.row.rowsManager.moveRow(row, rowScope.row);
rowScope.$evalAsync();
}
};
rowElement.attr('ui-draggable', '{{checkDraggable()}}');
rowElement.attr('drag-channel', '\'sortable\'');
rowElement.attr('ui-on-drop', 'onDrop($event, $data)');
rowElement.attr('on-drop-success', 'onDropSuccess()');
rowElement.attr('drop-channel', '\'sortable\'');
rowElement.attr('drag', 'row.model');
$compile(rowElement)(rowScope);
}
});
}
};
}]);
}
}());
angular.module('gantt.sortable.templates', []).run(['$templateCache', function($templateCache) {
}]);
//# sourceMappingURL=angular-gantt-sortable-plugin.js.map