summaryrefslogtreecommitdiffstats
path: root/js/vendor/angular-ui/modules/directives/calendar/calendar.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/vendor/angular-ui/modules/directives/calendar/calendar.js')
-rw-r--r--js/vendor/angular-ui/modules/directives/calendar/calendar.js66
1 files changed, 66 insertions, 0 deletions
diff --git a/js/vendor/angular-ui/modules/directives/calendar/calendar.js b/js/vendor/angular-ui/modules/directives/calendar/calendar.js
new file mode 100644
index 000000000..9aca0b057
--- /dev/null
+++ b/js/vendor/angular-ui/modules/directives/calendar/calendar.js
@@ -0,0 +1,66 @@
+/*
+* AngularJs Fullcalendar Wrapper for the JQuery FullCalendar
+* API @ http://arshaw.com/fullcalendar/
+*
+* Angular Calendar Directive that takes in the [eventSources] nested array object as the ng-model and watches (eventSources.length + eventSources[i].length) for changes.
+* Can also take in multiple event urls as a source object(s) and feed the events per view.
+* The calendar will watch any eventSource array and update itself when a delta is created
+* An equalsTracker attrs has been added for use cases that would render the overall length tracker the same even though the events have changed to force updates.
+*
+*/
+
+angular.module('ui.directives').directive('uiCalendar',['ui.config', '$parse', function (uiConfig,$parse) {
+ uiConfig.uiCalendar = uiConfig.uiCalendar || {};
+ //returns calendar
+ return {
+ require: 'ngModel',
+ restrict: 'A',
+ link: function(scope, elm, attrs, $timeout) {
+ var sources = scope.$eval(attrs.ngModel);
+ var tracker = 0;
+ /* returns the length of all source arrays plus the length of eventSource itself */
+ var getSources = function () {
+ var equalsTracker = scope.$eval(attrs.equalsTracker);
+ tracker = 0;
+ angular.forEach(sources,function(value,key){
+ if(angular.isArray(value)){
+ tracker += value.length;
+ }
+ });
+ if(angular.isNumber(equalsTracker)){
+ return tracker + sources.length + equalsTracker;
+ }else{
+ return tracker + sources.length;
+ }
+ };
+ /* update the calendar with the correct options */
+ function update() {
+ //calendar object exposed on scope
+ scope.calendar = elm.html('');
+ var view = scope.calendar.fullCalendar('getView');
+ if(view){
+ view = view.name; //setting the default view to be whatever the current view is. This can be overwritten.
+ }
+ /* If the calendar has options added then render them */
+ var expression,
+ options = {
+ defaultView : view,
+ eventSources: sources
+ };
+ if (attrs.uiCalendar) {
+ expression = scope.$eval(attrs.uiCalendar);
+ } else {
+ expression = {};
+ }
+ angular.extend(options, uiConfig.uiCalendar, expression);
+ scope.calendar.fullCalendar(options);
+ }
+ update();
+ /* watches all eventSources */
+ scope.$watch(getSources, function( newVal, oldVal )
+ {
+ update();
+ });
+ }
+ };
+}]); \ No newline at end of file