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.

108 lines
3.3 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');
});
//Activate tooltips
$timeout(function() {
$(row).find("[data-toggle='tooltip']").tooltip();
});
});
}
};
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!');
}
}
}
}
});