app.directive('dhxScheduler', function() { return { restrict: 'A', scope: false, transclude: true, template:'
', link:function ($scope, $element, $attrs, $controller){ //default state of the scheduler if (!$scope.scheduler) $scope.scheduler = {}; $scope.scheduler.mode = $scope.scheduler.mode || "month"; $scope.scheduler.date = $scope.scheduler.date || new Date(); //watch data collection, reload on changes $scope.$watch($attrs.data, function(collection){ scheduler.clearAll(); scheduler.parse(collection, "json"); }, true); //mode or date $scope.$watch(function(){ return $scope.scheduler.mode + $scope.scheduler.date.toString(); }, function(nv, ov) { var mode = scheduler.getState(); if (nv.date != mode.date || nv.mode != mode.mode) scheduler.setCurrentView($scope.scheduler.date, $scope.scheduler.mode); }, true); //size of scheduler $scope.$watch(function() { return $element[0].offsetWidth + "." + $element[0].offsetHeight; }, function() { scheduler.setCurrentView(); }); //styling for dhtmlx scheduler $element.addClass("dhx_cal_container"); //init scheduler scheduler.init($element[0], $scope.scheduler.date, $scope.scheduler.mode); } } }); app.directive('dhxTemplate', ['$filter', function($filter){ scheduler.aFilter = $filter; return { restrict: 'AE', terminal:true, link:function($scope, $element, $attrs, $controller){ $element[0].style.display = 'none'; var template = $element[0].innerHTML; template = template.replace(/[\r\n]/g,"").replace(/"/g, "\\\"").replace(/\{\{event\.([^\}]+)\}\}/g, function(match, prop){ if (prop.indexOf("|") != -1){ var parts = prop.split("|"); return "\"+scheduler.aFilter('"+(parts[1]).trim()+"')(event."+(parts[0]).trim()+")+\""; } return '"+event.'+prop+'+"'; }); var templateFunc = Function('sd','ed','event', 'return "'+template+'"'); scheduler.templates[$attrs.dhxTemplate] = templateFunc; } }; }]);