forked from Coded/SIPRP
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
3.1 KiB
102 lines
3.1 KiB
evoapp.directive('datatable', function($timeout, $filter, $compile) {
|
|
|
|
//http://www.ng-newsletter.com/posts/directives.html
|
|
|
|
return {
|
|
|
|
require: '^ngController',
|
|
restrict: 'A',
|
|
|
|
scope: true,//create an isolated scope for this directive
|
|
|
|
link : function (scope, element, attrs, controller) {
|
|
|
|
scope.rowSelector = attrs.rowSelector || 'tr';
|
|
|
|
scope.domEl = $(element);
|
|
|
|
scope.firstLoad = true;
|
|
|
|
if(scope.firstLoad)
|
|
{
|
|
scope.domEl.hide();
|
|
}
|
|
|
|
scope.rows = [];
|
|
|
|
scope.store = scope.$parent[attrs.store];
|
|
|
|
if(scope.store != undefined)
|
|
{
|
|
scope.$watch('store.items', function(newVal, oldVal){
|
|
|
|
if(newVal != null && newVal != undefined && newVal.length)
|
|
{
|
|
if(scope.firstLoad)
|
|
{
|
|
scope.domEl.fadeIn('slow');
|
|
|
|
scope.firstLoad = false;
|
|
}
|
|
|
|
if(newVal.length > 0)
|
|
{
|
|
//scope.noRecordsEl.hide();
|
|
scope.domEl.show();
|
|
|
|
scope.renderTable();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//scope.noRecordsEl.insertAfter(scope.domEl);
|
|
|
|
scope.domEl.hide();
|
|
//scope.noRecordsEl.show();
|
|
}
|
|
});
|
|
}
|
|
|
|
//TODO: find row with class datatable-selected-row and remove the class?
|
|
scope.deselectRows = function(){
|
|
|
|
angular.forEach(scope.rows, function(row){
|
|
|
|
$(row).removeClass('datatable-selected-row');
|
|
});
|
|
};
|
|
|
|
scope.renderTable = function(){
|
|
|
|
scope.rows = scope.domEl.find(scope.rowSelector);
|
|
|
|
if(scope.rows.length > 0)
|
|
{
|
|
angular.forEach(scope.rows, function(row){
|
|
|
|
$(row).click(function() {
|
|
|
|
scope.deselectRows();
|
|
|
|
$(row).addClass('datatable-selected-row');
|
|
});
|
|
});
|
|
}
|
|
};
|
|
|
|
if(attrs.itemId != undefined)
|
|
{
|
|
//add reference to this datatable, in controller
|
|
if(scope.$parent[attrs.itemId] == undefined)
|
|
{
|
|
scope.$parent[attrs.itemId] = scope;
|
|
}
|
|
else
|
|
{
|
|
throw Error('datatable ' + attrs.itemId + ' already exists!');
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}); |