. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
| Server IP : 85.13.141.101 / Your IP :
216.73.216.95 [
Web Server : Apache System : Linux dd40236 6.8.0-134-generic #134-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun 26 18:43:11 UTC 2026 x86_64 User : w00ad34b ( 1052) PHP Version : 8.2.30-nmm1 Disable Function : NONE Domains : 429 Domains MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /www/htdocs/w00ad34b/spd-cloud/apps/tasks/js/public/ |
Upload File : |
{"version":3,"sources":["app.js","controllers/appcontroller.js","controllers/detailscontroller.js","controllers/listcontroller.js","controllers/settingscontroller.js","controllers/taskscontroller.js","directives/appnavigationentryutils.js","directives/autofocusoninsert.js","directives/avatar.js","directives/colorpickerDirective.js","directives/confirmation.js","directives/datepicker.js","directives/occlickfocus.js","directives/timepicker.js","filters/counterFormatter.js","filters/dateDetails.js","filters/dateDetailsShort.js","filters/dateFromNow.js","filters/dateTaskList.js","filters/day.js","filters/dayTaskList.js","filters/percentDetails.js","filters/priorityDetails.js","filters/reminderDetails.js","filters/startDetails.js","filters/timeTaskList.js","services/calendarservice.js","services/davclient.js","services/icalfactory.js","services/loading.js","services/model.js","services/persistence.js","services/publisher.js","services/randomstringservice.js","services/request.js","services/status.js","services/vtodoservice.js","services/businesslayer/listsbusinesslayer.js","services/businesslayer/searchbusinesslayer.js","services/businesslayer/settingsbusinesslayer.js","services/businesslayer/tasksbusinesslayer.js","services/models/calendar.js","services/models/collectionsmodel.js","services/models/listsmodel.js","services/models/settingsmodel.js","services/models/tasksmodel.js","services/models/vtodo.js"],"names":["$","oc_requesttoken","undefined","attr","addClass","angular","config","$provide","$routeProvider","$interpolateProvider","$httpProvider","value","defaults","headers","common","requesttoken","when","otherwise","_update","run","$document","$rootScope","Config","$timeout","TasksBusinessLayer","ListsBusinessLayer","SearchBusinessLayer","Search","timeOutUpdate","taskUpdateInterval","OCA","tasks","moment","locale","event","calendar","$broadcast","sameDay","lastWeek","t","nextWeek","sameElse","diff","this","m","mm","h","hh","d","dd","M","MM","y","yy","AppController","controller","$scope","$route","status","$location","$routeParams","Loading","SettingsModel","Persistence","_$scope","_$listsbusinesslayer","_$route","_$status","_$timeout","_$location","_$routeparams","_Loading","_$settingsmodel","_persistence","newListName","settingsmodel","then","Promise","results","init","all","target","listparameter","length","route","calendarID","is","$event","closest","isUndefined","path","collectionID","focusTaskInput","addingList","addSubtaskTo","isLoading","DetailsController","$window","TasksModel","ListsModel","_$tasksmodel","_$window","_tasksbusinesslayer","_$listsmodel","task","getById","taskID","getByUri","cats","categories","found","add","id","timers","isAddingComment","names","durations","name","loadTask","TaskState","related","params","invert","slice","start","deleteTask","$apply","editName","writable","setEditRoute","currentTarget","initDueDate","initStartDate","initReminder","endEdit","resetRoute","keyCode","type","deletePercent","deleteReminder","deleteReminderDate","toggleCompleted","setPercentComplete","toggleStarred","complete","setPriority","isDue","date","isOverDue","overdue","setstartday","setstarttime","setStart","deleteStartDate","setdueday","setduetime","setDue","deleteDueDate","isAllDayPossible","toggleAllDay","setAllDay","allDay","due","setreminderday","setremindertime","setReminderDate","reminderType","reminder","isValid","setReminder","addComment","comment","CommentContent","tmpID","time","Date","now","data","sendComment","deleteComment","commentStrings","commentID","input","button","addCategory","default_categories","indexOf","category","model","doUpdate","push","removeCategory","ListController","CollectionsModel","CalendarService","_$routeParams","_$tasksbusinesslayer","_$collectionsmodel","_$searchbusinesslayer","_$calendarservice","collections","draggedTasks","nameError","getAll","color","deleteMessage","replace","displayname","getStandardList","uri","startCreate","e","tooltip","stopPropagation","focus","isAddingList","startEdit","prepareUpdate","download","url","open","checkNew","checkEdit","cancelEdit","checkName","allowed","$input","isNameAllowed","check","preventDefault","msg","placement","trigger","$on","s","calendarUri","resetToPreviousState","saveEdit","rename","isNameAlreadyTaken","getCount","filter","hideCollection","collection","show","getFilter","dragoverList","listID","index","dropList","item","changeCalendar","dragoverCollection","effectAllowed","dataTransfer","ctrlKey","dropCollection","changeCollection","dropEffect","SettingsController","Status","SettingsBusinessLayer","_$settingsbusinesslayer","collectionOptions","getStatus","startOfWeekOptions","setVisibility","setStartOfWeek","set","__indexOf","i","l","module","TasksController","_settingsbusinesslayer","_searchbusinesslayer","VTodo","vtodo","_vtodo","calendars","days","isAddingTask","focusInputField","addTask","taskName","_ref","parent","summary","priority","completed","note","startOf","format","openDetails","focusSubtaskInput","subtaskName","getAddString","isDefined","showSubtaskInput","taskname","hideSubtasks","uid","descendantIDs","loadedCompleted","toggle","filterTasks","getSubTasks","_i","_len","hideCompletedSubtasks","ret","hasNoParent","hasCompletedSubtasks","toggleSubtasks","toggleCompletedSubtasks","filterTasksByString","filteredTasks","dayHasEntry","taskAtDay","day","filterLists","getCountString","checkTaskInput","setLoadedCompleted","sortDue","sortStart","sortOrder","getSortOrderIcon","order","sortDirection","dropAsSubtask","parentID","changeParent","removeClass","newCalendar","queries","makeRootTask","children","allow","dragStart","dragEnd","directive","elm","find","menu","toggleClass","scope","avatar","userid","$observe","size","saturation","hue","isArray","lightness","huePrime","red","chroma","Math","abs","floor","secondComponent","green","blue","lightnessAdjustment","rgbToHex","round","r","g","b","Array","listofcolours","toString","parseInt","String","prototype","toHsl","forEach","hslToRgb","hsl","hash","hslcolour","customizedColors","restrict","templateUrl","filePath","colors","selected","element","randomizeColour","random","pick","confirmationFunction","confirmationMessage","ConfirmationController","$element","$attrs","$compile","countdown","message","hasClass","activate","bind","documentClick","html","unbind","onSelect","datepicker","inst","beforeShow","marginLeft","outerWidth","dp","css","margin-left","left","startOfWeek","minDate","options","selector","click","timeout","timepicker","atPosition","myPosition","minuteText","hourText","count","isDate","fromNow","percent","string","ds","token","duration","tokenName","after","_this","service","DavClient","Calendar","discoverHome","callback","propFind","buildUrl","OC","linkToRemoteBase","NS_DAV","requestToken","response","props","propStat","wasRequestSuccessful","textContent","_currentUserPrincipal","NS_IETF","body","properties","_CALENDAR_HOME","split","_PROPERTIES","NS_APPLE","NS_OWNCLOUD","responseCode","getResponseCodeFromHTTPResponse","doesSupportVTodo","components","attributes","getNamedItem","j","toLowerCase","get","href","substr","create","document","cMkcalendar","setAttribute","createDocument","createElement","xmlDoc","appendChild","dProp","dSet","_createXMLForProperty","outerHTML","_suggestUri","request","enabled","_takenUrls","update","dPropUpdate","updatedProperties","resetUpdatedProperties","delete","oShare","shareType","shareWith","existingShare","implementation","oSet","dHref","Share","SHARE_TYPE_USER","SHARE_TYPE_GROUP","oSummary","owner","oRW","Content-Type","users","sharedWith","oRemove","user","groups","propName","oEnabled","dDisplayname","aOrder","aColor","cComponents","cComp","toUpperCase","acl","canWrite","getElementsByTagNameNS","k","writeNode","_isUriAlreadyTaken","lastPart","positionLastDash","match","firstPart","client","xmlNamespaces","dav","Client","linkToRemote","DAV:","urn:ietf:params:xml:ns:caldav","http://apple.com/ns/ical/","http://owncloud.org/ns","http://nextcloud.com/ns","NS_NEXTCLOUD","NS_CALENDARSERVER","location","protocol","window","host","root","updatePropertyWithValue","version","factory","decrease","Model","_dataMap","_filterCache","_data","handle","_results","clearCache","_invalidateCache","entry","key","removeById","counter","splice","query","hashCode","exec","Request","$q","_$rootScope","_CalendarService","deferred","defer","successCallback","getCollections","getSettings","resolve","successCallbackWrapper","onSuccess","showLoading","failureCallbackWrapper","_request","onFailure","visibility","routeParams","setting","post","Publisher","_subscriptions","subscribeObjectTo","object","base","publishDataTo","ref","subscriber","generate","$http","publisher","initialized","shelvedRequests","_executeShelvedRequests","defaultConfig","defaultData","extend","method","catch","put","_shelveRequest","RandomStringService","cCalQuery","dGetEtag","cCalendarData","cFilter","cCompFilterVCal","cCompFilterVTodo","cPropFilterCompleted","cIsNotDefined","cTextMatch","cPropFilterRelated","cTextMatchValue","createTextNode","Depth","vTodos","lastIndexOf","vTodo","{urn:ietf:params:xml:ns:caldav}calendar-data","{DAV:}getetag","xhr","getResponseHeader","returnTodo","_generateRandomUri","console","log","cancel","etag","__bind","fn","me","setFilter","cleanSearch","attach","initialize","_$searchString","search","register","success","updateModel","VTodoService","_$vtodoservice","_$vtodo","ad","getTask","uncompleteParents","percentComplete","triggerUpdate","completeChildren","child","getChildren","getByUid","setHideSubtasks","hide","setHideCompletedSubtasks","momentToICALTime","asDate","ICAL","Time","fromDateString","reference","isAfter","olddue","clone","year","month","hour","minute","isBefore","isSame","subtract","oldstart","checkReminderDate","second","p","newreminder","reminderdate","action","rel","seg","week","secondsToSegments","w","newTask","newVTodo","requests","$filter","vjournal","vevent","shareable","_updatedProperties","_properties","hasOwnProperty","shares","access","readWrite","startsWith","origin","_setUpdated","c","fallbackColor","regex","_generateTextColor","_propertiesBackup","copy","dropPreviousState","toggleSharesEditor","list","brightness","editingShares","__hasProp","call","_Model","__super__","__extends","_super","Ctor","_nameCache","updateByUri","tmplist","_tmpIdCache","getColor","calendarcolor","getName","removeByList","taskIDs","calendarid","_j","_len1","startdiff","duediff","isLoaded","hasSubtasks","getUriByUid","getDescendantIDs","concat","current","today","needle","ancestors","objectExists","getAncestor","keys","searchCategories","taskUri","parentUri","icalfactory","loaded","jCal","Component","getAllSubcomponents","getFirstPropertyValue","updateLastModified","vtodos","removeProperty","completed_date","comp","toJSDate","getFirstProperty","getValues","setValues","prop","Property","addProperty","comments","addSubcomponent"],"mappings":"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","file":"app.min.js","sourcesContent":["'use strict';\n\n$('#content.app-tasks').attr('ng-app', 'Tasks');\n$('#content.app-tasks').attr('ng-cloak');\n$('#content.app-tasks').attr('ng-controller', 'AppController');\n$('#content.app-tasks').attr('ng-click', 'closeAll($event)');\n$('#content.app-tasks').addClass('handler');\n\nangular.module('Tasks', ['ngRoute', 'ngAnimate', 'ui.select', 'ngSanitize', 'dndLists']).config(['$provide', '$routeProvider', '$interpolateProvider', '$httpProvider', function ($provide, $routeProvider, $interpolateProvider, $httpProvider) {\n\t'use strict';\n\n\tvar config;\n\t$provide.value('Config', config = {\n\t\tmarkReadTimeout: 500,\n\t\ttaskUpdateInterval: 1000 * 600\n\t});\n\t$httpProvider.defaults.headers.common.requesttoken = oc_requesttoken;\n\t$routeProvider.when('/calendars/:calendarID', {}).when('/calendars/:calendarID/edit/:listparameter', {}).when('/calendars/:calendarID/tasks/:taskID', {}).when('/calendars/:calendarID/tasks/:taskID/settings', {}).when('/calendars/:calendarID/tasks/:taskID/edit/:parameter', {}).when('/collections/:collectionID/tasks/:taskID', {}).when('/collections/:collectionID/tasks/:taskID/settings', {}).when('/collections/:collectionID/tasks/:taskID/edit/:parameter', {}).when('/collections/:collectionID', {}).when('/search/:searchString', {}).when('/search/:searchString/tasks/:taskID', {}).when('/search/:searchString/tasks/:taskID/edit/:parameter', {}).otherwise({\n\t\tredirectTo: '/collections/all'\n\t});\n}]);\n\nangular.module('Tasks').run(['$document', '$rootScope', 'Config', '$timeout', 'ListsBusinessLayer', 'TasksBusinessLayer', 'SearchBusinessLayer', function ($document, $rootScope, Config, $timeout, TasksBusinessLayer, ListsBusinessLayer, SearchBusinessLayer) {\n\t'use strict';\n\n\tvar _update;\n\tvar init = false;\n\t(_update = function update() {\n\t\tvar timeOutUpdate;\n\t\ttimeOutUpdate = function timeOutUpdate() {\n\t\t\treturn $timeout(_update, Config.taskUpdateInterval);\n\t\t};\n\t\tinit = true;\n\t\treturn timeOutUpdate();\n\t}).call();\n\tOCA.Search.tasks = SearchBusinessLayer;\n\t$document.click(function (event) {\n\t\t$rootScope.$broadcast('documentClicked', event);\n\t});\n\tmoment.locale('details', {\n\t\tcalendar: {\n\t\t\tlastDay: '[' + t('tasks', 'Due yesterday') + '], HH:mm',\n\t\t\tsameDay: '[' + t('tasks', 'Due today') + '], HH:mm',\n\t\t\tnextDay: '[' + t('tasks', 'Due tomorrow') + '], HH:mm',\n\t\t\tlastWeek: '[' + t('tasks', 'Due on') + '] MMM DD, YYYY, HH:mm',\n\t\t\tnextWeek: '[' + t('tasks', 'Due on') + '] MMM DD, YYYY, HH:mm',\n\t\t\tsameElse: '[' + t('tasks', 'Due on') + '] MMM DD, YYYY, HH:mm'\n\t\t}\n\t});\n\tmoment.locale('details_allday', {\n\t\tcalendar: {\n\t\t\tlastDay: '[' + t('tasks', 'Due yesterday') + ']',\n\t\t\tsameDay: '[' + t('tasks', 'Due today') + ']',\n\t\t\tnextDay: '[' + t('tasks', 'Due tomorrow') + ']',\n\t\t\tlastWeek: '[' + t('tasks', 'Due on') + '] MMM DD, YYYY',\n\t\t\tnextWeek: '[' + t('tasks', 'Due on') + '] MMM DD, YYYY',\n\t\t\tsameElse: '[' + t('tasks', 'Due on') + '] MMM DD, YYYY'\n\t\t}\n\t});\n\tmoment.locale('start', {\n\t\tcalendar: {\n\t\t\tlastDay: '[' + t('tasks', 'Started yesterday') + '], HH:mm',\n\t\t\tsameDay: '[' + t('tasks', 'Starts today') + '], HH:mm',\n\t\t\tnextDay: '[' + t('tasks', 'Starts tomorrow') + '], HH:mm',\n\t\t\tlastWeek: '[' + t('tasks', 'Started on') + '] MMM DD, YYYY, HH:mm',\n\t\t\tnextWeek: '[' + t('tasks', 'Starts on') + '] MMM DD, YYYY, HH:mm',\n\t\t\tsameElse: function sameElse() {\n\t\t\t\tif (this.diff(moment()) > 0) {\n\t\t\t\t\treturn '[' + t('tasks', 'Starts on') + '] MMM DD, YYYY, HH:mm';\n\t\t\t\t} else {\n\t\t\t\t\treturn '[' + t('tasks', 'Started on') + '] MMM DD, YYYY, HH:mm';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\tmoment.locale('start_allday', {\n\t\tcalendar: {\n\t\t\tlastDay: '[' + t('tasks', 'Started yesterday') + ']',\n\t\t\tsameDay: '[' + t('tasks', 'Starts today') + ']',\n\t\t\tnextDay: '[' + t('tasks', 'Starts tomorrow') + ']',\n\t\t\tlastWeek: '[' + t('tasks', 'Started on') + '] MMM DD, YYYY',\n\t\t\tnextWeek: '[' + t('tasks', 'Starts on') + '] MMM DD, YYYY',\n\t\t\tsameElse: function sameElse() {\n\t\t\t\tif (this.diff(moment()) > 0) {\n\t\t\t\t\treturn '[' + t('tasks', 'Starts on') + '] MMM DD, YYYY';\n\t\t\t\t} else {\n\t\t\t\t\treturn '[' + t('tasks', 'Started on') + '] MMM DD, YYYY';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\tmoment.locale('reminder', {\n\t\tcalendar: {\n\t\t\tlastDay: t('tasks', '[Remind me yesterday at ]HH:mm'),\n\t\t\tsameDay: t('tasks', '[Remind me today at ]HH:mm'),\n\t\t\tnextDay: t('tasks', '[Remind me tomorrow at ]HH:mm'),\n\t\t\tlastWeek: t('tasks', '[Remind me on ]MMM DD, YYYY,[ at ]HH:mm'),\n\t\t\tnextWeek: t('tasks', '[Remind me on ]MMM DD, YYYY,[ at ]HH:mm'),\n\t\t\tsameElse: t('tasks', '[Remind me on ]MMM DD, YYYY,[ at ]HH:mm')\n\t\t}\n\t});\n\tmoment.locale('tasks', {\n\t\tcalendar: {\n\t\t\tlastDay: '[' + t('tasks', 'Yesterday') + ']',\n\t\t\tsameDay: '[' + t('tasks', 'Today') + ']',\n\t\t\tnextDay: '[' + t('tasks', 'Tomorrow') + ']',\n\t\t\tlastWeek: 'DD.MM.YYYY',\n\t\t\tnextWeek: 'DD.MM.YYYY',\n\t\t\tsameElse: 'DD.MM.YYYY'\n\t\t}\n\t});\n\tmoment.locale('details_short', {\n\t\tcalendar: {\n\t\t\tlastDay: '[' + t('tasks', 'Yesterday') + ']',\n\t\t\tsameDay: '[' + t('tasks', 'Today') + ']',\n\t\t\tnextDay: '[' + t('tasks', 'Tomorrow') + ']',\n\t\t\tlastWeek: 'MMM DD, YYYY',\n\t\t\tnextWeek: 'MMM DD, YYYY',\n\t\t\tsameElse: 'MMM DD, YYYY'\n\t\t}\n\t});\n\tmoment.locale('list_week', {\n\t\tcalendar: {\n\t\t\tlastDay: '[' + t('tasks', 'Yesterday') + ']',\n\t\t\tsameDay: '[' + t('tasks', 'Today') + '], MMM. DD',\n\t\t\tnextDay: '[' + t('tasks', 'Tomorrow') + '], MMM. DD',\n\t\t\tlastWeek: 'ddd, MMM. DD',\n\t\t\tnextWeek: 'ddd, MMM. DD',\n\t\t\tsameElse: 'ddd, MMM. DD'\n\t\t}\n\t});\n\treturn moment.locale('en', {\n\t\trelativeTime: {\n\t\t\tfuture: t('tasks', \"in %s\"),\n\t\t\tpast: t('tasks', \"%s ago\"),\n\t\t\ts: t('tasks', \"seconds\"),\n\t\t\tm: t('tasks', \"a minute\"),\n\t\t\tmm: t('tasks', \"%d minutes\"),\n\t\t\th: t('tasks', \"an hour\"),\n\t\t\thh: t('tasks', \"%d hours\"),\n\t\t\td: t('tasks', \"a day\"),\n\t\t\tdd: t('tasks', \"%d days\"),\n\t\t\tM: t('tasks', \"a month\"),\n\t\t\tMM: t('tasks', \"%d months\"),\n\t\t\ty: t('tasks', \"a year\"),\n\t\t\tyy: t('tasks', \"%d years\")\n\t\t}\n\t});\n}]);","'use strict';\n\nangular.module('Tasks').controller('AppController', ['$scope', '$rootScope', 'ListsBusinessLayer', '$route', 'Status', '$timeout', '$location', '$routeParams', 'Loading', 'SettingsModel', 'Persistence', function ($scope, $rootScope, ListsBusinessLayer, $route, status, $timeout, $location, $routeParams, Loading, SettingsModel, Persistence) {\n\t'use strict';\n\n\tvar AppController = function () {\n\t\tfunction AppController(_$scope, $rootScope, _$listsbusinesslayer, _$route, _$status, _$timeout, _$location, _$routeparams, _Loading, _$settingsmodel, _persistence) {\n\t\t\tthis._$scope = _$scope;\n\t\t\tthis._$listsbusinesslayer = _$listsbusinesslayer;\n\t\t\tthis._$route = _$route;\n\t\t\tthis._$status = _$status;\n\t\t\tthis._$timeout = _$timeout;\n\t\t\tthis._$location = _$location;\n\t\t\tthis._$routeparams = _$routeparams;\n\t\t\tthis._Loading = _Loading;\n\t\t\tthis._$settingsmodel = _$settingsmodel;\n\t\t\tthis._persistence = _persistence;\n\t\t\tthis._$scope.status = this._$status.getStatus();\n\t\t\tthis._$scope.route = this._$routeparams;\n\t\t\tthis._$scope.status.newListName = \"\";\n\t\t\tthis._$scope.settingsmodel = this._$settingsmodel;\n\n\t\t\tthis._$listsbusinesslayer.init().then(function (results) {\n\t\t\t\tPromise.all(results).then(function () {\n\t\t\t\t\t$scope.$apply();\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tthis._persistence.init();\n\n\t\t\tthis._$scope.closeAll = function ($event) {\n\t\t\t\tif ($($event.target).closest('.close-all').length || $($event.currentTarget).is($($event.target).closest('.handler'))) {\n\t\t\t\t\tif (!angular.isUndefined(_$scope.route.calendarID)) {\n\t\t\t\t\t\tif (_$scope.route.listparameter === 'name') {\n\t\t\t\t\t\t\t$rootScope.$broadcast('cancelEditCalendar', _$scope.route.calendarID);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_$location.path('/calendars/' + _$scope.route.calendarID);\n\t\t\t\t\t} else if (!angular.isUndefined(_$scope.route.collectionID)) {\n\t\t\t\t\t\t_$location.path('/collections/' + _$scope.route.collectionID);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_$location.path('/collections/all');\n\t\t\t\t\t}\n\t\t\t\t\t_$scope.status.addingList = false;\n\t\t\t\t\t_$scope.status.focusTaskInput = false;\n\t\t\t\t\t_$scope.status.newListName = \"\";\n\t\t\t\t}\n\t\t\t\tif (!$($event.target).closest('.newList').length) {\n\t\t\t\t\t_$scope.status.addingList = false;\n\t\t\t\t\t_$scope.status.newListName = \"\";\n\t\t\t\t}\n\t\t\t\tif (!$($event.target).closest('.add-subtask').length) {\n\t\t\t\t\t_$scope.status.addSubtaskTo = null;\n\t\t\t\t\t_$scope.status.focusSubtaskInput = false;\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._$scope.isLoading = function () {\n\t\t\t\treturn _Loading.isLoading();\n\t\t\t};\n\t\t}\n\t\treturn AppController;\n\t}();\n\treturn new AppController($scope, $rootScope, ListsBusinessLayer, $route, status, $timeout, $location, $routeParams, Loading, SettingsModel, Persistence);\n}]);","'use strict';\n\nangular.module('Tasks').controller('DetailsController', ['$scope', '$window', 'TasksModel', 'TasksBusinessLayer', '$route', '$location', '$timeout', '$routeParams', 'SettingsModel', 'Loading', 'ListsModel', function ($scope, $window, TasksModel, TasksBusinessLayer, $route, $location, $timeout, $routeParams, SettingsModel, Loading, ListsModel) {\n\t'use strict';\n\n\tvar DetailsController = function () {\n\t\tfunction DetailsController(_$scope, _$window, _$tasksmodel, _tasksbusinesslayer, _$route, _$location, _$timeout, _$routeparams, _$settingsmodel, _Loading, _$listsmodel) {\n\t\t\tthis._$scope = _$scope;\n\t\t\tthis._$window = _$window;\n\t\t\tthis._$tasksmodel = _$tasksmodel;\n\t\t\tthis._$listsmodel = _$listsmodel;\n\t\t\tthis._tasksbusinesslayer = _tasksbusinesslayer;\n\t\t\tthis._$route = _$route;\n\t\t\tthis._$location = _$location;\n\t\t\tthis._$timeout = _$timeout;\n\t\t\tthis._$routeparams = _$routeparams;\n\t\t\tthis._$settingsmodel = _$settingsmodel;\n\t\t\tthis._Loading = _Loading;\n\t\t\tthis._$scope.task = _$tasksmodel.getById(_$scope.route.taskID);\n\t\t\tthis._$scope.found = true;\n\t\t\tthis._$scope.$on('$routeChangeSuccess', function () {\n\t\t\t\tvar task = _$tasksmodel.getByUri(_$scope.route.taskID);\n\n\t\t\t\tif (!(angular.isUndefined(task) || task === null)) {\n\t\t\t\t\t_$scope.task = task;\n\t\t\t\t\t// Bind categories to task.cats as angular.ui/ui-select seems to have problems with Getter/Setter\n\t\t\t\t\t_$scope.task.cats = task.categories;\n\t\t\t\t\t_$scope.found = true;\n\t\t\t\t} else if (_$scope.route.taskID !== void 0) {\n\t\t\t\t\t_$scope.found = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._$scope.settingsmodel = this._$settingsmodel;\n\t\t\tthis._$scope.settingsmodel.add({\n\t\t\t\t'id': 'various',\n\t\t\t\t'categories': []\n\t\t\t});\n\t\t\tthis._$scope.isAddingComment = false;\n\t\t\tthis._$scope.timers = [];\n\t\t\tthis._$scope.durations = [{\n\t\t\t\tname: t('tasks', 'week'),\n\t\t\t\tnames: t('tasks', 'weeks'),\n\t\t\t\tid: 'week'\n\t\t\t}, {\n\t\t\t\tname: t('tasks', 'day'),\n\t\t\t\tnames: t('tasks', 'days'),\n\t\t\t\tid: 'day'\n\t\t\t}, {\n\t\t\t\tname: t('tasks', 'hour'),\n\t\t\t\tnames: t('tasks', 'hours'),\n\t\t\t\tid: 'hour'\n\t\t\t}, {\n\t\t\t\tname: t('tasks', 'minute'),\n\t\t\t\tnames: t('tasks', 'minutes'),\n\t\t\t\tid: 'minute'\n\t\t\t}, {\n\t\t\t\tname: t('tasks', 'second'),\n\t\t\t\tnames: t('tasks', 'seconds'),\n\t\t\t\tid: 'second'\n\t\t\t}];\n\t\t\tthis._$scope.loadTask = function (taskID) {\n\t\t\t\tvar task = _$tasksmodel.getByUri(_$scope.route.taskID);\n\t\t\t\tif (!(angular.isUndefined(task) || task === null)) {\n\t\t\t\t\t_$scope.task = task;\n\t\t\t\t\t_$scope.found = true;\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._$scope.TaskState = function () {\n\t\t\t\tif (_$scope.found) {\n\t\t\t\t\treturn 'found';\n\t\t\t\t} else {\n\t\t\t\t\tif (_Loading.isLoading()) {\n\t\t\t\t\t\treturn 'loading';\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._$scope.params = [{\n\t\t\t\tname: t('tasks', 'before beginning'),\n\t\t\t\tinvert: true,\n\t\t\t\trelated: 'START',\n\t\t\t\tid: \"10\"\n\t\t\t}, {\n\t\t\t\tname: t('tasks', 'after beginning'),\n\t\t\t\tinvert: false,\n\t\t\t\trelated: 'START',\n\t\t\t\tid: \"00\"\n\t\t\t}, {\n\t\t\t\tname: t('tasks', 'before end'),\n\t\t\t\tinvert: true,\n\t\t\t\trelated: 'END',\n\t\t\t\tid: \"11\"\n\t\t\t}, {\n\t\t\t\tname: t('tasks', 'after end'),\n\t\t\t\tinvert: false,\n\t\t\t\trelated: 'END',\n\t\t\t\tid: \"01\"\n\t\t\t}];\n\t\t\tthis._$scope.filterParams = function (params) {\n\t\t\t\tvar task;\n\t\t\t\ttask = _$tasksmodel.getById(_$scope.route.taskID);\n\t\t\t\tif (!(angular.isUndefined(task) || task === null)) {\n\t\t\t\t\tif (task.due && task.start) {\n\t\t\t\t\t\treturn params;\n\t\t\t\t\t} else if (task.start) {\n\t\t\t\t\t\treturn params.slice(0, 2);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn params.slice(2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._$scope.deleteTask = function (task) {\n\t\t\t\treturn _$timeout(function () {\n\t\t\t\t\treturn _tasksbusinesslayer.deleteTask(task).then(function () {\n\t\t\t\t\t\treturn $scope.$apply();\n\t\t\t\t\t});\n\t\t\t\t}, 500);\n\t\t\t};\n\t\t\tthis._$scope.triggerUpdate = function (task) {\n\t\t\t\t_tasksbusinesslayer.triggerUpdate(task);\n\t\t\t};\n\t\t\tthis._$scope.editName = function ($event, task) {\n\t\t\t\tif (task.calendar.writable) {\n\t\t\t\t\tif (!$($event.target).is('a')) {\n\t\t\t\t\t\t_$scope.setEditRoute('name');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._$scope.editDueDate = function ($event, task) {\n\t\t\t\tif (task.calendar.writable) {\n\t\t\t\t\tif ($($event.currentTarget).is($($event.target).closest('.handler'))) {\n\t\t\t\t\t\t_$scope.setEditRoute('duedate');\n\t\t\t\t\t\t_tasksbusinesslayer.initDueDate(task);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._$scope.editStart = function ($event, task) {\n\t\t\t\tif (task.calendar.writable) {\n\t\t\t\t\tif ($($event.currentTarget).is($($event.target).closest('.handler'))) {\n\t\t\t\t\t\t_$scope.setEditRoute('startdate');\n\t\t\t\t\t\t_tasksbusinesslayer.initStartDate(task);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._$scope.editReminder = function ($event, task) {\n\t\t\t\tif (task.calendar.writable) {\n\t\t\t\t\tif ($($event.currentTarget).is($($event.target).closest('.handler'))) {\n\t\t\t\t\t\t_$scope.setEditRoute('reminer');\n\t\t\t\t\t\treturn _tasksbusinesslayer.initReminder(_$scope.route.taskID);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._$scope.editNote = function ($event, task) {\n\t\t\t\tif (task.calendar.writable) {\n\t\t\t\t\tif ($($event.currentTarget).is($($event.target).closest('.handler'))) {\n\t\t\t\t\t\tif (!$($event.target).is('a')) {\n\t\t\t\t\t\t\t_$scope.setEditRoute('note');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._$scope.editPriority = function ($event, task) {\n\t\t\t\tif (task.calendar.writable) {\n\t\t\t\t\tif ($($event.currentTarget).is($($event.target).closest('.handler'))) {\n\t\t\t\t\t\t_$scope.setEditRoute('priority');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._$scope.editPercent = function ($event, task) {\n\t\t\t\tif (task.calendar.writable) {\n\t\t\t\t\tif ($($event.currentTarget).is($($event.target).closest('.handler'))) {\n\t\t\t\t\t\t_$scope.setEditRoute('percent');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._$scope.endEdit = function ($event) {\n\t\t\t\tif ($($event.target).closest('.end-edit').length || $($event.currentTarget).is($($event.target).closest('.handler'))) {\n\t\t\t\t\t_$scope.resetRoute();\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._$scope.endName = function ($event) {\n\t\t\t\tif ($event.keyCode === 13) {\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t\t_$scope.resetRoute();\n\t\t\t\t}\n\t\t\t\tif ($event.keyCode === 27) {\n\t\t\t\t\treturn _$scope.resetRoute();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis._$scope.setEditRoute = function (type) {\n\t\t\t\tvar calendarID = _$scope.route.calendarID;\n\t\t\t\tvar collectionID = _$scope.route.collectionID;\n\t\t\t\tif (calendarID) {\n\t\t\t\t\t$location.path('/calendars/' + calendarID + '/tasks/' + _$scope.route.taskID + '/edit/' + type);\n\t\t\t\t} else if (collectionID) {\n\t\t\t\t\t$location.path('/collections/' + collectionID + '/tasks/' + _$scope.route.taskID + '/edit/' + type);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis._$scope.resetRoute = function () {\n\t\t\t\tvar calendarID = _$scope.route.calendarID;\n\t\t\t\tvar collectionID = _$scope.route.collectionID;\n\t\t\t\tif (calendarID) {\n\t\t\t\t\t$location.path('/calendars/' + calendarID + '/tasks/' + _$scope.route.taskID);\n\t\t\t\t} else if (collectionID) {\n\t\t\t\t\t$location.path('/collections/' + collectionID + '/tasks/' + _$scope.route.taskID);\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._$scope.deletePercent = function (task) {\n\t\t\t\treturn _tasksbusinesslayer.setPercentComplete(task, 0);\n\t\t\t};\n\t\t\tthis._$scope.deleteReminder = function () {\n\t\t\t\treturn _tasksbusinesslayer.deleteReminderDate(_$scope.route.taskID);\n\t\t\t};\n\n\t\t\tthis._$scope.toggleCompleted = function (task) {\n\t\t\t\tif (task.completed) {\n\t\t\t\t\t_tasksbusinesslayer.setPercentComplete(task, 0);\n\t\t\t\t} else {\n\t\t\t\t\t_tasksbusinesslayer.setPercentComplete(task, 100);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis._$scope.setPercentComplete = function (task, complete) {\n\t\t\t\t_tasksbusinesslayer.setPercentComplete(task, complete);\n\t\t\t};\n\n\t\t\tthis._$scope.toggleStarred = function (task) {\n\t\t\t\tif (task.priority > 5) {\n\t\t\t\t\t_tasksbusinesslayer.setPriority(task, 0);\n\t\t\t\t} else {\n\t\t\t\t\t_tasksbusinesslayer.setPriority(task, 9);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis._$scope.deletePriority = function (task) {\n\t\t\t\treturn _tasksbusinesslayer.setPriority(task, 0);\n\t\t\t};\n\t\t\tthis._$scope.isDue = function (date) {\n\t\t\t\treturn _$tasksmodel.due(date);\n\t\t\t};\n\t\t\tthis._$scope.isOverDue = function (date) {\n\t\t\t\treturn _$tasksmodel.overdue(date);\n\t\t\t};\n\n\t\t\tthis._$scope.setstartday = function (date) {\n\t\t\t\treturn _tasksbusinesslayer.setStart(_$scope.task, moment(date, 'MM/DD/YYYY'), 'day');\n\t\t\t};\n\t\t\tthis._$scope.setstarttime = function (date) {\n\t\t\t\treturn _tasksbusinesslayer.setStart(_$scope.task, moment(date, 'HH:mm'), 'time');\n\t\t\t};\n\t\t\tthis._$scope.deleteStartDate = function (task) {\n\t\t\t\t_tasksbusinesslayer.deleteStartDate(task);\n\t\t\t};\n\n\t\t\tthis._$scope.setdueday = function (date) {\n\t\t\t\treturn _tasksbusinesslayer.setDue(_$scope.task, moment(date, 'MM/DD/YYYY'), 'day');\n\t\t\t};\n\t\t\tthis._$scope.setduetime = function (date) {\n\t\t\t\treturn _tasksbusinesslayer.setDue(_$scope.task, moment(date, 'HH:mm'), 'time');\n\t\t\t};\n\t\t\tthis._$scope.deleteDueDate = function (task) {\n\t\t\t\t_tasksbusinesslayer.deleteDueDate(task);\n\t\t\t};\n\n\t\t\tthis._$scope.isAllDayPossible = function (task) {\n\t\t\t\treturn !angular.isUndefined(task) && task.calendar.writable && (task.due || task.start);\n\t\t\t};\n\t\t\tthis._$scope.toggleAllDay = function (task) {\n\t\t\t\t_tasksbusinesslayer.setAllDay(task, !task.allDay);\n\t\t\t};\n\n\t\t\tthis._$scope.setreminderday = function (date) {\n\t\t\t\treturn _tasksbusinesslayer.setReminderDate(_$scope.route.taskID, moment(date, 'MM/DD/YYYY'), 'day');\n\t\t\t};\n\t\t\tthis._$scope.setremindertime = function (date) {\n\t\t\t\treturn _tasksbusinesslayer.setReminderDate(_$scope.route.taskID, moment(date, 'HH:mm'), 'time');\n\t\t\t};\n\t\t\tthis._$scope.reminderType = function (task) {\n\t\t\t\tif (!angular.isUndefined(task)) {\n\t\t\t\t\tif (task.reminder === null) {\n\t\t\t\t\t\tif (moment(task.start, \"YYYYMMDDTHHmmss\").isValid() || moment(task.due, \"YYYYMMDDTHHmmss\").isValid()) {\n\t\t\t\t\t\t\treturn 'DURATION';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn 'DATE-TIME';\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn task.reminder.type;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._$scope.changeReminderType = function (task) {\n\t\t\t\t_tasksbusinesslayer.checkReminderDate(task.id);\n\t\t\t\tif (this.reminderType(task) === 'DURATION') {\n\t\t\t\t\tif (task.reminder) {\n\t\t\t\t\t\ttask.reminder.type = 'DATE-TIME';\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttask.reminder = {\n\t\t\t\t\t\t\ttype: 'DATE-TIME'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (task.reminder) {\n\t\t\t\t\t\ttask.reminder.type = 'DURATION';\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttask.reminder = {\n\t\t\t\t\t\t\ttype: 'DURATION'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn _tasksbusinesslayer.setReminder(task.id);\n\t\t\t};\n\t\t\tthis._$scope.setReminderDuration = function (taskID) {\n\t\t\t\treturn _tasksbusinesslayer.setReminder(_$scope.route.taskID);\n\t\t\t};\n\t\t\tthis._$scope.addComment = function () {\n\t\t\t\tvar comment,\n\t\t\t\t _this = this;\n\t\t\t\tif (_$scope.CommentContent) {\n\t\t\t\t\t_$scope.isAddingComment = true;\n\t\t\t\t\tcomment = {\n\t\t\t\t\t\ttmpID: 'newComment' + Date.now(),\n\t\t\t\t\t\tcomment: _$scope.CommentContent,\n\t\t\t\t\t\ttaskID: _$scope.route.taskID,\n\t\t\t\t\t\ttime: moment().format('YYYYMMDDTHHmmss'),\n\t\t\t\t\t\tname: $('#expandDisplayName').text()\n\t\t\t\t\t};\n\t\t\t\t\t_tasksbusinesslayer.addComment(comment, function (data) {\n\t\t\t\t\t\t_$tasksmodel.updateComment(data);\n\t\t\t\t\t\t_$scope.isAddingComment = false;\n\t\t\t\t\t}, function () {\n\t\t\t\t\t\t_$scope.isAddingComment = false;\n\t\t\t\t\t});\n\t\t\t\t\t_$scope.CommentContent = '';\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._$scope.sendComment = function (event) {\n\t\t\t\tif (event.keyCode === 13) {\n\t\t\t\t\treturn _$scope.addComment();\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._$scope.deleteComment = function (commentID) {\n\t\t\t\treturn _tasksbusinesslayer.deleteComment(_$scope.route.taskID, commentID);\n\t\t\t};\n\t\t\tthis._$scope.commentStrings = function () {\n\t\t\t\treturn {\n\t\t\t\t\tbutton: t('tasks', 'Comment'),\n\t\t\t\t\tinput: t('tasks', 'Add a comment')\n\t\t\t\t};\n\t\t\t};\n\t\t\tthis._$scope.addCategory = function (category, model) {\n\t\t\t\t_$scope.task.categories = _$scope.task.cats;\n\t\t\t\tvar default_categories = _$scope.settingsmodel.getById('various').categories;\n\t\t\t\tif (default_categories.indexOf(category) < 0) {\n\t\t\t\t\tdefault_categories.push(category);\n\t\t\t\t}\n\t\t\t\t_tasksbusinesslayer.doUpdate(_$scope.task);\n\t\t\t};\n\t\t\tthis._$scope.removeCategory = function (category, model) {\n\t\t\t\t_$scope.task.categories = _$scope.task.cats;\n\t\t\t\t_tasksbusinesslayer.doUpdate(_$scope.task);\n\t\t\t};\n\t\t}\n\n\t\treturn DetailsController;\n\t}();\n\treturn new DetailsController($scope, $window, TasksModel, TasksBusinessLayer, $route, $location, $timeout, $routeParams, SettingsModel, Loading, ListsModel);\n}]);","'use strict';\n\nangular.module('Tasks').controller('ListController', ['$scope', '$rootScope', '$window', '$routeParams', 'ListsModel', 'TasksBusinessLayer', 'CollectionsModel', 'ListsBusinessLayer', '$location', 'SearchBusinessLayer', 'CalendarService', 'TasksModel', '$timeout', function ($scope, $rootScope, $window, $routeParams, ListsModel, TasksBusinessLayer, CollectionsModel, ListsBusinessLayer, $location, SearchBusinessLayer, CalendarService, TasksModel, $timeout) {\n\t'use strict';\n\n\tvar ListController;\n\tListController = function () {\n\t\tfunction ListController(_$scope, $rootScope, _$window, _$routeParams, _$listsmodel, _$tasksbusinesslayer, _$collectionsmodel, _$listsbusinesslayer, $location, _$searchbusinesslayer, _$calendarservice, _$tasksmodel, _$timeout) {\n\n\t\t\tthis._$scope = _$scope;\n\t\t\tthis._$window = _$window;\n\t\t\tthis._$routeParams = _$routeParams;\n\t\t\tthis._$listsmodel = _$listsmodel;\n\t\t\tthis._$tasksmodel = _$tasksmodel;\n\t\t\tthis._$tasksbusinesslayer = _$tasksbusinesslayer;\n\t\t\tthis._$collectionsmodel = _$collectionsmodel;\n\t\t\tthis._$listsbusinesslayer = _$listsbusinesslayer;\n\t\t\tthis.$location = $location;\n\t\t\tthis._$timeout = _$timeout;\n\t\t\tthis._$searchbusinesslayer = _$searchbusinesslayer;\n\t\t\tthis._$calendarservice = _$calendarservice;\n\t\t\tthis._$scope.collections = this._$collectionsmodel.getAll();\n\t\t\tthis._$scope.calendars = this._$listsmodel.getAll();\n\t\t\tthis._$scope.draggedTasks = [];\n\t\t\tthis._$scope.TasksBusinessLayer = this._$tasksbusinesslayer;\n\t\t\tthis._$scope.nameError = false;\n\t\t\tthis._$scope.color = '#31CC7C';\n\n\t\t\tthis._$scope.deleteMessage = function (calendar) {\n\t\t\t\treturn t('tasks', 'This will delete the calendar \"%s\" and all corresponding events and tasks.').replace('%s', calendar.displayname);\n\t\t\t};\n\n\t\t\tthis._$scope[\"delete\"] = function (calendar) {\n\t\t\t\treturn _$listsbusinesslayer[\"delete\"](calendar).then(function () {\n\t\t\t\t\t$location.path('/calendars/' + _$listsmodel.getStandardList().uri);\n\t\t\t\t\treturn $scope.$apply();\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tthis._$scope.startCreate = function (e) {\n\t\t\t\t_$scope.status.addingList = true;\n\t\t\t\t_$scope.nameError = false;\n\t\t\t\t$('.hasTooltip').tooltip('hide');\n\t\t\t\t_$timeout(function () {\n\t\t\t\t\t$('#newList').focus();\n\t\t\t\t}, 50);\n\t\t\t\te.stopPropagation();\n\t\t\t};\n\n\t\t\tthis._$scope.create = function () {\n\t\t\t\tvar check = _$scope.isNameAllowed(_$scope.status.newListName);\n\t\t\t\tif (check.allowed) {\n\t\t\t\t\t_$scope.status.addingList = false;\n\t\t\t\t\t_$scope.isAddingList = true;\n\t\t\t\t\t_$listsbusinesslayer.add(_$scope.status.newListName, _$scope.color).then(function (calendar) {\n\t\t\t\t\t\t$location.path('/calendars/' + calendar.uri);\n\t\t\t\t\t\treturn $scope.$apply();\n\t\t\t\t\t});\n\t\t\t\t\t_$scope.status.newListName = '';\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis._$scope.cancelCreate = function () {\n\t\t\t\t$('.hasTooltip').tooltip('hide');\n\t\t\t\t_$scope.nameError = false;\n\t\t\t\t_$scope.status.addingList = false;\n\t\t\t\t_$scope.status.newListName = \"\";\n\t\t\t};\n\n\t\t\tthis._$scope.startEdit = function (e, calendar) {\n\t\t\t\t_$scope.status.addingList = false;\n\t\t\t\t_$scope.nameError = false;\n\t\t\t\t$('.hasTooltip').tooltip('hide');\n\t\t\t\tcalendar.prepareUpdate();\n\t\t\t\t$location.path('/calendars/' + _$scope.route.calendarID + '/edit/name');\n\t\t\t\t_$timeout(function () {\n\t\t\t\t\t$('#list_' + calendar.uri + ' input.edit').focus();\n\t\t\t\t}, 50);\n\t\t\t\te.stopPropagation();\n\t\t\t};\n\n\t\t\tthis._$scope.showCalDAVUrl = function (e, calendar) {\n\t\t\t\t_$scope.status.addingList = false;\n\t\t\t\t_$scope.nameError = false;\n\t\t\t\t$location.path('/calendars/' + _$scope.route.calendarID + '/edit/caldav');\n\t\t\t\t_$timeout(function () {\n\t\t\t\t\t$('#list_' + calendar.uri + ' input.caldav').focus();\n\t\t\t\t}, 50);\n\t\t\t\te.stopPropagation();\n\t\t\t};\n\n\t\t\tthis._$scope.hideCalDAVUrl = function () {\n\t\t\t\t$location.path('/calendars/' + _$scope.route.calendarID);\n\t\t\t};\n\n\t\t\tthis._$scope.download = function (calendar) {\n\t\t\t\tvar url = calendar.url;\n\t\t\t\t// cut off last slash to have a fancy name for the ics\n\t\t\t\tif (url.slice(url.length - 1) === '/') {\n\t\t\t\t\turl = url.slice(0, url.length - 1);\n\t\t\t\t}\n\t\t\t\turl += '?export';\n\t\t\t\t$window.open(url);\n\t\t\t};\n\n\t\t\tthis._$scope.checkNew = function (event, name) {\n\t\t\t\t_$scope.checkName(event, name);\n\t\t\t};\n\n\t\t\tthis._$scope.checkEdit = function (event, calendar) {\n\t\t\t\t_$scope.checkName(event, calendar.displayname, calendar.uri);\n\t\t\t\tif (event.keyCode === 27) {\n\t\t\t\t\t_$scope.cancelEdit(calendar);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis._$scope.checkName = function (event, name, uri) {\n\t\t\t\tvar check = _$scope.isNameAllowed(name, uri);\n\t\t\t\tvar $input = $(event.currentTarget);\n\t\t\t\tif (!check.allowed) {\n\t\t\t\t\t$input.attr('title', check.msg).tooltip({ placement: 'bottom', trigger: 'manual' }).tooltip('fixTitle').tooltip('show');\n\t\t\t\t\t_$scope.nameError = true;\n\t\t\t\t} else {\n\t\t\t\t\t$input.tooltip('hide');\n\t\t\t\t\t_$scope.nameError = false;\n\t\t\t\t}\n\t\t\t\tif (event.keyCode === 27) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t$input.tooltip('hide');\n\t\t\t\t\t_$scope.status.addingList = false;\n\t\t\t\t\t_$scope.status.newListName = \"\";\n\t\t\t\t\t_$scope.nameError = false;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t$rootScope.$on('cancelEditCalendar', function (s, calendarUri) {\n\t\t\t\tvar calendar = _$listsmodel.getByUri(calendarUri);\n\t\t\t\t_$scope.cancelEdit(calendar);\n\t\t\t});\n\n\t\t\tthis._$scope.cancelEdit = function (calendar) {\n\t\t\t\tcalendar.resetToPreviousState();\n\t\t\t\t$('.hasTooltip').tooltip('hide');\n\t\t\t\t_$scope.nameError = false;\n\t\t\t\t$location.path('/calendars/' + _$scope.route.calendarID);\n\t\t\t};\n\n\t\t\tthis._$scope.saveEdit = function (calendar) {\n\t\t\t\tvar check = _$scope.isNameAllowed(calendar.displayname, calendar.uri);\n\t\t\t\tif (check.allowed) {\n\t\t\t\t\t_$listsbusinesslayer.rename(calendar);\n\t\t\t\t\t$location.path('/calendars/' + _$scope.route.calendarID);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis._$scope.isNameAllowed = function (name, uri) {\n\t\t\t\tvar check = {\n\t\t\t\t\tallowed: false,\n\t\t\t\t\tmsg: ''\n\t\t\t\t};\n\t\t\t\tif (_$listsmodel.isNameAlreadyTaken(name, uri)) {\n\t\t\t\t\tcheck.msg = t('tasks', 'The name \"%s\" is already used.').replace('%s', name);\n\t\t\t\t} else if (!name) {\n\t\t\t\t\tcheck.msg = t('tasks', 'An empty name is not allowed.');\n\t\t\t\t} else {\n\t\t\t\t\tcheck.allowed = true;\n\t\t\t\t}\n\t\t\t\treturn check;\n\t\t\t};\n\n\t\t\tthis._$scope.getCollectionCount = function (collectionID) {\n\t\t\t\tvar filter;\n\t\t\t\tfilter = _$searchbusinesslayer.getFilter();\n\t\t\t\treturn _$collectionsmodel.getCount(collectionID, filter);\n\t\t\t};\n\n\t\t\tthis._$scope.hideCollection = function (collectionID) {\n\t\t\t\tvar collection;\n\t\t\t\tcollection = _$collectionsmodel.getById(collectionID);\n\t\t\t\tswitch (collection.show) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\treturn this.getCollectionCount(collectionID) < 1;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis._$scope.getCollectionString = function (collectionID) {\n\t\t\t\tvar filter;\n\t\t\t\tif (collectionID !== 'completed') {\n\t\t\t\t\tfilter = _$searchbusinesslayer.getFilter();\n\t\t\t\t\treturn _$collectionsmodel.getCount(collectionID, filter);\n\t\t\t\t} else {\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis._$scope.getListCount = function (listID, type) {\n\t\t\t\tvar filter;\n\t\t\t\tfilter = _$searchbusinesslayer.getFilter();\n\t\t\t\treturn _$listsmodel.getCount(listID, type, filter);\n\t\t\t};\n\n\t\t\tthis._$scope.dragoverList = function ($event, index) {\n\t\t\t\tvar calendarID = $($event.target).closest('li.list').attr('calendarID');\n\t\t\t\tvar calendar = _$listsmodel.getByUri(calendarID);\n\t\t\t\treturn calendar.writable;\n\t\t\t};\n\n\t\t\tthis._$scope.dropList = function ($event, index, item) {\n\t\t\t\tif ($event.dataTransfer.dropEffect === 'move') {\n\t\t\t\t\t// we can't simply use item as task, since the directive seems to not copy all properties --> task.calendar.uri == undefined\n\t\t\t\t\tvar task = _$tasksmodel.getByUri(item.uri);\n\t\t\t\t\tvar calendarID = $($event.target).closest('li.list').attr('calendarID');\n\t\t\t\t\tvar calendar = _$listsmodel.getByUri(calendarID);\n\t\t\t\t\t_$tasksbusinesslayer.changeCalendar(task, calendar).then(function () {\n\t\t\t\t\t\t_$scope.$apply();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t};\n\n\t\t\tthis._$scope.dragoverCollection = function ($event, index) {\n\t\t\t\tif ($event.dataTransfer.effectAllowed === 'copy' || $event.dataTransfer.effectAllowed === 'copyMove' && $event.ctrlKey) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar collectionID;\n\t\t\t\tcollectionID = $($event.target).closest('li.collection').attr('collectionID');\n\t\t\t\treturn collectionID === 'starred' || collectionID === 'completed' || collectionID === 'today';\n\t\t\t};\n\n\t\t\tthis._$scope.dropCollection = function ($event, index, item) {\n\t\t\t\tif ($event.dataTransfer.dropEffect === 'move') {\n\t\t\t\t\tvar collectionID = $($event.target).closest('li.collection').attr('collectionID');\n\t\t\t\t\t_$tasksbusinesslayer.changeCollection(item.uri, collectionID);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t};\n\t\t}\n\t\treturn ListController;\n\t}();\n\treturn new ListController($scope, $rootScope, $window, $routeParams, ListsModel, TasksBusinessLayer, CollectionsModel, ListsBusinessLayer, $location, SearchBusinessLayer, CalendarService, TasksModel, $timeout);\n}]);","'use strict';\n\nangular.module('Tasks').controller('SettingsController', ['$scope', '$window', 'Status', '$location', 'CollectionsModel', 'SettingsBusinessLayer', 'SettingsModel', function ($scope, $window, Status, $location, CollectionsModel, SettingsBusinessLayer, SettingsModel) {\n\t'use strict';\n\n\tvar SettingsController;\n\tSettingsController = function () {\n\t\tfunction SettingsController(_$scope, _$window, _$status, _$location, _$collectionsmodel, _$settingsbusinesslayer, _$settingsmodel) {\n\t\t\tvar _this = this;\n\t\t\tthis._$scope = _$scope;\n\t\t\tthis._$window = _$window;\n\t\t\tthis._$status = _$status;\n\t\t\tthis._$location = _$location;\n\t\t\tthis._$collectionsmodel = _$collectionsmodel;\n\t\t\tthis._$settingsbusinesslayer = _$settingsbusinesslayer;\n\t\t\tthis._$settingsmodel = _$settingsmodel;\n\t\t\tthis._$scope.status = this._$status.getStatus();\n\t\t\tthis._$scope.collections = this._$collectionsmodel.getAll();\n\t\t\tthis._$scope.settingsmodel = this._$settingsmodel;\n\t\t\tthis._$scope.collectionOptions = [{\n\t\t\t\tid: 0,\n\t\t\t\tname: t('tasks', 'Hidden')\n\t\t\t}, {\n\t\t\t\tid: 1,\n\t\t\t\tname: t('tasks', 'Visible')\n\t\t\t}, {\n\t\t\t\tid: 2,\n\t\t\t\tname: t('tasks', 'Automatic')\n\t\t\t}];\n\t\t\tthis._$scope.startOfWeekOptions = [{\n\t\t\t\tid: 0,\n\t\t\t\tname: t('tasks', 'Sunday')\n\t\t\t}, {\n\t\t\t\tid: 1,\n\t\t\t\tname: t('tasks', 'Monday')\n\t\t\t}, {\n\t\t\t\tid: 2,\n\t\t\t\tname: t('tasks', 'Tuesday')\n\t\t\t}, {\n\t\t\t\tid: 3,\n\t\t\t\tname: t('tasks', 'Wednesday')\n\t\t\t}, {\n\t\t\t\tid: 4,\n\t\t\t\tname: t('tasks', 'Thursday')\n\t\t\t}, {\n\t\t\t\tid: 5,\n\t\t\t\tname: t('tasks', 'Friday')\n\t\t\t}, {\n\t\t\t\tid: 6,\n\t\t\t\tname: t('tasks', 'Saturday')\n\t\t\t}];\n\t\t\tthis._$scope.setVisibility = function (collectionID) {\n\t\t\t\tvar collection;\n\t\t\t\tcollection = _$collectionsmodel.getById(collectionID);\n\t\t\t\treturn _$settingsbusinesslayer.setVisibility(collectionID, collection.show);\n\t\t\t};\n\t\t\tthis._$scope.setStartOfWeek = function () {\n\t\t\t\treturn _$settingsbusinesslayer.set('various', 'startOfWeek', _$settingsmodel.getById('various').startOfWeek);\n\t\t\t};\n\t\t}\n\n\t\treturn SettingsController;\n\t}();\n\treturn new SettingsController($scope, $window, Status, $location, CollectionsModel, SettingsBusinessLayer, SettingsModel);\n}]);","'use strict';\n\n(function () {\n\t'use strict';\n\n\tvar __indexOf = [].indexOf || function (item) {\n\t\tfor (var i = 0, l = this.length; i < l; i++) {\n\t\t\tif (i in this && this[i] === item) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\tangular.module('Tasks').controller('TasksController', ['$scope', '$window', '$routeParams', 'TasksModel', 'ListsModel', 'CollectionsModel', 'TasksBusinessLayer', '$location', 'SettingsBusinessLayer', 'SearchBusinessLayer', 'VTodo', 'SettingsModel', function ($scope, $window, $routeParams, TasksModel, ListsModel, CollectionsModel, TasksBusinessLayer, $location, SettingsBusinessLayer, SearchBusinessLayer, VTodo, SettingsModel) {\n\t\tvar TasksController;\n\t\tTasksController = function () {\n\t\t\tfunction TasksController(_$scope, _$window, _$routeParams, _$tasksmodel, _$listsmodel, _$collectionsmodel, _tasksbusinesslayer, $location, _settingsbusinesslayer, _searchbusinesslayer, vtodo, _$settingsmodel) {\n\t\t\t\tvar _this = this;\n\t\t\t\tthis._$scope = _$scope;\n\t\t\t\tthis._$window = _$window;\n\t\t\t\tthis._$routeParams = _$routeParams;\n\t\t\t\tthis._$tasksmodel = _$tasksmodel;\n\t\t\t\tthis._$listsmodel = _$listsmodel;\n\t\t\t\tthis._$collectionsmodel = _$collectionsmodel;\n\t\t\t\tthis._tasksbusinesslayer = _tasksbusinesslayer;\n\t\t\t\tthis.$location = $location;\n\t\t\t\tthis._settingsbusinesslayer = _settingsbusinesslayer;\n\t\t\t\tthis._searchbusinesslayer = _searchbusinesslayer;\n\t\t\t\tthis._vtodo = vtodo;\n\t\t\t\tthis._$scope.tasks = this._$tasksmodel.getAll();\n\t\t\t\tthis._$scope.draggedTasks = [];\n\t\t\t\tthis._$scope.calendars = this._$listsmodel.getAll();\n\t\t\t\tthis._$scope.days = [0, 1, 2, 3, 4, 5, 6];\n\t\t\t\tthis._$scope.isAddingTask = false;\n\t\t\t\tthis._$scope.focusInputField = false;\n\t\t\t\tthis._$scope.TasksModel = this._$tasksmodel;\n\t\t\t\tthis._$scope.TasksBusinessLayer = this._tasksbusinesslayer;\n\t\t\t\tthis._$settingsmodel = _$settingsmodel;\n\n\t\t\t\tthis._$scope.addTask = function (taskName, related, calendar, parent) {\n\t\t\t\t\tvar _ref,\n\t\t\t\t\t _this = this;\n\t\t\t\t\tif (calendar === null) {\n\t\t\t\t\t\tcalendar = '';\n\t\t\t\t\t}\n\t\t\t\t\t_$scope.isAddingTask = true;\n\t\t\t\t\tvar task = {\n\t\t\t\t\t\tcalendar: null,\n\t\t\t\t\t\trelated: related,\n\t\t\t\t\t\tsummary: taskName,\n\t\t\t\t\t\tpriority: '0',\n\t\t\t\t\t\tdue: false,\n\t\t\t\t\t\tstart: false,\n\t\t\t\t\t\treminder: null,\n\t\t\t\t\t\tcompleted: false,\n\t\t\t\t\t\tcomplete: '0',\n\t\t\t\t\t\tnote: ''\n\t\t\t\t\t};\n\t\t\t\t\tif ((_ref = _$scope.route.collectionID) === 'starred' || _ref === 'today' || _ref === 'week' || _ref === 'all' || _ref === 'completed' || _ref === 'current') {\n\t\t\t\t\t\tif (related) {\n\t\t\t\t\t\t\ttask.calendar = calendar;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttask.calendar = _$listsmodel.getStandardList();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (_$scope.route.collectionID === 'starred') {\n\t\t\t\t\t\t\ttask.priority = '1';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (_$scope.route.collectionID === 'today') {\n\t\t\t\t\t\t\ttask.due = moment().startOf('day').format(\"YYYY-MM-DDTHH:mm:ss\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (_$scope.route.collectionID === 'current') {\n\t\t\t\t\t\t\ttask.start = moment().format(\"YYYY-MM-DDTHH:mm:ss\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttask.calendar = _$listsmodel.getByUri(_$scope.route.calendarID);\n\t\t\t\t\t}\n\t\t\t\t\ttask = VTodo.create(task);\n\t\t\t\t\t_tasksbusinesslayer.add(task).then(function (task) {\n\t\t\t\t\t\t_$scope.isAddingTask = false;\n\t\t\t\t\t\t_$scope.openDetails(task.uri, null);\n\t\t\t\t\t\treturn $scope.$apply();\n\t\t\t\t\t});\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\t_tasksbusinesslayer.setHideSubtasks(parent, 0);\n\t\t\t\t\t}\n\t\t\t\t\t_$scope.status.focusTaskInput = false;\n\t\t\t\t\t_$scope.status.focusSubtaskInput = false;\n\t\t\t\t\t_$scope.status.addSubtaskTo = null;\n\t\t\t\t\t_$scope.status.taskName = '';\n\t\t\t\t\t_$scope.status.subtaskName = '';\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.getAddString = function () {\n\t\t\t\t\tvar calendar = _$listsmodel.getStandardList();\n\t\t\t\t\tif (angular.isDefined(calendar)) {\n\t\t\t\t\t\tif (angular.isDefined(_$scope.route.collectionID)) {\n\t\t\t\t\t\t\tswitch (_$scope.route.collectionID) {\n\t\t\t\t\t\t\t\tcase 'starred':\n\t\t\t\t\t\t\t\t\treturn t('tasks', 'Add an important item in \"%s\"...').replace('%s', calendar.displayname);\n\t\t\t\t\t\t\t\tcase 'today':\n\t\t\t\t\t\t\t\t\treturn t('tasks', 'Add an item due today in \"%s\"...').replace('%s', calendar.displayname);\n\t\t\t\t\t\t\t\tcase 'all':\n\t\t\t\t\t\t\t\t\treturn t('tasks', 'Add an item in \"%s\"...').replace('%s', calendar.displayname);\n\t\t\t\t\t\t\t\tcase 'current':\n\t\t\t\t\t\t\t\t\treturn t('tasks', 'Add a current item in \"%s\"...').replace('%s', calendar.displayname);\n\t\t\t\t\t\t\t\tcase 'completed':\n\t\t\t\t\t\t\t\tcase 'week':\n\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (angular.isDefined(_$listsmodel.getByUri(_$scope.route.calendarID))) {\n\t\t\t\t\t\t\t\treturn t('tasks', 'Add an item in \"%s\"...').replace('%s', _$listsmodel.getByUri(_$scope.route.calendarID).displayname);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.getSubAddString = function (taskname) {\n\t\t\t\t\treturn t('tasks', 'Add a subtask to \"%s\"...').replace('%s', taskname);\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.showSubtaskInput = function (uid) {\n\t\t\t\t\t_$scope.status.addSubtaskTo = uid;\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.hideSubtasks = function (task) {\n\t\t\t\t\tvar taskID = _$scope.route.taskID;\n\t\t\t\t\tvar descendantIDs = _$tasksmodel.getDescendantIDs(task);\n\t\t\t\t\tif (task.uri === taskID) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (__indexOf.call(descendantIDs, taskID) >= 0) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn task.hideSubtasks;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.showInput = function () {\n\t\t\t\t\tvar collectionID = _$scope.route.collectionID;\n\t\t\t\t\tvar calendar = _$listsmodel.getByUri(_$scope.route.calendarID);\n\t\t\t\t\tif (collectionID === 'completed' || collectionID === 'week') {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (angular.isDefined(calendar)) {\n\t\t\t\t\t\treturn calendar.writable;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.focusTaskInput = function () {\n\t\t\t\t\t_$scope.status.focusTaskInput = true;\n\t\t\t\t};\n\t\t\t\tthis._$scope.focusSubtaskInput = function () {\n\t\t\t\t\t_$scope.status.focusSubtaskInput = true;\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.openDetails = function (id, $event) {\n\t\t\t\t\tvar calendarID = _$scope.route.calendarID;\n\t\t\t\t\tvar collectionID = _$scope.route.collectionID;\n\t\t\t\t\tif ($event === null || $($event.currentTarget).is($($event.target).closest('.handler'))) {\n\t\t\t\t\t\tvar parent = _$tasksmodel.getByUri(id);\n\t\t\t\t\t\tif (!parent.loadedCompleted) {\n\t\t\t\t\t\t\t_tasksbusinesslayer.getAll(parent.calendar, true, parent).then(function () {\n\t\t\t\t\t\t\t\tparent.loadedCompleted = true;\n\t\t\t\t\t\t\t\t$scope.$apply();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (calendarID) {\n\t\t\t\t\t\t\t$location.path('/calendars/' + calendarID + '/tasks/' + id);\n\t\t\t\t\t\t} else if (collectionID) {\n\t\t\t\t\t\t\t$location.path('/collections/' + collectionID + '/tasks/' + id);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.toggleCompleted = function (task) {\n\t\t\t\t\tif (task.completed) {\n\t\t\t\t\t\t_tasksbusinesslayer.setPercentComplete(task, 0);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_tasksbusinesslayer.setPercentComplete(task, 100);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.toggleStarred = function (task) {\n\t\t\t\t\tif (task.priority > 5) {\n\t\t\t\t\t\t_tasksbusinesslayer.setPriority(task, 0);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_tasksbusinesslayer.setPriority(task, 9);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.toggleHidden = function () {\n\t\t\t\t\treturn _settingsbusinesslayer.toggle('various', 'showHidden');\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.filterTasks = function (task, filter) {\n\t\t\t\t\treturn function (task) {\n\t\t\t\t\t\treturn _$tasksmodel.filterTasks(task, filter);\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.getSubTasks = function (tasks, parent) {\n\t\t\t\t\tvar ret, task, _i, _len;\n\t\t\t\t\tret = [];\n\t\t\t\t\tfor (_i = 0, _len = tasks.length; _i < _len; _i++) {\n\t\t\t\t\t\ttask = tasks[_i];\n\t\t\t\t\t\tif (task.related === parent.uid && task !== parent && !(parent.hideCompletedSubtasks && task.completed)) {\n\t\t\t\t\t\t\tret.push(task);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn ret;\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.hasNoParent = function (task) {\n\t\t\t\t\treturn function (task) {\n\t\t\t\t\t\treturn _$tasksmodel.hasNoParent(task);\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.hasSubtasks = function (task) {\n\t\t\t\t\treturn _$tasksmodel.hasSubtasks(task.uid);\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.hasCompletedSubtasks = function (task) {\n\t\t\t\t\treturn _$tasksmodel.hasCompletedSubtasks(task.uid);\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.toggleSubtasks = function (task) {\n\t\t\t\t\t_tasksbusinesslayer.setHideSubtasks(task, !task.hideSubtasks);\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.toggleCompletedSubtasks = function (task) {\n\t\t\t\t\t_tasksbusinesslayer.setHideCompletedSubtasks(task, !task.hideCompletedSubtasks);\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.filterTasksByString = function (task) {\n\t\t\t\t\treturn function (task) {\n\t\t\t\t\t\tvar filter = _searchbusinesslayer.getFilter();\n\t\t\t\t\t\treturn _$tasksmodel.filterTasksByString(task, filter);\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.filteredTasks = function () {\n\t\t\t\t\tvar filter;\n\t\t\t\t\tfilter = _searchbusinesslayer.getFilter();\n\t\t\t\t\treturn _$tasksmodel.filteredTasks(filter);\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.dayHasEntry = function () {\n\t\t\t\t\treturn function (date) {\n\t\t\t\t\t\tvar filter, task, tasks, _i, _len;\n\t\t\t\t\t\tfilter = _searchbusinesslayer.getFilter();\n\t\t\t\t\t\ttasks = _$tasksmodel.filteredTasks(filter);\n\t\t\t\t\t\tfor (_i = 0, _len = tasks.length; _i < _len; _i++) {\n\t\t\t\t\t\t\ttask = tasks[_i];\n\t\t\t\t\t\t\tif (task.completed || !_$tasksmodel.hasNoParent(task)) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (_$tasksmodel.taskAtDay(task, date)) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tthis._$scope.taskAtDay = function (task, day) {\n\t\t\t\t\treturn function (task) {\n\t\t\t\t\t\treturn _$tasksmodel.taskAtDay(task, day);\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tthis._$scope.filterLists = function () {\n\t\t\t\t\treturn function (calendar) {\n\t\t\t\t\t\treturn _$scope.getCount(calendar.uri, _$scope.route.collectionID);\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.getCount = function (calendarID, type) {\n\t\t\t\t\tvar filter = _searchbusinesslayer.getFilter();\n\t\t\t\t\treturn _$listsmodel.getCount(calendarID, type, filter);\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.getCountString = function (calendarID, type) {\n\t\t\t\t\tvar filter = _searchbusinesslayer.getFilter();\n\t\t\t\t\treturn n('tasks', '%n Completed Task', '%n Completed Tasks', _$listsmodel.getCount(calendarID, type, filter));\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.checkTaskInput = function ($event) {\n\t\t\t\t\tif ($event.keyCode === 27) {\n\t\t\t\t\t\t$($event.currentTarget).blur();\n\t\t\t\t\t\t_$scope.status.taskName = '';\n\t\t\t\t\t\t_$scope.status.subtaskName = '';\n\t\t\t\t\t\t_$scope.status.addSubtaskTo = null;\n\t\t\t\t\t\t_$scope.status.focusTaskInput = false;\n\t\t\t\t\t\t_$scope.status.focusSubtaskInput = false;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.getCompletedTasks = function (calendarID) {\n\t\t\t\t\tvar calendar = _$listsmodel.getById(calendarID);\n\t\t\t\t\t_tasksbusinesslayer.getAll(calendar, true).then(function () {\n\t\t\t\t\t\t_$listsmodel.setLoadedCompleted(calendarID);\n\t\t\t\t\t\t$scope.$apply();\n\t\t\t\t\t});\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.loadedCompleted = function (calendarID) {\n\t\t\t\t\treturn _$listsmodel.loadedCompleted(calendarID);\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.sortDue = function (task) {\n\t\t\t\t\tif (task.due === null) {\n\t\t\t\t\t\treturn 'last';\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn task.due;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.sortStart = function (task) {\n\t\t\t\t\tif (task.start === null) {\n\t\t\t\t\t\treturn 'last';\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn task.start;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.getSortOrder = function () {\n\t\t\t\t\tswitch (_$scope.settingsmodel.getById('various').sortOrder) {\n\t\t\t\t\t\tcase 'due':\n\t\t\t\t\t\t\treturn _$scope.sortDue;\n\t\t\t\t\t\tcase 'start':\n\t\t\t\t\t\t\treturn _$scope.sortStart;\n\t\t\t\t\t\tcase 'priority':\n\t\t\t\t\t\t\treturn '-priority';\n\t\t\t\t\t\tcase 'alphabetically':\n\t\t\t\t\t\t\treturn 'summary';\n\t\t\t\t\t\tcase 'manual':\n\t\t\t\t\t\t\treturn 'manual';\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn ['completed', _$scope.sortDue, '-priority', _$scope.sortStart, 'summary'];\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.getSortOrderIcon = function () {\n\t\t\t\t\tswitch (_$scope.settingsmodel.getById('various').sortOrder) {\n\t\t\t\t\t\tcase 'due':\n\t\t\t\t\t\tcase 'start':\n\t\t\t\t\t\t\treturn 'icon-calendar';\n\t\t\t\t\t\tcase 'priority':\n\t\t\t\t\t\t\treturn 'icon-task-star';\n\t\t\t\t\t\tcase 'alphabetically':\n\t\t\t\t\t\t\treturn 'icon-alphabetically';\n\t\t\t\t\t\tcase 'manual':\n\t\t\t\t\t\t\treturn 'icon-manual';\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn 'icon-list';\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.setSortOrder = function ($event, order) {\n\t\t\t\t\t_$scope.settingsmodel.getById('various').sortDirection = _$scope.settingsmodel.getById('various').sortOrder === order ? +!_$scope.settingsmodel.getById('various').sortDirection : 0;\n\t\t\t\t\t_$scope.settingsmodel.getById('various').sortOrder = order;\n\t\t\t\t\t_settingsbusinesslayer.set('various', 'sortOrder', order);\n\t\t\t\t\t_settingsbusinesslayer.set('various', 'sortDirection', _$scope.settingsmodel.getById('various').sortDirection);\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.dropAsSubtask = function ($event, item, index) {\n\t\t\t\t\tif ($event.dataTransfer.dropEffect === 'move') {\n\t\t\t\t\t\tvar parentID = $($event.target).closest('.task-item').attr('taskID');\n\t\t\t\t\t\tvar task = _$tasksmodel.getByUri(item.uri);\n\t\t\t\t\t\tvar parent = _$tasksmodel.getByUri(parentID);\n\t\t\t\t\t\t_tasksbusinesslayer.changeParent(task, parent);\n\t\t\t\t\t}\n\t\t\t\t\t$('.subtasks-container').removeClass('dropzone-visible');\n\t\t\t\t\treturn true;\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.dropAsRootTask = function ($event, item, index) {\n\t\t\t\t\tif ($event.dataTransfer.dropEffect === 'move') {\n\t\t\t\t\t\tvar task = _$tasksmodel.getByUri(item.uri);\n\t\t\t\t\t\tvar collectionID = $($event.target).closest('ol[dnd-list]').attr('collectionID');\n\t\t\t\t\t\tvar calendarID = $($event.target).closest('ol[dnd-list]').attr('calendarID');\n\t\t\t\t\t\tvar newCalendar = _$listsmodel.getByUri(calendarID);\n\t\t\t\t\t\tvar queries = _tasksbusinesslayer.makeRootTask(task, newCalendar, collectionID);\n\t\t\t\t\t\tPromise.all(queries).then(function () {\n\t\t\t\t\t\t\t$scope.$apply();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$('.subtasks-container').removeClass('dropzone-visible');\n\t\t\t\t\treturn true;\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.dragover = function ($event, item, index) {\n\t\t\t\t\t$('.subtasks-container').removeClass('dropzone-visible');\n\t\t\t\t\tvar calendarID = $($event.target).closest('ol[dnd-list]').attr('calendarID');\n\t\t\t\t\tvar calendar = _$listsmodel.getByUri(calendarID);\n\t\t\t\t\tif (calendar.writable) {\n\t\t\t\t\t\t$($event.target).closest('.task-item').children('.subtasks-container').addClass('dropzone-visible');\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.allow = function (task) {\n\t\t\t\t\tif (task.calendar.writable) {\n\t\t\t\t\t\treturn \"copyMove\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn \"copy\";\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.dragStart = function ($event) {\n\t\t\t\t\tif ($event.dataTransfer.effectAllowed === 'copy' || $event.dataTransfer.effectAllowed === 'copyMove' && $event.ctrlKey) {\n\t\t\t\t\t\t$($event.target).addClass('copy');\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis._$scope.dragEnd = function ($event) {\n\t\t\t\t\t$($event.target).removeClass('copy');\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn TasksController;\n\t\t}();\n\t\treturn new TasksController($scope, $window, $routeParams, TasksModel, ListsModel, CollectionsModel, TasksBusinessLayer, $location, SettingsBusinessLayer, SearchBusinessLayer, VTodo, SettingsModel);\n\t}]);\n}).call(undefined);","'use strict';\n\nangular.module('Tasks').directive('appNavigationEntryUtils', function () {\n 'use strict';\n\n return {\n restrict: 'C',\n link: function link(scope, elm) {\n var button, menu;\n menu = elm.siblings('.app-navigation-entry-menu');\n button = $(elm).find('.app-navigation-entry-utils-menu-button button');\n button.click(function () {\n menu.toggleClass('open');\n });\n scope.$on('documentClicked', function (scope, event) {\n if (event.target !== button[0]) {\n menu.removeClass('open');\n }\n });\n }\n };\n});","'use strict';\n\nangular.module('Tasks').directive('autofocusOnInsert', function () {\n 'use strict';\n\n return function (scope, elm) {\n return elm.focus();\n };\n});","'use strict';\n\nangular.module('Tasks').directive('avatar', function () {\n 'use strict';\n\n return {\n restrict: 'A',\n scope: false,\n link: function link(scope, elm, attr) {\n return attr.$observe('userid', function () {\n if (attr.userid) {\n return elm.avatar(attr.userid, attr.size);\n }\n });\n }\n };\n});","'use strict';\n\nvar hslToRgb = function hslToRgb(hue, saturation, lightness) {\n\t'use strict';\n\t// based on algorithm from http://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB\n\n\tif (Array.isArray(hue)) {\n\t\tsaturation = hue[1];\n\t\tlightness = hue[2];\n\t\thue = hue[0];\n\t}\n\tif (hue === undefined) {\n\t\treturn [0, 0, 0];\n\t}\n\tsaturation /= 100;\n\tlightness /= 100;\n\n\tvar chroma = (1 - Math.abs(2 * lightness - 1)) * saturation;\n\tvar huePrime = hue / 60;\n\tvar secondComponent = chroma * (1 - Math.abs(huePrime % 2 - 1));\n\n\thuePrime = Math.floor(huePrime);\n\tvar red;\n\tvar green;\n\tvar blue;\n\n\tif (huePrime === 0) {\n\t\tred = chroma;\n\t\tgreen = secondComponent;\n\t\tblue = 0;\n\t} else if (huePrime === 1) {\n\t\tred = secondComponent;\n\t\tgreen = chroma;\n\t\tblue = 0;\n\t} else if (huePrime === 2) {\n\t\tred = 0;\n\t\tgreen = chroma;\n\t\tblue = secondComponent;\n\t} else if (huePrime === 3) {\n\t\tred = 0;\n\t\tgreen = secondComponent;\n\t\tblue = chroma;\n\t} else if (huePrime === 4) {\n\t\tred = secondComponent;\n\t\tgreen = 0;\n\t\tblue = chroma;\n\t} else if (huePrime === 5) {\n\t\tred = chroma;\n\t\tgreen = 0;\n\t\tblue = secondComponent;\n\t}\n\n\tvar lightnessAdjustment = lightness - chroma / 2;\n\tred += lightnessAdjustment;\n\tgreen += lightnessAdjustment;\n\tblue += lightnessAdjustment;\n\n\treturn [Math.round(red * 255), Math.round(green * 255), Math.round(blue * 255)];\n};\n\nvar rgbToHex = function rgbToHex(r, g, b) {\n\t'use strict';\n\n\tif (Array.isArray(r)) {\n\t\tg = r[1];\n\t\tb = r[2];\n\t\tr = r[0];\n\t}\n\treturn '#' + parseInt(r, 10).toString(16) + parseInt(g, 10).toString(16) + parseInt(b, 10).toString(16);\n};\n\nvar listofcolours = ['#31CC7C', '#317CCC', '#FF7A66', '#F1DB50', '#7C31CC', '#CC317C', '#3A3B3D', '#CACBCD'];\n\nvar randColour = function randColour() {\n\t'use strict';\n\n\tif (typeof String.prototype.toHsl === 'function') {\n\t\treturn rgbToHex(hslToRgb(Math.random().toString().toHsl()));\n\t} else {\n\t\treturn listofcolours[Math.floor(Math.random() * listofcolours.length)];\n\t}\n};\n\nangular.module('Tasks').directive('colorpicker', function () {\n\t'use strict';\n\n\tif (typeof String.prototype.toHsl === 'function') {\n\t\tvar hsl = \"\";\n\t\tvar hslcolour = \"\";\n\t\t//\t\t 0 40 80 120 160 200 240 280 320\n\t\tlistofcolours = [\"15\", \"9\", \"4\", \"b\", \"6\", \"11\", \"74\", \"f\", \"57\"];\n\t\tlistofcolours.forEach(function (hash, index) {\n\t\t\thsl = hash.toHsl();\n\t\t\thslcolour = hslToRgb(hsl);\n\t\t\tlistofcolours[index] = rgbToHex(hslcolour);\n\t\t});\n\t}\n\treturn {\n\t\tscope: {\n\t\t\tselected: '=',\n\t\t\tcustomizedColors: '=colors'\n\t\t},\n\t\trestrict: 'AE',\n\t\ttemplateUrl: OC.filePath('tasks', 'templates', 'colorpicker.html'),\n\t\tlink: function link(scope, element, attr) {\n\t\t\tscope.colors = scope.customizedColors || listofcolours;\n\t\t\tscope.selected = scope.selected || scope.colors[0];\n\t\t\tscope.random = \"#000000\";\n\n\t\t\tscope.randomizeColour = function () {\n\t\t\t\tscope.random = randColour();\n\t\t\t\tscope.pick(scope.random);\n\t\t\t};\n\n\t\t\tscope.pick = function (color) {\n\t\t\t\tscope.selected = color;\n\t\t\t};\n\t\t}\n\t};\n});","'use strict';\n\nangular.module('Tasks').directive('confirmation', function () {\n\t'use strict';\n\n\treturn {\n\t\tpriority: -1,\n\t\trestrict: 'A',\n\t\ttemplateUrl: OC.generateUrl('/apps/tasks/templates/confirmation', {}),\n\t\tscope: {\n\t\t\tconfirmationFunction: \"&confirmation\",\n\t\t\tconfirmationMessage: \"&confirmationMessage\"\n\n\t\t},\n\t\tcontroller: 'ConfirmationController'\n\t};\n});\n\nangular.module('Tasks').controller('ConfirmationController', ['$scope', '$rootScope', '$element', '$attrs', '$compile', '$document', '$window', '$timeout', function ($scope, $rootScope, $element, $attrs, $compile, $document, $window, $timeout) {\n\t'use strict';\n\n\tvar ConfirmationController = function () {\n\t\tfunction ConfirmationController(_$scope, $rootScope, $element, $attrs, $compile, $document, $window, $timeout) {\n\t\t\tthis._$scope = _$scope;\n\t\t\tthis._$scope.countdown = 3;\n\n\t\t\t$element.bind('click', function (e) {\n\t\t\t\t_$scope.countdown = 3;\n\t\t\t\t$element.removeClass('active');\n\t\t\t\tvar message = _$scope.confirmationMessage() ? _$scope.confirmationMessage() : \"Are you sure?\";\n\t\t\t\tif ($element.hasClass('confirmed')) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\te.stopPropagation();\n\t\t\t\t_$scope.activate();\n\t\t\t\t$element.tooltip({ title: message, container: 'body', placement: 'right', trigger: 'manual' }).tooltip('show');\n\t\t\t\t$element.addClass(\"confirmed\");\n\t\t\t});\n\n\t\t\t$element.children('.confirmation-confirm').bind('click', function (e) {\n\t\t\t\tif ($element.hasClass('confirmed active')) {\n\t\t\t\t\t_$scope.confirmationFunction();\n\t\t\t\t\treturn;\n\t\t\t\t} else {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._$scope.documentClick = function () {\n\t\t\t\t$element.removeClass(\"confirmed\");\n\t\t\t\t$element.tooltip('hide');\n\t\t\t};\n\n\t\t\tthis._$scope.activate = function () {\n\t\t\t\tif (_$scope.countdown) {\n\t\t\t\t\t$element.find('.countdown').html(_$scope.countdown + ' s');\n\t\t\t\t\t$timeout(function () {\n\t\t\t\t\t\t_$scope.activate();\n\t\t\t\t\t}, 1000);\n\t\t\t\t\t_$scope.countdown--;\n\t\t\t\t} else {\n\t\t\t\t\t$element.addClass('active');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t$document.bind('click', _$scope.documentClick);\n\t\t\t$document.bind('touchend', _$scope.documentClick);\n\n\t\t\t$scope.$on('$destroy', function () {\n\t\t\t\t$document.unbind('click', _$scope.documentClick);\n\t\t\t\t$document.unbind('touchend', _$scope.documentClick);\n\t\t\t});\n\t\t}\n\t\treturn ConfirmationController;\n\t}();\n\treturn new ConfirmationController($scope, $rootScope, $element, $attrs, $compile, $document, $window, $timeout);\n}]);","'use strict';\n\nangular.module('Tasks').directive('datepicker', function () {\n\t'use strict';\n\n\treturn {\n\t\trestrict: 'A',\n\t\tscope: false,\n\t\tlink: function link(scope, elm, attr) {\n\t\t\treturn elm.datepicker({\n\t\t\t\tonSelect: function onSelect(date, inst) {\n\t\t\t\t\tscope['set' + attr.datepicker + 'day'](date);\n\t\t\t\t\treturn scope.$apply();\n\t\t\t\t},\n\t\t\t\tbeforeShow: function beforeShow(input, inst) {\n\t\t\t\t\tvar dp, marginLeft;\n\t\t\t\t\tdp = $(inst).datepicker('widget');\n\t\t\t\t\tmarginLeft = -Math.abs($(input).outerWidth() - dp.outerWidth()) / 2 + 'px';\n\t\t\t\t\tdp.css({\n\t\t\t\t\t\t'margin-left': marginLeft\n\t\t\t\t\t});\n\t\t\t\t\t$(\"div.ui-datepicker:before\").css({\n\t\t\t\t\t\t'left': 100 + 'px'\n\t\t\t\t\t});\n\t\t\t\t\treturn $('.hasDatepicker').datepicker(\"option\", \"firstDay\", scope.settingsmodel.getById('various').startOfWeek);\n\t\t\t\t},\n\t\t\t\tbeforeShowDay: function beforeShowDay(date) {\n\t\t\t\t\tif (moment(date).startOf('day').diff(moment(scope.task[attr.datepicker], \"YYYYMMDDTHHmmss\").startOf('day'), 'days') === 0) {\n\t\t\t\t\t\treturn [1, \"selected\"];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn [1, \"\"];\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tminDate: null\n\t\t\t});\n\t\t}\n\t};\n});","'use strict';\n\nangular.module('Tasks').directive('ocClickFocus', ['$timeout', function ($timeout) {\n 'use strict';\n\n return function (scope, elm, attr) {\n var options;\n options = scope.$eval(attr.ocClickFocus);\n if (angular.isDefined(options) && angular.isDefined(options.selector)) {\n return elm.click(function () {\n if (angular.isDefined(options.timeout)) {\n return $timeout(function () {\n return $(options.selector).focus();\n }, options.timeout);\n } else {\n return $(options.selector).focus();\n }\n });\n }\n };\n}]);","'use strict';\n\nangular.module('Tasks').directive('timepicker', function () {\n 'use strict';\n\n return {\n restrict: 'A',\n link: function link(scope, elm, attr) {\n return elm.timepicker({\n onSelect: function onSelect(date, inst) {\n scope['set' + attr.timepicker + 'time'](date);\n return scope.$apply();\n },\n myPosition: 'center top',\n atPosition: 'center bottom',\n hourText: t('tasks', 'Hours'),\n minuteText: t('tasks', 'Minutes')\n });\n }\n };\n});","'use strict';\n\nangular.module('Tasks').filter('counterFormatter', function () {\n 'use strict';\n\n return function (count) {\n switch (false) {\n case count !== 0:\n return '';\n case count < 999:\n return '999+';\n default:\n return count;\n }\n };\n});","'use strict';\n\nangular.module('Tasks').filter('dateDetails', function () {\n 'use strict';\n\n return function (due) {\n if (moment(due, \"YYYYMMDDTHHmmss\").isValid()) {\n return moment(due, \"YYYYMMDDTHHmmss\").locale(due.isDate ? 'details_allday' : 'details').calendar();\n } else {\n return t('tasks', 'Set due date');\n }\n };\n});","'use strict';\n\nangular.module('Tasks').filter('dateDetailsShort', function () {\n 'use strict';\n\n return function (reminder) {\n if (moment(reminder, \"YYYYMMDDTHHmmss\").isValid()) {\n return moment(reminder, \"YYYYMMDDTHHmmss\").locale('details_short').calendar();\n } else {\n return '';\n }\n };\n});","'use strict';\n\nangular.module('Tasks').filter('dateFromNow', function () {\n 'use strict';\n\n return function (due) {\n if (moment(due, \"YYYYMMDDTHHmmss\").isValid()) {\n return moment(due, \"YYYYMMDDTHHmmss\").fromNow();\n } else {\n return '';\n }\n };\n});","'use strict';\n\nangular.module('Tasks').filter('dateTaskList', function () {\n 'use strict';\n\n return function (due) {\n if (moment(due, \"YYYYMMDDTHHmmss\").isValid()) {\n return moment(due, \"YYYYMMDDTHHmmss\").locale('tasks').calendar();\n } else {\n return '';\n }\n };\n});","'use strict';\n\nangular.module('Tasks').filter('day', function () {\n 'use strict';\n\n return function (i) {\n return moment().add('days', i).locale('list_week').calendar();\n };\n});","'use strict';\n\nangular.module('Tasks').filter('dayTaskList', function () {\n 'use strict';\n\n return function (due) {\n if (moment(due, \"YYYYMMDDTHHmmss\").isValid()) {\n return moment(due, \"YYYYMMDDTHHmmss\").locale('tasks').calendar();\n } else {\n return '';\n }\n };\n});","'use strict';\n\nangular.module('Tasks').filter('percentDetails', function () {\n 'use strict';\n\n return function (percent) {\n return t('tasks', '%s %% completed').replace('%s', percent).replace('%%', '%');\n };\n});","'use strict';\n\nangular.module('Tasks').filter('priorityDetails', function () {\n 'use strict';\n\n return function (priority) {\n var string;\n string = t('tasks', 'priority %s: ').replace('%s', priority);\n if (+priority === 6 || +priority === 7 || +priority === 8 || +priority === 9) {\n return string + ' ' + t('tasks', 'high');\n } else if (+priority === 5) {\n return string + ' ' + t('tasks', 'medium');\n } else if (+priority === 1 || +priority === 2 || +priority === 3 || +priority === 4) {\n return string + ' ' + t('tasks', 'low');\n } else {\n return t('tasks', 'no priority assigned');\n }\n };\n});","'use strict';\n\nangular.module('Tasks').filter('reminderDetails', function () {\n\t'use strict';\n\n\treturn function (reminder, scope) {\n\t\tfunction before(related) {\n\t\t\tif (related === 'END') {\n\t\t\t\treturn ' ' + t('tasks', 'before end');\n\t\t\t} else {\n\t\t\t\treturn ' ' + t('tasks', 'before beginning');\n\t\t\t}\n\t\t}\n\t\tfunction after(related) {\n\t\t\tif (related === 'END') {\n\t\t\t\treturn ' ' + t('tasks', 'after end');\n\t\t\t} else {\n\t\t\t\treturn ' ' + t('tasks', 'after beginning');\n\t\t\t}\n\t\t}\n\t\tfunction tokenName(reminder, token) {\n\t\t\tif (+reminder.duration[token.id] === 1) {\n\t\t\t\treturn token.name;\n\t\t\t} else {\n\t\t\t\treturn token.names;\n\t\t\t}\n\t\t}\n\t\tvar ds, time, token, _ref;\n\t\tif (!(angular.isUndefined(reminder) || reminder === null)) {\n\t\t\tif (reminder.type === 'DATE-TIME' && moment(reminder.date, \"YYYYMMDDTHHmmss\").isValid()) {\n\t\t\t\treturn moment(reminder.date, \"YYYYMMDDTHHmmss\").locale('reminder').calendar();\n\t\t\t} else if (reminder.type === 'DURATION' && reminder.duration) {\n\t\t\t\tds = t('tasks', 'Remind me');\n\t\t\t\t_ref = scope.durations;\n\t\t\t\tfor (var _i = 0, _len = _ref.length; _i < _len; _i++) {\n\t\t\t\t\ttoken = _ref[_i];\n\t\t\t\t\tif (+reminder.duration[token.id]) {\n\t\t\t\t\t\ttime = 1;\n\t\t\t\t\t\tds += ' ' + reminder.duration[token.id] + ' ';\n\t\t\t\t\t\tds += tokenName(reminder, token);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!time) {\n\t\t\t\t\tif (reminder.duration.params.related === 'END') {\n\t\t\t\t\t\tds += ' ' + t('tasks', 'at the end');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tds += ' ' + t('tasks', 'at the beginning');\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (reminder.duration.params.invert) {\n\t\t\t\t\t\tds += before(reminder.duration.params.related);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tds += after(reminder.duration.params.related);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn ds;\n\t\t\t} else {\n\t\t\t\treturn t('tasks', 'Remind me');\n\t\t\t}\n\t\t} else {\n\t\t\treturn t('tasks', 'Remind me');\n\t\t}\n\t};\n});","'use strict';\n\nangular.module('Tasks').filter('startDetails', function () {\n 'use strict';\n\n return function (due) {\n if (moment(due, \"YYYYMMDDTHHmmss\").isValid()) {\n return moment(due, \"YYYYMMDDTHHmmss\").locale(due.isDate ? 'start_allday' : 'start').calendar();\n } else {\n return t('tasks', 'Set start date');\n }\n };\n});","'use strict';\n\nangular.module('Tasks').filter('timeTaskList', function () {\n 'use strict';\n\n return function (due) {\n if (moment(due, \"YYYYMMDDTHHmmss\").isValid()) {\n return moment(due, \"YYYYMMDDTHHmmss\").format('HH:mm');\n } else {\n return '';\n }\n };\n});","'use strict';\n\nangular.module('Tasks').service('CalendarService', ['DavClient', 'Calendar', function (DavClient, Calendar) {\n\t'use strict';\n\n\tvar _this = this;\n\n\tthis._CALENDAR_HOME = null;\n\n\tthis._currentUserPrincipal = null;\n\n\tthis._takenUrls = [];\n\n\tthis._PROPERTIES = ['{' + DavClient.NS_DAV + '}displayname', '{' + DavClient.NS_IETF + '}calendar-description', '{' + DavClient.NS_IETF + '}calendar-timezone', '{' + DavClient.NS_APPLE + '}calendar-order', '{' + DavClient.NS_APPLE + '}calendar-color', '{' + DavClient.NS_IETF + '}supported-calendar-component-set', '{' + DavClient.NS_OWNCLOUD + '}calendar-enabled', '{' + DavClient.NS_DAV + '}acl', '{' + DavClient.NS_DAV + '}owner', '{' + DavClient.NS_OWNCLOUD + '}invite'];\n\n\tfunction discoverHome(callback) {\n\t\treturn DavClient.propFind(DavClient.buildUrl(OC.linkToRemoteBase('dav')), ['{' + DavClient.NS_DAV + '}current-user-principal'], 0, { 'requesttoken': OC.requestToken }).then(function (response) {\n\t\t\tif (!DavClient.wasRequestSuccessful(response.status)) {\n\t\t\t\tthrow \"CalDAV client could not be initialized - Querying current-user-principal failed\";\n\t\t\t}\n\n\t\t\tif (response.body.propStat.length < 1) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar props = response.body.propStat[0].properties;\n\t\t\t_this._currentUserPrincipal = props['{' + DavClient.NS_DAV + '}current-user-principal'][0].textContent;\n\n\t\t\treturn DavClient.propFind(DavClient.buildUrl(_this._currentUserPrincipal), ['{' + DavClient.NS_IETF + '}calendar-home-set'], 0, { 'requesttoken': OC.requestToken }).then(function (response) {\n\t\t\t\tif (!DavClient.wasRequestSuccessful(response.status)) {\n\t\t\t\t\tthrow \"CalDAV client could not be initialized - Querying calendar-home-set failed\";\n\t\t\t\t}\n\n\t\t\t\tif (response.body.propStat.length < 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar props = response.body.propStat[0].properties;\n\t\t\t\t_this._CALENDAR_HOME = props['{' + DavClient.NS_IETF + '}calendar-home-set'][0].textContent;\n\n\t\t\t\treturn callback();\n\t\t\t});\n\t\t});\n\t}\n\n\tfunction getResponseCodeFromHTTPResponse(t) {\n\t\treturn parseInt(t.split(' ')[1]);\n\t}\n\n\tthis.getAll = function () {\n\t\tif (this._CALENDAR_HOME === null) {\n\t\t\treturn discoverHome(function () {\n\t\t\t\treturn _this.getAll();\n\t\t\t});\n\t\t}\n\n\t\tvar prom = DavClient.propFind(DavClient.buildUrl(this._CALENDAR_HOME), this._PROPERTIES, 1, { 'requesttoken': OC.requestToken }).then(function (response) {\n\t\t\tvar calendars = [];\n\n\t\t\tif (!DavClient.wasRequestSuccessful(response.status)) {\n\t\t\t\tthrow \"CalDAV client could not be initialized - Querying calendars failed\";\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < response.body.length; i++) {\n\t\t\t\tvar body = response.body[i];\n\t\t\t\tif (body.propStat.length < 1) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t_this._takenUrls.push(body.href);\n\n\t\t\t\tvar responseCode = getResponseCodeFromHTTPResponse(body.propStat[0].status);\n\t\t\t\tif (!DavClient.wasRequestSuccessful(responseCode)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tvar doesSupportVTodo = false;\n\t\t\t\tvar components = body.propStat[0].properties['{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set'];\n\t\t\t\tif (components) {\n\t\t\t\t\tfor (var j = 0; j < components.length; j++) {\n\t\t\t\t\t\tvar name = components[j].attributes.getNamedItem('name').textContent.toLowerCase();\n\t\t\t\t\t\tif (name === 'vtodo') {\n\t\t\t\t\t\t\tdoesSupportVTodo = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!doesSupportVTodo) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t_this._getACLFromResponse(body);\n\n\t\t\t\tvar uri = body.href.substr(_this._CALENDAR_HOME.length).replace(/[^\\w\\-]+/g, '');\n\n\t\t\t\tvar calendar = new Calendar(body.href, body.propStat[0].properties, uri);\n\t\t\t\tcalendars.push(calendar);\n\t\t\t}\n\n\t\t\treturn calendars;\n\t\t});\n\t\treturn prom;\n\t};\n\n\tthis.get = function (url) {\n\t\tif (this._CALENDAR_HOME === null) {\n\t\t\treturn discoverHome(function () {\n\t\t\t\treturn _this.get(url);\n\t\t\t});\n\t\t}\n\n\t\treturn DavClient.propFind(DavClient.buildUrl(url), this._PROPERTIES, 0, { 'requesttoken': OC.requestToken }).then(function (response) {\n\t\t\tvar body = response.body;\n\t\t\tif (body.propStat.length < 1) {\n\t\t\t\t//TODO - something went wrong\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar responseCode = getResponseCodeFromHTTPResponse(body.propStat[0].status);\n\t\t\tif (!DavClient.wasRequestSuccessful(responseCode)) {\n\t\t\t\t//TODO - something went wrong\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_this._getACLFromResponse(body);\n\n\t\t\tvar uri = body.href.substr(_this._CALENDAR_HOME.length).replace(/[^\\w\\-]+/g, '');\n\n\t\t\treturn new Calendar(body.href, body.propStat[0].properties, uri);\n\t\t});\n\t};\n\n\tthis.create = function (name, color, components) {\n\t\tif (this._CALENDAR_HOME === null) {\n\t\t\treturn discoverHome(function () {\n\t\t\t\treturn _this.create(name, color);\n\t\t\t});\n\t\t}\n\n\t\tif (typeof components === 'undefined') {\n\t\t\tcomponents = ['vtodo'];\n\t\t}\n\n\t\tvar xmlDoc = document.implementation.createDocument('', '', null);\n\t\tvar cMkcalendar = xmlDoc.createElement('c:mkcalendar');\n\t\tcMkcalendar.setAttribute('xmlns:c', 'urn:ietf:params:xml:ns:caldav');\n\t\tcMkcalendar.setAttribute('xmlns:d', 'DAV:');\n\t\tcMkcalendar.setAttribute('xmlns:a', 'http://apple.com/ns/ical/');\n\t\tcMkcalendar.setAttribute('xmlns:o', 'http://owncloud.org/ns');\n\t\txmlDoc.appendChild(cMkcalendar);\n\n\t\tvar dSet = xmlDoc.createElement('d:set');\n\t\tcMkcalendar.appendChild(dSet);\n\n\t\tvar dProp = xmlDoc.createElement('d:prop');\n\t\tdSet.appendChild(dProp);\n\n\t\tdProp.appendChild(this._createXMLForProperty(xmlDoc, 'displayname', name));\n\t\tdProp.appendChild(this._createXMLForProperty(xmlDoc, 'enabled', true));\n\t\tdProp.appendChild(this._createXMLForProperty(xmlDoc, 'color', color));\n\t\tdProp.appendChild(this._createXMLForProperty(xmlDoc, 'components', components));\n\n\t\tvar body = cMkcalendar.outerHTML;\n\n\t\tvar uri = this._suggestUri(name);\n\t\tvar url = this._CALENDAR_HOME + uri + '/';\n\t\tvar headers = {\n\t\t\t'Content-Type': 'application/xml; charset=utf-8',\n\t\t\t'requesttoken': OC.requestToken\n\t\t};\n\n\t\treturn DavClient.request('MKCALENDAR', url, headers, body).then(function (response) {\n\t\t\tif (response.status === 201) {\n\t\t\t\t_this._takenUrls.push(url);\n\t\t\t\treturn _this.get(url).then(function (calendar) {\n\t\t\t\t\tcalendar.enabled = true;\n\t\t\t\t\treturn _this.update(calendar);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t};\n\n\tthis.update = function (calendar) {\n\t\tvar xmlDoc = document.implementation.createDocument('', '', null);\n\t\tvar dPropUpdate = xmlDoc.createElement('d:propertyupdate');\n\t\tdPropUpdate.setAttribute('xmlns:c', 'urn:ietf:params:xml:ns:caldav');\n\t\tdPropUpdate.setAttribute('xmlns:d', 'DAV:');\n\t\tdPropUpdate.setAttribute('xmlns:a', 'http://apple.com/ns/ical/');\n\t\tdPropUpdate.setAttribute('xmlns:o', 'http://owncloud.org/ns');\n\t\txmlDoc.appendChild(dPropUpdate);\n\n\t\tvar dSet = xmlDoc.createElement('d:set');\n\t\tdPropUpdate.appendChild(dSet);\n\n\t\tvar dProp = xmlDoc.createElement('d:prop');\n\t\tdSet.appendChild(dProp);\n\n\t\tvar updatedProperties = calendar.updatedProperties;\n\t\tcalendar.resetUpdatedProperties();\n\t\tfor (var i = 0; i < updatedProperties.length; i++) {\n\t\t\tdProp.appendChild(this._createXMLForProperty(xmlDoc, updatedProperties[i], calendar[updatedProperties[i]]));\n\t\t}\n\n\t\tvar url = calendar.url;\n\t\tvar body = dPropUpdate.outerHTML;\n\t\tvar headers = {\n\t\t\t'Content-Type': 'application/xml; charset=utf-8',\n\t\t\t'requesttoken': OC.requestToken\n\t\t};\n\n\t\treturn DavClient.request('PROPPATCH', url, headers, body).then(function (response) {\n\t\t\treturn calendar;\n\t\t});\n\t};\n\n\tthis.delete = function (calendar) {\n\t\treturn DavClient.request('DELETE', calendar.url, { 'requesttoken': OC.requestToken }, '').then(function (response) {\n\t\t\tif (response.status === 204) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\t// TODO - handle error case\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t};\n\n\tthis.share = function (calendar, shareType, shareWith, writable, existingShare) {\n\t\tvar xmlDoc = document.implementation.createDocument('', '', null);\n\t\tvar oShare = xmlDoc.createElement('o:share');\n\t\toShare.setAttribute('xmlns:d', 'DAV:');\n\t\toShare.setAttribute('xmlns:o', 'http://owncloud.org/ns');\n\t\txmlDoc.appendChild(oShare);\n\n\t\tvar oSet = xmlDoc.createElement('o:set');\n\t\toShare.appendChild(oSet);\n\n\t\tvar dHref = xmlDoc.createElement('d:href');\n\t\tif (shareType === OC.Share.SHARE_TYPE_USER) {\n\t\t\tdHref.textContent = 'principal:principals/users/';\n\t\t} else if (shareType === OC.Share.SHARE_TYPE_GROUP) {\n\t\t\tdHref.textContent = 'principal:principals/groups/';\n\t\t}\n\t\tdHref.textContent += shareWith;\n\t\toSet.appendChild(dHref);\n\n\t\tvar oSummary = xmlDoc.createElement('o:summary');\n\t\toSummary.textContent = t('calendar', '{calendar} shared by {owner}', {\n\t\t\tcalendar: calendar.displayname,\n\t\t\towner: calendar.owner\n\t\t});\n\t\toSet.appendChild(oSummary);\n\n\t\tif (writable) {\n\t\t\tvar oRW = xmlDoc.createElement('o:read-write');\n\t\t\toSet.appendChild(oRW);\n\t\t}\n\n\t\tvar headers = {\n\t\t\t'Content-Type': 'application/xml; charset=utf-8',\n\t\t\trequesttoken: oc_requesttoken\n\t\t};\n\t\tvar body = oShare.outerHTML;\n\t\treturn DavClient.request('POST', calendar.url, headers, body).then(function (response) {\n\t\t\tif (response.status === 200) {\n\t\t\t\tif (!existingShare) {\n\t\t\t\t\tif (shareType === OC.Share.SHARE_TYPE_USER) {\n\t\t\t\t\t\tcalendar.sharedWith.users.push({\n\t\t\t\t\t\t\tid: shareWith,\n\t\t\t\t\t\t\tdisplayname: shareWith,\n\t\t\t\t\t\t\twritable: writable\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_GROUP) {\n\t\t\t\t\t\tcalendar.sharedWith.groups.push({\n\t\t\t\t\t\t\tid: shareWith,\n\t\t\t\t\t\t\tdisplayname: shareWith,\n\t\t\t\t\t\t\twritable: writable\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n\tthis.unshare = function (calendar, shareType, shareWith) {\n\t\tvar xmlDoc = document.implementation.createDocument('', '', null);\n\t\tvar oShare = xmlDoc.createElement('o:share');\n\t\toShare.setAttribute('xmlns:d', 'DAV:');\n\t\toShare.setAttribute('xmlns:o', 'http://owncloud.org/ns');\n\t\txmlDoc.appendChild(oShare);\n\n\t\tvar oRemove = xmlDoc.createElement('o:remove');\n\t\toShare.appendChild(oRemove);\n\n\t\tvar dHref = xmlDoc.createElement('d:href');\n\t\tif (shareType === OC.Share.SHARE_TYPE_USER) {\n\t\t\tdHref.textContent = 'principal:principals/users/';\n\t\t} else if (shareType === OC.Share.SHARE_TYPE_GROUP) {\n\t\t\tdHref.textContent = 'principal:principals/groups/';\n\t\t}\n\t\tdHref.textContent += shareWith;\n\t\toRemove.appendChild(dHref);\n\n\t\tvar headers = {\n\t\t\t'Content-Type': 'application/xml; charset=utf-8',\n\t\t\trequesttoken: oc_requesttoken\n\t\t};\n\t\tvar body = oShare.outerHTML;\n\t\treturn DavClient.request('POST', calendar.url, headers, body).then(function (response) {\n\t\t\tif (response.status === 200) {\n\t\t\t\tif (shareType === OC.Share.SHARE_TYPE_USER) {\n\t\t\t\t\tcalendar.sharedWith.users = calendar.sharedWith.users.filter(function (user) {\n\t\t\t\t\t\treturn user.id !== shareWith;\n\t\t\t\t\t});\n\t\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_GROUP) {\n\t\t\t\t\tcalendar.sharedWith.groups = calendar.sharedWith.groups.filter(function (groups) {\n\t\t\t\t\t\treturn groups.id !== shareWith;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t//todo - remove entry from calendar object\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t};\n\n\tthis._createXMLForProperty = function (xmlDoc, propName, value) {\n\t\tswitch (propName) {\n\t\t\tcase 'enabled':\n\t\t\t\tvar oEnabled = xmlDoc.createElement('o:calendar-enabled');\n\t\t\t\toEnabled.textContent = value ? '1' : '0';\n\t\t\t\treturn oEnabled;\n\n\t\t\tcase 'displayname':\n\t\t\t\tvar dDisplayname = xmlDoc.createElement('d:displayname');\n\t\t\t\tdDisplayname.textContent = value;\n\t\t\t\treturn dDisplayname;\n\n\t\t\tcase 'order':\n\t\t\t\tvar aOrder = xmlDoc.createElement('a:calendar-color');\n\t\t\t\taOrder.textContent = value;\n\t\t\t\treturn aOrder;\n\n\t\t\tcase 'color':\n\t\t\t\tvar aColor = xmlDoc.createElement('a:calendar-color');\n\t\t\t\taColor.textContent = value;\n\t\t\t\treturn aColor;\n\n\t\t\tcase 'components':\n\t\t\t\tvar cComponents = xmlDoc.createElement('c:supported-calendar-component-set');\n\t\t\t\tfor (var i = 0; i < value.length; i++) {\n\t\t\t\t\tvar cComp = xmlDoc.createElement('c:comp');\n\t\t\t\t\tcComp.setAttribute('name', value[i].toUpperCase());\n\t\t\t\t\tcComponents.appendChild(cComp);\n\t\t\t\t}\n\t\t\t\treturn cComponents;\n\t\t}\n\t};\n\n\tthis._getACLFromResponse = function (body) {\n\t\tvar canWrite = false;\n\t\tvar acl = body.propStat[0].properties['{' + DavClient.NS_DAV + '}acl'];\n\t\tif (acl) {\n\t\t\tfor (var k = 0; k < acl.length; k++) {\n\t\t\t\tvar href = acl[k].getElementsByTagNameNS('DAV:', 'href');\n\t\t\t\tif (href.length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\thref = href[0].textContent;\n\t\t\t\tif (href !== _this._currentUserPrincipal) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tvar writeNode = acl[k].getElementsByTagNameNS('DAV:', 'write');\n\t\t\t\tif (writeNode.length > 0) {\n\t\t\t\t\tcanWrite = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tbody.propStat[0].properties.canWrite = canWrite;\n\t};\n\n\tthis._isUriAlreadyTaken = function (uri) {\n\t\treturn this._takenUrls.indexOf(this._CALENDAR_HOME + uri + '/') !== -1;\n\t};\n\n\tthis._suggestUri = function (displayname) {\n\t\tvar uri = displayname.toString().toLowerCase().replace(/\\s+/g, '-') // Replace spaces with -\n\t\t.replace(/[^\\w\\-]+/g, '') // Remove all non-word chars\n\t\t.replace(/\\-\\-+/g, '-') // Replace multiple - with single -\n\t\t.replace(/^-+/, '') // Trim - from start of text\n\t\t.replace(/-+$/, ''); // Trim - from end of text\n\n\t\tif (!this._isUriAlreadyTaken(uri)) {\n\t\t\treturn uri;\n\t\t}\n\n\t\tif (uri.indexOf('-') === -1) {\n\t\t\turi = uri + '-1';\n\t\t\tif (!this._isUriAlreadyTaken(uri)) {\n\t\t\t\treturn uri;\n\t\t\t}\n\t\t}\n\n\t\twhile (this._isUriAlreadyTaken(uri)) {\n\t\t\tvar positionLastDash = uri.lastIndexOf('-');\n\t\t\tvar firstPart = uri.substr(0, positionLastDash);\n\t\t\tvar lastPart = uri.substr(positionLastDash + 1);\n\n\t\t\tif (lastPart.match(/^\\d+$/)) {\n\t\t\t\tlastPart = parseInt(lastPart);\n\t\t\t\tlastPart++;\n\n\t\t\t\turi = firstPart + '-' + lastPart;\n\t\t\t} else if (lastPart === '') {\n\t\t\t\turi = uri + '1';\n\t\t\t} else {\n\t\t\t\turi = uri = '-1';\n\t\t\t}\n\t\t}\n\n\t\treturn uri;\n\t};\n}]);","'use strict';\n\nangular.module('Tasks').service('DavClient', [function () {\n\t'use strict';\n\n\tvar client;\n\tclient = new dav.Client({\n\t\tbaseUrl: OC.linkToRemote('dav/calendars'),\n\t\txmlNamespaces: {\n\t\t\t'DAV:': 'd',\n\t\t\t'urn:ietf:params:xml:ns:caldav': 'c',\n\t\t\t'http://apple.com/ns/ical/': 'aapl',\n\t\t\t'http://owncloud.org/ns': 'oc',\n\t\t\t'http://nextcloud.com/ns': 'nc',\n\t\t\t'http://calendarserver.org/ns/': 'cs'\n\t\t}\n\t});\n\tangular.extend(client, {\n\t\tNS_DAV: 'DAV:',\n\t\tNS_IETF: 'urn:ietf:params:xml:ns:caldav',\n\t\tNS_APPLE: 'http://apple.com/ns/ical/',\n\t\tNS_OWNCLOUD: 'http://owncloud.org/ns',\n\t\tNS_NEXTCLOUD: 'http://nextcloud.com/ns',\n\t\tNS_CALENDARSERVER: 'http://calendarserver.org/ns/',\n\t\tbuildUrl: function buildUrl(path) {\n\t\t\treturn window.location.protocol + '//' + window.location.host + path;\n\t\t},\n\t\twasRequestSuccessful: function wasRequestSuccessful(status) {\n\t\t\treturn status >= 200 && status <= 299;\n\t\t}\n\t});\n\treturn client;\n}]);","'use strict';\n\nangular.module('Tasks').service('ICalFactory', [function () {\n 'use strict';\n\n // creates a new ICAL root element with a product id property\n\n return {\n new: function _new() {\n var root = new ICAL.Component(['vcalendar', [], []]);\n\n var version = angular.element('#app').attr('data-appVersion');\n root.updatePropertyWithValue('prodid', '-//Nextcloud Tasks v' + version);\n\n return root;\n }\n };\n}]);","'use strict';\n\nangular.module('Tasks').factory('Loading', [function () {\n\t'use strict';\n\n\tvar Loading = function () {\n\t\tfunction Loading() {\n\t\t\tthis.count = 0;\n\t\t}\n\n\t\tLoading.prototype.increase = function () {\n\t\t\treturn this.count += 1;\n\t\t};\n\n\t\tLoading.prototype.decrease = function () {\n\t\t\treturn this.count -= 1;\n\t\t};\n\n\t\tLoading.prototype.getCount = function () {\n\t\t\treturn this.count;\n\t\t};\n\n\t\tLoading.prototype.isLoading = function () {\n\t\t\treturn this.count > 0;\n\t\t};\n\n\t\treturn Loading;\n\t}();\n\treturn new Loading();\n}]);","'use strict';\n\n(function () {\n\t'use strict';\n\n\tangular.module('Tasks').factory('_Model', [function () {\n\t\tvar Model;\n\t\tModel = function () {\n\t\t\tfunction Model() {\n\t\t\t\tthis._data = [];\n\t\t\t\tthis._dataMap = {};\n\t\t\t\tthis._filterCache = {};\n\t\t\t}\n\n\t\t\tModel.prototype.handle = function (data) {\n\t\t\t\tvar item, _i, _len, _results;\n\t\t\t\t_results = [];\n\t\t\t\tfor (_i = 0, _len = data.length; _i < _len; _i++) {\n\t\t\t\t\titem = data[_i];\n\t\t\t\t\t_results.push(this.add(item));\n\t\t\t\t}\n\t\t\t\treturn _results;\n\t\t\t};\n\n\t\t\tModel.prototype.add = function (data, clearCache) {\n\t\t\t\tif (clearCache === null) {\n\t\t\t\t\tclearCache = true;\n\t\t\t\t}\n\t\t\t\tif (clearCache) {\n\t\t\t\t\tthis._invalidateCache();\n\t\t\t\t}\n\t\t\t\tif (angular.isDefined(this._dataMap[data.id])) {\n\t\t\t\t\treturn this.update(data, clearCache);\n\t\t\t\t} else {\n\t\t\t\t\tthis._data.push(data);\n\t\t\t\t\tthis._dataMap[data.id] = data;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tModel.prototype.update = function (data, clearCache) {\n\t\t\t\tvar entry, key, value, _results;\n\t\t\t\tif (clearCache === null) {\n\t\t\t\t\tclearCache = true;\n\t\t\t\t}\n\t\t\t\tif (clearCache) {\n\t\t\t\t\tthis._invalidateCache();\n\t\t\t\t}\n\t\t\t\tentry = this.getById(data.id);\n\t\t\t\t_results = [];\n\t\t\t\tfor (key in data) {\n\t\t\t\t\tvalue = data[key];\n\t\t\t\t\tif (key === 'id') {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_results.push(entry[key] = value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn _results;\n\t\t\t};\n\n\t\t\tModel.prototype.getById = function (id) {\n\t\t\t\treturn this._dataMap[id];\n\t\t\t};\n\n\t\t\tModel.prototype.getAll = function () {\n\t\t\t\treturn this._data;\n\t\t\t};\n\n\t\t\tModel.prototype.removeById = function (id, clearCache) {\n\t\t\t\tvar counter, data, entry, _i, _len, _ref;\n\t\t\t\tif (clearCache === null) {\n\t\t\t\t\tclearCache = true;\n\t\t\t\t}\n\t\t\t\t_ref = this._data;\n\t\t\t\tfor (counter = _i = 0, _len = _ref.length; _i < _len; counter = ++_i) {\n\t\t\t\t\tentry = _ref[counter];\n\t\t\t\t\tif (entry.id === id) {\n\t\t\t\t\t\tthis._data.splice(counter, 1);\n\t\t\t\t\t\tdata = this._dataMap[id];\n\t\t\t\t\t\tdelete this._dataMap[id];\n\t\t\t\t\t\tif (clearCache) {\n\t\t\t\t\t\t\tthis._invalidateCache();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tModel.prototype.clear = function () {\n\t\t\t\tthis._data.length = 0;\n\t\t\t\tthis._dataMap = {};\n\t\t\t\treturn this._invalidateCache();\n\t\t\t};\n\n\t\t\tModel.prototype._invalidateCache = function () {\n\t\t\t\tthis._filterCache = {};\n\t\t\t};\n\n\t\t\tModel.prototype.get = function (query) {\n\t\t\t\tvar hash;\n\t\t\t\thash = query.hashCode();\n\t\t\t\tif (!angular.isDefined(this._filterCache[hash])) {\n\t\t\t\t\tthis._filterCache[hash] = query.exec(this._data);\n\t\t\t\t}\n\t\t\t\treturn this._filterCache[hash];\n\t\t\t};\n\n\t\t\tModel.prototype.size = function () {\n\t\t\t\treturn this._data.length;\n\t\t\t};\n\n\t\t\treturn Model;\n\t\t}();\n\t\treturn Model;\n\t}]);\n}).call(undefined);","'use strict';\n\nangular.module('Tasks').factory('Persistence', ['Request', 'Loading', '$rootScope', '$q', 'CalendarService', function (Request, Loading, $rootScope, $q, CalendarService) {\n\t'use strict';\n\n\tvar Persistence = function () {\n\t\tfunction Persistence(_request, _Loading, _$rootScope, _CalendarService) {\n\t\t\tthis._request = _request;\n\t\t\tthis._Loading = _Loading;\n\t\t\tthis._$rootScope = _$rootScope;\n\t\t\tthis._CalendarService = _CalendarService;\n\t\t}\n\n\t\tPersistence.prototype.init = function () {\n\t\t\tvar successCallback,\n\t\t\t _this = this;\n\t\t\tthis.deferred = $q.defer();\n\t\t\tsuccessCallback = function successCallback() {\n\t\t\t\treturn _this.deferred.resolve();\n\t\t\t};\n\t\t\tthis.getCollections();\n\t\t\tthis.getSettings();\n\t\t\treturn this.deferred.promise;\n\t\t};\n\n\t\tPersistence.prototype.getCollections = function (onSuccess, showLoading) {\n\t\t\tvar failureCallbackWrapper,\n\t\t\t params,\n\t\t\t successCallbackWrapper,\n\t\t\t _this = this;\n\t\t\tif (showLoading === null) {\n\t\t\t\tshowLoading = true;\n\t\t\t}\n\t\t\tif (!onSuccess) {\n\t\t\t\tonSuccess = function onSuccess() {};\n\t\t\t}\n\t\t\tif (showLoading) {\n\t\t\t\tthis._Loading.increase();\n\t\t\t\tsuccessCallbackWrapper = function successCallbackWrapper(data) {\n\t\t\t\t\tonSuccess();\n\t\t\t\t\treturn _this._Loading.decrease();\n\t\t\t\t};\n\t\t\t\tfailureCallbackWrapper = function failureCallbackWrapper(data) {\n\t\t\t\t\treturn _this._Loading.decrease();\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tsuccessCallbackWrapper = function successCallbackWrapper(data) {\n\t\t\t\t\treturn onSuccess();\n\t\t\t\t};\n\t\t\t\tfailureCallbackWrapper = function failureCallbackWrapper(data) {};\n\t\t\t}\n\t\t\tparams = {\n\t\t\t\tonSuccess: successCallbackWrapper,\n\t\t\t\tonFailure: failureCallbackWrapper\n\t\t\t};\n\t\t\treturn this._request.get('/apps/tasks/collections', params);\n\t\t};\n\n\t\tPersistence.prototype.getSettings = function (onSuccess, showLoading) {\n\t\t\tvar failureCallbackWrapper,\n\t\t\t params,\n\t\t\t successCallbackWrapper,\n\t\t\t _this = this;\n\t\t\tif (showLoading === null) {\n\t\t\t\tshowLoading = true;\n\t\t\t}\n\t\t\tif (!onSuccess) {\n\t\t\t\tonSuccess = function onSuccess() {};\n\t\t\t}\n\t\t\tif (showLoading) {\n\t\t\t\tthis._Loading.increase();\n\t\t\t\tsuccessCallbackWrapper = function successCallbackWrapper(data) {\n\t\t\t\t\tonSuccess();\n\t\t\t\t\treturn _this._Loading.decrease();\n\t\t\t\t};\n\t\t\t\tfailureCallbackWrapper = function failureCallbackWrapper(data) {\n\t\t\t\t\treturn _this._Loading.decrease();\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tsuccessCallbackWrapper = function successCallbackWrapper(data) {\n\t\t\t\t\treturn onSuccess();\n\t\t\t\t};\n\t\t\t\tfailureCallbackWrapper = function failureCallbackWrapper(data) {};\n\t\t\t}\n\t\t\tparams = {\n\t\t\t\tonSuccess: successCallbackWrapper,\n\t\t\t\tonFailure: failureCallbackWrapper\n\t\t\t};\n\t\t\treturn this._request.get('/apps/tasks/settings', params);\n\t\t};\n\n\t\tPersistence.prototype.setVisibility = function (collectionID, visibility) {\n\t\t\tvar params = {\n\t\t\t\trouteParams: {\n\t\t\t\t\tcollectionID: collectionID,\n\t\t\t\t\tvisibility: visibility\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn this._request.post('/apps/tasks/collection/{collectionID}/visibility/{visibility}', params);\n\t\t};\n\n\t\tPersistence.prototype.setting = function (type, setting, value) {\n\t\t\tvar params = {\n\t\t\t\trouteParams: {\n\t\t\t\t\ttype: type,\n\t\t\t\t\tsetting: setting,\n\t\t\t\t\tvalue: value\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn this._request.post('/apps/tasks/settings/{type}/{setting}/{value}', params);\n\t\t};\n\t\treturn Persistence;\n\t}();\n\treturn new Persistence(Request, Loading, $rootScope, CalendarService);\n}]);","'use strict';\n\nangular.module('Tasks').factory('Publisher', ['CollectionsModel', 'SettingsModel', function (CollectionsModel, SettingsModel) {\n\t'use strict';\n\n\tvar Publisher = function () {\n\t\tfunction Publisher(_$collectionsmodel, _$settingsmodel) {\n\t\t\tthis._$collectionsmodel = _$collectionsmodel;\n\t\t\tthis._$settingsmodel = _$settingsmodel;\n\t\t\tthis._subscriptions = {};\n\t\t\tthis.subscribeObjectTo(this._$collectionsmodel, 'collections');\n\t\t\tthis.subscribeObjectTo(this._$settingsmodel, 'settings');\n\t\t}\n\n\t\tPublisher.prototype.subscribeObjectTo = function (object, name) {\n\t\t\tvar base = this._subscriptions;\n\t\t\tif (!base[name]) {\n\t\t\t\tbase[name] = [];\n\t\t\t}\n\t\t\treturn this._subscriptions[name].push(object);\n\t\t};\n\n\t\tPublisher.prototype.publishDataTo = function (data, name) {\n\t\t\tvar ref, results, subscriber, _i, _len;\n\t\t\tref = this._subscriptions[name] || [];\n\t\t\tresults = [];\n\t\t\tfor (_i = 0, _len = ref.length; _i < _len; _i++) {\n\t\t\t\tsubscriber = ref[_i];\n\t\t\t\tresults.push(subscriber.handle(data));\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\t\treturn Publisher;\n\t}();\n\treturn new Publisher(CollectionsModel, SettingsModel);\n}]);","'use strict';\n\nangular.module('Tasks').factory('RandomStringService', function () {\n 'use strict';\n\n return {\n generate: function generate() {\n return Math.random().toString(36).substr(2);\n }\n };\n});","'use strict';\n\nangular.module('Tasks').factory('Request', ['$http', 'Publisher', function ($http, Publisher) {\n\t'use strict';\n\n\tvar Request = function () {\n\t\tfunction Request($http, publisher) {\n\t\t\tthis.$http = $http;\n\t\t\tthis.publisher = publisher;\n\t\t\tthis.count = 0;\n\t\t\tthis.initialized = false;\n\t\t\tthis.shelvedRequests = [];\n\t\t\tthis.initialized = true;\n\t\t\tthis._executeShelvedRequests();\n\t\t}\n\n\t\tRequest.prototype.request = function (route, data) {\n\t\t\tvar defaultConfig, defaultData, url;\n\t\t\tif (data === null) {\n\t\t\t\tdata = {};\n\t\t\t}\n\t\t\tdefaultData = {\n\t\t\t\trouteParams: {},\n\t\t\t\tdata: {},\n\t\t\t\tonSuccess: function onSuccess() {\n\t\t\t\t\treturn {};\n\t\t\t\t},\n\t\t\t\tonFailure: function onFailure() {\n\t\t\t\t\treturn {};\n\t\t\t\t},\n\t\t\t\tconfig: {}\n\t\t\t};\n\t\t\tangular.extend(defaultData, data);\n\t\t\tif (!this.initialized) {\n\t\t\t\tthis._shelveRequest(route, defaultData);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\turl = OC.generateUrl(route, defaultData.routeParams);\n\t\t\tdefaultConfig = {\n\t\t\t\turl: url,\n\t\t\t\tdata: defaultData.data\n\t\t\t};\n\t\t\tangular.extend(defaultConfig, defaultData.config);\n\t\t\tif (defaultConfig.method === 'GET') {\n\t\t\t\tdefaultConfig.params = defaultConfig.data;\n\t\t\t}\n\t\t\treturn this.$http(defaultConfig).then(function (_this) {\n\t\t\t\treturn function (response) {\n\t\t\t\t\tvar name, ref, value;\n\t\t\t\t\tref = response.data.data;\n\t\t\t\t\tfor (name in ref) {\n\t\t\t\t\t\tvalue = ref[name];\n\t\t\t\t\t\t_this.publisher.publishDataTo(value, name);\n\t\t\t\t\t}\n\t\t\t\t\treturn defaultData.onSuccess(response.data, response.status, response.headers, response.config);\n\t\t\t\t};\n\t\t\t}(this)).catch(function (response) {\n\t\t\t\treturn defaultData.onFailure(response.data, response.status, response.headers, response.config);\n\t\t\t});\n\t\t};\n\n\t\tRequest.prototype.post = function (route, data) {\n\t\t\tif (data === null) {\n\t\t\t\tdata = {};\n\t\t\t}\n\t\t\tif (!data.config) {\n\t\t\t\tdata.config = {};\n\t\t\t}\n\t\t\tdata.config.method = 'POST';\n\t\t\treturn this.request(route, data);\n\t\t};\n\n\t\tRequest.prototype.get = function (route, data) {\n\t\t\tif (data === null) {\n\t\t\t\tdata = {};\n\t\t\t}\n\t\t\tif (!data.config) {\n\t\t\t\tdata.config = {};\n\t\t\t}\n\t\t\tdata.config.method = 'GET';\n\t\t\treturn this.request(route, data);\n\t\t};\n\n\t\tRequest.prototype.put = function (route, data) {\n\t\t\tif (data === null) {\n\t\t\t\tdata = {};\n\t\t\t}\n\t\t\tif (!data.config) {\n\t\t\t\tdata.config = {};\n\t\t\t}\n\t\t\tdata.config.method = 'PUT';\n\t\t\treturn this.request(route, data);\n\t\t};\n\n\t\tRequest.prototype[\"delete\"] = function (route, data) {\n\t\t\tif (data === null) {\n\t\t\t\tdata = {};\n\t\t\t}\n\t\t\tif (!data.config) {\n\t\t\t\tdata.config = {};\n\t\t\t}\n\t\t\tdata.config.method = 'DELETE';\n\t\t\treturn this.request(route, data);\n\t\t};\n\n\t\tRequest.prototype._shelveRequest = function (route, data) {\n\t\t\tvar request = {\n\t\t\t\troute: route,\n\t\t\t\tdata: data\n\t\t\t};\n\t\t\treturn this.shelvedRequests.push(request);\n\t\t};\n\n\t\tRequest.prototype._executeShelvedRequests = function () {\n\t\t\tvar r, ref, results, _i, _len;\n\t\t\tref = this.shelvedRequests;\n\t\t\tresults = [];\n\t\t\tfor (_i = 0, _len = ref.length; _i < _len; _i++) {\n\t\t\t\tr = ref[_i];\n\t\t\t\tresults.push(this.request(r.route, r.data));\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\t\treturn Request;\n\t}();\n\treturn new Request($http, Publisher);\n}]);","'use strict';\n\nangular.module('Tasks').factory('Status', [function () {\n 'use strict';\n\n var Status;\n Status = function () {\n function Status() {\n this._$status = {\n addingList: false,\n focusTaskInput: false\n };\n }\n\n Status.prototype.getStatus = function () {\n return this._$status;\n };\n\n return Status;\n }();\n return new Status();\n}]);","'use strict';\n\nangular.module('Tasks').service('VTodoService', ['DavClient', 'RandomStringService', '$timeout', function (DavClient, RandomStringService, $timeout) {\n\t'use strict';\n\n\tvar _this = this;\n\n\tthis.getAll = function (calendar, completed, parent) {\n\t\tif (completed === null) {\n\t\t\tcompleted = false;\n\t\t}\n\t\tif (parent === null) {\n\t\t\tparent = false;\n\t\t}\n\t\tvar xmlDoc = document.implementation.createDocument('', '', null);\n\t\tvar cCalQuery = xmlDoc.createElement('c:calendar-query');\n\t\tcCalQuery.setAttribute('xmlns:c', 'urn:ietf:params:xml:ns:caldav');\n\t\tcCalQuery.setAttribute('xmlns:d', 'DAV:');\n\t\tcCalQuery.setAttribute('xmlns:a', 'http://apple.com/ns/ical/');\n\t\tcCalQuery.setAttribute('xmlns:o', 'http://owncloud.org/ns');\n\t\txmlDoc.appendChild(cCalQuery);\n\n\t\tvar dProp = xmlDoc.createElement('d:prop');\n\t\tcCalQuery.appendChild(dProp);\n\n\t\tvar dGetEtag = xmlDoc.createElement('d:getetag');\n\t\tdProp.appendChild(dGetEtag);\n\n\t\tvar cCalendarData = xmlDoc.createElement('c:calendar-data');\n\t\tdProp.appendChild(cCalendarData);\n\n\t\tvar cFilter = xmlDoc.createElement('c:filter');\n\t\tcCalQuery.appendChild(cFilter);\n\n\t\tvar cCompFilterVCal = xmlDoc.createElement('c:comp-filter');\n\t\tcCompFilterVCal.setAttribute('name', 'VCALENDAR');\n\t\tcFilter.appendChild(cCompFilterVCal);\n\n\t\tvar cCompFilterVTodo = xmlDoc.createElement('c:comp-filter');\n\t\tcCompFilterVTodo.setAttribute('name', 'VTODO');\n\t\tcCompFilterVCal.appendChild(cCompFilterVTodo);\n\n\t\tvar cPropFilterCompleted = xmlDoc.createElement('c:prop-filter');\n\t\tcPropFilterCompleted.setAttribute('name', 'COMPLETED');\n\t\tcCompFilterVTodo.appendChild(cPropFilterCompleted);\n\n\t\tif (!completed) {\n\t\t\tvar cIsNotDefined = xmlDoc.createElement('c:is-not-defined');\n\t\t\tcPropFilterCompleted.appendChild(cIsNotDefined);\n\t\t}\n\n\t\tif (parent) {\n\t\t\tvar cPropFilterRelated = xmlDoc.createElement('c:prop-filter');\n\t\t\tcPropFilterRelated.setAttribute('name', 'RELATED-TO');\n\t\t\tcCompFilterVTodo.appendChild(cPropFilterRelated);\n\t\t\tvar cTextMatch = xmlDoc.createElement('c:text-match');\n\t\t\tvar cTextMatchValue = xmlDoc.createTextNode(parent.uid);\n\t\t\tcTextMatch.appendChild(cTextMatchValue);\n\t\t\tcPropFilterRelated.appendChild(cTextMatch);\n\t\t}\n\n\t\t// var cPropFilterStatus = xmlDoc.createElement('c:prop-filter');\n\t\t// cPropFilterStatus.setAttribute('name', 'STATUS');\n\t\t// cCompFilterVTodo.appendChild(cPropFilterStatus);\n\n\t\t// var cTextMatch = xmlDoc.createElement('c:text-match');\n\t\t// cTextMatch.setAttribute('negate-condition', 'yes');\n\t\t// var cTextMatchValue = xmlDoc.createTextNode('CANCELLED');\n\t\t// cTextMatch.appendChild(cTextMatchValue);\n\t\t// cPropFilterStatus.appendChild(cTextMatch);\n\n\t\t// var cTimeRange = xmlDoc.createElement('c:time-range');\n\t\t// cTimeRange.setAttribute('start', this._getTimeRangeStamp(start));\n\t\t// cTimeRange.setAttribute('end', this._getTimeRangeStamp(end));\n\t\t// cCompFilterVTodo.appendChild(cTimeRange);\n\n\t\tvar url = calendar.url;\n\t\tvar headers = {\n\t\t\t'Content-Type': 'application/xml; charset=utf-8',\n\t\t\t'Depth': 1,\n\t\t\t'requesttoken': OC.requestToken\n\t\t};\n\t\tvar body = cCalQuery.outerHTML;\n\n\t\treturn DavClient.request('REPORT', url, headers, body).then(function (response) {\n\t\t\tif (!DavClient.wasRequestSuccessful(response.status)) {\n\t\t\t\t//TODO - something went wrong\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar vTodos = [];\n\n\t\t\tfor (var i in response.body) {\n\t\t\t\tvar object = response.body[i];\n\t\t\t\tvar properties = object.propStat[0].properties;\n\n\t\t\t\tvar uri = object.href.substr(object.href.lastIndexOf('/') + 1);\n\n\t\t\t\tvar vTodo = {\n\t\t\t\t\tcalendar: calendar,\n\t\t\t\t\tproperties: properties,\n\t\t\t\t\turi: uri\n\t\t\t\t};\n\t\t\t\tvTodos.push(vTodo);\n\t\t\t}\n\n\t\t\treturn vTodos;\n\t\t});\n\t};\n\n\tthis.get = function (calendar, uri) {\n\t\tvar url = calendar.url + uri;\n\t\treturn DavClient.request('GET', url, { 'requesttoken': OC.requestToken }, '').then(function (response) {\n\t\t\tvar vTodo = {\n\t\t\t\tcalendar: calendar,\n\t\t\t\tproperties: {\n\t\t\t\t\t'{urn:ietf:params:xml:ns:caldav}calendar-data': response.body,\n\t\t\t\t\t'{DAV:}getetag': response.xhr.getResponseHeader('ETag') },\n\t\t\t\turi: uri\n\t\t\t};\n\t\t\treturn vTodo;\n\t\t});\n\t};\n\n\tthis.create = function (calendar, data, returnTodo) {\n\t\tif (typeof returnTodo === 'undefined') {\n\t\t\treturnTodo = true;\n\t\t}\n\n\t\tvar headers = {\n\t\t\t'Content-Type': 'text/calendar; charset=utf-8',\n\t\t\t'requesttoken': OC.requestToken\n\t\t};\n\t\tvar uri = this._generateRandomUri();\n\t\tvar url = calendar.url + uri;\n\n\t\treturn DavClient.request('PUT', url, headers, data).then(function (response) {\n\t\t\tif (!DavClient.wasRequestSuccessful(response.status)) {\n\t\t\t\tconsole.log(response);\n\t\t\t\treturn false;\n\t\t\t\t// TODO - something went wrong, do smth about it\n\t\t\t}\n\n\t\t\treturn returnTodo ? _this.get(calendar, uri) : true;\n\t\t});\n\t};\n\n\tthis.update = function (task) {\n\t\tvar url = task.calendar.url + task.uri;\n\t\tvar headers = {\n\t\t\t'Content-Type': 'text/calendar; charset=utf-8',\n\t\t\t'If-Match': task.etag,\n\t\t\t'requesttoken': OC.requestToken\n\t\t};\n\t\t$timeout.cancel(task.timers.update);\n\t\treturn DavClient.request('PUT', url, headers, task.data).then(function (response) {\n\t\t\ttask.etag = response.xhr.getResponseHeader('ETag');\n\t\t\treturn DavClient.wasRequestSuccessful(response.status);\n\t\t});\n\t};\n\n\tthis.delete = function (task) {\n\t\tvar url = task.calendar.url + task.uri;\n\t\tvar headers = {\n\t\t\t'If-Match': task.etag,\n\t\t\t'requesttoken': OC.requestToken\n\t\t};\n\n\t\treturn DavClient.request('DELETE', url, headers, '').then(function (response) {\n\t\t\treturn DavClient.wasRequestSuccessful(response.status);\n\t\t});\n\t};\n\n\tthis._generateRandomUri = function () {\n\t\tvar uri = 'Nextcloud-';\n\t\turi += RandomStringService.generate();\n\t\turi += RandomStringService.generate();\n\t\turi += '.ics';\n\n\t\treturn uri;\n\t};\n\n\t// this._getTimeRangeStamp = function(momentObject) {\n\t// \treturn momentObject.format('YYYYMMDD') + 'T' + momentObject.format('HHmmss') + 'Z';\n\t// };\n}]);","'use strict';\n\nangular.module('Tasks').factory('ListsBusinessLayer', ['ListsModel', 'Persistence', 'TasksBusinessLayer', 'CalendarService', function (ListsModel, Persistence, TasksBusinessLayer, CalendarService) {\n\t'use strict';\n\n\tvar ListsBusinessLayer;\n\tListsBusinessLayer = function () {\n\t\tfunction ListsBusinessLayer(_$listsmodel, _persistence, _$tasksbusinesslayer, _$calendarservice) {\n\t\t\tthis._$listsmodel = _$listsmodel;\n\t\t\tthis._persistence = _persistence;\n\t\t\tthis._$tasksbusinesslayer = _$tasksbusinesslayer;\n\t\t\tthis._$calendarservice = _$calendarservice;\n\t\t}\n\n\t\tListsBusinessLayer.prototype.init = function () {\n\t\t\treturn this._$calendarservice.getAll().then(function (calendars) {\n\t\t\t\tvar calendar, _i, _len, _results;\n\t\t\t\t_results = [];\n\t\t\t\tfor (_i = 0, _len = calendars.length; _i < _len; _i++) {\n\t\t\t\t\tcalendar = calendars[_i];\n\t\t\t\t\tListsModel.add(calendar);\n\t\t\t\t\t_results.push(TasksBusinessLayer.getAll(calendar));\n\t\t\t\t}\n\t\t\t\treturn _results;\n\t\t\t});\n\t\t};\n\n\t\tListsBusinessLayer.prototype.add = function (calendar, color) {\n\t\t\treturn this._$calendarservice.create(calendar, color, ['vtodo']).then(function (calendar) {\n\t\t\t\tListsModel.add(calendar);\n\t\t\t\treturn calendar;\n\t\t\t});\n\t\t};\n\n\t\tListsBusinessLayer.prototype[\"delete\"] = function (calendar) {\n\t\t\treturn this._$calendarservice[\"delete\"](calendar).then(function () {\n\t\t\t\treturn ListsModel[\"delete\"](calendar);\n\t\t\t});\n\t\t};\n\n\t\tListsBusinessLayer.prototype.rename = function (calendar) {\n\t\t\tthis._$calendarservice.update(calendar).then(function (calendar) {\n\t\t\t\tcalendar.dropPreviousState();\n\t\t\t});\n\t\t};\n\n\t\treturn ListsBusinessLayer;\n\t}();\n\treturn new ListsBusinessLayer(ListsModel, Persistence, TasksBusinessLayer, CalendarService);\n}]);","'use strict';\n\n(function () {\n\t'use strict';\n\n\tvar __bind = function __bind(fn, me) {\n\t\treturn function () {\n\t\t\treturn fn.apply(me, arguments);\n\t\t};\n\t};\n\n\tangular.module('Tasks').factory('SearchBusinessLayer', ['ListsModel', 'Persistence', 'TasksModel', '$rootScope', '$routeParams', '$location', function (ListsModel, Persistence, TasksModel, $rootScope, $routeParams, $location) {\n\t\tvar SearchBusinessLayer;\n\t\tSearchBusinessLayer = function () {\n\t\t\tfunction SearchBusinessLayer(_$listsmodel, _persistence, _$tasksmodel, _$rootScope, _$routeparams, _$location) {\n\t\t\t\tthis._$listsmodel = _$listsmodel;\n\t\t\t\tthis._persistence = _persistence;\n\t\t\t\tthis._$tasksmodel = _$tasksmodel;\n\t\t\t\tthis._$rootScope = _$rootScope;\n\t\t\t\tthis._$routeparams = _$routeparams;\n\t\t\t\tthis._$location = _$location;\n\t\t\t\tthis.getFilter = __bind(this.getFilter, this);\n\t\t\t\tthis.setFilter = __bind(this.setFilter, this);\n\t\t\t\tthis.cleanSearch = __bind(this.cleanSearch, this);\n\t\t\t\tthis.attach = __bind(this.attach, this);\n\t\t\t\tthis.initialize();\n\t\t\t\tthis._$searchString = '';\n\t\t\t}\n\n\t\t\tSearchBusinessLayer.prototype.attach = function (search) {\n\t\t\t\tvar _this = this;\n\t\t\t\tsearch.setFilter('tasks', function (query) {\n\t\t\t\t\treturn _this.setFilter(query);\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tSearchBusinessLayer.prototype.setFilter = function (query) {\n\t\t\t\tvar _this = this;\n\t\t\t\treturn _this._$rootScope.$apply(function () {\n\t\t\t\t\t_this._$searchString = query;\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tSearchBusinessLayer.prototype.cleanSearch = function () {\n\t\t\t\tvar _this = this;\n\t\t\t\treturn _this._$rootScope.$apply(function () {\n\t\t\t\t\t_this._$searchString = '';\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tSearchBusinessLayer.prototype.getFilter = function () {\n\t\t\t\treturn this._$searchString;\n\t\t\t};\n\n\t\t\tSearchBusinessLayer.prototype.initialize = function () {\n\n\t\t\t\tvar version = OC.config.version.split('.');\n\n\t\t\t\tif (version[0] >= 14) {\n\t\t\t\t\tOC.Search = new OCA.Search(this.setFilter, this.cleanSearch);\n\t\t\t\t} else {\n\t\t\t\t\tOC.Plugins.register('OCA.Search', this);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treturn SearchBusinessLayer;\n\t\t}();\n\t\treturn new SearchBusinessLayer(ListsModel, Persistence, TasksModel, $rootScope, $routeParams, $location);\n\t}]);\n}).call(undefined);","'use strict';\n\nangular.module('Tasks').factory('SettingsBusinessLayer', ['Persistence', 'SettingsModel', function (Persistence, SettingsModel) {\n\t'use strict';\n\n\tvar SettingsBusinessLayer = function () {\n\t\tfunction SettingsBusinessLayer(_persistence, _$settingsmodel) {\n\t\t\tthis._persistence = _persistence;\n\t\t\tthis._$settingsmodel = _$settingsmodel;\n\t\t}\n\n\t\tSettingsBusinessLayer.prototype.updateModel = function () {\n\t\t\tvar success,\n\t\t\t _this = this;\n\t\t\tsuccess = function success() {};\n\t\t\treturn this._persistence.getCollections(success, true);\n\t\t};\n\n\t\tSettingsBusinessLayer.prototype.setVisibility = function (collectionID, visibility) {\n\t\t\treturn this._persistence.setVisibility(collectionID, visibility);\n\t\t};\n\n\t\tSettingsBusinessLayer.prototype.toggle = function (type, setting) {\n\t\t\tthis._$settingsmodel.toggle(type, setting);\n\t\t\tvar value = this._$settingsmodel.getById(type)[setting];\n\t\t\treturn this._persistence.setting(type, setting, +value);\n\t\t};\n\n\t\tSettingsBusinessLayer.prototype.set = function (type, setting, value) {\n\t\t\treturn this._persistence.setting(type, setting, value);\n\t\t};\n\n\t\treturn SettingsBusinessLayer;\n\t}();\n\treturn new SettingsBusinessLayer(Persistence, SettingsModel);\n}]);","'use strict';\n\nangular.module('Tasks').factory('TasksBusinessLayer', ['TasksModel', 'Persistence', 'VTodoService', 'VTodo', '$timeout', function (TasksModel, Persistence, VTodoService, VTodo, $timeout) {\n\t'use strict';\n\n\tvar TasksBusinessLayer;\n\tTasksBusinessLayer = function () {\n\t\tfunction TasksBusinessLayer(_$tasksmodel, _persistence, _$vtodoservice, _$vtodo, $timeout) {\n\t\t\tthis._$tasksmodel = _$tasksmodel;\n\t\t\tthis._persistence = _persistence;\n\t\t\tthis._$vtodoservice = _$vtodoservice;\n\t\t}\n\n\t\tTasksBusinessLayer.prototype.getAll = function (calendar, completed, parent) {\n\t\t\treturn this._$vtodoservice.getAll(calendar, completed, parent).then(function (tasks) {\n\t\t\t\tvar task, _i, _len, _results;\n\t\t\t\t_results = [];\n\t\t\t\tfor (_i = 0, _len = tasks.length; _i < _len; _i++) {\n\t\t\t\t\ttask = tasks[_i];\n\t\t\t\t\tvar vTodo = new VTodo(task.calendar, task.properties, task.uri);\n\t\t\t\t\t_results.push(TasksModel.ad(vTodo));\n\t\t\t\t}\n\t\t\t\treturn _results;\n\t\t\t});\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.add = function (task) {\n\t\t\treturn this._$vtodoservice.create(task.calendar, task.data).then(function (task) {\n\t\t\t\tvar vTodo = new VTodo(task.calendar, task.properties, task.uri);\n\t\t\t\tTasksModel.ad(vTodo);\n\t\t\t\treturn vTodo;\n\t\t\t});\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.getTask = function (calendar, uri) {\n\t\t\treturn this._$vtodoservice.get(calendar, uri).then(function (task) {\n\t\t\t\tTasksModel.ad(task);\n\t\t\t\treturn task;\n\t\t\t});\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.setPriority = function (task, priority) {\n\t\t\tif (task.calendar.writable) {\n\t\t\t\ttask.priority = priority;\n\t\t\t\tthis.doUpdate(task);\n\t\t\t}\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.setPercentComplete = function (task, percentComplete) {\n\t\t\tif (task.calendar.writable) {\n\t\t\t\tif (percentComplete < 100) {\n\t\t\t\t\tthis.uncompleteParents(task.related);\n\t\t\t\t} else {\n\t\t\t\t\tthis.completeChildren(task);\n\t\t\t\t}\n\t\t\t\ttask.complete = percentComplete;\n\t\t\t\tthis.triggerUpdate(task);\n\t\t\t}\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.triggerUpdate = function (task, duration) {\n\t\t\tif (!duration) {\n\t\t\t\tduration = 1000;\n\t\t\t}\n\t\t\tif (task.timers.update) {\n\t\t\t\t$timeout.cancel(task.timers.update);\n\t\t\t}\n\t\t\ttask.timers.update = $timeout(function (task) {\n\t\t\t\tVTodoService.update(task);\n\t\t\t}, duration, true, task);\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.doUpdate = function (task) {\n\t\t\treturn this._$vtodoservice.update(task);\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.completeChildren = function (task) {\n\t\t\tvar child, _i, _len;\n\t\t\tvar children = this._$tasksmodel.getChildren(task);\n\t\t\tvar _results = [];\n\t\t\tfor (_i = 0, _len = children.length; _i < _len; _i++) {\n\t\t\t\tchild = children[_i];\n\t\t\t\t_results.push(this.setPercentComplete(child, 100));\n\t\t\t}\n\t\t\treturn _results;\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.uncompleteParents = function (uid) {\n\t\t\tif (uid) {\n\t\t\t\tvar parent = this._$tasksmodel.getByUid(uid);\n\t\t\t\tif (parent.completed) {\n\t\t\t\t\treturn this.setPercentComplete(parent, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.setHideSubtasks = function (task, hide) {\n\t\t\ttask.hideSubtasks = hide;\n\t\t\tif (task.calendar.writable) {\n\t\t\t\tthis.doUpdate(task);\n\t\t\t}\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.setHideCompletedSubtasks = function (task, hide) {\n\t\t\ttask.hideCompletedSubtasks = hide;\n\t\t\tif (task.calendar.writable) {\n\t\t\t\tthis.doUpdate(task);\n\t\t\t}\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.deleteTask = function (task) {\n\t\t\tvar child, children, _i, _len;\n\t\t\tchildren = this._$tasksmodel.getChildren(task);\n\t\t\tfor (_i = 0, _len = children.length; _i < _len; _i++) {\n\t\t\t\tchild = children[_i];\n\t\t\t\tthis.deleteTask(child);\n\t\t\t}\n\t\t\treturn this._$vtodoservice[\"delete\"](task).then(function () {\n\t\t\t\treturn TasksModel[\"delete\"](task);\n\t\t\t});\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.momentToICALTime = function (moment, asDate) {\n\t\t\tif (asDate) {\n\t\t\t\treturn ICAL.Time.fromDateString(moment.format('YYYY-MM-DD'));\n\t\t\t} else {\n\t\t\t\treturn ICAL.Time.fromDateTimeString(moment.format('YYYY-MM-DDTHH:mm:ss'));\n\t\t\t}\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.initDueDate = function (task) {\n\t\t\tvar start = moment(task.start, \"YYYY-MM-DDTHH:mm:ss\");\n\t\t\tvar due = moment(task.due, \"YYYY-MM-DDTHH:mm:ss\");\n\t\t\tif (!due.isValid()) {\n\t\t\t\tvar reference = start.isAfter() ? start : moment();\n\t\t\t\tif (task.allDay) {\n\t\t\t\t\treference.startOf('day').add(1, 'd');\n\t\t\t\t} else {\n\t\t\t\t\treference.startOf('hour').add(1, 'h');\n\t\t\t\t}\n\t\t\t\treturn this.setDue(task, reference, 'all');\n\t\t\t}\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.setDue = function (task, date, type) {\n\t\t\tif (type === null) {\n\t\t\t\ttype = 'day';\n\t\t\t}\n\t\t\tvar allDay = task.allDay;\n\t\t\tvar start = moment(task.start, \"YYYY-MM-DDTHH:mm:ss\");\n\t\t\tvar olddue = moment(task.due, \"YYYY-MM-DDTHH:mm:ss\");\n\t\t\tvar due = olddue.clone();\n\t\t\tif (type === 'day') {\n\t\t\t\tif (moment(due).isValid()) {\n\t\t\t\t\tdue.year(date.year()).month(date.month()).date(date.date());\n\t\t\t\t} else {\n\t\t\t\t\tdue = date.add(12, 'h');\n\t\t\t\t}\n\t\t\t} else if (type === 'time') {\n\t\t\t\tif (moment(due).isValid()) {\n\t\t\t\t\tdue.hour(date.hour()).minute(date.minute());\n\t\t\t\t} else {\n\t\t\t\t\tdue = date;\n\t\t\t\t}\n\t\t\t} else if (type === 'all') {\n\t\t\t\tdue = date;\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (due.isBefore(start) || due.isSame(start)) {\n\t\t\t\tstart.subtract(olddue.diff(due), 'ms');\n\t\t\t\ttask.start = this.momentToICALTime(start, allDay);\n\t\t\t}\n\t\t\ttask.due = this.momentToICALTime(due, allDay);\n\t\t\t// this.checkReminderDate(task);\n\t\t\tthis.doUpdate(task);\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.deleteDueDate = function (task) {\n\t\t\t// var reminder = task.reminder;\n\t\t\t// if (reminder !== null && reminder.type === 'DURATION' && reminder.duration.params.related === 'END') {\n\t\t\t// this.deleteReminderDate(task);\n\t\t\t// }\n\t\t\ttask.due = null;\n\t\t\tthis.doUpdate(task);\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.initStartDate = function (task) {\n\t\t\tvar start = moment(task.start, \"YYYY-MM-DDTHH:mm:ss\");\n\t\t\tvar due = moment(task.due, \"YYYY-MM-DDTHH:mm:ss\");\n\t\t\tif (!start.isValid()) {\n\t\t\t\tvar reference = moment().add(1, 'h');\n\t\t\t\tif (due.isBefore(reference)) {\n\t\t\t\t\treference = due.subtract(1, 'm');\n\t\t\t\t}\n\t\t\t\treference.startOf(task.allDay ? 'day' : 'hour');\n\t\t\t\treturn this.setStart(task, reference, 'all');\n\t\t\t}\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.setStart = function (task, date, type) {\n\t\t\tif (type === null) {\n\t\t\t\ttype = 'day';\n\t\t\t}\n\t\t\tvar allDay = task.allDay;\n\t\t\tvar due = moment(task.due, \"YYYY-MM-DDTHH:mm:ss\");\n\t\t\tvar oldstart = moment(task.start, \"YYYY-MM-DDTHH:mm:ss\");\n\t\t\tvar start = oldstart.clone();\n\t\t\tif (type === 'day') {\n\t\t\t\tif (moment(start).isValid()) {\n\t\t\t\t\tstart.year(date.year()).month(date.month()).date(date.date());\n\t\t\t\t} else {\n\t\t\t\t\tstart = date.add(12, 'h');\n\t\t\t\t}\n\t\t\t} else if (type === 'time') {\n\t\t\t\tif (moment(start).isValid()) {\n\t\t\t\t\tstart.hour(date.hour()).minute(date.minute());\n\t\t\t\t} else {\n\t\t\t\t\tstart = date;\n\t\t\t\t}\n\t\t\t} else if (type === 'all') {\n\t\t\t\tstart = date;\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (start.isAfter(due) || start.isSame(due)) {\n\t\t\t\tdue.add(start.diff(oldstart), 'ms');\n\t\t\t\ttask.due = this.momentToICALTime(due, allDay);\n\t\t\t}\n\t\t\ttask.start = this.momentToICALTime(start, allDay);\n\t\t\t// this.checkReminderDate(taskID);\n\t\t\tthis.doUpdate(task);\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.deleteStartDate = function (task) {\n\t\t\t// var reminder = task.reminder;\n\t\t\t// if (reminder !== null && reminder.type === 'DURATION' && reminder.duration.params.related === 'START') {\n\t\t\t// this.deleteReminderDate(task);\n\t\t\t// }\n\t\t\ttask.start = null;\n\t\t\tthis.doUpdate(task);\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.setAllDay = function (task, allDay) {\n\t\t\ttask.allDay = allDay;\n\t\t\tif (allDay) {\n\t\t\t\tvar due = moment(task.due, \"YYYY-MM-DDTHH:mm:ss\");\n\t\t\t\tvar start = moment(task.start, \"YYYY-MM-DDTHH:mm:ss\");\n\t\t\t\tif (start.isAfter(due) || start.isSame(due)) {\n\t\t\t\t\tstart = moment(due).subtract(1, 'day');\n\t\t\t\t\ttask.start = this.momentToICALTime(start, allDay);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.doUpdate(task);\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.initReminder = function (taskID) {\n\t\t\tvar p, task;\n\t\t\tif (!this.checkReminderDate(taskID)) {\n\t\t\t\ttask = this._$tasksmodel.getById(taskID);\n\t\t\t\ttask.reminder = {\n\t\t\t\t\ttype: 'DURATION',\n\t\t\t\t\taction: 'DISPLAY',\n\t\t\t\t\tduration: {\n\t\t\t\t\t\ttoken: 'week',\n\t\t\t\t\t\tweek: 0,\n\t\t\t\t\t\tday: 0,\n\t\t\t\t\t\thour: 0,\n\t\t\t\t\t\tminute: 0,\n\t\t\t\t\t\tsecond: 0,\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tinvert: true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tif (moment(task.start, \"YYYYMMDDTHHmmss\").isValid()) {\n\t\t\t\t\tp = task.reminder.duration.params;\n\t\t\t\t\tp.related = 'START';\n\t\t\t\t\tp.id = '10';\n\t\t\t\t} else if (moment(task.due, \"YYYYMMDDTHHmmss\").isValid()) {\n\t\t\t\t\tp = task.reminder.duration.params;\n\t\t\t\t\tp.related = 'END';\n\t\t\t\t\tp.id = '11';\n\t\t\t\t} else {\n\t\t\t\t\ttask.reminder.type = 'DATE-TIME';\n\t\t\t\t\ttask.reminder.date = moment().startOf('hour').add(1, 'h').format('YYYYMMDDTHHmmss');\n\t\t\t\t}\n\t\t\t\treturn this.setReminder(taskID);\n\t\t\t}\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.setReminderDate = function (taskID, date, type) {\n\t\t\tvar newreminder, reminder, reminderdate;\n\t\t\tif (type === null) {\n\t\t\t\ttype = 'day';\n\t\t\t}\n\t\t\treminder = this._$tasksmodel.getById(taskID).reminder;\n\t\t\tnewreminder = {\n\t\t\t\ttype: 'DATE-TIME',\n\t\t\t\taction: 'DISPLAY',\n\t\t\t\tduration: null\n\t\t\t};\n\t\t\tif (type === 'day') {\n\t\t\t\tif (this.checkReminderDate(taskID) || reminder === null) {\n\t\t\t\t\treminderdate = moment(reminder.date, \"YYYYMMDDTHHmmss\");\n\t\t\t\t\tnewreminder.action = reminder.action;\n\t\t\t\t\tif (reminderdate.isValid() && reminder.type === 'DATE-TIME') {\n\t\t\t\t\t\treminderdate.year(date.year()).month(date.month()).date(date.date());\n\t\t\t\t\t} else {\n\t\t\t\t\t\treminderdate = date.add(12, 'h');\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treminderdate = date.add(12, 'h');\n\t\t\t\t}\n\t\t\t} else if (type === 'time') {\n\t\t\t\tif (this.checkReminderDate(taskID) || reminder === null) {\n\t\t\t\t\treminderdate = moment(reminder.date, \"YYYYMMDDTHHmmss\");\n\t\t\t\t\tnewreminder.action = reminder.action;\n\t\t\t\t\tif (reminderdate.isValid() && reminder.type === 'DATE-TIME') {\n\t\t\t\t\t\treminderdate.hour(date.hour()).minute(date.minute());\n\t\t\t\t\t} else {\n\t\t\t\t\t\treminderdate = date;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treminderdate = date;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnewreminder.date = reminderdate.format('YYYYMMDDTHHmmss');\n\t\t\tthis._$tasksmodel.setReminder(taskID, newreminder);\n\t\t\treturn this._persistence.setReminder(taskID, newreminder);\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.setReminder = function (taskID) {\n\t\t\tvar reminder;\n\t\t\tif (this.checkReminderDate(taskID)) {\n\t\t\t\treminder = this._$tasksmodel.getById(taskID).reminder;\n\t\t\t\treturn this._persistence.setReminder(taskID, reminder);\n\t\t\t}\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.checkReminderDate = function (taskID) {\n\t\t\tvar d, date, duration, rel, related, reminder, seg, task, token;\n\t\t\ttask = this._$tasksmodel.getById(taskID);\n\t\t\treminder = task.reminder;\n\t\t\tif (reminder !== null && reminder.type === 'DURATION') {\n\t\t\t\tif (!reminder.duration) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (reminder.duration.params.related === 'START') {\n\t\t\t\t\ttoken = 'start';\n\t\t\t\t} else if (reminder.duration.params.related === 'END') {\n\t\t\t\t\ttoken = 'due';\n\t\t\t\t} else {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tdate = moment(task[token], \"YYYYMMDDTHHmmss\");\n\t\t\t\tduration = reminder.duration;\n\t\t\t\td = {\n\t\t\t\t\tw: duration.week,\n\t\t\t\t\td: duration.day,\n\t\t\t\t\th: duration.hour,\n\t\t\t\t\tm: duration.minute,\n\t\t\t\t\ts: duration.second\n\t\t\t\t};\n\t\t\t\tif (duration.params.invert) {\n\t\t\t\t\tdate = date.subtract(d);\n\t\t\t\t} else {\n\t\t\t\t\tdate = date.add(d);\n\t\t\t\t}\n\t\t\t\ttask.reminder.date = date.format('YYYYMMDDTHHmmss');\n\t\t\t} else if (reminder !== null && reminder.type === 'DATE-TIME') {\n\t\t\t\tduration = reminder.duration;\n\t\t\t\tdate = moment(reminder.date, \"YYYYMMDDTHHmmss\");\n\t\t\t\tif (!date.isValid()) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (duration) {\n\t\t\t\t\tif (duration.params.related === 'START') {\n\t\t\t\t\t\trelated = moment(task.start, \"YYYYMMDDTHHmmss\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\trelated = moment(task.due, \"YYYYMMDDTHHmmss\");\n\t\t\t\t\t}\n\t\t\t\t\tseg = this.secondsToSegments(date.diff(related, 'seconds'));\n\t\t\t\t\tduration.params.invert = seg.invert;\n\t\t\t\t\tduration.token = 'week';\n\t\t\t\t\tduration.week = seg.week;\n\t\t\t\t\tduration.day = seg.day;\n\t\t\t\t\tduration.hour = seg.hour;\n\t\t\t\t\tduration.minute = seg.minute;\n\t\t\t\t\tduration.second = seg.second;\n\t\t\t\t} else {\n\t\t\t\t\tif (task.start) {\n\t\t\t\t\t\trelated = moment(task.start, \"YYYYMMDDTHHmmss\");\n\t\t\t\t\t\trel = 'START';\n\t\t\t\t\t\td = 0;\n\t\t\t\t\t} else if (task.due) {\n\t\t\t\t\t\trelated = moment(task.due, \"YYYYMMDDTHHmmss\");\n\t\t\t\t\t\trel = 'END';\n\t\t\t\t\t\td = 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tseg = this.secondsToSegments(date.diff(related, 'seconds'));\n\t\t\t\t\treminder.duration = {\n\t\t\t\t\t\ttoken: 'week',\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\trelated: rel,\n\t\t\t\t\t\t\tinvert: seg.invert,\n\t\t\t\t\t\t\tid: +seg.invert + '' + d\n\t\t\t\t\t\t},\n\t\t\t\t\t\tweek: seg.week,\n\t\t\t\t\t\tday: seg.day,\n\t\t\t\t\t\thour: seg.hour,\n\t\t\t\t\t\tminute: seg.minute,\n\t\t\t\t\t\tsecond: seg.second\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.secondsToSegments = function (s) {\n\t\t\tvar d, h, i, m, w;\n\t\t\tif (s < 0) {\n\t\t\t\ts *= -1;\n\t\t\t\ti = true;\n\t\t\t} else {\n\t\t\t\ti = false;\n\t\t\t}\n\t\t\tw = Math.floor(s / 604800);\n\t\t\ts -= w * 604800;\n\t\t\td = Math.floor(s / 86400);\n\t\t\ts -= d * 86400;\n\t\t\th = Math.floor(s / 3600);\n\t\t\ts -= h * 3600;\n\t\t\tm = Math.floor(s / 60);\n\t\t\ts -= m * 60;\n\t\t\treturn {\n\t\t\t\tweek: w,\n\t\t\t\tday: d,\n\t\t\t\thour: h,\n\t\t\t\tminute: m,\n\t\t\t\tsecond: s,\n\t\t\t\tinvert: i\n\t\t\t};\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.deleteReminderDate = function (taskID) {\n\t\t\tthis._$tasksmodel.setReminder(taskID, null);\n\t\t\treturn this._persistence.setReminder(taskID, false);\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.changeCalendar = function (task, newCalendar) {\n\t\t\tif (task.calendar !== newCalendar && newCalendar.writable) {\n\t\t\t\tvar newTask = angular.copy(task);\n\t\t\t\tnewTask.calendar = newCalendar;\n\t\t\t\tif (!TasksModel.hasNoParent(newTask)) {\n\t\t\t\t\tvar parent = TasksModel.getByUid(newTask.related);\n\t\t\t\t\tif (parent.calendar.uri !== newTask.calendar.uri) {\n\t\t\t\t\t\tnewTask.related = null;\n\t\t\t\t\t\tTasksBusinessLayer.prototype.setPercentComplete(newTask, 0);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn VTodoService.create(newCalendar, newTask.data).then(function (newVTodo) {\n\t\t\t\t\tvar vTodo = new VTodo(newVTodo.calendar, newVTodo.properties, newVTodo.uri);\n\t\t\t\t\tTasksModel.ad(vTodo);\n\t\t\t\t\treturn VTodoService[\"delete\"](task).then(function () {\n\t\t\t\t\t\tTasksModel[\"delete\"](task);\n\t\t\t\t\t\tvar queries = [];\n\t\t\t\t\t\tvar children = TasksModel.getChildren(newTask);\n\t\t\t\t\t\tvar _i, _len, child;\n\t\t\t\t\t\tfor (_i = 0, _len = children.length; _i < _len; _i++) {\n\t\t\t\t\t\t\tchild = children[_i];\n\t\t\t\t\t\t\tif (child.calendar.uri !== newTask.calendar.uri) {\n\t\t\t\t\t\t\t\tqueries.push(TasksBusinessLayer.prototype.changeCalendar(child, newTask.calendar));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn Promise.all(queries);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn Promise.resolve(true);\n\t\t\t}\n\t\t};\n\n\t\t// called from outside\n\t\tTasksBusinessLayer.prototype.changeCollection = function (taskID, collectionID) {\n\t\t\tvar task = this._$tasksmodel.getById(taskID);\n\t\t\tswitch (collectionID) {\n\t\t\t\tcase 'starred':\n\t\t\t\t\ttask.priority = 9;\n\t\t\t\t\treturn this.doUpdate(task);\n\t\t\t\tcase 'completed':\n\t\t\t\t\treturn this.setPercentComplete(task, 100);\n\t\t\t\tcase 'uncompleted':\n\t\t\t\t\tif (task.completed) {\n\t\t\t\t\t\treturn this.setPercentComplete(task, 0);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'today':\n\t\t\t\t\treturn this.setDue(task, moment().startOf('day').add(12, 'h'), 'all');\n\t\t\t\tcase 'week':\n\t\t\t\tcase 'all':\n\t\t\t\t\treturn false;\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.changeParent = function (task, parent) {\n\t\t\tif (parent.calendar.writable) {\n\t\t\t\ttask.related = parent.uid;\n\t\t\t\tparent.hideSubtasks = 0;\n\t\t\t\tif (parent.completed && !task.completed) {\n\t\t\t\t\tthis.setPercentComplete(parent, 0);\n\t\t\t\t} else {\n\t\t\t\t\tthis.doUpdate(parent);\n\t\t\t\t}\n\t\t\t\tif (parent.calendar.uri !== task.calendar.uri) {\n\t\t\t\t\tthis.changeCalendar(task, parent.calendar);\n\t\t\t\t} else {\n\t\t\t\t\tthis.doUpdate(task);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.makeRootTask = function (task, newCalendar, collectionID) {\n\t\t\tif (newCalendar.writable) {\n\t\t\t\tvar requests = [];\n\t\t\t\ttask.related = null;\n\t\t\t\tif (collectionID !== \"completed\" && task.completed) {\n\t\t\t\t\ttask.complete = 0;\n\t\t\t\t}\n\t\t\t\trequests.push(this.changeCollection(task.uri, collectionID));\n\t\t\t\tif (task.calendar !== newCalendar) {\n\t\t\t\t\trequests.push(this.changeCalendar(task, newCalendar));\n\t\t\t\t} else {\n\t\t\t\t\trequests.push(this.doUpdate(task));\n\t\t\t\t}\n\t\t\t\treturn requests;\n\t\t\t}\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.addComment = function (comment, onSuccess, onFailure) {\n\t\t\tvar success,\n\t\t\t _this = this;\n\t\t\tif (!onSuccess) {\n\t\t\t\tonSuccess = function onSuccess() {};\n\t\t\t}\n\t\t\tif (!onFailure) {\n\t\t\t\tonFailure = function onFailure() {};\n\t\t\t}\n\t\t\tthis._$tasksmodel.addComment(comment);\n\t\t\tsuccess = function success(response) {\n\t\t\t\tif (response.status === 'error') {\n\t\t\t\t\treturn onFailure();\n\t\t\t\t} else {\n\t\t\t\t\treturn onSuccess(response.data);\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn this._persistence.addComment(comment, success);\n\t\t};\n\n\t\tTasksBusinessLayer.prototype.deleteComment = function (taskID, commentID) {\n\t\t\tthis._$tasksmodel.deleteComment(taskID, commentID);\n\t\t\treturn this._persistence.deleteComment(taskID, commentID);\n\t\t};\n\n\t\treturn TasksBusinessLayer;\n\t}();\n\treturn new TasksBusinessLayer(TasksModel, Persistence, VTodoService, VTodo, $timeout);\n}]);","'use strict';\n\nangular.module('Tasks').factory('Calendar', ['$rootScope', '$filter', '$window', function ($rootScope, $filter, $window) {\n\t'use strict';\n\n\tfunction Calendar(url, props, uri) {\n\t\tvar _this = this;\n\n\t\tprops.color = props['{http://apple.com/ns/ical/}calendar-color'];\n\t\tif (typeof props.color !== 'undefined') {\n\t\t\tif (props.color.length === 9) {\n\t\t\t\tprops.color = props.color.substr(0, 7);\n\t\t\t}\n\t\t} else {\n\t\t\tprops.color = '#1d2d44';\n\t\t}\n\n\t\tangular.extend(this, {\n\t\t\t_propertiesBackup: {},\n\t\t\t_properties: {\n\t\t\t\turl: url,\n\t\t\t\turi: uri,\n\t\t\t\tenabled: props['{http://owncloud.org/ns}calendar-enabled'] === '1',\n\t\t\t\tdisplayname: props['{DAV:}displayname'] || t('tasks', 'Unnamed'),\n\t\t\t\tcolor: props.color,\n\t\t\t\torder: parseInt(props['{http://apple.com/ns/ical/}calendar-order']) || 0,\n\t\t\t\tcomponents: {\n\t\t\t\t\tvevent: false,\n\t\t\t\t\tvjournal: false,\n\t\t\t\t\tvtodo: false\n\t\t\t\t},\n\t\t\t\twritable: props.canWrite,\n\t\t\t\tshareable: props.canWrite,\n\t\t\t\tsharedWith: {\n\t\t\t\t\tusers: [],\n\t\t\t\t\tgroups: []\n\t\t\t\t},\n\t\t\t\towner: '',\n\t\t\t\tloadedCompleted: false\n\t\t\t},\n\t\t\t_updatedProperties: []\n\t\t});\n\t\tthis._propertiesBackup = angular.copy(this._properties);\n\n\t\t// angular.extend(this, {\n\t\t// \ttmpId: null,\n\t\t// \tfcEventSource: {\n\t\t// \t\tevents: function (start, end, timezone, callback) {\n\t\t// \t\t\t// console.log('querying events ...');\n\t\t// \t\t\t// TimezoneService.get(timezone).then(function(tz) {\n\t\t// \t\t\t// \t_this.list.loading = true;\n\t\t// \t\t\t// \t$rootScope.$broadcast('reloadCalendarList');\n\n\t\t// \t\t\t// \tVEventService.getAll(_this, start, end).then(function(events) {\n\t\t// \t\t\t// \t\tvar vevents = [];\n\t\t// \t\t\t// \t\tfor (var i = 0; i < events.length; i++) {\n\t\t// \t\t\t// \t\t\tvevents = vevents.concat(events[i].getFcEvent(start, end, tz));\n\t\t// \t\t\t// \t\t}\n\n\t\t// \t\t\t// \t\tcallback(vevents);\n\n\t\t// \t\t\t// \t\t_this.list.loading = false;\n\t\t// \t\t\t// \t\t$rootScope.$broadcast('reloadCalendarList');\n\t\t// \t\t\t// \t});\n\t\t// \t\t\t// });\n\t\t// \t\t},\n\t\t// \t\teditable: this._properties.writable,\n\t\t// \t\tcalendar: this\n\t\t// \t},\n\t\t// \tlist: {\n\t\t// \t\tedit: false,\n\t\t// \t\tloading: this.enabled,\n\t\t// \t\tlocked: false,\n\t\t// \t\teditingShares: false\n\t\t// \t}\n\t\t// });\n\n\t\tvar components = props['{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set'];\n\t\tfor (var i = 0; i < components.length; i++) {\n\t\t\tvar name = components[i].attributes.getNamedItem('name').textContent.toLowerCase();\n\t\t\tif (this._properties.components.hasOwnProperty(name)) {\n\t\t\t\tthis._properties.components[name] = true;\n\t\t\t}\n\t\t}\n\n\t\tvar shares = props['{http://owncloud.org/ns}invite'];\n\t\tif (typeof shares !== 'undefined') {\n\t\t\tfor (var j = 0; j < shares.length; j++) {\n\t\t\t\tvar href = shares[j].getElementsByTagNameNS('DAV:', 'href');\n\t\t\t\tif (href.length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\thref = href[0].textContent;\n\n\t\t\t\tvar access = shares[j].getElementsByTagNameNS('http://owncloud.org/ns', 'access');\n\t\t\t\tif (access.length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\taccess = access[0];\n\n\t\t\t\tvar readWrite = access.getElementsByTagNameNS('http://owncloud.org/ns', 'read-write');\n\t\t\t\treadWrite = readWrite.length !== 0;\n\n\t\t\t\tif (href.startsWith('principal:principals/users/')) {\n\t\t\t\t\tthis._properties.sharedWith.users.push({\n\t\t\t\t\t\tid: href.substr(27),\n\t\t\t\t\t\tdisplayname: href.substr(27),\n\t\t\t\t\t\twritable: readWrite\n\t\t\t\t\t});\n\t\t\t\t} else if (href.startsWith('principal:principals/groups/')) {\n\t\t\t\t\tthis._properties.sharedWith.groups.push({\n\t\t\t\t\t\tid: href.substr(28),\n\t\t\t\t\t\tdisplayname: href.substr(28),\n\t\t\t\t\t\twritable: readWrite\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar owner = props['{DAV:}owner'];\n\t\tif (typeof owner !== 'undefined' && owner.length !== 0) {\n\t\t\towner = owner[0].textContent.slice(0, -1);\n\t\t\tif (owner.startsWith('/remote.php/dav/principals/users/')) {\n\t\t\t\tthis._properties.owner = owner.substr(33);\n\t\t\t}\n\t\t}\n\n\t\t// this.tmpId = RandomStringService.generate();\n\t}\n\n\tCalendar.prototype = {\n\t\tget url() {\n\t\t\treturn this._properties.url;\n\t\t},\n\t\tget caldav() {\n\t\t\treturn $window.location.origin + this.url;\n\t\t},\n\t\tget exportUrl() {\n\t\t\tvar url = this.url;\n\t\t\t// cut off last slash to have a fancy name for the ics\n\t\t\tif (url.slice(url.length - 1) === '/') {\n\t\t\t\turl = url.slice(0, url.length - 1);\n\t\t\t}\n\t\t\turl += '?export';\n\t\t\treturn url;\n\t\t},\n\t\tget enabled() {\n\t\t\treturn this._properties.enabled;\n\t\t},\n\t\tget uri() {\n\t\t\treturn this._properties.uri;\n\t\t},\n\t\tget components() {\n\t\t\treturn this._properties.components;\n\t\t},\n\t\tset enabled(enabled) {\n\t\t\tthis._properties.enabled = enabled;\n\t\t\tthis._setUpdated('enabled');\n\t\t},\n\t\tget displayname() {\n\t\t\treturn this._properties.displayname;\n\t\t},\n\t\tset displayname(displayname) {\n\t\t\tthis._properties.displayname = displayname;\n\t\t\tthis._setUpdated('displayname');\n\t\t},\n\t\tget color() {\n\t\t\treturn this._properties.color;\n\t\t},\n\t\tset color(color) {\n\t\t\tthis._properties.color = color;\n\t\t\tthis._setUpdated('color');\n\t\t},\n\t\tget sharedWith() {\n\t\t\treturn this._properties.sharedWith;\n\t\t},\n\t\tset sharedWith(sharedWith) {\n\t\t\tthis._properties.sharedWith = sharedWith;\n\t\t},\n\t\tget textColor() {\n\t\t\tvar color = this.color;\n\t\t\tvar fallbackColor = '#fff';\n\t\t\tvar c;\n\t\t\tswitch (color.length) {\n\t\t\t\tcase 4:\n\t\t\t\t\tc = color.match(/^#([0-9a-f]{3})$/i)[1];\n\t\t\t\t\tif (c) {\n\t\t\t\t\t\treturn this._generateTextColor(parseInt(c.charAt(0), 16) * 0x11, parseInt(c.charAt(1), 16) * 0x11, parseInt(c.charAt(2), 16) * 0x11);\n\t\t\t\t\t}\n\t\t\t\t\treturn fallbackColor;\n\n\t\t\t\tcase 7:\n\t\t\t\tcase 9:\n\t\t\t\t\tvar regex = new RegExp('^#([0-9a-f]{' + (color.length - 1) + '})$', 'i');\n\t\t\t\t\tc = color.match(regex)[1];\n\t\t\t\t\tif (c) {\n\t\t\t\t\t\treturn this._generateTextColor(parseInt(c.substr(0, 2), 16), parseInt(c.substr(2, 2), 16), parseInt(c.substr(4, 2), 16));\n\t\t\t\t\t}\n\t\t\t\t\treturn fallbackColor;\n\n\t\t\t\tdefault:\n\t\t\t\t\treturn fallbackColor;\n\t\t\t}\n\t\t},\n\t\tget order() {\n\t\t\treturn this._properties.order;\n\t\t},\n\t\tset order(order) {\n\t\t\tthis._properties.order = order;\n\t\t\tthis._setUpdated('order');\n\t\t},\n\t\tget writable() {\n\t\t\treturn this._properties.writable;\n\t\t},\n\t\tget shareable() {\n\t\t\treturn this._properties.shareable;\n\t\t},\n\t\tget owner() {\n\t\t\treturn this._properties.owner;\n\t\t},\n\t\tget loadedCompleted() {\n\t\t\treturn this._properties.loadedCompleted;\n\t\t},\n\t\tset loadedCompleted(loadedCompleted) {\n\t\t\tthis._properties.loadedCompleted = loadedCompleted;\n\t\t},\n\t\t_setUpdated: function _setUpdated(propName) {\n\t\t\tif (this._updatedProperties.indexOf(propName) === -1) {\n\t\t\t\tthis._updatedProperties.push(propName);\n\t\t\t}\n\t\t},\n\t\tget updatedProperties() {\n\t\t\treturn this._updatedProperties;\n\t\t},\n\t\tresetUpdatedProperties: function resetUpdatedProperties() {\n\t\t\tthis._updatedProperties = [];\n\t\t},\n\t\tprepareUpdate: function prepareUpdate() {\n\t\t\tthis._propertiesBackup = angular.copy(this._properties);\n\t\t},\n\t\tresetToPreviousState: function resetToPreviousState() {\n\t\t\tthis._properties = angular.copy(this._propertiesBackup);\n\t\t\tthis._propertiesBackup = {};\n\t\t},\n\t\tdropPreviousState: function dropPreviousState() {\n\t\t\tthis._propertiesBackup = {};\n\t\t},\n\t\ttoggleSharesEditor: function toggleSharesEditor() {\n\t\t\tthis.list.editingShares = !this.list.editingShares;\n\t\t},\n\t\t_generateTextColor: function _generateTextColor(r, g, b) {\n\t\t\tvar brightness = (r * 299 + g * 587 + b * 114) / 1000;\n\t\t\treturn brightness > 130 ? '#000000' : '#FAFAFA';\n\t\t}\n\t};\n\n\treturn Calendar;\n}]);","'use strict';\n\n(function () {\n\t'use strict';\n\n\tvar __hasProp = {}.hasOwnProperty,\n\t __extends = function __extends(child, parent) {\n\t\tfor (var key in parent) {\n\t\t\tif (__hasProp.call(parent, key)) {\n\t\t\t\tchild[key] = parent[key];\n\t\t\t}\n\t\t}\n\t\tfunction Ctor() {\n\t\t\tthis.constructor = child;\n\t\t}\n\t\tCtor.prototype = parent.prototype;\n\t\tchild.prototype = new Ctor();\n\t\tchild.__super__ = parent.prototype;\n\t\treturn child;\n\t},\n\t __indexOf = [].indexOf || function (item) {\n\t\tfor (var i = 0, l = this.length; i < l; i++) {\n\t\t\tif (i in this && this[i] === item) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\tangular.module('Tasks').factory('CollectionsModel', ['TasksModel', '_Model', function (TasksModel, _Model) {\n\t\tvar CollectionsModel = function (_super) {\n\n\t\t\tfunction CollectionsModel(_$tasksmodel) {\n\t\t\t\tthis._$tasksmodel = _$tasksmodel;\n\t\t\t\tthis._nameCache = {};\n\t\t\t\tCollectionsModel.__super__.constructor.call(this);\n\t\t\t}\n\n\t\t\t__extends(CollectionsModel, _super);\n\n\t\t\tCollectionsModel.prototype.add = function (data, clearCache) {\n\t\t\t\tif (clearCache === null) {\n\t\t\t\t\tclearCache = true;\n\t\t\t\t}\n\t\t\t\tthis._nameCache[data.displayname] = data;\n\t\t\t\tif (angular.isDefined(data.id)) {\n\t\t\t\t\treturn CollectionsModel.__super__.add.call(this, data, clearCache);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tCollectionsModel.prototype.getCount = function (collectionID, filter) {\n\t\t\t\tvar count, task, tasks, _i, _len;\n\t\t\t\tif (filter === null) {\n\t\t\t\t\tfilter = '';\n\t\t\t\t}\n\t\t\t\tcount = 0;\n\t\t\t\ttasks = this._$tasksmodel.filteredTasks(filter);\n\t\t\t\tfor (_i = 0, _len = tasks.length; _i < _len; _i++) {\n\t\t\t\t\ttask = tasks[_i];\n\t\t\t\t\tcount += this._$tasksmodel.filterTasks(task, collectionID) && !task.related;\n\t\t\t\t}\n\t\t\t\treturn count;\n\t\t\t};\n\n\t\t\treturn CollectionsModel;\n\t\t}(_Model);\n\t\treturn new CollectionsModel(TasksModel);\n\t}]);\n}).call(undefined);","'use strict';\n\n(function () {\n\t'use strict';\n\n\tvar __hasProp = {}.hasOwnProperty,\n\t __extends = function __extends(child, parent) {\n\t\tfor (var key in parent) {\n\t\t\tif (__hasProp.call(parent, key)) {\n\t\t\t\tchild[key] = parent[key];\n\t\t\t}\n\t\t}\n\t\tfunction Ctor() {\n\t\t\tthis.constructor = child;\n\t\t}\n\t\tCtor.prototype = parent.prototype;\n\t\tchild.prototype = new Ctor();\n\t\tchild.__super__ = parent.prototype;\n\t\treturn child;\n\t},\n\t __indexOf = [].indexOf || function (item) {\n\t\tfor (var i = 0, l = this.length; i < l; i++) {\n\t\t\tif (i in this && this[i] === item) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\tangular.module('Tasks').factory('ListsModel', ['TasksModel', '_Model', function (TasksModel, _Model) {\n\t\tvar ListsModel = function (_super) {\n\n\t\t\tfunction ListsModel(_$tasksmodel) {\n\t\t\t\tthis._$tasksmodel = _$tasksmodel;\n\t\t\t\tthis._tmpUriCache = {};\n\t\t\t\tthis._data = [];\n\t\t\t\tthis._dataMap = {};\n\t\t\t\tthis._filterCache = {};\n\t\t\t}\n\n\t\t\t__extends(ListsModel, _super);\n\n\t\t\tListsModel.prototype.add = function (calendar, clearCache) {\n\t\t\t\tvar updateByUri;\n\t\t\t\tif (clearCache === null) {\n\t\t\t\t\tclearCache = true;\n\t\t\t\t}\n\t\t\t\tupdateByUri = angular.isDefined(calendar.uri) && angular.isDefined(this.getByUri(calendar.uri));\n\t\t\t\tif (updateByUri) {\n\t\t\t\t\treturn this.update(calendar, clearCache);\n\t\t\t\t} else {\n\t\t\t\t\tif (angular.isDefined(calendar.uri)) {\n\t\t\t\t\t\tif (clearCache) {\n\t\t\t\t\t\t\tthis._invalidateCache();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!angular.isDefined(this._dataMap[calendar.uri])) {\n\t\t\t\t\t\t\tthis._data.push(calendar);\n\t\t\t\t\t\t\tthis._dataMap[calendar.uri] = calendar;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tListsModel.prototype.getByUri = function (uri) {\n\t\t\t\treturn this._dataMap[uri];\n\t\t\t};\n\n\t\t\tListsModel.prototype.update = function (list, clearCache) {\n\t\t\t\tvar tmplist;\n\t\t\t\tif (clearCache === null) {\n\t\t\t\t\tclearCache = true;\n\t\t\t\t}\n\t\t\t\ttmplist = this._tmpIdCache[list.tmpID];\n\t\t\t\tif (angular.isDefined(list.id) && angular.isDefined(tmplist) && angular.isUndefined(tmplist.id)) {\n\t\t\t\t\ttmplist.id = list.id;\n\t\t\t\t\tthis._dataMap[list.id] = tmplist;\n\t\t\t\t}\n\t\t\t\tlist[\"void\"] = false;\n\t\t\t\treturn ListsModel.__super__.update.call(this, list, clearCache);\n\t\t\t};\n\n\t\t\tListsModel.prototype[\"delete\"] = function (calendar, clearCache) {\n\t\t\t\tvar counter, data, entry, _i, _len, _ref;\n\t\t\t\tif (clearCache === null) {\n\t\t\t\t\tclearCache = true;\n\t\t\t\t}\n\t\t\t\t_ref = this._data;\n\t\t\t\tfor (counter = _i = 0, _len = _ref.length; _i < _len; counter = ++_i) {\n\t\t\t\t\tentry = _ref[counter];\n\t\t\t\t\tif (entry === calendar) {\n\t\t\t\t\t\tthis._data.splice(counter, 1);\n\t\t\t\t\t\tdata = this._dataMap[calendar.uri];\n\t\t\t\t\t\tdelete this._dataMap[calendar.uri];\n\t\t\t\t\t\tif (clearCache) {\n\t\t\t\t\t\t\tthis._invalidateCache();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tListsModel.prototype.getStandardList = function () {\n\t\t\t\tvar calendars;\n\t\t\t\tif (this.size()) {\n\t\t\t\t\tcalendars = this.getAll();\n\t\t\t\t\treturn calendars[0];\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tListsModel.prototype.isNameAlreadyTaken = function (displayname, uri) {\n\t\t\t\tvar calendar, calendars, ret, _i, _len;\n\t\t\t\tcalendars = this.getAll();\n\t\t\t\tret = false;\n\t\t\t\tfor (_i = 0, _len = calendars.length; _i < _len; _i++) {\n\t\t\t\t\tcalendar = calendars[_i];\n\t\t\t\t\tif (calendar.displayname === displayname && calendar.uri !== uri) {\n\t\t\t\t\t\tret = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t};\n\n\t\t\tListsModel.prototype.getCount = function (calendarID, collectionID, filter) {\n\t\t\t\tvar count, task, tasks, _i, _len;\n\t\t\t\tif (filter === null) {\n\t\t\t\t\tfilter = '';\n\t\t\t\t}\n\t\t\t\tcount = 0;\n\t\t\t\ttasks = this._$tasksmodel.filteredTasks(filter);\n\t\t\t\tfor (_i = 0, _len = tasks.length; _i < _len; _i++) {\n\t\t\t\t\ttask = tasks[_i];\n\t\t\t\t\tcount += this._$tasksmodel.filterTasks(task, collectionID) && task.calendar.uri === calendarID && !task.related;\n\t\t\t\t}\n\t\t\t\t// if (collectionID === 'completed' && filter === '') {\n\t\t\t\t// count += this.notLoaded(calendarID);\n\t\t\t\t// }\n\t\t\t\treturn count;\n\t\t\t};\n\n\t\t\tListsModel.prototype.loadedCompleted = function (calendarID) {\n\t\t\t\tif (angular.isUndefined(this.getById(calendarID))) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getById(calendarID).loadedCompleted;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tListsModel.prototype.setLoadedCompleted = function (calendarID) {\n\t\t\t\tthis.getById(calendarID).loadedCompleted = true;\n\t\t\t};\n\n\t\t\tListsModel.prototype.getColor = function (calendarID) {\n\t\t\t\tif (angular.isUndefined(this.getById(calendarID))) {\n\t\t\t\t\treturn '#CCCCCC';\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getById(calendarID).calendarcolor;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tListsModel.prototype.getName = function (calendarID) {\n\t\t\t\tif (angular.isUndefined(this.getById(calendarID))) {\n\t\t\t\t\treturn '';\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getById(calendarID).displayname;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treturn ListsModel;\n\t\t}(_Model);\n\t\treturn new ListsModel(TasksModel);\n\t}]);\n}).call(undefined);","'use strict';\n\n(function () {\n\t'use strict';\n\n\tvar __hasProp = {}.hasOwnProperty,\n\t __extends = function __extends(child, parent) {\n\t\tfor (var key in parent) {\n\t\t\tif (__hasProp.call(parent, key)) {\n\t\t\t\tchild[key] = parent[key];\n\t\t\t}\n\t\t}\n\t\tfunction Ctor() {\n\t\t\tthis.constructor = child;\n\t\t}\n\t\tCtor.prototype = parent.prototype;\n\t\tchild.prototype = new Ctor();\n\t\tchild.__super__ = parent.prototype;\n\t\treturn child;\n\t},\n\t __indexOf = [].indexOf || function (item) {\n\t\tfor (var i = 0, l = this.length; i < l; i++) {\n\t\t\tif (i in this && this[i] === item) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\tangular.module('Tasks').factory('SettingsModel', ['_Model', function (_Model) {\n\t\tvar SettingsModel = function (_super) {\n\n\t\t\tfunction SettingsModel() {\n\t\t\t\tthis._nameCache = {};\n\t\t\t\tSettingsModel.__super__.constructor.call(this);\n\t\t\t}\n\n\t\t\t__extends(SettingsModel, _super);\n\n\t\t\tSettingsModel.prototype.add = function (data, clearCache) {\n\t\t\t\tif (clearCache === null) {\n\t\t\t\t\tclearCache = true;\n\t\t\t\t}\n\t\t\t\tthis._nameCache[data.displayname] = data;\n\t\t\t\tif (angular.isDefined(data.id)) {\n\t\t\t\t\treturn SettingsModel.__super__.add.call(this, data, clearCache);\n\t\t\t\t} else {\n\t\t\t\t\treturn this._data.push(data);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tSettingsModel.prototype.toggle = function (type, setting) {\n\t\t\t\tvar set;\n\t\t\t\tset = this.getById(type);\n\t\t\t\tthis.getById(type)[setting] = !set[setting];\n\t\t\t};\n\t\t\treturn SettingsModel;\n\t\t}(_Model);\n\t\treturn new SettingsModel();\n\t}]);\n}).call(undefined);","'use strict';\n\n(function () {\n\t'use strict';\n\n\tvar __hasProp = {}.hasOwnProperty,\n\t __extends = function __extends(child, parent) {\n\t\tfor (var key in parent) {\n\t\t\tif (__hasProp.call(parent, key)) {\n\t\t\t\tchild[key] = parent[key];\n\t\t\t}\n\t\t}\n\t\tfunction Ctor() {\n\t\t\tthis.constructor = child;\n\t\t}\n\t\tCtor.prototype = parent.prototype;\n\t\tchild.prototype = new Ctor();\n\t\tchild.__super__ = parent.prototype;\n\t\treturn child;\n\t},\n\t __indexOf = [].indexOf || function (item) {\n\t\tfor (var i = 0, l = this.length; i < l; i++) {\n\t\t\tif (i in this && this[i] === item) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\tangular.module('Tasks').factory('TasksModel', ['_Model', function (_Model) {\n\t\tvar TasksModel = function (_super) {\n\n\t\t\tfunction TasksModel() {\n\t\t\t\tthis._tmpIdCache = {};\n\t\t\t\tTasksModel.__super__.constructor.call(this);\n\t\t\t}\n\n\t\t\t__extends(TasksModel, _super);\n\n\t\t\tTasksModel.prototype.ad = function (task, clearCache) {\n\t\t\t\tif (clearCache === null) {\n\t\t\t\t\tclearCache = true;\n\t\t\t\t}\n\t\t\t\tvar updateByUri = angular.isDefined(task.uri) && angular.isDefined(this.getByUri(task.uri));\n\t\t\t\tif (updateByUri) {\n\t\t\t\t\treturn this.update(task, clearCache);\n\t\t\t\t} else {\n\t\t\t\t\tif (angular.isDefined(task.uri)) {\n\t\t\t\t\t\tif (clearCache) {\n\t\t\t\t\t\t\tthis._invalidateCache();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!angular.isDefined(this._dataMap[task.uri])) {\n\t\t\t\t\t\t\tthis._data.push(task);\n\t\t\t\t\t\t\tthis._dataMap[task.uri] = task;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tTasksModel.prototype.getByUri = function (uri) {\n\t\t\t\treturn this._dataMap[uri];\n\t\t\t};\n\n\t\t\tTasksModel.prototype.update = function (task, clearCache) {\n\n\t\t\t\tvar entry, key, value, _results;\n\t\t\t\tif (clearCache === null) {\n\t\t\t\t\tclearCache = true;\n\t\t\t\t}\n\t\t\t\tif (clearCache) {\n\t\t\t\t\tthis._invalidateCache();\n\t\t\t\t}\n\t\t\t\tentry = this.getByUri(task.uri);\n\t\t\t\tentry.components = task.components;\n\t\t\t\tentry.components.toString();\n\t\t\t\treturn entry;\n\t\t\t};\n\n\t\t\tTasksModel.prototype.removeById = function (taskID) {\n\t\t\t\treturn TasksModel.__super__.removeById.call(this, taskID);\n\t\t\t};\n\n\t\t\tTasksModel.prototype[\"delete\"] = function (task, clearCache) {\n\t\t\t\tvar counter, data, entry, _i, _len, _ref;\n\t\t\t\tif (clearCache === null) {\n\t\t\t\t\tclearCache = true;\n\t\t\t\t}\n\t\t\t\t_ref = this._data;\n\t\t\t\tfor (counter = _i = 0, _len = _ref.length; _i < _len; counter = ++_i) {\n\t\t\t\t\tentry = _ref[counter];\n\t\t\t\t\tif (entry === task) {\n\t\t\t\t\t\tthis._data.splice(counter, 1);\n\t\t\t\t\t\tdata = this._dataMap[task.uri];\n\t\t\t\t\t\tdelete this._dataMap[task.uri];\n\t\t\t\t\t\tif (clearCache) {\n\t\t\t\t\t\t\tthis._invalidateCache();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tTasksModel.prototype.removeByList = function (listID) {\n\t\t\t\tvar id, task, taskIDs, tasks, _results;\n\t\t\t\ttasks = this.getAll();\n\t\t\t\ttaskIDs = [];\n\t\t\t\tfor (var _i = 0, _len = tasks.length; _i < _len; _i++) {\n\t\t\t\t\ttask = tasks[_i];\n\t\t\t\t\tif (task.calendarid === listID) {\n\t\t\t\t\t\ttaskIDs.push(task.uid);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_results = [];\n\t\t\t\tfor (var _j = 0, _len1 = taskIDs.length; _j < _len1; _j++) {\n\t\t\t\t\tid = taskIDs[_j];\n\t\t\t\t\t_results.push(this.removeById(id));\n\t\t\t\t}\n\t\t\t\treturn _results;\n\t\t\t};\n\n\t\t\tTasksModel.prototype.taskAtDay = function (task, date) {\n\t\t\t\tvar diff, due, duediff, start, startdiff;\n\t\t\t\tstart = moment(task.start, \"YYYYMMDDTHHmmss\");\n\t\t\t\tdue = moment(task.due, \"YYYYMMDDTHHmmss\");\n\t\t\t\tif (start.isValid() && !due.isValid()) {\n\t\t\t\t\tdiff = start.diff(moment().startOf('day'), 'days', true);\n\t\t\t\t\tif (!date && diff < date + 1) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} else if (diff < date + 1 && diff >= date) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (due.isValid() && !start.isValid()) {\n\t\t\t\t\tdiff = due.diff(moment().startOf('day'), 'days', true);\n\t\t\t\t\tif (!date && diff < date + 1) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} else if (diff < date + 1 && diff >= date) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (start.isValid() && due.isValid()) {\n\t\t\t\t\tstartdiff = start.diff(moment().startOf('day'), 'days', true);\n\t\t\t\t\tduediff = due.diff(moment().startOf('day'), 'days', true);\n\t\t\t\t\tif (!date && (startdiff < date + 1 || duediff < date + 1)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} else if (startdiff < date + 1 && startdiff >= date && duediff >= date) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} else if (duediff < date + 1 && duediff >= date && startdiff >= date) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\n\t\t\tTasksModel.prototype.isLoaded = function (task) {\n\t\t\t\tif (this.getByUid(task.uid)) {\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tTasksModel.prototype.hasSubtasks = function (uid) {\n\t\t\t\tvar tasks = this.getAll();\n\t\t\t\tfor (var _i = 0, _len = tasks.length; _i < _len; _i++) {\n\t\t\t\t\tvar task = tasks[_i];\n\t\t\t\t\tif (task.related === uid) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\n\t\t\tTasksModel.prototype.hasCompletedSubtasks = function (uid) {\n\t\t\t\tvar tasks = this.getAll();\n\t\t\t\tfor (var _i = 0, _len = tasks.length; _i < _len; _i++) {\n\t\t\t\t\tvar task = tasks[_i];\n\t\t\t\t\tif (task.related === uid && task.completed) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\n\t\t\tTasksModel.prototype.hasNoParent = function (task) {\n\t\t\t\tif (!task.related) {\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\tvar tasks = this.getAll();\n\t\t\t\t\tfor (var _i = 0, _len = tasks.length; _i < _len; _i++) {\n\t\t\t\t\t\tvar t = tasks[_i];\n\t\t\t\t\t\tif (task.related === t.uid && task !== t) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tTasksModel.prototype.getUriByUid = function (uid) {\n\t\t\t\tvar tasks = this.getAll();\n\t\t\t\tfor (var _i = 0, _len = tasks.length; _i < _len; _i++) {\n\t\t\t\t\tvar task = tasks[_i];\n\t\t\t\t\tif (task.uid === uid) {\n\t\t\t\t\t\treturn task.uri;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\n\t\t\tTasksModel.prototype.getByUid = function (uid) {\n\t\t\t\tvar tasks = this.getAll();\n\t\t\t\tfor (var _i = 0, _len = tasks.length; _i < _len; _i++) {\n\t\t\t\t\tvar task = tasks[_i];\n\t\t\t\t\tif (task.uid === uid) {\n\t\t\t\t\t\treturn task;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t};\n\n\t\t\tTasksModel.prototype.getChildren = function (task) {\n\t\t\t\tvar children, t, tasks;\n\t\t\t\ttasks = this.getAll();\n\t\t\t\tchildren = [];\n\t\t\t\tfor (var _i = 0, _len = tasks.length; _i < _len; _i++) {\n\t\t\t\t\tt = tasks[_i];\n\t\t\t\t\tif (t.related === task.uid && t !== task) {\n\t\t\t\t\t\tchildren.push(t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn children;\n\t\t\t};\n\n\t\t\tTasksModel.prototype.getDescendantIDs = function (task) {\n\t\t\t\tvar child, children, descendantIDs;\n\t\t\t\tchildren = this.getChildren(task);\n\t\t\t\tdescendantIDs = [];\n\t\t\t\tfor (var _i = 0, _len = children.length; _i < _len; _i++) {\n\t\t\t\t\tchild = children[_i];\n\t\t\t\t\tdescendantIDs = descendantIDs.concat(child.uri);\n\t\t\t\t\tdescendantIDs = descendantIDs.concat(this.getDescendantIDs(child));\n\t\t\t\t}\n\t\t\t\treturn descendantIDs;\n\t\t\t};\n\n\t\t\tTasksModel.prototype.filterTasks = function (task, filter) {\n\t\t\t\tswitch (filter) {\n\t\t\t\t\tcase 'completed':\n\t\t\t\t\t\treturn task.completed === true;\n\t\t\t\t\tcase 'all':\n\t\t\t\t\t\treturn task.completed === false;\n\t\t\t\t\tcase 'current':\n\t\t\t\t\t\treturn task.completed === false && this.current(task.start, task.due);\n\t\t\t\t\tcase 'starred':\n\t\t\t\t\t\treturn task.completed === false && task.priority > 5;\n\t\t\t\t\tcase 'today':\n\t\t\t\t\t\treturn task.completed === false && (this.today(task.start) || this.today(task.due));\n\t\t\t\t\tcase 'week':\n\t\t\t\t\t\treturn task.completed === false && (this.week(task.start) || this.week(task.due));\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn '' + task.calendar.uri === '' + filter;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tTasksModel.prototype.filteredTasks = function (needle) {\n\t\t\t\tvar ancestors, parentID, ret, task, tasks;\n\t\t\t\tret = [];\n\t\t\t\ttasks = this.getAll();\n\t\t\t\tif (!needle) {\n\t\t\t\t\tret = tasks;\n\t\t\t\t} else {\n\t\t\t\t\tfor (var _i = 0, _len = tasks.length; _i < _len; _i++) {\n\t\t\t\t\t\ttask = tasks[_i];\n\t\t\t\t\t\tif (this.filterTasksByString(task, needle)) {\n\t\t\t\t\t\t\tif (this.objectExists(task, ret)) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tret.push(task);\n\t\t\t\t\t\t\tparentID = this.getUriByUid(task.related);\n\t\t\t\t\t\t\tancestors = this.getAncestor(parentID, ret);\n\t\t\t\t\t\t\tif (ancestors) {\n\t\t\t\t\t\t\t\tret = ret.concat(ancestors);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t};\n\n\t\t\tTasksModel.prototype.objectExists = function (task, ret) {\n\t\t\t\tfor (var _i = 0, _len = ret.length; _i < _len; _i++) {\n\t\t\t\t\tvar re = ret[_i];\n\t\t\t\t\tif (re.uid === task.uid) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\n\t\t\tTasksModel.prototype.filterTasksByString = function (task, filter) {\n\t\t\t\tvar key, keys, value;\n\t\t\t\tkeys = ['summary', 'note', 'location', 'categories'];\n\t\t\t\tfilter = filter.toLowerCase();\n\t\t\t\tfor (key in task) {\n\t\t\t\t\tvalue = task[key];\n\t\t\t\t\tif (__indexOf.call(keys, key) >= 0) {\n\t\t\t\t\t\tif (key === 'categories') {\n\t\t\t\t\t\t\tif (this.searchCategories(task.categories, filter)) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (value.toLowerCase().indexOf(filter) !== -1) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\n\t\t\tTasksModel.prototype.getAncestor = function (taskUri, ret) {\n\t\t\t\tvar ancestors, parentUri, task, tasks;\n\t\t\t\ttasks = [];\n\t\t\t\ttask = this.getByUri(taskUri);\n\t\t\t\tif (task) {\n\t\t\t\t\tif (this.objectExists(task, ret)) {\n\t\t\t\t\t\treturn tasks;\n\t\t\t\t\t}\n\t\t\t\t\ttasks.push(task);\n\t\t\t\t\tif (this.hasNoParent(task)) {\n\t\t\t\t\t\treturn tasks;\n\t\t\t\t\t}\n\t\t\t\t\tparentUri = this.getUriByUid(task.related);\n\t\t\t\t\tancestors = this.getAncestor(parentUri, ret);\n\t\t\t\t\tif (ancestors) {\n\t\t\t\t\t\ttasks = tasks.concat(ancestors);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn tasks;\n\t\t\t};\n\n\t\t\tTasksModel.prototype.searchCategories = function (categories, filter) {\n\t\t\t\tfor (var _i = 0, _len = categories.length; _i < _len; _i++) {\n\t\t\t\t\tvar category = categories[_i];\n\t\t\t\t\tif (category.toLowerCase().indexOf(filter) !== -1) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\n\t\t\tTasksModel.prototype.setReminder = function (taskID, reminder) {\n\t\t\t\treturn this.update({\n\t\t\t\t\tid: taskID,\n\t\t\t\t\treminder: reminder\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tTasksModel.prototype.overdue = function (due) {\n\t\t\t\treturn moment(due, \"YYYYMMDDTHHmmss\").isValid() && moment(due, \"YYYYMMDDTHHmmss\").diff(moment()) < 0;\n\t\t\t};\n\n\t\t\tTasksModel.prototype.due = function (due) {\n\t\t\t\treturn moment(due, 'YYYYMMDDTHHmmss').isValid();\n\t\t\t};\n\n\t\t\tTasksModel.prototype.today = function (due) {\n\t\t\t\treturn moment(due, \"YYYYMMDDTHHmmss\").isValid() && moment(due, \"YYYYMMDDTHHmmss\").diff(moment().startOf('day'), 'days', true) < 1;\n\t\t\t};\n\n\t\t\tTasksModel.prototype.week = function (due) {\n\t\t\t\treturn moment(due, \"YYYYMMDDTHHmmss\").isValid() && moment(due, \"YYYYMMDDTHHmmss\").diff(moment().startOf('day'), 'days', true) < 7;\n\t\t\t};\n\n\t\t\tTasksModel.prototype.current = function (start, due) {\n\t\t\t\treturn !moment(start, \"YYYYMMDDTHHmmss\").isValid() || moment(start, \"YYYYMMDDTHHmmss\").diff(moment(), 'days', true) < 0 || moment(due, \"YYYYMMDDTHHmmss\").diff(moment(), 'days', true) < 0;\n\t\t\t};\n\n\t\t\treturn TasksModel;\n\t\t}(_Model);\n\t\treturn new TasksModel();\n\t}]);\n}).call(undefined);","'use strict';\n\nangular.module('Tasks').factory('VTodo', ['$filter', 'ICalFactory', 'RandomStringService', function ($filter, icalfactory, RandomStringService) {\n\t'use strict';\n\n\tfunction VTodo(calendar, props, uri) {\n\t\tvar _this = this;\n\n\t\tangular.extend(this, {\n\t\t\tcalendar: calendar,\n\t\t\tdata: props['{urn:ietf:params:xml:ns:caldav}calendar-data'],\n\t\t\turi: uri,\n\t\t\tetag: props['{DAV:}getetag'] || null,\n\t\t\ttimers: [],\n\t\t\tloaded: false\n\t\t});\n\n\t\tthis.jCal = ICAL.parse(this.data);\n\t\tthis.components = new ICAL.Component(this.jCal);\n\n\t\tif (this.components.jCal.length === 0) {\n\t\t\tthrow \"invalid calendar\";\n\t\t}\n\t}\n\n\tVTodo.prototype = {\n\t\tget summary() {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\treturn vtodos[0].getFirstPropertyValue('summary');\n\t\t},\n\t\tset summary(summary) {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\tvtodos[0].updatePropertyWithValue('summary', summary);\n\t\t\tthis.updateLastModified();\n\t\t\tthis.data = this.components.toString();\n\t\t},\n\t\tget priority() {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\tvar priority = vtodos[0].getFirstPropertyValue('priority');\n\t\t\treturn (10 - priority) % 10;\n\t\t},\n\t\tset priority(priority) {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\tvtodos[0].updatePropertyWithValue('priority', (10 - priority) % 10);\n\t\t\tthis.updateLastModified();\n\t\t\tthis.data = this.components.toString();\n\t\t},\n\t\tget complete() {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\treturn vtodos[0].getFirstPropertyValue('percent-complete') || 0;\n\t\t},\n\t\tset complete(complete) {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\tvtodos[0].updatePropertyWithValue('percent-complete', complete);\n\t\t\tthis.updateLastModified();\n\t\t\tthis.data = this.components.toString();\n\t\t\tif (complete < 100) {\n\t\t\t\tthis.completed = null;\n\t\t\t\tif (complete === 0) {\n\t\t\t\t\tthis.status = 'NEEDS-ACTION';\n\t\t\t\t} else {\n\t\t\t\t\tthis.status = 'IN-PROCESS';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.completed = ICAL.Time.now();\n\t\t\t\tthis.status = 'COMPLETED';\n\t\t\t}\n\t\t},\n\t\tget completed() {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\tvar comp = vtodos[0].getFirstPropertyValue('completed');\n\t\t\tif (comp) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tset completed(completed) {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\tif (completed) {\n\t\t\t\tvtodos[0].updatePropertyWithValue('completed', completed);\n\t\t\t} else {\n\t\t\t\tvtodos[0].removeProperty('completed');\n\t\t\t}\n\t\t\tthis.updateLastModified();\n\t\t\tthis.data = this.components.toString();\n\t\t},\n\t\tget completed_date() {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\tvar comp = vtodos[0].getFirstPropertyValue('completed');\n\t\t\tif (comp) {\n\t\t\t\treturn comp.toJSDate();\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\tget status() {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\treturn vtodos[0].getFirstPropertyValue('status');\n\t\t},\n\t\tset status(status) {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\tvtodos[0].updatePropertyWithValue('status', status);\n\t\t\tthis.updateLastModified();\n\t\t\tthis.data = this.components.toString();\n\t\t},\n\t\tget note() {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\treturn vtodos[0].getFirstPropertyValue('description') || '';\n\t\t},\n\t\tset note(note) {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\tvtodos[0].updatePropertyWithValue('description', note);\n\t\t\tthis.updateLastModified();\n\t\t\tthis.data = this.components.toString();\n\t\t},\n\t\tget uid() {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\treturn vtodos[0].getFirstPropertyValue('uid') || '';\n\t\t},\n\t\tget related() {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\treturn vtodos[0].getFirstPropertyValue('related-to') || null;\n\t\t},\n\t\tset related(related) {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\tif (related) {\n\t\t\t\tvtodos[0].updatePropertyWithValue('related-to', related);\n\t\t\t} else {\n\t\t\t\tvtodos[0].removeProperty('related-to');\n\t\t\t}\n\t\t\tthis.updateLastModified();\n\t\t\tthis.data = this.components.toString();\n\t\t},\n\t\tget hideSubtasks() {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\treturn +vtodos[0].getFirstPropertyValue('x-oc-hidesubtasks') || 0;\n\t\t},\n\t\tset hideSubtasks(hide) {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\tvtodos[0].updatePropertyWithValue('x-oc-hidesubtasks', +hide);\n\t\t\tthis.updateLastModified();\n\t\t\tthis.data = this.components.toString();\n\t\t},\n\t\tget hideCompletedSubtasks() {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\treturn +vtodos[0].getFirstPropertyValue('x-oc-hidecompletedsubtasks') || 0;\n\t\t},\n\t\tset hideCompletedSubtasks(hide) {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\tvtodos[0].updatePropertyWithValue('x-oc-hidecompletedsubtasks', +hide);\n\t\t\tthis.updateLastModified();\n\t\t\tthis.data = this.components.toString();\n\t\t},\n\t\tget reminder() {\n\t\t\treturn null;\n\t\t},\n\t\tget categories() {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\tvar categories = vtodos[0].getFirstProperty('categories');\n\t\t\tif (categories) {\n\t\t\t\treturn categories.getValues();\n\t\t\t} else {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\t\tset categories(cats) {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\tvar categories = vtodos[0].getFirstProperty('categories');\n\t\t\tif (cats.length > 0) {\n\t\t\t\tif (categories) {\n\t\t\t\t\tcategories.setValues(cats);\n\t\t\t\t} else {\n\t\t\t\t\tvar prop = new ICAL.Property('categories');\n\t\t\t\t\tprop.setValues(cats);\n\t\t\t\t\tcategories = vtodos[0].addProperty(prop);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvtodos[0].removeProperty('categories');\n\t\t\t}\n\t\t\tthis.updateLastModified();\n\t\t\tthis.data = this.components.toString();\n\t\t},\n\t\tget start() {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\treturn vtodos[0].getFirstPropertyValue('dtstart');\n\t\t},\n\t\tset start(start) {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\tif (start) {\n\t\t\t\tvtodos[0].updatePropertyWithValue('dtstart', start);\n\t\t\t} else {\n\t\t\t\tvtodos[0].removeProperty('dtstart');\n\t\t\t}\n\t\t\tthis.updateLastModified();\n\t\t\tthis.data = this.components.toString();\n\t\t},\n\t\tget due() {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\treturn vtodos[0].getFirstPropertyValue('due');\n\t\t},\n\t\tset due(due) {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\tif (due) {\n\t\t\t\tvtodos[0].updatePropertyWithValue('due', due);\n\t\t\t} else {\n\t\t\t\tvtodos[0].removeProperty('due');\n\t\t\t}\n\t\t\tthis.updateLastModified();\n\t\t\tthis.data = this.components.toString();\n\t\t},\n\t\tget allDay() {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\tvar start = vtodos[0].getFirstPropertyValue('dtstart');\n\t\t\tvar due = vtodos[0].getFirstPropertyValue('due');\n\t\t\tvar d = due ? due : start;\n\t\t\treturn d !== null && d.isDate;\n\t\t},\n\t\tset allDay(allDay) {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\tvar start = vtodos[0].getFirstPropertyValue('dtstart');\n\t\t\tif (start) {\n\t\t\t\tstart.isDate = allDay;\n\t\t\t\tvtodos[0].updatePropertyWithValue('dtstart', start);\n\t\t\t}\n\t\t\tvar due = vtodos[0].getFirstPropertyValue('due');\n\t\t\tif (due) {\n\t\t\t\tdue.isDate = allDay;\n\t\t\t\tvtodos[0].updatePropertyWithValue('due', due);\n\t\t\t}\n\t\t\tthis.updateLastModified();\n\t\t\tthis.data = this.components.toString();\n\t\t},\n\t\tget comments() {\n\t\t\treturn null;\n\t\t},\n\t\tget loadedCompleted() {\n\t\t\treturn this.loaded;\n\t\t},\n\t\tset loadedCompleted(loadedCompleted) {\n\t\t\tthis.loaded = loadedCompleted;\n\t\t},\n\t\tupdateLastModified: function updateLastModified() {\n\t\t\tvar vtodos = this.components.getAllSubcomponents('vtodo');\n\t\t\tvtodos[0].updatePropertyWithValue('last-modified', ICAL.Time.now());\n\t\t\tvtodos[0].updatePropertyWithValue('dtstamp', ICAL.Time.now());\n\t\t}\n\t};\n\n\tVTodo.create = function (task) {\n\t\tvar comp = icalfactory.new();\n\n\t\tvar vtodo = new ICAL.Component('vtodo');\n\t\tcomp.addSubcomponent(vtodo);\n\t\tvtodo.updatePropertyWithValue('created', ICAL.Time.now());\n\t\tvtodo.updatePropertyWithValue('dtstamp', ICAL.Time.now());\n\t\tvtodo.updatePropertyWithValue('last-modified', ICAL.Time.now());\n\t\tvtodo.updatePropertyWithValue('uid', RandomStringService.generate());\n\t\tvtodo.updatePropertyWithValue('summary', task.summary);\n\t\tvtodo.updatePropertyWithValue('priority', task.priority);\n\t\tvtodo.updatePropertyWithValue('percent-complete', task.complete);\n\t\tvtodo.updatePropertyWithValue('x-oc-hidesubtasks', 0);\n\t\tif (task.related) {\n\t\t\tvtodo.updatePropertyWithValue('related-to', task.related);\n\t\t}\n\t\tif (task.note) {\n\t\t\tvtodo.updatePropertyWithValue('description', task.note);\n\t\t}\n\t\tif (task.due) {\n\t\t\tvtodo.updatePropertyWithValue('due', task.due);\n\t\t}\n\t\tif (task.start) {\n\t\t\tvtodo.updatePropertyWithValue('dtstart', task.start);\n\t\t}\n\n\t\treturn new VTodo(task.calendar, {\n\t\t\t'{urn:ietf:params:xml:ns:caldav}calendar-data': comp.toString(),\n\t\t\t'{DAV:}getetag': null\n\t\t}, null);\n\t};\n\n\treturn VTodo;\n}]);"]}