summaryrefslogtreecommitdiffstats
path: root/js/app.scheduler.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/app.scheduler.js')
-rw-r--r--js/app.scheduler.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/js/app.scheduler.js b/js/app.scheduler.js
new file mode 100644
index 0000000..cd6fc44
--- /dev/null
+++ b/js/app.scheduler.js
@@ -0,0 +1,70 @@
+app.directive('dhxScheduler', function() {
+ return {
+ restrict: 'A',
+ scope: false,
+ transclude: true,
+ template:'<div class="dhx_cal_navline" ng-transclude></div><div class="dhx_cal_header"></div><div class="dhx_cal_data"></div>',
+
+
+
+ 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.mode, $scope.scheduler.date);
+ }
+ }
+});
+
+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;
+ }
+ };
+}]); \ No newline at end of file