Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/tasks.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaimund Schlüßler <raimund.schluessler@mailbox.org>2017-09-19 00:01:44 +0300
committerRaimund Schlüßler <raimund.schluessler@mailbox.org>2017-09-19 00:01:44 +0300
commitc3b942a7b53fbc57926353619d5186226ebce834 (patch)
tree7ae7e9973221e8ffb7f15c0161b7db03f56ef0c8
parent91f110043b293f7ec5be4f2a739b7ad9c69f1a92 (diff)
Use flexbox instead of javascript hack
Flexbooox!
-rw-r--r--css/src/06sidebar.scss24
-rw-r--r--css/style.scss24
-rw-r--r--js/app/directives/watchtop.js32
-rw-r--r--js/public/app.min.js6
-rw-r--r--js/public/app.min.js.map2
-rw-r--r--templates/part.details.php16
6 files changed, 34 insertions, 70 deletions
diff --git a/css/src/06sidebar.scss b/css/src/06sidebar.scss
index 7d112707..0db4dba0 100644
--- a/css/src/06sidebar.scss
+++ b/css/src/06sidebar.scss
@@ -11,9 +11,14 @@
margin: 0;
}
+ .flex-container {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ }
+
div.content-wrapper {
padding: 0;
- height: 100%;
> div {
height: 100%;
@@ -32,11 +37,8 @@
&.footer {
border-top: 1px solid $gray_light;
- bottom: 0;
- height: 65px;
- left: 0;
- position: absolute;
- right: 0;
+ flex: 0 0 auto;
+ height: 30px;
.icon {
position: absolute;
@@ -52,12 +54,11 @@
}
.title {
+ flex: 0 0 auto;
background-color: $gray_easy;
border-bottom: 1px solid $gray_light;
font-size: 16px;
font-weight: bold;
- line-height: 24px;
- min-height: 24px;
padding: 16px 55px 13px;
word-wrap: break-word;
@@ -133,12 +134,9 @@
}
.body {
- bottom: 65px;
- left: 0;
+ flex: 1 1 auto;
overflow: auto;
- position: absolute;
- right: 0;
- top: 55px;
+ position: relative;
.note {
border-width: 1px;
diff --git a/css/style.scss b/css/style.scss
index a11419f3..1fd55b84 100644
--- a/css/style.scss
+++ b/css/style.scss
@@ -757,9 +757,14 @@ tr:last-child .task-item {
margin: 0;
}
+ .flex-container {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ }
+
div.content-wrapper {
padding: 0;
- height: 100%;
> div {
height: 100%;
@@ -778,11 +783,8 @@ tr:last-child .task-item {
&.footer {
border-top: 1px solid $gray_light;
- bottom: 0;
- height: 65px;
- left: 0;
- position: absolute;
- right: 0;
+ flex: 0 0 auto;
+ height: 30px;
.icon {
position: absolute;
@@ -798,12 +800,11 @@ tr:last-child .task-item {
}
.title {
+ flex: 0 0 auto;
background-color: $gray_easy;
border-bottom: 1px solid $gray_light;
font-size: 16px;
font-weight: bold;
- line-height: 24px;
- min-height: 24px;
padding: 16px 55px 13px;
word-wrap: break-word;
@@ -879,12 +880,9 @@ tr:last-child .task-item {
}
.body {
- bottom: 65px;
- left: 0;
+ flex: 1 1 auto;
overflow: auto;
- position: absolute;
- right: 0;
- top: 55px;
+ position: relative;
.note {
border-width: 1px;
diff --git a/js/app/directives/watchtop.js b/js/app/directives/watchtop.js
deleted file mode 100644
index 0ffdafaf..00000000
--- a/js/app/directives/watchtop.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Nextcloud - Tasks
- *
- * @author Raimund Schlüßler
- * @copyright 2017 Raimund Schlüßler <raimund.schluessler@googlemail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-angular.module('Tasks').directive('watchTop', function() {
- 'use strict';
- return {
- restrict: 'A',
- link: function(scope, element, attr) {
- return scope.$watch(function() {
- scope.divTop = element.prev().outerHeight(true);
- });
- }
- };
-});
diff --git a/js/public/app.min.js b/js/public/app.min.js
index 29f089aa..4c7acaa2 100644
--- a/js/public/app.min.js
+++ b/js/public/app.min.js
@@ -1,4 +1,4 @@
-!function(e,r,s){"use strict";angular.module("Tasks",["ngRoute","ngAnimate","ui.select","ngSanitize","dndLists"]).config(["$provide","$routeProvider","$interpolateProvider","$httpProvider",function(t,e,n,s){t.value("Config",{markReadTimeout:500,taskUpdateInterval:6e5}),s.defaults.headers.common.requesttoken=r,e.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({redirectTo:"/collections/all"})}]),angular.module("Tasks").run(["$document","$rootScope","Config","$timeout","ListsBusinessLayer","TasksBusinessLayer","SearchBusinessLayer",function(e,n,r,s,a,o,i){var u,c=!1;return(u=function(){var t;return t=function(){return s(u,r.taskUpdateInterval)},c=!0,t()}).call(),OCA.Search.tasks=i,e.click(function(t){n.$broadcast("documentClicked",t)}),moment.locale("details",{calendar:{lastDay:"["+t("tasks","Due yesterday")+"], HH:mm",sameDay:"["+t("tasks","Due today")+"], HH:mm",nextDay:"["+t("tasks","Due tomorrow")+"], HH:mm",lastWeek:"["+t("tasks","Due on")+"] MMM DD, YYYY, HH:mm",nextWeek:"["+t("tasks","Due on")+"] MMM DD, YYYY, HH:mm",sameElse:"["+t("tasks","Due on")+"] MMM DD, YYYY, HH:mm"}}),moment.locale("details_allday",{calendar:{lastDay:"["+t("tasks","Due yesterday")+"]",sameDay:"["+t("tasks","Due today")+"]",nextDay:"["+t("tasks","Due tomorrow")+"]",lastWeek:"["+t("tasks","Due on")+"] MMM DD, YYYY",nextWeek:"["+t("tasks","Due on")+"] MMM DD, YYYY",sameElse:"["+t("tasks","Due on")+"] MMM DD, YYYY"}}),moment.locale("start",{calendar:{lastDay:"["+t("tasks","Started yesterday")+"], HH:mm",sameDay:"["+t("tasks","Starts today")+"], HH:mm",nextDay:"["+t("tasks","Starts tomorrow")+"], HH:mm",lastWeek:"["+t("tasks","Started on")+"] MMM DD, YYYY, HH:mm",nextWeek:"["+t("tasks","Starts on")+"] MMM DD, YYYY, HH:mm",sameElse:function(){return this.diff(moment())>0?"["+t("tasks","Starts on")+"] MMM DD, YYYY, HH:mm":"["+t("tasks","Started on")+"] MMM DD, YYYY, HH:mm"}}}),moment.locale("start_allday",{calendar:{lastDay:"["+t("tasks","Started yesterday")+"]",sameDay:"["+t("tasks","Starts today")+"]",nextDay:"["+t("tasks","Starts tomorrow")+"]",lastWeek:"["+t("tasks","Started on")+"] MMM DD, YYYY",nextWeek:"["+t("tasks","Starts on")+"] MMM DD, YYYY",sameElse:function(){return this.diff(moment())>0?"["+t("tasks","Starts on")+"] MMM DD, YYYY":"["+t("tasks","Started on")+"] MMM DD, YYYY"}}}),moment.locale("reminder",{calendar:{lastDay:t("tasks","[Remind me yesterday at ]HH:mm"),sameDay:t("tasks","[Remind me today at ]HH:mm"),nextDay:t("tasks","[Remind me tomorrow at ]HH:mm"),lastWeek:t("tasks","[Remind me on ]MMM DD, YYYY,[ at ]HH:mm"),nextWeek:t("tasks","[Remind me on ]MMM DD, YYYY,[ at ]HH:mm"),sameElse:t("tasks","[Remind me on ]MMM DD, YYYY,[ at ]HH:mm")}}),moment.locale("tasks",{calendar:{lastDay:"["+t("tasks","Yesterday")+"]",sameDay:"["+t("tasks","Today")+"]",nextDay:"["+t("tasks","Tomorrow")+"]",lastWeek:"DD.MM.YYYY",nextWeek:"DD.MM.YYYY",sameElse:"DD.MM.YYYY"}}),moment.locale("details_short",{calendar:{lastDay:"["+t("tasks","Yesterday")+"]",sameDay:"["+t("tasks","Today")+"]",nextDay:"["+t("tasks","Tomorrow")+"]",lastWeek:"MMM DD, YYYY",nextWeek:"MMM DD, YYYY",sameElse:"MMM DD, YYYY"}}),moment.locale("list_week",{calendar:{lastDay:"["+t("tasks","Yesterday")+"]",sameDay:"["+t("tasks","Today")+"], MMM. DD",nextDay:"["+t("tasks","Tomorrow")+"], MMM. DD",lastWeek:"ddd, MMM. DD",nextWeek:"ddd, MMM. DD",sameElse:"ddd, MMM. DD"}}),moment.locale("en",{relativeTime:{future:t("tasks","in %s"),past:t("tasks","%s ago"),s:t("tasks","seconds"),m:t("tasks","a minute"),mm:t("tasks","%d minutes"),h:t("tasks","an hour"),hh:t("tasks","%d hours"),d:t("tasks","a day"),dd:t("tasks","%d days"),M:t("tasks","a month"),MM:t("tasks","%d months"),y:t("tasks","a year"),yy:t("tasks","%d years")}})}]),angular.module("Tasks").controller("AppController",["$scope","$rootScope","ListsBusinessLayer","$route","Status","$timeout","$location","$routeParams","Loading","SettingsModel","Persistence",function(t,n,r,s,a,o,i,u,c,l,d){return new(function(){function n(n,r,s,a,o,i,u,c,l,d,p){this._$scope=n,this._$listsbusinesslayer=s,this._$route=a,this._$status=o,this._$timeout=i,this._$location=u,this._$routeparams=c,this._Loading=l,this._$settingsmodel=d,this._persistence=p,this._$scope.status=this._$status.getStatus(),this._$scope.route=this._$routeparams,this._$scope.status.newListName="",this._$scope.settingsmodel=this._$settingsmodel,this._$listsbusinesslayer.init().then(function(e){Promise.all(e).then(function(){t.$apply()})}),this._persistence.init(),this._$scope.closeAll=function(t){(e(t.target).closest(".close-all").length||e(t.currentTarget).is(e(t.target).closest(".handler")))&&(angular.isUndefined(n.route.calendarID)?angular.isUndefined(n.route.collectionID)?u.path("/collections/all"):u.path("/collections/"+n.route.collectionID):("name"===n.route.listparameter&&r.$broadcast("cancelEditCalendar",n.route.calendarID),u.path("/calendars/"+n.route.calendarID)),n.status.addingList=!1,n.status.focusTaskInput=!1,n.status.newListName=""),e(t.target).closest(".newList").length||(n.status.addingList=!1,n.status.newListName=""),e(t.target).closest(".add-subtask").length||(n.status.addSubtaskTo=null,n.status.focusSubtaskInput=!1)},this._$scope.isLoading=function(){return l.isLoading()}}return n}())(t,n,r,s,a,o,i,u,c,l,d)}]),angular.module("Tasks").controller("DetailsController",["$scope","$window","TasksModel","TasksBusinessLayer","$route","$location","$timeout","$routeParams","SettingsModel","Loading","ListsModel",function(n,r,s,a,o,i,u,c,l,d,p){return new(function(){function r(r,s,a,o,u,c,l,d,p,m,h){this._$scope=r,this._$window=s,this._$tasksmodel=a,this._$listsmodel=h,this._tasksbusinesslayer=o,this._$route=u,this._$location=c,this._$timeout=l,this._$routeparams=d,this._$settingsmodel=p,this._Loading=m,this._$scope.task=a.getById(r.route.taskID),this._$scope.found=!0,this._$scope.$on("$routeChangeSuccess",function(){var t=a.getByUri(r.route.taskID);angular.isUndefined(t)||null===t?void 0!==r.route.taskID&&(r.found=!1):(r.task=t,r.task.cats=t.categories,r.found=!0)}),this._$scope.settingsmodel=this._$settingsmodel,this._$scope.settingsmodel.add({id:"various",categories:[]}),this._$scope.isAddingComment=!1,this._$scope.timers=[],this._$scope.durations=[{name:t("tasks","week"),names:t("tasks","weeks"),id:"week"},{name:t("tasks","day"),names:t("tasks","days"),id:"day"},{name:t("tasks","hour"),names:t("tasks","hours"),id:"hour"},{name:t("tasks","minute"),names:t("tasks","minutes"),id:"minute"},{name:t("tasks","second"),names:t("tasks","seconds"),id:"second"}],this._$scope.loadTask=function(t){var e=a.getByUri(r.route.taskID);angular.isUndefined(e)||null===e||(r.task=e,r.found=!0)},this._$scope.TaskState=function(){return r.found?"found":m.isLoading()?"loading":null},this._$scope.params=[{name:t("tasks","before beginning"),invert:!0,related:"START",id:"10"},{name:t("tasks","after beginning"),invert:!1,related:"START",id:"00"},{name:t("tasks","before end"),invert:!0,related:"END",id:"11"},{name:t("tasks","after end"),invert:!1,related:"END",id:"01"}],this._$scope.filterParams=function(t){var e;if(e=a.getById(r.route.taskID),!angular.isUndefined(e)&&null!==e)return e.due&&e.start?t:e.start?t.slice(0,2):t.slice(2)},this._$scope.deleteTask=function(t){return l(function(){return o.deleteTask(t).then(function(){return n.$apply()})},500)},this._$scope.triggerUpdate=function(t){o.triggerUpdate(t)},this._$scope.editName=function(t,n){n.calendar.writable&&(e(t.target).is("a")||r.setEditRoute("name"))},this._$scope.editDueDate=function(t,n){n.calendar.writable&&e(t.currentTarget).is(e(t.target).closest(".handler"))&&(r.setEditRoute("duedate"),o.initDueDate(n))},this._$scope.editStart=function(t,n){n.calendar.writable&&e(t.currentTarget).is(e(t.target).closest(".handler"))&&(r.setEditRoute("startdate"),o.initStartDate(n))},this._$scope.editReminder=function(t,n){if(n.calendar.writable&&e(t.currentTarget).is(e(t.target).closest(".handler")))return r.setEditRoute("reminer"),o.initReminder(r.route.taskID)},this._$scope.editNote=function(t,n){n.calendar.writable&&e(t.currentTarget).is(e(t.target).closest(".handler"))&&(e(t.target).is("a")||r.setEditRoute("note"))},this._$scope.editPriority=function(t,n){n.calendar.writable&&e(t.currentTarget).is(e(t.target).closest(".handler"))&&r.setEditRoute("priority")},this._$scope.editPercent=function(t,n){n.calendar.writable&&e(t.currentTarget).is(e(t.target).closest(".handler"))&&r.setEditRoute("percent")},this._$scope.endEdit=function(t){(e(t.target).closest(".end-edit").length||e(t.currentTarget).is(e(t.target).closest(".handler")))&&r.resetRoute()},this._$scope.endName=function(t){if(13===t.keyCode&&(t.preventDefault(),r.resetRoute()),27===t.keyCode)return r.resetRoute()},this._$scope.setEditRoute=function(t){var e=r.route.calendarID,n=r.route.collectionID;e?i.path("/calendars/"+e+"/tasks/"+r.route.taskID+"/edit/"+t):n&&i.path("/collections/"+n+"/tasks/"+r.route.taskID+"/edit/"+t)},this._$scope.resetRoute=function(){var t=r.route.calendarID,e=r.route.collectionID;t?i.path("/calendars/"+t+"/tasks/"+r.route.taskID):e&&i.path("/collections/"+e+"/tasks/"+r.route.taskID)},this._$scope.deletePercent=function(t){return o.setPercentComplete(t,0)},this._$scope.deleteReminder=function(){return o.deleteReminderDate(r.route.taskID)},this._$scope.toggleCompleted=function(t){t.completed?o.setPercentComplete(t,0):o.setPercentComplete(t,100)},this._$scope.setPercentComplete=function(t,e){o.setPercentComplete(t,e)},this._$scope.toggleStarred=function(t){t.priority>5?o.setPriority(t,0):o.setPriority(t,9)},this._$scope.deletePriority=function(t){return o.setPriority(t,0)},this._$scope.isDue=function(t){return a.due(t)},this._$scope.isOverDue=function(t){return a.overdue(t)},this._$scope.setstartday=function(t){return o.setStart(r.task,moment(t,"MM/DD/YYYY"),"day")},this._$scope.setstarttime=function(t){return o.setStart(r.task,moment(t,"HH:mm"),"time")},this._$scope.deleteStartDate=function(t){o.deleteStartDate(t)},this._$scope.setdueday=function(t){return o.setDue(r.task,moment(t,"MM/DD/YYYY"),"day")},this._$scope.setduetime=function(t){return o.setDue(r.task,moment(t,"HH:mm"),"time")},this._$scope.deleteDueDate=function(t){o.deleteDueDate(t)},this._$scope.isAllDayPossible=function(t){return!angular.isUndefined(t)&&t.calendar.writable&&(t.due||t.start)},this._$scope.toggleAllDay=function(t){o.setAllDay(t,!t.allDay)},this._$scope.setreminderday=function(t){return o.setReminderDate(r.route.taskID,moment(t,"MM/DD/YYYY"),"day")},this._$scope.setremindertime=function(t){return o.setReminderDate(r.route.taskID,moment(t,"HH:mm"),"time")},this._$scope.reminderType=function(t){if(!angular.isUndefined(t))return null===t.reminder?moment(t.start,"YYYYMMDDTHHmmss").isValid()||moment(t.due,"YYYYMMDDTHHmmss").isValid()?"DURATION":"DATE-TIME":t.reminder.type},this._$scope.changeReminderType=function(t){return o.checkReminderDate(t.id),"DURATION"===this.reminderType(t)?t.reminder?t.reminder.type="DATE-TIME":t.reminder={type:"DATE-TIME"}:t.reminder?t.reminder.type="DURATION":t.reminder={type:"DURATION"},o.setReminder(t.id)},this._$scope.setReminderDuration=function(t){return o.setReminder(r.route.taskID)},this._$scope.addComment=function(){var t;r.CommentContent&&(r.isAddingComment=!0,t={tmpID:"newComment"+Date.now(),comment:r.CommentContent,taskID:r.route.taskID,time:moment().format("YYYYMMDDTHHmmss"),name:e("#expandDisplayName").text()},o.addComment(t,function(t){a.updateComment(t),r.isAddingComment=!1},function(){r.isAddingComment=!1}),r.CommentContent="")},this._$scope.sendComment=function(t){if(13===t.keyCode)return r.addComment()},this._$scope.deleteComment=function(t){return o.deleteComment(r.route.taskID,t)},this._$scope.commentStrings=function(){return{button:t("tasks","Comment"),input:t("tasks","Add a comment")}},this._$scope.addCategory=function(t,e){r.task.categories=r.task.cats;var n=r.settingsmodel.getById("various").categories;n.indexOf(t)<0&&n.push(t),o.doUpdate(r.task)},this._$scope.removeCategory=function(t,e){r.task.categories=r.task.cats,o.doUpdate(r.task)}}return r}())(n,r,s,a,o,i,u,c,l,d,p)}]),angular.module("Tasks").controller("ListController",["$scope","$rootScope","$window","$routeParams","ListsModel","TasksBusinessLayer","CollectionsModel","ListsBusinessLayer","$location","SearchBusinessLayer","CalendarService","TasksModel","$timeout",function(n,r,s,a,o,i,u,c,l,d,p,m,h){return new(function(){function r(r,a,o,i,u,c,l,d,p,m,h,f,g){this._$scope=r,this._$window=o,this._$routeParams=i,this._$listsmodel=u,this._$tasksmodel=f,this._$tasksbusinesslayer=c,this._$collectionsmodel=l,this._$listsbusinesslayer=d,this.$location=p,this._$timeout=g,this._$searchbusinesslayer=m,this._$calendarservice=h,this._$scope.collections=this._$collectionsmodel.getAll(),this._$scope.calendars=this._$listsmodel.getAll(),this._$scope.draggedTasks=[],this._$scope.TasksBusinessLayer=this._$tasksbusinesslayer,this._$scope.nameError=!1,this._$scope.color="#31CC7C",this._$scope.deleteMessage=function(e){return t("tasks",'This will delete the Calendar "%s" and all of its entries.').replace("%s",e.displayname)},this._$scope.delete=function(t){return d.delete(t).then(function(){return p.path("/calendars/"+u.getStandardList().uri),n.$apply()})},this._$scope.startCreate=function(){r.status.addingList=!0,r.nameError=!1,e(".hasTooltip").tooltip("hide"),g(function(){e("#newList").focus()},50)},this._$scope.create=function(){r.isNameAllowed(r.status.newListName).allowed&&(r.status.addingList=!1,r.isAddingList=!0,d.add(r.status.newListName,r.color).then(function(t){return p.path("/calendars/"+t.uri),n.$apply()}),r.status.newListName="")},this._$scope.cancelCreate=function(){e(".hasTooltip").tooltip("hide"),r.nameError=!1,r.status.addingList=!1,r.status.newListName=""},this._$scope.startEdit=function(t){r.status.addingList=!1,r.nameError=!1,e(".hasTooltip").tooltip("hide"),t.prepareUpdate(),p.path("/calendars/"+r.route.calendarID+"/edit/name"),g(function(){e("#list_"+t.uri+" input.edit").focus()},50)},this._$scope.showCalDAVUrl=function(t){r.status.addingList=!1,r.nameError=!1,p.path("/calendars/"+r.route.calendarID+"/edit/caldav"),g(function(){e("#list_"+t.uri+" input.caldav").focus()},50)},this._$scope.hideCalDAVUrl=function(){p.path("/calendars/"+r.route.calendarID)},this._$scope.download=function(t){var e=t.url;"/"===e.slice(e.length-1)&&(e=e.slice(0,e.length-1)),e+="?export",s.open(e)},this._$scope.checkNew=function(t,e){r.checkName(t,e)},this._$scope.checkEdit=function(t,e){r.checkName(t,e.displayname,e.uri),27===t.keyCode&&r.cancelEdit(e)},this._$scope.checkName=function(t,n,s){var a=r.isNameAllowed(n,s),o=e(t.currentTarget);a.allowed?(o.tooltip("hide"),r.nameError=!1):(o.attr("title",a.msg).tooltip({placement:"bottom",trigger:"manual"}).tooltip("fixTitle").tooltip("show"),r.nameError=!0),27===t.keyCode&&(t.preventDefault(),o.tooltip("hide"),r.status.addingList=!1,r.status.newListName="",r.nameError=!1)},a.$on("cancelEditCalendar",function(t,e){var n=u.getByUri(e);r.cancelEdit(n)}),this._$scope.cancelEdit=function(t){t.resetToPreviousState(),e(".hasTooltip").tooltip("hide"),r.nameError=!1,p.path("/calendars/"+r.route.calendarID)},this._$scope.saveEdit=function(t){r.isNameAllowed(t.displayname,t.uri).allowed&&(d.rename(t),p.path("/calendars/"+r.route.calendarID))},this._$scope.isNameAllowed=function(e,n){var r={allowed:!1,msg:""};return u.isNameAlreadyTaken(e,n)?r.msg=t("tasks",'The name "%s" is already used.').replace("%s",e):e?r.allowed=!0:r.msg=t("tasks","An empty name is not allowed."),r},this._$scope.getCollectionCount=function(t){var e;return e=m.getFilter(),l.getCount(t,e)},this._$scope.hideCollection=function(t){var e;switch(e=l.getById(t),e.show){case 0:return!0;case 1:return!1;case 2:return this.getCollectionCount(t)<1}},this._$scope.getCollectionString=function(t){var e;return"completed"!==t?(e=m.getFilter(),l.getCount(t,e)):""},this._$scope.getListCount=function(t,e){var n;return n=m.getFilter(),u.getCount(t,e,n)},this._$scope.dragoverList=function(t,n){var r=e(t.target).closest("li.list").attr("calendarID");return u.getByUri(r).writable},this._$scope.dropList=function(t,n,s){if("move"===t.dataTransfer.dropEffect){var a=f.getByUri(s.uri),o=e(t.target).closest("li.list").attr("calendarID"),i=u.getByUri(o);c.changeCalendar(a,i).then(function(){r.$apply()})}return!0},this._$scope.dragoverCollection=function(t,n){if("copy"===t.dataTransfer.effectAllowed||"copyMove"===t.dataTransfer.effectAllowed&&t.ctrlKey)return!1;var r;return"starred"===(r=e(t.target).closest("li.collection").attr("collectionID"))||"completed"===r||"today"===r},this._$scope.dropCollection=function(t,n,r){if("move"===t.dataTransfer.dropEffect){var s=e(t.target).closest("li.collection").attr("collectionID");c.changeCollection(r.uri,s)}return!0}}return r}())(n,r,s,a,o,i,u,c,l,d,p,m,h)}]),angular.module("Tasks").controller("SettingsController",["$scope","$window","Status","$location","CollectionsModel","SettingsBusinessLayer","SettingsModel",function(e,n,r,s,a,o,i){return new(function(){function e(e,n,r,s,a,o,i){this._$scope=e,this._$window=n,this._$status=r,this._$location=s,this._$collectionsmodel=a,this._$settingsbusinesslayer=o,this._$settingsmodel=i,this._$scope.status=this._$status.getStatus(),this._$scope.collections=this._$collectionsmodel.getAll(),this._$scope.settingsmodel=this._$settingsmodel,this._$scope.collectionOptions=[{id:0,name:t("tasks","Hidden")},{id:1,name:t("tasks","Visible")},{id:2,name:t("tasks","Automatic")}],this._$scope.startOfWeekOptions=[{id:0,name:t("tasks","Sunday")},{id:1,name:t("tasks","Monday")},{id:2,name:t("tasks","Tuesday")},{id:3,name:t("tasks","Wednesday")},{id:4,name:t("tasks","Thursday")},{id:5,name:t("tasks","Friday")},{id:6,name:t("tasks","Saturday")}],this._$scope.setVisibility=function(t){var e;return e=a.getById(t),o.setVisibility(t,e.show)},this._$scope.setStartOfWeek=function(){return o.set("various","startOfWeek",i.getById("various").startOfWeek)}}return e}())(e,n,r,s,a,o,i)}]),function(){var r=[].indexOf||function(t){for(var e=0,n=this.length;e<n;e++)if(e in this&&this[e]===t)return e;return-1};angular.module("Tasks").controller("TasksController",["$scope","$window","$routeParams","TasksModel","ListsModel","CollectionsModel","TasksBusinessLayer","$location","SettingsBusinessLayer","SearchBusinessLayer","VTodo","SettingsModel",function(s,a,o,i,u,c,l,d,p,m,h,f){return new(function(){function a(a,o,i,u,c,l,d,p,m,f,g,y){this._$scope=a,this._$window=o,this._$routeParams=i,this._$tasksmodel=u,this._$listsmodel=c,this._$collectionsmodel=l,this._tasksbusinesslayer=d,this.$location=p,this._settingsbusinesslayer=m,this._searchbusinesslayer=f,this._vtodo=g,this._$scope.tasks=this._$tasksmodel.getAll(),this._$scope.draggedTasks=[],this._$scope.calendars=this._$listsmodel.getAll(),this._$scope.days=[0,1,2,3,4,5,6],this._$scope.isAddingTask=!1,this._$scope.focusInputField=!1,this._$scope.TasksModel=this._$tasksmodel,this._$scope.TasksBusinessLayer=this._tasksbusinesslayer,this._$settingsmodel=y,this._$scope.addTask=function(t,e,n,r){var o;null===n&&(n=""),a.isAddingTask=!0;var i={calendar:null,related:e,summary:t,priority:"0",due:!1,start:!1,reminder:null,completed:!1,complete:"0",note:""};"starred"===(o=a.route.collectionID)||"today"===o||"week"===o||"all"===o||"completed"===o||"current"===o?(i.calendar=e?n:c.getStandardList(),"starred"===a.route.collectionID&&(i.priority="1"),"today"===a.route.collectionID&&(i.due=moment().startOf("day").format("YYYY-MM-DDTHH:mm:ss")),"current"===a.route.collectionID&&(i.start=moment().format("YYYY-MM-DDTHH:mm:ss"))):i.calendar=c.getByUri(a.route.calendarID),i=h.create(i),d.add(i).then(function(t){return a.isAddingTask=!1,a.openDetails(t.uri,null),s.$apply()}),r&&d.setHideSubtasks(r,0),a.status.focusTaskInput=!1,a.status.focusSubtaskInput=!1,a.status.addSubtaskTo=null,a.status.taskName="",a.status.subtaskName=""},this._$scope.getAddString=function(){var e=c.getStandardList();if(angular.isDefined(e))if(angular.isDefined(a.route.collectionID))switch(a.route.collectionID){case"starred":return t("tasks",'Add an important item in "%s"...').replace("%s",e.displayname);case"today":return t("tasks",'Add an item due today in "%s"...').replace("%s",e.displayname);case"all":return t("tasks",'Add an item in "%s"...').replace("%s",e.displayname);case"current":return t("tasks",'Add a current item in "%s"...').replace("%s",e.displayname);case"completed":case"week":return null}else if(angular.isDefined(c.getByUri(a.route.calendarID)))return t("tasks",'Add an item in "%s"...').replace("%s",c.getByUri(a.route.calendarID).displayname)},this._$scope.getSubAddString=function(e){return t("tasks",'Add a subtask to "%s"...').replace("%s",e)},this._$scope.showSubtaskInput=function(t){a.status.addSubtaskTo=t},this._$scope.hideSubtasks=function(t){var e=a.route.taskID,n=u.getDescendantIDs(t);return t.uri!==e&&(!(r.call(n,e)>=0)&&t.hideSubtasks)},this._$scope.showInput=function(){var t=a.route.collectionID,e=c.getByUri(a.route.calendarID);return"completed"!==t&&"week"!==t&&(!angular.isDefined(e)||e.writable)},this._$scope.focusTaskInput=function(){a.status.focusTaskInput=!0},this._$scope.focusSubtaskInput=function(){a.status.focusSubtaskInput=!0},this._$scope.openDetails=function(t,n){var r=a.route.calendarID,o=a.route.collectionID;if(null===n||e(n.currentTarget).is(e(n.target).closest(".handler"))){var i=u.getByUri(t);i.loadedCompleted||d.getAll(i.calendar,!0,i).then(function(){i.loadedCompleted=!0,s.$apply()}),r?p.path("/calendars/"+r+"/tasks/"+t):o&&p.path("/collections/"+o+"/tasks/"+t)}},this._$scope.toggleCompleted=function(t){t.completed?d.setPercentComplete(t,0):d.setPercentComplete(t,100)},this._$scope.toggleStarred=function(t){t.priority>5?d.setPriority(t,0):d.setPriority(t,9)},this._$scope.toggleHidden=function(){return m.toggle("various","showHidden")},this._$scope.filterTasks=function(t,e){return function(t){return u.filterTasks(t,e)}},this._$scope.getSubTasks=function(t,e){var n,r,s,a;for(n=[],s=0,a=t.length;s<a;s++)r=t[s],r.related!==e.uid||r===e||e.hideCompletedSubtasks&&r.completed||n.push(r);return n},this._$scope.hasNoParent=function(t){return function(t){return u.hasNoParent(t)}},this._$scope.hasSubtasks=function(t){return u.hasSubtasks(t.uid)},this._$scope.hasCompletedSubtasks=function(t){return u.hasCompletedSubtasks(t.uid)},this._$scope.toggleSubtasks=function(t){d.setHideSubtasks(t,!t.hideSubtasks)},this._$scope.toggleCompletedSubtasks=function(t){d.setHideCompletedSubtasks(t,!t.hideCompletedSubtasks)},this._$scope.filterTasksByString=function(t){return function(t){var e=f.getFilter();return u.filterTasksByString(t,e)}},this._$scope.filteredTasks=function(){var t;return t=f.getFilter(),u.filteredTasks(t)},this._$scope.dayHasEntry=function(){return function(t){var e,n,r,s,a;for(e=f.getFilter(),r=u.filteredTasks(e),s=0,a=r.length;s<a;s++)if(n=r[s],!n.completed&&u.hasNoParent(n)&&u.taskAtDay(n,t))return!0;return!1}},this._$scope.taskAtDay=function(t,e){return function(t){return u.taskAtDay(t,e)}},this._$scope.filterLists=function(){return function(t){return a.getCount(t.uri,a.route.collectionID)}},this._$scope.getCount=function(t,e){var n=f.getFilter();return c.getCount(t,e,n)},this._$scope.getCountString=function(t,e){var r=f.getFilter();return n("tasks","%n Completed Task","%n Completed Tasks",c.getCount(t,e,r))},this._$scope.checkTaskInput=function(t){27===t.keyCode&&(e(t.currentTarget).blur(),a.status.taskName="",a.status.subtaskName="",a.status.addSubtaskTo=null,a.status.focusTaskInput=!1,a.status.focusSubtaskInput=!1)},this._$scope.getCompletedTasks=function(t){var e=c.getById(t);d.getAll(e,!0).then(function(){c.setLoadedCompleted(t),s.$apply()})},this._$scope.loadedCompleted=function(t){return c.loadedCompleted(t)},this._$scope.sortDue=function(t){return null===t.due?"last":t.due},this._$scope.sortStart=function(t){return null===t.start?"last":t.start},this._$scope.getSortOrder=function(){switch(a.settingsmodel.getById("various").sortOrder){case"due":return a.sortDue;case"start":return a.sortStart;case"priority":return"-priority";case"alphabetically":return"summary";case"manual":return"manual";default:return["completed",a.sortDue,"-priority",a.sortStart,"summary"]}},this._$scope.getSortOrderIcon=function(){switch(a.settingsmodel.getById("various").sortOrder){case"due":case"start":return"icon-calendar";case"priority":return"icon-task-star";case"alphabetically":return"icon-alphabetically";case"manual":return"icon-manual";default:return"icon-menu"}},this._$scope.setSortOrder=function(t,e){a.settingsmodel.getById("various").sortDirection=a.settingsmodel.getById("various").sortOrder===e?+!a.settingsmodel.getById("various").sortDirection:0,a.settingsmodel.getById("various").sortOrder=e,m.set("various","sortOrder",e),m.set("various","sortDirection",a.settingsmodel.getById("various").sortDirection)},this._$scope.dropAsSubtask=function(t,n,r){if("move"===t.dataTransfer.dropEffect){var s=e(t.target).closest(".task-item").attr("taskID"),a=u.getByUri(n.uri),o=u.getByUri(s);d.changeParent(a,o)}return e(".subtasks-container").removeClass("dropzone-visible"),!0},this._$scope.dropAsRootTask=function(t,n,r){if("move"===t.dataTransfer.dropEffect){var a=u.getByUri(n.uri),o=e(t.target).closest("ol[dnd-list]").attr("collectionID"),i=e(t.target).closest("ol[dnd-list]").attr("calendarID"),l=c.getByUri(i),p=d.makeRootTask(a,l,o);Promise.all(p).then(function(){s.$apply()})}return e(".subtasks-container").removeClass("dropzone-visible"),!0},this._$scope.dragover=function(t,n,r){e(".subtasks-container").removeClass("dropzone-visible");var s=e(t.target).closest("ol[dnd-list]").attr("calendarID");return!!c.getByUri(s).writable&&(e(t.target).closest(".task-item").children(".subtasks-container").addClass("dropzone-visible"),!0)},this._$scope.allow=function(t){return t.calendar.writable?"copyMove":"copy"},this._$scope.dragStart=function(t){("copy"===t.dataTransfer.effectAllowed||"copyMove"===t.dataTransfer.effectAllowed&&t.ctrlKey)&&e(t.target).addClass("copy")},this._$scope.dragEnd=function(t){e(t.target).removeClass("copy")}}return a}())(s,a,o,i,u,c,l,d,p,m,h,f)}])}.call(void 0),angular.module("Tasks").directive("appNavigationEntryUtils",function(){return{restrict:"C",link:function(t,n){var r,s;s=n.siblings(".app-navigation-entry-menu"),r=e(n).find(".app-navigation-entry-utils-menu-button button"),r.click(function(){s.toggleClass("open")}),t.$on("documentClicked",function(t,e){e.target!==r[0]&&s.removeClass("open")})}}}),angular.module("Tasks").directive("autofocusOnInsert",function(){return function(t,e){return e.focus()}}),angular.module("Tasks").directive("avatar",function(){return{restrict:"A",scope:!1,link:function(t,e,n){return n.$observe("userid",function(){if(n.userid)return e.avatar(n.userid,n.size)})}}});var a=function(t,e,n){if(Array.isArray(t)&&(e=t[1],n=t[2],t=t[0]),void 0===t)return[0,0,0];e/=100,n/=100;var r=(1-Math.abs(2*n-1))*e,s=t/60,a=r*(1-Math.abs(s%2-1));s=Math.floor(s);var o,i,u;0===s?(o=r,i=a,u=0):1===s?(o=a,i=r,u=0):2===s?(o=0,i=r,u=a):3===s?(o=0,i=a,u=r):4===s?(o=a,i=0,u=r):5===s&&(o=r,i=0,u=a);var c=n-r/2;return o+=c,i+=c,u+=c,[Math.round(255*o),Math.round(255*i),Math.round(255*u)]},o=function(t,e,n){return Array.isArray(t)&&(e=t[1],n=t[2],t=t[0]),"#"+parseInt(t,10).toString(16)+parseInt(e,10).toString(16)+parseInt(n,10).toString(16)},i=["#31CC7C","#317CCC","#FF7A66","#F1DB50","#7C31CC","#CC317C","#3A3B3D","#CACBCD"],u=function(){return"function"==typeof String.prototype.toHsl?o(a(Math.random().toString().toHsl())):i[Math.floor(Math.random()*i.length)]};angular.module("Tasks").directive("colorpicker",function(){if("function"==typeof String.prototype.toHsl){var t="",e="";i=["15","9","4","b","6","11","74","f","57"],i.forEach(function(n,r){t=n.toHsl(),e=a(t),i[r]=o(e)})}return{scope:{selected:"=",customizedColors:"=colors"},restrict:"AE",templateUrl:OC.filePath("tasks","templates","colorpicker.html"),link:function(t,e,n){t.colors=t.customizedColors||i,t.selected=t.selected||t.colors[0],t.random="#000000",t.randomizeColour=function(){t.random=u(),t.pick(t.random)},t.pick=function(e){t.selected=e}}}}),angular.module("Tasks").directive("confirmation",function(){return{priority:-1,restrict:"A",templateUrl:OC.generateUrl("/apps/tasks/templates/confirmation",{}),scope:{confirmationFunction:"&confirmation",confirmationMessage:"&confirmationMessage"},controller:"ConfirmationController"}}),angular.module("Tasks").controller("ConfirmationController",["$scope","$rootScope","$element","$attrs","$compile","$document","$window","$timeout",function(t,e,n,r,s,a,o,i){return new(function(){function e(e,n,r,s,a,o,i,u){this._$scope=e,this._$scope.countdown=3,r.bind("click",function(t){e.countdown=3,r.removeClass("active");var n=e.confirmationMessage()?e.confirmationMessage():"Are you sure?";r.hasClass("confirmed")||(t.stopPropagation(),e.activate(),r.children(".confirmation-confirm").tooltip({title:n,container:"body",placement:"right"}),r.addClass("confirmed"))}),r.children(".confirmation-confirm").bind("click",function(t){if(r.hasClass("confirmed active"))return void e.confirmationFunction();t.stopPropagation()}),this._$scope.documentClick=function(){r.removeClass("confirmed")},this._$scope.activate=function(){e.countdown?(r.find(".countdown").html(e.countdown+" s"),u(function(){e.activate()},1e3),e.countdown--):r.addClass("active")},o.bind("click",e.documentClick),o.bind("touchend",e.documentClick),t.$on("$destroy",function(){o.unbind("click",e.documentClick),o.unbind("touchend",e.documentClick)})}return e}())(t,e,n,r,s,a,o,i)}]),angular.module("Tasks").directive("datepicker",function(){return{restrict:"A",scope:!1,link:function(t,n,r){return n.datepicker({onSelect:function(e,n){return t["set"+r.datepicker+"day"](e),t.$apply()},beforeShow:function(n,r){var s,a;return s=e(r).datepicker("widget"),a=-Math.abs(e(n).outerWidth()-s.outerWidth())/2+"px",s.css({"margin-left":a}),e("div.ui-datepicker:before").css({left:"100px"}),e(".hasDatepicker").datepicker("option","firstDay",t.settingsmodel.getById("various").startOfWeek)},beforeShowDay:function(e){return 0===moment(e).startOf("day").diff(moment(t.task[r.datepicker],"YYYYMMDDTHHmmss").startOf("day"),"days")?[1,"selected"]:[1,""]},minDate:null})}}}),angular.module("Tasks").directive("ocClickFocus",["$timeout",function(t){return function(n,r,s){var a;if(a=n.$eval(s.ocClickFocus),angular.isDefined(a)&&angular.isDefined(a.selector))return r.click(function(){return angular.isDefined(a.timeout)?t(function(){return e(a.selector).focus()},a.timeout):e(a.selector).focus()})}}]),angular.module("Tasks").directive("timepicker",function(){return{restrict:"A",link:function(e,n,r){return n.timepicker({onSelect:function(t,n){return e["set"+r.timepicker+"time"](t),e.$apply()},myPosition:"center top",atPosition:"center bottom",hourText:t("tasks","Hours"),minuteText:t("tasks","Minutes")})}}}),angular.module("Tasks").directive("watchTop",function(){return{restrict:"A",link:function(t,e,n){return t.$watch(function(){t.divTop=e.prev().outerHeight(!0)})}}}),angular.module("Tasks").filter("counterFormatter",function(){return function(t){switch(!1){case 0!==t:return"";case t<999:return"999+";default:return t}}}),angular.module("Tasks").filter("dateDetails",function(){return function(e){return moment(e,"YYYYMMDDTHHmmss").isValid()?moment(e,"YYYYMMDDTHHmmss").locale(e.isDate?"details_allday":"details").calendar():t("tasks","Set due date")}}),
-angular.module("Tasks").filter("dateDetailsShort",function(){return function(t){return moment(t,"YYYYMMDDTHHmmss").isValid()?moment(t,"YYYYMMDDTHHmmss").locale("details_short").calendar():""}}),angular.module("Tasks").filter("dateFromNow",function(){return function(t){return moment(t,"YYYYMMDDTHHmmss").isValid()?moment(t,"YYYYMMDDTHHmmss").fromNow():""}}),angular.module("Tasks").filter("dateTaskList",function(){return function(t){return moment(t,"YYYYMMDDTHHmmss").isValid()?moment(t,"YYYYMMDDTHHmmss").locale("tasks").calendar():""}}),angular.module("Tasks").filter("day",function(){return function(t){return moment().add("days",t).locale("list_week").calendar()}}),angular.module("Tasks").filter("dayTaskList",function(){return function(t){return moment(t,"YYYYMMDDTHHmmss").isValid()?moment(t,"YYYYMMDDTHHmmss").locale("tasks").calendar():""}}),angular.module("Tasks").filter("percentDetails",function(){return function(e){return t("tasks","%s %% completed").replace("%s",e).replace("%%","%")}}),angular.module("Tasks").filter("priorityDetails",function(){return function(e){var n;return n=t("tasks","priority %s: ").replace("%s",e),6==+e||7==+e||8==+e||9==+e?n+" "+t("tasks","high"):5==+e?n+" "+t("tasks","medium"):1==+e||2==+e||3==+e||4==+e?n+" "+t("tasks","low"):t("tasks","no priority assigned")}}),angular.module("Tasks").filter("reminderDetails",function(){return function(e,n){var r,s,a,o;if(angular.isUndefined(e)||null===e)return t("tasks","Remind me");if("DATE-TIME"===e.type&&moment(e.date,"YYYYMMDDTHHmmss").isValid())return moment(e.date,"YYYYMMDDTHHmmss").locale("reminder").calendar();if("DURATION"===e.type&&e.duration){r=t("tasks","Remind me"),o=n.durations;for(var i=0,u=o.length;i<u;i++)a=o[i],+e.duration[a.id]&&(s=1,r+=" "+e.duration[a.id]+" ",r+=function(t,e){return 1==+t.duration[e.id]?e.name:e.names}(e,a));return s?e.duration.params.invert?r+=function(e){return"END"===e?" "+t("tasks","before end"):" "+t("tasks","before beginning")}(e.duration.params.related):r+=function(e){return"END"===e?" "+t("tasks","after end"):" "+t("tasks","after beginning")}(e.duration.params.related):"END"===e.duration.params.related?r+=" "+t("tasks","at the end"):r+=" "+t("tasks","at the beginning"),r}return t("tasks","Remind me")}}),angular.module("Tasks").filter("startDetails",function(){return function(e){return moment(e,"YYYYMMDDTHHmmss").isValid()?moment(e,"YYYYMMDDTHHmmss").locale(e.isDate?"start_allday":"start").calendar():t("tasks","Set start date")}}),angular.module("Tasks").filter("timeTaskList",function(){return function(t){return moment(t,"YYYYMMDDTHHmmss").isValid()?moment(t,"YYYYMMDDTHHmmss").format("HH:mm"):""}}),angular.module("Tasks").service("CalendarService",["DavClient","Calendar",function(e,n){function s(t){return e.propFind(e.buildUrl(OC.linkToRemoteBase("dav")),["{"+e.NS_DAV+"}current-user-principal"],0,{requesttoken:OC.requestToken}).then(function(n){if(!e.wasRequestSuccessful(n.status))throw"CalDAV client could not be initialized - Querying current-user-principal failed";if(!(n.body.propStat.length<1)){var r=n.body.propStat[0].properties;return o._currentUserPrincipal=r["{"+e.NS_DAV+"}current-user-principal"][0].textContent,e.propFind(e.buildUrl(o._currentUserPrincipal),["{"+e.NS_IETF+"}calendar-home-set"],0,{requesttoken:OC.requestToken}).then(function(n){if(!e.wasRequestSuccessful(n.status))throw"CalDAV client could not be initialized - Querying calendar-home-set failed";if(!(n.body.propStat.length<1)){var r=n.body.propStat[0].properties;return o._CALENDAR_HOME=r["{"+e.NS_IETF+"}calendar-home-set"][0].textContent,t()}})}})}function a(t){return parseInt(t.split(" ")[1])}var o=this;this._CALENDAR_HOME=null,this._currentUserPrincipal=null,this._takenUrls=[],this._PROPERTIES=["{"+e.NS_DAV+"}displayname","{"+e.NS_IETF+"}calendar-description","{"+e.NS_IETF+"}calendar-timezone","{"+e.NS_APPLE+"}calendar-order","{"+e.NS_APPLE+"}calendar-color","{"+e.NS_IETF+"}supported-calendar-component-set","{"+e.NS_OWNCLOUD+"}calendar-enabled","{"+e.NS_DAV+"}acl","{"+e.NS_DAV+"}owner","{"+e.NS_OWNCLOUD+"}invite"],this.getAll=function(){return null===this._CALENDAR_HOME?s(function(){return o.getAll()}):e.propFind(e.buildUrl(this._CALENDAR_HOME),this._PROPERTIES,1,{requesttoken:OC.requestToken}).then(function(t){var r=[];if(!e.wasRequestSuccessful(t.status))throw"CalDAV client could not be initialized - Querying calendars failed";for(var s=0;s<t.body.length;s++){var i=t.body[s];if(!(i.propStat.length<1)){o._takenUrls.push(i.href);var u=a(i.propStat[0].status);if(e.wasRequestSuccessful(u)){var c=!1,l=i.propStat[0].properties["{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set"];if(l)for(var d=0;d<l.length;d++){var p=l[d].attributes.getNamedItem("name").textContent.toLowerCase();"vtodo"===p&&(c=!0)}if(c){o._getACLFromResponse(i);var m=i.href.substr(o._CALENDAR_HOME.length).replace(/[^\w\-]+/g,""),h=new n(i.href,i.propStat[0].properties,m);r.push(h)}}}}return r})},this.get=function(t){return null===this._CALENDAR_HOME?s(function(){return o.get(t)}):e.propFind(e.buildUrl(t),this._PROPERTIES,0,{requesttoken:OC.requestToken}).then(function(t){var r=t.body;if(!(r.propStat.length<1)){var s=a(r.propStat[0].status);if(e.wasRequestSuccessful(s)){o._getACLFromResponse(r);var i=r.href.substr(o._CALENDAR_HOME.length).replace(/[^\w\-]+/g,"");return new n(r.href,r.propStat[0].properties,i)}}})},this.create=function(t,n,r){if(null===this._CALENDAR_HOME)return s(function(){return o.create(t,n)});void 0===r&&(r=["vtodo"]);var a=document.implementation.createDocument("","",null),i=a.createElement("c:mkcalendar");i.setAttribute("xmlns:c","urn:ietf:params:xml:ns:caldav"),i.setAttribute("xmlns:d","DAV:"),i.setAttribute("xmlns:a","http://apple.com/ns/ical/"),i.setAttribute("xmlns:o","http://owncloud.org/ns"),a.appendChild(i);var u=a.createElement("d:set");i.appendChild(u);var c=a.createElement("d:prop");u.appendChild(c),c.appendChild(this._createXMLForProperty(a,"displayname",t)),c.appendChild(this._createXMLForProperty(a,"enabled",!0)),c.appendChild(this._createXMLForProperty(a,"color",n)),c.appendChild(this._createXMLForProperty(a,"components",r));var l=i.outerHTML,d=this._suggestUri(t),p=this._CALENDAR_HOME+d+"/",m={"Content-Type":"application/xml; charset=utf-8",requesttoken:OC.requestToken};return e.request("MKCALENDAR",p,m,l).then(function(t){if(201===t.status)return o._takenUrls.push(p),o.get(p).then(function(t){return t.enabled=!0,o.update(t)})})},this.update=function(t){var n=document.implementation.createDocument("","",null),r=n.createElement("d:propertyupdate");r.setAttribute("xmlns:c","urn:ietf:params:xml:ns:caldav"),r.setAttribute("xmlns:d","DAV:"),r.setAttribute("xmlns:a","http://apple.com/ns/ical/"),r.setAttribute("xmlns:o","http://owncloud.org/ns"),n.appendChild(r);var s=n.createElement("d:set");r.appendChild(s);var a=n.createElement("d:prop");s.appendChild(a);var o=t.updatedProperties;t.resetUpdatedProperties();for(var i=0;i<o.length;i++)a.appendChild(this._createXMLForProperty(n,o[i],t[o[i]]));var u=t.url,c=r.outerHTML,l={"Content-Type":"application/xml; charset=utf-8",requesttoken:OC.requestToken};return e.request("PROPPATCH",u,l,c).then(function(e){return t})},this.delete=function(t){return e.request("DELETE",t.url,{requesttoken:OC.requestToken},"").then(function(t){return 204===t.status})},this.share=function(n,s,a,o,i){var u=document.implementation.createDocument("","",null),c=u.createElement("o:share");c.setAttribute("xmlns:d","DAV:"),c.setAttribute("xmlns:o","http://owncloud.org/ns"),u.appendChild(c);var l=u.createElement("o:set");c.appendChild(l);var d=u.createElement("d:href");s===OC.Share.SHARE_TYPE_USER?d.textContent="principal:principals/users/":s===OC.Share.SHARE_TYPE_GROUP&&(d.textContent="principal:principals/groups/"),d.textContent+=a,l.appendChild(d);var p=u.createElement("o:summary");if(p.textContent=t("calendar","{calendar} shared by {owner}",{calendar:n.displayname,owner:n.owner}),l.appendChild(p),o){var m=u.createElement("o:read-write");l.appendChild(m)}var h={"Content-Type":"application/xml; charset=utf-8",requesttoken:r},f=c.outerHTML;return e.request("POST",n.url,h,f).then(function(t){200===t.status&&(i||(s===OC.Share.SHARE_TYPE_USER?n.sharedWith.users.push({id:a,displayname:a,writable:o}):s===OC.Share.SHARE_TYPE_GROUP&&n.sharedWith.groups.push({id:a,displayname:a,writable:o})))})},this.unshare=function(t,n,s){var a=document.implementation.createDocument("","",null),o=a.createElement("o:share");o.setAttribute("xmlns:d","DAV:"),o.setAttribute("xmlns:o","http://owncloud.org/ns"),a.appendChild(o);var i=a.createElement("o:remove");o.appendChild(i);var u=a.createElement("d:href");n===OC.Share.SHARE_TYPE_USER?u.textContent="principal:principals/users/":n===OC.Share.SHARE_TYPE_GROUP&&(u.textContent="principal:principals/groups/"),u.textContent+=s,i.appendChild(u);var c={"Content-Type":"application/xml; charset=utf-8",requesttoken:r},l=o.outerHTML;return e.request("POST",t.url,c,l).then(function(e){return 200===e.status&&(n===OC.Share.SHARE_TYPE_USER?t.sharedWith.users=t.sharedWith.users.filter(function(t){return t.id!==s}):n===OC.Share.SHARE_TYPE_GROUP&&(t.sharedWith.groups=t.sharedWith.groups.filter(function(t){return t.id!==s})),!0)})},this._createXMLForProperty=function(t,e,n){switch(e){case"enabled":var r=t.createElement("o:calendar-enabled");return r.textContent=n?"1":"0",r;case"displayname":var s=t.createElement("d:displayname");return s.textContent=n,s;case"order":var a=t.createElement("a:calendar-color");return a.textContent=n,a;case"color":var o=t.createElement("a:calendar-color");return o.textContent=n,o;case"components":for(var i=t.createElement("c:supported-calendar-component-set"),u=0;u<n.length;u++){var c=t.createElement("c:comp");c.setAttribute("name",n[u].toUpperCase()),i.appendChild(c)}return i}},this._getACLFromResponse=function(t){var n=!1,r=t.propStat[0].properties["{"+e.NS_DAV+"}acl"];if(r)for(var s=0;s<r.length;s++){var a=r[s].getElementsByTagNameNS("DAV:","href");if(0!==a.length&&(a=a[0].textContent)===o._currentUserPrincipal){var i=r[s].getElementsByTagNameNS("DAV:","write");i.length>0&&(n=!0)}}t.propStat[0].properties.canWrite=n},this._isUriAlreadyTaken=function(t){return-1!==this._takenUrls.indexOf(this._CALENDAR_HOME+t+"/")},this._suggestUri=function(t){var e=t.toString().toLowerCase().replace(/\s+/g,"-").replace(/[^\w\-]+/g,"").replace(/\-\-+/g,"-").replace(/^-+/,"").replace(/-+$/,"");if(!this._isUriAlreadyTaken(e))return e;if(-1===e.indexOf("-")&&(e+="-1",!this._isUriAlreadyTaken(e)))return e;for(;this._isUriAlreadyTaken(e);){var n=e.lastIndexOf("-"),r=e.substr(0,n),s=e.substr(n+1);s.match(/^\d+$/)?(s=parseInt(s),s++,e=r+"-"+s):""===s?e+="1":e=e="-1"}return e}}]),angular.module("Tasks").service("DavClient",[function(){var t;return t=new dav.Client({baseUrl:OC.linkToRemote("dav/calendars"),xmlNamespaces:{"DAV:":"d","urn:ietf:params:xml:ns:caldav":"c","http://apple.com/ns/ical/":"aapl","http://owncloud.org/ns":"oc","http://nextcloud.com/ns":"nc","http://calendarserver.org/ns/":"cs"}}),angular.extend(t,{NS_DAV:"DAV:",NS_IETF:"urn:ietf:params:xml:ns:caldav",NS_APPLE:"http://apple.com/ns/ical/",NS_OWNCLOUD:"http://owncloud.org/ns",NS_NEXTCLOUD:"http://nextcloud.com/ns",NS_CALENDARSERVER:"http://calendarserver.org/ns/",buildUrl:function(t){return window.location.protocol+"//"+window.location.host+t},wasRequestSuccessful:function(t){return t>=200&&t<=299}}),t}]),angular.module("Tasks").service("ICalFactory",[function(){return{new:function(){var t=new ICAL.Component(["vcalendar",[],[]]),e=angular.element("#app").attr("data-appVersion");return t.updatePropertyWithValue("prodid","-//Nextcloud Tasks v"+e),t}}}]),angular.module("Tasks").factory("Loading",[function(){return new(function(){function t(){this.count=0}return t.prototype.increase=function(){return this.count+=1},t.prototype.decrease=function(){return this.count-=1},t.prototype.getCount=function(){return this.count},t.prototype.isLoading=function(){return this.count>0},t}())}]),function(){angular.module("Tasks").factory("_Model",[function(){return function(){function t(){this._data=[],this._dataMap={},this._filterCache={}}return t.prototype.handle=function(t){var e,n,r,s;for(s=[],n=0,r=t.length;n<r;n++)e=t[n],s.push(this.add(e));return s},t.prototype.add=function(t,e){if(null===e&&(e=!0),e&&this._invalidateCache(),angular.isDefined(this._dataMap[t.id]))return this.update(t,e);this._data.push(t),this._dataMap[t.id]=t},t.prototype.update=function(t,e){var n,r,s,a;null===e&&(e=!0),e&&this._invalidateCache(),n=this.getById(t.id),a=[];for(r in t)s=t[r],"id"!==r&&a.push(n[r]=s);return a},t.prototype.getById=function(t){return this._dataMap[t]},t.prototype.getAll=function(){return this._data},t.prototype.removeById=function(t,e){var n,r,s,a,o,i;for(null===e&&(e=!0),i=this._data,n=a=0,o=i.length;a<o;n=++a)if(s=i[n],s.id===t)return this._data.splice(n,1),r=this._dataMap[t],delete this._dataMap[t],e&&this._invalidateCache(),r},t.prototype.clear=function(){return this._data.length=0,this._dataMap={},this._invalidateCache()},t.prototype._invalidateCache=function(){this._filterCache={}},t.prototype.get=function(t){var e;return e=t.hashCode(),angular.isDefined(this._filterCache[e])||(this._filterCache[e]=t.exec(this._data)),this._filterCache[e]},t.prototype.size=function(){return this._data.length},t}()}])}.call(void 0),angular.module("Tasks").factory("Persistence",["Request","Loading","$rootScope","$q","CalendarService",function(t,e,n,r,s){return new(function(){function t(t,e,n,r){this._request=t,this._Loading=e,this._$rootScope=n,this._CalendarService=r}return t.prototype.init=function(){var t=this;return this.deferred=r.defer(),function(){return t.deferred.resolve()},this.getCollections(),this.getSettings(),this.deferred.promise},t.prototype.getCollections=function(t,e){var n,r,s,a=this;return null===e&&(e=!0),t||(t=function(){}),e?(this._Loading.increase(),s=function(e){return t(),a._Loading.decrease()},n=function(t){return a._Loading.decrease()}):(s=function(e){return t()},n=function(t){}),r={onSuccess:s,onFailure:n},this._request.get("/apps/tasks/collections",r)},t.prototype.getSettings=function(t,e){var n,r,s,a=this;return null===e&&(e=!0),t||(t=function(){}),e?(this._Loading.increase(),s=function(e){return t(),a._Loading.decrease()},n=function(t){return a._Loading.decrease()}):(s=function(e){return t()},n=function(t){}),r={onSuccess:s,onFailure:n},this._request.get("/apps/tasks/settings",r)},t.prototype.setVisibility=function(t,e){var n={routeParams:{collectionID:t,visibility:e}};return this._request.post("/apps/tasks/collection/{collectionID}/visibility/{visibility}",n)},t.prototype.setting=function(t,e,n){var r={routeParams:{type:t,setting:e,value:n}};return this._request.post("/apps/tasks/settings/{type}/{setting}/{value}",r)},t}())(t,e,n,s)}]),angular.module("Tasks").factory("Publisher",["CollectionsModel","SettingsModel",function(t,e){return new(function(){function t(t,e){this._$collectionsmodel=t,this._$settingsmodel=e,this._subscriptions={},this.subscribeObjectTo(this._$collectionsmodel,"collections"),this.subscribeObjectTo(this._$settingsmodel,"settings")}return t.prototype.subscribeObjectTo=function(t,e){var n=this._subscriptions;return n[e]||(n[e]=[]),this._subscriptions[e].push(t)},t.prototype.publishDataTo=function(t,e){var n,r,s,a,o;for(n=this._subscriptions[e]||[],r=[],a=0,o=n.length;a<o;a++)s=n[a],r.push(s.handle(t));return r},t}())(t,e)}]),angular.module("Tasks").factory("RandomStringService",function(){return{generate:function(){return Math.random().toString(36).substr(2)}}}),angular.module("Tasks").factory("Request",["$http","Publisher",function(t,e){return new(function(){function t(t,e){this.$http=t,this.publisher=e,this.count=0,this.initialized=!1,this.shelvedRequests=[],this.initialized=!0,this._executeShelvedRequests()}return t.prototype.request=function(t,e){var n,r,s;return null===e&&(e={}),r={routeParams:{},data:{},onSuccess:function(){return{}},onFailure:function(){return{}},config:{}},angular.extend(r,e),this.initialized?(s=OC.generateUrl(t,r.routeParams),n={url:s,data:r.data},angular.extend(n,r.config),"GET"===n.method&&(n.params=n.data),this.$http(n).then(function(t){return function(e){var n,s,a;s=e.data.data;for(n in s)a=s[n],t.publisher.publishDataTo(a,n);return r.onSuccess(e.data,e.status,e.headers,e.config)}}(this)).catch(function(t){return r.onFailure(t.data,t.status,t.headers,t.config)})):void this._shelveRequest(t,r)},t.prototype.post=function(t,e){return null===e&&(e={}),e.config||(e.config={}),e.config.method="POST",this.request(t,e)},t.prototype.get=function(t,e){return null===e&&(e={}),e.config||(e.config={}),e.config.method="GET",this.request(t,e)},t.prototype.put=function(t,e){return null===e&&(e={}),e.config||(e.config={}),e.config.method="PUT",this.request(t,e)},t.prototype.delete=function(t,e){return null===e&&(e={}),e.config||(e.config={}),e.config.method="DELETE",this.request(t,e)},t.prototype._shelveRequest=function(t,e){var n={route:t,data:e};return this.shelvedRequests.push(n)},t.prototype._executeShelvedRequests=function(){var t,e,n,r,s;for(e=this.shelvedRequests,n=[],r=0,s=e.length;r<s;r++)t=e[r],n.push(this.request(t.route,t.data));return n},t}())(t,e)}]),angular.module("Tasks").factory("Status",[function(){return new(function(){function t(){this._$status={addingList:!1,focusTaskInput:!1}}return t.prototype.getStatus=function(){return this._$status},t}())}]),angular.module("Tasks").service("VTodoService",["DavClient","RandomStringService","$timeout",function(t,e,n){var r=this;this.getAll=function(e,n,r){null===n&&(n=!1),null===r&&(r=!1);var s=document.implementation.createDocument("","",null),a=s.createElement("c:calendar-query");a.setAttribute("xmlns:c","urn:ietf:params:xml:ns:caldav"),a.setAttribute("xmlns:d","DAV:"),a.setAttribute("xmlns:a","http://apple.com/ns/ical/"),a.setAttribute("xmlns:o","http://owncloud.org/ns"),s.appendChild(a);var o=s.createElement("d:prop");a.appendChild(o);var i=s.createElement("d:getetag");o.appendChild(i);var u=s.createElement("c:calendar-data");o.appendChild(u);var c=s.createElement("c:filter");a.appendChild(c);var l=s.createElement("c:comp-filter");l.setAttribute("name","VCALENDAR"),c.appendChild(l);var d=s.createElement("c:comp-filter");d.setAttribute("name","VTODO"),l.appendChild(d);var p=s.createElement("c:prop-filter");if(p.setAttribute("name","COMPLETED"),d.appendChild(p),!n){var m=s.createElement("c:is-not-defined");p.appendChild(m)}if(r){var h=s.createElement("c:prop-filter");h.setAttribute("name","RELATED-TO"),d.appendChild(h);var f=s.createElement("c:text-match"),g=s.createTextNode(r.uid);f.appendChild(g),h.appendChild(f)}var y=e.url,k={"Content-Type":"application/xml; charset=utf-8",Depth:1,requesttoken:OC.requestToken},_=a.outerHTML;return t.request("REPORT",y,k,_).then(function(n){if(t.wasRequestSuccessful(n.status)){var r=[];for(var s in n.body){var a=n.body[s],o=a.propStat[0].properties,i=a.href.substr(a.href.lastIndexOf("/")+1),u={calendar:e,properties:o,uri:i};r.push(u)}return r}})},this.get=function(e,n){var r=e.url+n;return t.request("GET",r,{requesttoken:OC.requestToken},"").then(function(t){return{calendar:e,properties:{"{urn:ietf:params:xml:ns:caldav}calendar-data":t.body,"{DAV:}getetag":t.xhr.getResponseHeader("ETag")},uri:n}})},this.create=function(e,n,s){void 0===s&&(s=!0);var a={"Content-Type":"text/calendar; charset=utf-8",requesttoken:OC.requestToken},o=this._generateRandomUri(),i=e.url+o;return t.request("PUT",i,a,n).then(function(n){return t.wasRequestSuccessful(n.status)?!s||r.get(e,o):(console.log(n),!1)})},this.update=function(e){var r=e.calendar.url+e.uri,s={"Content-Type":"text/calendar; charset=utf-8","If-Match":e.etag,requesttoken:OC.requestToken};return n.cancel(e.timers.update),t.request("PUT",r,s,e.data).then(function(n){return e.etag=n.xhr.getResponseHeader("ETag"),t.wasRequestSuccessful(n.status)})},this.delete=function(e){var n=e.calendar.url+e.uri,r={"If-Match":e.etag,requesttoken:OC.requestToken};return t.request("DELETE",n,r,"").then(function(e){return t.wasRequestSuccessful(e.status)})},this._generateRandomUri=function(){var t="Nextcloud-";return t+=e.generate(),t+=e.generate(),t+=".ics"}}]),angular.module("Tasks").factory("ListsBusinessLayer",["ListsModel","Persistence","TasksBusinessLayer","CalendarService",function(t,e,n,r){return new(function(){function e(t,e,n,r){this._$listsmodel=t,this._persistence=e,this._$tasksbusinesslayer=n,this._$calendarservice=r}return e.prototype.init=function(){return this._$calendarservice.getAll().then(function(e){var r,s,a,o;for(o=[],s=0,a=e.length;s<a;s++)r=e[s],t.add(r),o.push(n.getAll(r));return o})},e.prototype.add=function(e,n){return this._$calendarservice.create(e,n,["vtodo"]).then(function(e){return t.add(e),e})},e.prototype.delete=function(e){return this._$calendarservice.delete(e).then(function(){return t.delete(e)})},e.prototype.rename=function(t){this._$calendarservice.update(t).then(function(t){t.dropPreviousState()})},e}())(t,e,n,r)}]),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};angular.module("Tasks").factory("SearchBusinessLayer",["ListsModel","Persistence","TasksModel","$rootScope","$routeParams","$location",function(n,r,s,a,o,i){return new(function(){function n(e,n,r,s,a,o){this._$listsmodel=e,this._persistence=n,this._$tasksmodel=r,this._$rootScope=s,this._$routeparams=a,this._$location=o,this.getFilter=t(this.getFilter,this),this.setFilter=t(this.setFilter,this),this.attach=t(this.attach,this),this.initialize(),this._$searchString=""}return n.prototype.attach=function(t){var e=this;return t.setFilter("tasks",function(t){return e._$rootScope.$apply(function(){return e.setFilter(t)})}),t.setRenderer("task",this.renderTaskResult.bind(this)),t.setHandler("task",this.handleTaskClick.bind(this))},n.prototype.setFilter=function(t){this._$searchString=t},n.prototype.getFilter=function(){return this._$searchString},n.prototype.initialize=function(){var t=this;return this.handleTaskClick=function(e,n,r){return t._$location.path("/lists/"+n.calendarid+"/tasks/"+n.id)},this.renderTaskResult=function(n,r){var s;return t._$tasksmodel.filterTasks(r,t._$routeparams.listID)&&t._$tasksmodel.isLoaded(r)?null:(s=e("div.task-item.template"),s=s.clone(),n=e('<tr class="result"></tr>').append(s.removeClass("template")),n.data("result",r),n.find("span.title").text(r.name),r.starred&&n.find("span.task-star").addClass("task-starred"),r.completed&&(n.find("div.task-item").addClass("done"),n.find("span.task-checkbox").addClass("svg-checkmark")),r.complete&&n.find("div.percentdone").css({width:r.complete+"%","background-color":""+t._$listsmodel.getColor(r.calendarid)}),r.note&&n.find("div.title-wrapper").addClass("attachment"),n)},OC.Plugins.register("OCA.Search",this)},n}())(n,r,s,a,o,i)}])}.call(void 0),angular.module("Tasks").factory("SettingsBusinessLayer",["Persistence","SettingsModel",function(t,e){return new(function(){function t(t,e){this._persistence=t,this._$settingsmodel=e}return t.prototype.updateModel=function(){var t;return t=function(){},this._persistence.getCollections(t,!0)},t.prototype.setVisibility=function(t,e){return this._persistence.setVisibility(t,e)},t.prototype.toggle=function(t,e){this._$settingsmodel.toggle(t,e);var n=this._$settingsmodel.getById(t)[e];return this._persistence.setting(t,e,+n)},t.prototype.set=function(t,e,n){return this._persistence.setting(t,e,n)},t}())(t,e)}]),angular.module("Tasks").factory("TasksBusinessLayer",["TasksModel","Persistence","VTodoService","VTodo","$timeout",function(t,e,n,r,s){return new(function(){function e(t,e,n,r,s){this._$tasksmodel=t,this._persistence=e,this._$vtodoservice=n}return e.prototype.getAll=function(e,n,s){return this._$vtodoservice.getAll(e,n,s).then(function(e){var n,s,a,o;for(o=[],s=0,a=e.length;s<a;s++){n=e[s];var i=new r(n.calendar,n.properties,n.uri);o.push(t.ad(i))}return o})},e.prototype.add=function(e){return this._$vtodoservice.create(e.calendar,e.data).then(function(e){var n=new r(e.calendar,e.properties,e.uri);return t.ad(n),n})},e.prototype.getTask=function(e,n){return this._$vtodoservice.get(e,n).then(function(e){return t.ad(e),e})},e.prototype.setPriority=function(t,e){t.calendar.writable&&(t.priority=e,this.doUpdate(t))},e.prototype.setPercentComplete=function(t,e){t.calendar.writable&&(e<100?this.uncompleteParents(t.related):this.completeChildren(t),t.complete=e,this.triggerUpdate(t))},e.prototype.triggerUpdate=function(t,e){e||(e=1e3),t.timers.update&&s.cancel(t.timers.update),t.timers.update=s(function(t){n.update(t)},e,!0,t)},e.prototype.doUpdate=function(t){return this._$vtodoservice.update(t)},e.prototype.completeChildren=function(t){var e,n,r,s=this._$tasksmodel.getChildren(t),a=[];for(n=0,r=s.length;n<r;n++)e=s[n],a.push(this.setPercentComplete(e,100));return a},e.prototype.uncompleteParents=function(t){if(t){var e=this._$tasksmodel.getByUid(t);if(e.completed)return this.setPercentComplete(e,0)}},e.prototype.setHideSubtasks=function(t,e){t.hideSubtasks=e,t.calendar.writable&&this.doUpdate(t)},e.prototype.setHideCompletedSubtasks=function(t,e){t.hideCompletedSubtasks=e,t.calendar.writable&&this.doUpdate(t)},e.prototype.deleteTask=function(e){var n,r,s,a;for(r=this._$tasksmodel.getChildren(e),s=0,a=r.length;s<a;s++)n=r[s],this.deleteTask(n);return this._$vtodoservice.delete(e).then(function(){return t.delete(e)})},e.prototype.momentToICALTime=function(t,e){return e?ICAL.Time.fromDateString(t.format("YYYY-MM-DD")):ICAL.Time.fromDateTimeString(t.format("YYYY-MM-DDTHH:mm:ss"))},e.prototype.initDueDate=function(t){var e=moment(t.start,"YYYY-MM-DDTHH:mm:ss");if(!moment(t.due,"YYYY-MM-DDTHH:mm:ss").isValid()){var n=e.isAfter()?e:moment();return t.allDay?n.startOf("day").add(1,"d"):n.startOf("hour").add(1,"h"),this.setDue(t,n,"all")}},e.prototype.setDue=function(t,e,n){null===n&&(n="day");var r=t.allDay,s=moment(t.start,"YYYY-MM-DDTHH:mm:ss"),a=moment(t.due,"YYYY-MM-DDTHH:mm:ss"),o=a.clone();if("day"===n)moment(o).isValid()?o.year(e.year()).month(e.month()).date(e.date()):o=e.add(12,"h");else if("time"===n)moment(o).isValid()?o.hour(e.hour()).minute(e.minute()):o=e;else{if("all"!==n)return;o=e}(o.isBefore(s)||o.isSame(s))&&(s.subtract(a.diff(o),"ms"),t.start=this.momentToICALTime(s,r)),t.due=this.momentToICALTime(o,r),this.doUpdate(t)},e.prototype.deleteDueDate=function(t){t.due=null,this.doUpdate(t)},e.prototype.initStartDate=function(t){var e=moment(t.start,"YYYY-MM-DDTHH:mm:ss"),n=moment(t.due,"YYYY-MM-DDTHH:mm:ss");if(!e.isValid()){var r=moment().add(1,"h");return n.isBefore(r)&&(r=n.subtract(1,"m")),r.startOf(t.allDay?"day":"hour"),this.setStart(t,r,"all")}},e.prototype.setStart=function(t,e,n){null===n&&(n="day");var r=t.allDay,s=moment(t.due,"YYYY-MM-DDTHH:mm:ss"),a=moment(t.start,"YYYY-MM-DDTHH:mm:ss"),o=a.clone();if("day"===n)moment(o).isValid()?o.year(e.year()).month(e.month()).date(e.date()):o=e.add(12,"h");else if("time"===n)moment(o).isValid()?o.hour(e.hour()).minute(e.minute()):o=e;else{if("all"!==n)return;o=e}(o.isAfter(s)||o.isSame(s))&&(s.add(o.diff(a),"ms"),t.due=this.momentToICALTime(s,r)),t.start=this.momentToICALTime(o,r),this.doUpdate(t)},e.prototype.deleteStartDate=function(t){t.start=null,this.doUpdate(t)},e.prototype.setAllDay=function(t,e){if(t.allDay=e,e){var n=moment(t.due,"YYYY-MM-DDTHH:mm:ss"),r=moment(t.start,"YYYY-MM-DDTHH:mm:ss");(r.isAfter(n)||r.isSame(n))&&(r=moment(n).subtract(1,"day"),t.start=this.momentToICALTime(r,e))}this.doUpdate(t)},e.prototype.initReminder=function(t){var e,n;if(!this.checkReminderDate(t))return n=this._$tasksmodel.getById(t),n.reminder={type:"DURATION",action:"DISPLAY",duration:{token:"week",week:0,day:0,hour:0,minute:0,second:0,params:{invert:!0}}},moment(n.start,"YYYYMMDDTHHmmss").isValid()?(e=n.reminder.duration.params,e.related="START",e.id="10"):moment(n.due,"YYYYMMDDTHHmmss").isValid()?(e=n.reminder.duration.params,e.related="END",e.id="11"):(n.reminder.type="DATE-TIME",n.reminder.date=moment().startOf("hour").add(1,"h").format("YYYYMMDDTHHmmss")),this.setReminder(t)},e.prototype.setReminderDate=function(t,e,n){var r,s,a;if(null===n&&(n="day"),s=this._$tasksmodel.getById(t).reminder,r={type:"DATE-TIME",action:"DISPLAY",duration:null},"day"===n)this.checkReminderDate(t)||null===s?(a=moment(s.date,"YYYYMMDDTHHmmss"),r.action=s.action,a.isValid()&&"DATE-TIME"===s.type?a.year(e.year()).month(e.month()).date(e.date()):a=e.add(12,"h")):a=e.add(12,"h");else{if("time"!==n)return;this.checkReminderDate(t)||null===s?(a=moment(s.date,"YYYYMMDDTHHmmss"),r.action=s.action,a.isValid()&&"DATE-TIME"===s.type?a.hour(e.hour()).minute(e.minute()):a=e):a=e}return r.date=a.format("YYYYMMDDTHHmmss"),this._$tasksmodel.setReminder(t,r),this._persistence.setReminder(t,r)},e.prototype.setReminder=function(t){var e;if(this.checkReminderDate(t))return e=this._$tasksmodel.getById(t).reminder,this._persistence.setReminder(t,e)},e.prototype.checkReminderDate=function(t){var e,n,r,s,a,o,i,u,c;if(u=this._$tasksmodel.getById(t),null!==(o=u.reminder)&&"DURATION"===o.type){if(!o.duration)return!1;if("START"===o.duration.params.related)c="start";else{if("END"!==o.duration.params.related)return!1;c="due"}n=moment(u[c],"YYYYMMDDTHHmmss"),r=o.duration,e={w:r.week,d:r.day,h:r.hour,m:r.minute,s:r.second},n=r.params.invert?n.subtract(e):n.add(e),u.reminder.date=n.format("YYYYMMDDTHHmmss")}else{if(null===o||"DATE-TIME"!==o.type)return!1;if(r=o.duration,n=moment(o.date,"YYYYMMDDTHHmmss"),!n.isValid())return!1;if(r)a="START"===r.params.related?moment(u.start,"YYYYMMDDTHHmmss"):moment(u.due,"YYYYMMDDTHHmmss"),i=this.secondsToSegments(n.diff(a,"seconds")),r.params.invert=i.invert,r.token="week",r.week=i.week,r.day=i.day,r.hour=i.hour,r.minute=i.minute,r.second=i.second;else{if(u.start)a=moment(u.start,"YYYYMMDDTHHmmss"),s="START",e=0;else{if(!u.due)return!0;a=moment(u.due,"YYYYMMDDTHHmmss"),s="END",e=1}i=this.secondsToSegments(n.diff(a,"seconds")),o.duration={token:"week",params:{related:s,invert:i.invert,id:+i.invert+""+e},week:i.week,day:i.day,hour:i.hour,minute:i.minute,second:i.second}}}return!0},e.prototype.secondsToSegments=function(t){var e,n,r,s,a;return t<0?(t*=-1,r=!0):r=!1,a=Math.floor(t/604800),t-=604800*a,e=Math.floor(t/86400),t-=86400*e,n=Math.floor(t/3600),t-=3600*n,s=Math.floor(t/60),t-=60*s,{week:a,day:e,hour:n,minute:s,second:t,invert:r}},e.prototype.deleteReminderDate=function(t){return this._$tasksmodel.setReminder(t,null),this._persistence.setReminder(t,!1)},e.prototype.changeCalendar=function(s,a){if(s.calendar!==a&&a.writable){var o=angular.copy(s);if(o.calendar=a,!t.hasNoParent(o)){t.getByUid(o.related).calendar.uri!==o.calendar.uri&&(o.related=null,e.prototype.setPercentComplete(o,0))}return n.create(a,o.data).then(function(a){var i=new r(a.calendar,a.properties,a.uri);return t.ad(i),n.delete(s).then(function(){t.delete(s);var n,r,a,i=[],u=t.getChildren(o);for(n=0,r=u.length;n<r;n++)a=u[n],a.calendar.uri!==o.calendar.uri&&i.push(e.prototype.changeCalendar(a,o.calendar));return Promise.all(i)})})}return Promise.resolve(!0)},e.prototype.changeCollection=function(t,e){var n=this._$tasksmodel.getById(t);switch(e){case"starred":return n.priority=9,this.doUpdate(n);case"completed":return this.setPercentComplete(n,100);case"uncompleted":return!!n.completed&&this.setPercentComplete(n,0);case"today":return this.setDue(n,moment().startOf("day").add(12,"h"),"all");case"week":case"all":default:return!1}},e.prototype.changeParent=function(t,e){e.calendar.writable&&(t.related=e.uid,e.hideSubtasks=0,e.completed&&!t.completed?this.setPercentComplete(e,0):this.doUpdate(e),e.calendar.uri!==t.calendar.uri?this.changeCalendar(t,e.calendar):this.doUpdate(t))},e.prototype.makeRootTask=function(t,e,n){if(e.writable){var r=[];return t.related=null,"completed"!==n&&t.completed&&(t.complete=0),r.push(this.changeCollection(t.uri,n)),t.calendar!==e?r.push(this.changeCalendar(t,e)):r.push(this.doUpdate(t)),r}},e.prototype.addComment=function(t,e,n){var r;return e||(e=function(){}),n||(n=function(){}),
-this._$tasksmodel.addComment(t),r=function(t){return"error"===t.status?n():e(t.data)},this._persistence.addComment(t,r)},e.prototype.deleteComment=function(t,e){return this._$tasksmodel.deleteComment(t,e),this._persistence.deleteComment(t,e)},e}())(t,e,n,r,s)}]),angular.module("Tasks").factory("Calendar",["$rootScope","$filter","$window",function(e,n,r){function s(e,n,r){n.color=n["{http://apple.com/ns/ical/}calendar-color"],void 0!==n.color?9===n.color.length&&(n.color=n.color.substr(0,7)):n.color="#1d2d44",angular.extend(this,{_propertiesBackup:{},_properties:{url:e,uri:r,enabled:"1"===n["{http://owncloud.org/ns}calendar-enabled"],displayname:n["{DAV:}displayname"]||t("tasks","Unnamed"),color:n.color,order:parseInt(n["{http://apple.com/ns/ical/}calendar-order"])||0,components:{vevent:!1,vjournal:!1,vtodo:!1},writable:n.canWrite,shareable:n.canWrite,sharedWith:{users:[],groups:[]},owner:"",loadedCompleted:!1},_updatedProperties:[]}),this._propertiesBackup=angular.copy(this._properties);for(var s=n["{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set"],a=0;a<s.length;a++){var o=s[a].attributes.getNamedItem("name").textContent.toLowerCase();this._properties.components.hasOwnProperty(o)&&(this._properties.components[o]=!0)}var i=n["{http://owncloud.org/ns}invite"];if(void 0!==i)for(var u=0;u<i.length;u++){var c=i[u].getElementsByTagNameNS("DAV:","href");if(0!==c.length){c=c[0].textContent;var l=i[u].getElementsByTagNameNS("http://owncloud.org/ns","access");if(0!==l.length){l=l[0];var d=l.getElementsByTagNameNS("http://owncloud.org/ns","read-write");d=0!==d.length,c.startsWith("principal:principals/users/")?this._properties.sharedWith.users.push({id:c.substr(27),displayname:c.substr(27),writable:d}):c.startsWith("principal:principals/groups/")&&this._properties.sharedWith.groups.push({id:c.substr(28),displayname:c.substr(28),writable:d})}}}var p=n["{DAV:}owner"];void 0!==p&&0!==p.length&&(p=p[0].textContent.slice(0,-1),p.startsWith("/remote.php/dav/principals/users/")&&(this._properties.owner=p.substr(33)))}return s.prototype={get url(){return this._properties.url},get caldav(){return r.location.origin+this.url},get exportUrl(){var t=this.url;return"/"===t.slice(t.length-1)&&(t=t.slice(0,t.length-1)),t+="?export"},get enabled(){return this._properties.enabled},get uri(){return this._properties.uri},get components(){return this._properties.components},set enabled(t){this._properties.enabled=t,this._setUpdated("enabled")},get displayname(){return this._properties.displayname},set displayname(t){this._properties.displayname=t,this._setUpdated("displayname")},get color(){return this._properties.color},set color(t){this._properties.color=t,this._setUpdated("color")},get sharedWith(){return this._properties.sharedWith},set sharedWith(t){this._properties.sharedWith=t},get textColor(){var t,e=this.color;switch(e.length){case 4:return t=e.match(/^#([0-9a-f]{3})$/i)[1],t?this._generateTextColor(17*parseInt(t.charAt(0),16),17*parseInt(t.charAt(1),16),17*parseInt(t.charAt(2),16)):"#fff";case 7:case 9:var n=new RegExp("^#([0-9a-f]{"+(e.length-1)+"})$","i");return t=e.match(n)[1],t?this._generateTextColor(parseInt(t.substr(0,2),16),parseInt(t.substr(2,2),16),parseInt(t.substr(4,2),16)):"#fff";default:return"#fff"}},get order(){return this._properties.order},set order(t){this._properties.order=t,this._setUpdated("order")},get writable(){return this._properties.writable},get shareable(){return this._properties.shareable},get owner(){return this._properties.owner},get loadedCompleted(){return this._properties.loadedCompleted},set loadedCompleted(t){this._properties.loadedCompleted=t},_setUpdated:function(t){-1===this._updatedProperties.indexOf(t)&&this._updatedProperties.push(t)},get updatedProperties(){return this._updatedProperties},resetUpdatedProperties:function(){this._updatedProperties=[]},prepareUpdate:function(){this._propertiesBackup=angular.copy(this._properties)},resetToPreviousState:function(){this._properties=angular.copy(this._propertiesBackup),this._propertiesBackup={}},dropPreviousState:function(){this._propertiesBackup={}},toggleSharesEditor:function(){this.list.editingShares=!this.list.editingShares},_generateTextColor:function(t,e,n){return(299*t+587*e+114*n)/1e3>130?"#000000":"#FAFAFA"}},s}]),function(){var t={}.hasOwnProperty,e=function(e,n){function r(){this.constructor=e}for(var s in n)t.call(n,s)&&(e[s]=n[s]);return r.prototype=n.prototype,e.prototype=new r,e.__super__=n.prototype,e};angular.module("Tasks").factory("CollectionsModel",["TasksModel","_Model",function(t,n){return new(function(t){function n(t){this._$tasksmodel=t,this._nameCache={},n.__super__.constructor.call(this)}return e(n,t),n.prototype.add=function(t,e){if(null===e&&(e=!0),this._nameCache[t.displayname]=t,angular.isDefined(t.id))return n.__super__.add.call(this,t,e)},n.prototype.getCount=function(t,e){var n,r,s,a,o;for(null===e&&(e=""),n=0,s=this._$tasksmodel.filteredTasks(e),a=0,o=s.length;a<o;a++)r=s[a],n+=this._$tasksmodel.filterTasks(r,t)&&!r.related;return n},n}(n))(t)}])}.call(void 0),function(){var t={}.hasOwnProperty,e=function(e,n){function r(){this.constructor=e}for(var s in n)t.call(n,s)&&(e[s]=n[s]);return r.prototype=n.prototype,e.prototype=new r,e.__super__=n.prototype,e};angular.module("Tasks").factory("ListsModel",["TasksModel","_Model",function(t,n){return new(function(t){function n(t){this._$tasksmodel=t,this._tmpUriCache={},this._data=[],this._dataMap={},this._filterCache={}}return e(n,t),n.prototype.add=function(t,e){if(null===e&&(e=!0),angular.isDefined(t.uri)&&angular.isDefined(this.getByUri(t.uri)))return this.update(t,e);angular.isDefined(t.uri)&&(e&&this._invalidateCache(),angular.isDefined(this._dataMap[t.uri])||(this._data.push(t),this._dataMap[t.uri]=t))},n.prototype.getByUri=function(t){return this._dataMap[t]},n.prototype.update=function(t,e){var r;return null===e&&(e=!0),r=this._tmpIdCache[t.tmpID],angular.isDefined(t.id)&&angular.isDefined(r)&&angular.isUndefined(r.id)&&(r.id=t.id,this._dataMap[t.id]=r),t.void=!1,n.__super__.update.call(this,t,e)},n.prototype.delete=function(t,e){var n,r,s,a,o;for(null===e&&(e=!0),o=this._data,n=s=0,a=o.length;s<a;n=++s)if(o[n]===t)return this._data.splice(n,1),r=this._dataMap[t.uri],delete this._dataMap[t.uri],e&&this._invalidateCache(),r},n.prototype.getStandardList=function(){var t;if(this.size())return t=this.getAll(),t[0]},n.prototype.isNameAlreadyTaken=function(t,e){var n,r,s,a,o;for(r=this.getAll(),s=!1,a=0,o=r.length;a<o;a++)n=r[a],n.displayname===t&&n.uri!==e&&(s=!0);return s},n.prototype.getCount=function(t,e,n){var r,s,a,o,i;for(null===n&&(n=""),r=0,a=this._$tasksmodel.filteredTasks(n),o=0,i=a.length;o<i;o++)s=a[o],r+=this._$tasksmodel.filterTasks(s,e)&&s.calendar.uri===t&&!s.related;return r},n.prototype.loadedCompleted=function(t){return!angular.isUndefined(this.getById(t))&&this.getById(t).loadedCompleted},n.prototype.setLoadedCompleted=function(t){this.getById(t).loadedCompleted=!0},n.prototype.getColor=function(t){return angular.isUndefined(this.getById(t))?"#CCCCCC":this.getById(t).calendarcolor},n.prototype.getName=function(t){return angular.isUndefined(this.getById(t))?"":this.getById(t).displayname},n}(n))(t)}])}.call(void 0),function(){var t={}.hasOwnProperty,e=function(e,n){function r(){this.constructor=e}for(var s in n)t.call(n,s)&&(e[s]=n[s]);return r.prototype=n.prototype,e.prototype=new r,e.__super__=n.prototype,e};angular.module("Tasks").factory("SettingsModel",["_Model",function(t){return new(function(t){function n(){this._nameCache={},n.__super__.constructor.call(this)}return e(n,t),n.prototype.add=function(t,e){return null===e&&(e=!0),this._nameCache[t.displayname]=t,angular.isDefined(t.id)?n.__super__.add.call(this,t,e):this._data.push(t)},n.prototype.toggle=function(t,e){var n;n=this.getById(t),this.getById(t)[e]=!n[e]},n}(t))}])}.call(void 0),function(){var t={}.hasOwnProperty,e=function(e,n){function r(){this.constructor=e}for(var s in n)t.call(n,s)&&(e[s]=n[s]);return r.prototype=n.prototype,e.prototype=new r,e.__super__=n.prototype,e},n=[].indexOf||function(t){for(var e=0,n=this.length;e<n;e++)if(e in this&&this[e]===t)return e;return-1};angular.module("Tasks").factory("TasksModel",["_Model",function(t){return new(function(t){function r(){this._tmpIdCache={},r.__super__.constructor.call(this)}return e(r,t),r.prototype.ad=function(t,e){if(null===e&&(e=!0),angular.isDefined(t.uri)&&angular.isDefined(this.getByUri(t.uri)))return this.update(t,e);angular.isDefined(t.uri)&&(e&&this._invalidateCache(),angular.isDefined(this._dataMap[t.uri])||(this._data.push(t),this._dataMap[t.uri]=t))},r.prototype.getByUri=function(t){return this._dataMap[t]},r.prototype.update=function(t,e){var n;return null===e&&(e=!0),e&&this._invalidateCache(),n=this.getByUri(t.uri),n.components=t.components,n.components.toString(),n},r.prototype.removeById=function(t){return r.__super__.removeById.call(this,t)},r.prototype.delete=function(t,e){var n,r,s,a,o;for(null===e&&(e=!0),o=this._data,n=s=0,a=o.length;s<a;n=++s)if(o[n]===t)return this._data.splice(n,1),r=this._dataMap[t.uri],delete this._dataMap[t.uri],e&&this._invalidateCache(),r},r.prototype.removeByList=function(t){var e,n,r,s,a;s=this.getAll(),r=[];for(var o=0,i=s.length;o<i;o++)n=s[o],n.calendarid===t&&r.push(n.id);a=[];for(var u=0,c=r.length;u<c;u++)e=r[u],a.push(this.removeById(e));return a},r.prototype.taskAtDay=function(t,e){var n,r,s,a,o;if(a=moment(t.start,"YYYYMMDDTHHmmss"),r=moment(t.due,"YYYYMMDDTHHmmss"),a.isValid()&&!r.isValid()){if(n=a.diff(moment().startOf("day"),"days",!0),!e&&n<e+1)return!0;if(n<e+1&&n>=e)return!0}if(r.isValid()&&!a.isValid()){if(n=r.diff(moment().startOf("day"),"days",!0),!e&&n<e+1)return!0;if(n<e+1&&n>=e)return!0}if(a.isValid()&&r.isValid()){if(o=a.diff(moment().startOf("day"),"days",!0),s=r.diff(moment().startOf("day"),"days",!0),!e&&(o<e+1||s<e+1))return!0;if(o<e+1&&o>=e&&s>=e)return!0;if(s<e+1&&s>=e&&o>=e)return!0}return!1},r.prototype.isLoaded=function(t){return!!this.getById(t.id)},r.prototype.hasSubtasks=function(t){for(var e=this.getAll(),n=0,r=e.length;n<r;n++){if(e[n].related===t)return!0}return!1},r.prototype.hasCompletedSubtasks=function(t){for(var e=this.getAll(),n=0,r=e.length;n<r;n++){var s=e[n];if(s.related===t&&s.completed)return!0}return!1},r.prototype.hasNoParent=function(t){if(t.related){for(var e=this.getAll(),n=0,r=e.length;n<r;n++){var s=e[n];if(t.related===s.uid&&t!==s)return!1}return!0}return!0},r.prototype.getIdByUid=function(t){for(var e=this.getAll(),n=0,r=e.length;n<r;n++){var s=e[n];if(s.uid===t)return s.id}return!1},r.prototype.getByUid=function(t){for(var e=this.getAll(),n=0,r=e.length;n<r;n++){var s=e[n];if(s.uid===t)return s}return null},r.prototype.getChildren=function(t){var e,n,r;r=this.getAll(),e=[];for(var s=0,a=r.length;s<a;s++)n=r[s],n.related===t.uid&&n!==t&&e.push(n);return e},r.prototype.getDescendantIDs=function(t){var e,n,r;n=this.getChildren(t),r=[];for(var s=0,a=n.length;s<a;s++)e=n[s],r=r.concat(e.uri),r=r.concat(this.getDescendantIDs(e));return r},r.prototype.filterTasks=function(t,e){switch(e){case"completed":return!0===t.completed;case"all":return!1===t.completed;case"current":return!1===t.completed&&this.current(t.start,t.due);case"starred":return!1===t.completed&&t.priority>5;case"today":return!1===t.completed&&(this.today(t.start)||this.today(t.due));case"week":return!1===t.completed&&(this.week(t.start)||this.week(t.due));default:return""+t.calendar.uri==""+e}},r.prototype.filteredTasks=function(t){var e,n,r,s,a;if(r=[],a=this.getAll(),t){for(var o=0,i=a.length;o<i;o++)if(s=a[o],this.filterTasksByString(s,t)){if(this.objectExists(s,r))continue;r.push(s),n=this.getIdByUid(s.related),e=this.getAncestor(n,r),e&&(r=r.concat(e))}}else r=a;return r},r.prototype.objectExists=function(t,e){for(var n=0,r=e.length;n<r;n++){if(e[n].id===t.id)return!0}return!1},r.prototype.filterTasksByString=function(t,e){var r,s,a;s=["name","note","location","categories","comments"],e=e.toLowerCase();for(r in t)if(a=t[r],n.call(s,r)>=0)if("comments"===r){if(this.searchComments(t.comments,e))return!0}else if("categories"===r){if(this.searchCategories(t.categories,e))return!0}else if(-1!==a.toLowerCase().indexOf(e))return!0;return!1},r.prototype.searchComments=function(t,e){for(var n=0,r=t.length;n<r;n++){if(-1!==t[n].comment.toLowerCase().indexOf(e))return!0}return!1},r.prototype.searchCategories=function(t,e){for(var n=0,r=t.length;n<r;n++){if(-1!==t[n].toLowerCase().indexOf(e))return!0}return!1},r.prototype.setReminder=function(t,e){return this.update({id:t,reminder:e})},r.prototype.overdue=function(t){return moment(t,"YYYYMMDDTHHmmss").isValid()&&moment(t,"YYYYMMDDTHHmmss").diff(moment())<0},r.prototype.due=function(t){return moment(t,"YYYYMMDDTHHmmss").isValid()},r.prototype.today=function(t){return moment(t,"YYYYMMDDTHHmmss").isValid()&&moment(t,"YYYYMMDDTHHmmss").diff(moment().startOf("day"),"days",!0)<1},r.prototype.week=function(t){return moment(t,"YYYYMMDDTHHmmss").isValid()&&moment(t,"YYYYMMDDTHHmmss").diff(moment().startOf("day"),"days",!0)<7},r.prototype.current=function(t,e){return!moment(t,"YYYYMMDDTHHmmss").isValid()||moment(t,"YYYYMMDDTHHmmss").diff(moment(),"days",!0)<0||moment(e,"YYYYMMDDTHHmmss").diff(moment(),"days",!0)<0},r.prototype.addComment=function(t){var e;e=this.getById(t.taskID),e.comments?e.comments.push(t):e.comments=[t]},r.prototype.updateComment=function(t){var e,n,r,s,a,o,i;for(r=this.getById(t.taskID),n=0,o=r.comments,i=[],s=0,a=o.length;s<a;s++){if(e=o[s],e.tmpID===t.tmpID){r.comments[n]=t;break}i.push(n++)}return i},r.prototype.deleteComment=function(t,e){var n,r,s,a,o,i,u;for(s=this.getById(t),r=0,i=s.comments,u=[],a=0,o=i.length;a<o;a++){if(n=i[a],n.id===e){s.comments.splice(r,1);break}u.push(r++)}return u},r}(t))}])}.call(void 0),angular.module("Tasks").factory("VTodo",["$filter","ICalFactory","RandomStringService",function(t,e,n){function r(t,e,n){if(angular.extend(this,{calendar:t,data:e["{urn:ietf:params:xml:ns:caldav}calendar-data"],uri:n,etag:e["{DAV:}getetag"]||null,timers:[],loaded:!1}),this.jCal=ICAL.parse(this.data),this.components=new ICAL.Component(this.jCal),0===this.components.jCal.length)throw"invalid calendar"}return r.prototype={get summary(){return this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("summary")},set summary(t){this.components.getAllSubcomponents("vtodo")[0].updatePropertyWithValue("summary",t),this.updateLastModified(),this.data=this.components.toString()},get priority(){return(10-this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("priority"))%10},set priority(t){this.components.getAllSubcomponents("vtodo")[0].updatePropertyWithValue("priority",(10-t)%10),this.updateLastModified(),this.data=this.components.toString()},get complete(){return this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("percent-complete")||0},set complete(t){this.components.getAllSubcomponents("vtodo")[0].updatePropertyWithValue("percent-complete",t),this.updateLastModified(),this.data=this.components.toString(),t<100?(this.completed=null,this.status=0===t?"NEEDS-ACTION":"IN-PROCESS"):(this.completed=ICAL.Time.now(),this.status="COMPLETED")},get completed(){return!!this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("completed")},set completed(t){var e=this.components.getAllSubcomponents("vtodo");t?e[0].updatePropertyWithValue("completed",t):e[0].removeProperty("completed"),this.updateLastModified(),this.data=this.components.toString()},get completed_date(){var t=this.components.getAllSubcomponents("vtodo"),e=t[0].getFirstPropertyValue("completed");return e?e.toJSDate():null},get status(){return this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("status")},set status(t){this.components.getAllSubcomponents("vtodo")[0].updatePropertyWithValue("status",t),this.updateLastModified(),this.data=this.components.toString()},get note(){return this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("description")||""},set note(t){this.components.getAllSubcomponents("vtodo")[0].updatePropertyWithValue("description",t),this.updateLastModified(),this.data=this.components.toString()},get uid(){return this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("uid")||""},get related(){return this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("related-to")||null},set related(t){var e=this.components.getAllSubcomponents("vtodo");t?e[0].updatePropertyWithValue("related-to",t):e[0].removeProperty("related-to"),this.updateLastModified(),this.data=this.components.toString()},get hideSubtasks(){return+this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("x-oc-hidesubtasks")||0},set hideSubtasks(t){this.components.getAllSubcomponents("vtodo")[0].updatePropertyWithValue("x-oc-hidesubtasks",+t),this.updateLastModified(),this.data=this.components.toString()},get hideCompletedSubtasks(){return+this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("x-oc-hidecompletedsubtasks")||0},set hideCompletedSubtasks(t){this.components.getAllSubcomponents("vtodo")[0].updatePropertyWithValue("x-oc-hidecompletedsubtasks",+t),this.updateLastModified(),this.data=this.components.toString()},get reminder(){return null},get categories(){var t=this.components.getAllSubcomponents("vtodo"),e=t[0].getFirstProperty("categories");return e?e.getValues():[]},set categories(t){var e=this.components.getAllSubcomponents("vtodo"),n=e[0].getFirstProperty("categories");if(t.length>0)if(n)n.setValues(t);else{var r=new ICAL.Property("categories");r.setValues(t),n=e[0].addProperty(r)}else e[0].removeProperty("categories");this.updateLastModified(),this.data=this.components.toString()},get start(){return this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("dtstart")},set start(t){var e=this.components.getAllSubcomponents("vtodo");t?e[0].updatePropertyWithValue("dtstart",t):e[0].removeProperty("dtstart"),this.updateLastModified(),this.data=this.components.toString()},get due(){return this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("due")},set due(t){var e=this.components.getAllSubcomponents("vtodo");t?e[0].updatePropertyWithValue("due",t):e[0].removeProperty("due"),this.updateLastModified(),this.data=this.components.toString()},get allDay(){var t=this.components.getAllSubcomponents("vtodo"),e=t[0].getFirstPropertyValue("dtstart"),n=t[0].getFirstPropertyValue("due"),r=n||e;return null!==r&&r.isDate},set allDay(t){var e=this.components.getAllSubcomponents("vtodo"),n=e[0].getFirstPropertyValue("dtstart");n&&(n.isDate=t,e[0].updatePropertyWithValue("dtstart",n));var r=e[0].getFirstPropertyValue("due");r&&(r.isDate=t,e[0].updatePropertyWithValue("due",r)),this.updateLastModified(),this.data=this.components.toString()},get comments(){return null},get loadedCompleted(){return this.loaded},set loadedCompleted(t){this.loaded=t},updateLastModified:function(){var t=this.components.getAllSubcomponents("vtodo");t[0].updatePropertyWithValue("last-modified",ICAL.Time.now()),t[0].updatePropertyWithValue("dtstamp",ICAL.Time.now())}},r.create=function(t){var s=e.new(),a=new ICAL.Component("vtodo");return s.addSubcomponent(a),a.updatePropertyWithValue("created",ICAL.Time.now()),a.updatePropertyWithValue("dtstamp",ICAL.Time.now()),a.updatePropertyWithValue("last-modified",ICAL.Time.now()),a.updatePropertyWithValue("uid",n.generate()),a.updatePropertyWithValue("summary",t.summary),a.updatePropertyWithValue("priority",t.priority),a.updatePropertyWithValue("percent-complete",t.complete),a.updatePropertyWithValue("x-oc-hidesubtasks",0),t.related&&a.updatePropertyWithValue("related-to",t.related),t.note&&a.updatePropertyWithValue("description",t.note),t.due&&a.updatePropertyWithValue("due",t.due),t.start&&a.updatePropertyWithValue("dtstart",t.start),new r(t.calendar,{"{urn:ietf:params:xml:ns:caldav}calendar-data":s.toString(),"{DAV:}getetag":null},null)},r}])}(jQuery,oc_requesttoken);
+!function(e,r,s){"use strict";angular.module("Tasks",["ngRoute","ngAnimate","ui.select","ngSanitize","dndLists"]).config(["$provide","$routeProvider","$interpolateProvider","$httpProvider",function(t,e,n,s){t.value("Config",{markReadTimeout:500,taskUpdateInterval:6e5}),s.defaults.headers.common.requesttoken=r,e.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({redirectTo:"/collections/all"})}]),angular.module("Tasks").run(["$document","$rootScope","Config","$timeout","ListsBusinessLayer","TasksBusinessLayer","SearchBusinessLayer",function(e,n,r,s,a,o,i){var u,c=!1;return(u=function(){var t;return t=function(){return s(u,r.taskUpdateInterval)},c=!0,t()}).call(),OCA.Search.tasks=i,e.click(function(t){n.$broadcast("documentClicked",t)}),moment.locale("details",{calendar:{lastDay:"["+t("tasks","Due yesterday")+"], HH:mm",sameDay:"["+t("tasks","Due today")+"], HH:mm",nextDay:"["+t("tasks","Due tomorrow")+"], HH:mm",lastWeek:"["+t("tasks","Due on")+"] MMM DD, YYYY, HH:mm",nextWeek:"["+t("tasks","Due on")+"] MMM DD, YYYY, HH:mm",sameElse:"["+t("tasks","Due on")+"] MMM DD, YYYY, HH:mm"}}),moment.locale("details_allday",{calendar:{lastDay:"["+t("tasks","Due yesterday")+"]",sameDay:"["+t("tasks","Due today")+"]",nextDay:"["+t("tasks","Due tomorrow")+"]",lastWeek:"["+t("tasks","Due on")+"] MMM DD, YYYY",nextWeek:"["+t("tasks","Due on")+"] MMM DD, YYYY",sameElse:"["+t("tasks","Due on")+"] MMM DD, YYYY"}}),moment.locale("start",{calendar:{lastDay:"["+t("tasks","Started yesterday")+"], HH:mm",sameDay:"["+t("tasks","Starts today")+"], HH:mm",nextDay:"["+t("tasks","Starts tomorrow")+"], HH:mm",lastWeek:"["+t("tasks","Started on")+"] MMM DD, YYYY, HH:mm",nextWeek:"["+t("tasks","Starts on")+"] MMM DD, YYYY, HH:mm",sameElse:function(){return this.diff(moment())>0?"["+t("tasks","Starts on")+"] MMM DD, YYYY, HH:mm":"["+t("tasks","Started on")+"] MMM DD, YYYY, HH:mm"}}}),moment.locale("start_allday",{calendar:{lastDay:"["+t("tasks","Started yesterday")+"]",sameDay:"["+t("tasks","Starts today")+"]",nextDay:"["+t("tasks","Starts tomorrow")+"]",lastWeek:"["+t("tasks","Started on")+"] MMM DD, YYYY",nextWeek:"["+t("tasks","Starts on")+"] MMM DD, YYYY",sameElse:function(){return this.diff(moment())>0?"["+t("tasks","Starts on")+"] MMM DD, YYYY":"["+t("tasks","Started on")+"] MMM DD, YYYY"}}}),moment.locale("reminder",{calendar:{lastDay:t("tasks","[Remind me yesterday at ]HH:mm"),sameDay:t("tasks","[Remind me today at ]HH:mm"),nextDay:t("tasks","[Remind me tomorrow at ]HH:mm"),lastWeek:t("tasks","[Remind me on ]MMM DD, YYYY,[ at ]HH:mm"),nextWeek:t("tasks","[Remind me on ]MMM DD, YYYY,[ at ]HH:mm"),sameElse:t("tasks","[Remind me on ]MMM DD, YYYY,[ at ]HH:mm")}}),moment.locale("tasks",{calendar:{lastDay:"["+t("tasks","Yesterday")+"]",sameDay:"["+t("tasks","Today")+"]",nextDay:"["+t("tasks","Tomorrow")+"]",lastWeek:"DD.MM.YYYY",nextWeek:"DD.MM.YYYY",sameElse:"DD.MM.YYYY"}}),moment.locale("details_short",{calendar:{lastDay:"["+t("tasks","Yesterday")+"]",sameDay:"["+t("tasks","Today")+"]",nextDay:"["+t("tasks","Tomorrow")+"]",lastWeek:"MMM DD, YYYY",nextWeek:"MMM DD, YYYY",sameElse:"MMM DD, YYYY"}}),moment.locale("list_week",{calendar:{lastDay:"["+t("tasks","Yesterday")+"]",sameDay:"["+t("tasks","Today")+"], MMM. DD",nextDay:"["+t("tasks","Tomorrow")+"], MMM. DD",lastWeek:"ddd, MMM. DD",nextWeek:"ddd, MMM. DD",sameElse:"ddd, MMM. DD"}}),moment.locale("en",{relativeTime:{future:t("tasks","in %s"),past:t("tasks","%s ago"),s:t("tasks","seconds"),m:t("tasks","a minute"),mm:t("tasks","%d minutes"),h:t("tasks","an hour"),hh:t("tasks","%d hours"),d:t("tasks","a day"),dd:t("tasks","%d days"),M:t("tasks","a month"),MM:t("tasks","%d months"),y:t("tasks","a year"),yy:t("tasks","%d years")}})}]),angular.module("Tasks").controller("AppController",["$scope","$rootScope","ListsBusinessLayer","$route","Status","$timeout","$location","$routeParams","Loading","SettingsModel","Persistence",function(t,n,r,s,a,o,i,u,c,l,d){return new(function(){function n(n,r,s,a,o,i,u,c,l,d,p){this._$scope=n,this._$listsbusinesslayer=s,this._$route=a,this._$status=o,this._$timeout=i,this._$location=u,this._$routeparams=c,this._Loading=l,this._$settingsmodel=d,this._persistence=p,this._$scope.status=this._$status.getStatus(),this._$scope.route=this._$routeparams,this._$scope.status.newListName="",this._$scope.settingsmodel=this._$settingsmodel,this._$listsbusinesslayer.init().then(function(e){Promise.all(e).then(function(){t.$apply()})}),this._persistence.init(),this._$scope.closeAll=function(t){(e(t.target).closest(".close-all").length||e(t.currentTarget).is(e(t.target).closest(".handler")))&&(angular.isUndefined(n.route.calendarID)?angular.isUndefined(n.route.collectionID)?u.path("/collections/all"):u.path("/collections/"+n.route.collectionID):("name"===n.route.listparameter&&r.$broadcast("cancelEditCalendar",n.route.calendarID),u.path("/calendars/"+n.route.calendarID)),n.status.addingList=!1,n.status.focusTaskInput=!1,n.status.newListName=""),e(t.target).closest(".newList").length||(n.status.addingList=!1,n.status.newListName=""),e(t.target).closest(".add-subtask").length||(n.status.addSubtaskTo=null,n.status.focusSubtaskInput=!1)},this._$scope.isLoading=function(){return l.isLoading()}}return n}())(t,n,r,s,a,o,i,u,c,l,d)}]),angular.module("Tasks").controller("DetailsController",["$scope","$window","TasksModel","TasksBusinessLayer","$route","$location","$timeout","$routeParams","SettingsModel","Loading","ListsModel",function(n,r,s,a,o,i,u,c,l,d,p){return new(function(){function r(r,s,a,o,u,c,l,d,p,m,h){this._$scope=r,this._$window=s,this._$tasksmodel=a,this._$listsmodel=h,this._tasksbusinesslayer=o,this._$route=u,this._$location=c,this._$timeout=l,this._$routeparams=d,this._$settingsmodel=p,this._Loading=m,this._$scope.task=a.getById(r.route.taskID),this._$scope.found=!0,this._$scope.$on("$routeChangeSuccess",function(){var t=a.getByUri(r.route.taskID);angular.isUndefined(t)||null===t?void 0!==r.route.taskID&&(r.found=!1):(r.task=t,r.task.cats=t.categories,r.found=!0)}),this._$scope.settingsmodel=this._$settingsmodel,this._$scope.settingsmodel.add({id:"various",categories:[]}),this._$scope.isAddingComment=!1,this._$scope.timers=[],this._$scope.durations=[{name:t("tasks","week"),names:t("tasks","weeks"),id:"week"},{name:t("tasks","day"),names:t("tasks","days"),id:"day"},{name:t("tasks","hour"),names:t("tasks","hours"),id:"hour"},{name:t("tasks","minute"),names:t("tasks","minutes"),id:"minute"},{name:t("tasks","second"),names:t("tasks","seconds"),id:"second"}],this._$scope.loadTask=function(t){var e=a.getByUri(r.route.taskID);angular.isUndefined(e)||null===e||(r.task=e,r.found=!0)},this._$scope.TaskState=function(){return r.found?"found":m.isLoading()?"loading":null},this._$scope.params=[{name:t("tasks","before beginning"),invert:!0,related:"START",id:"10"},{name:t("tasks","after beginning"),invert:!1,related:"START",id:"00"},{name:t("tasks","before end"),invert:!0,related:"END",id:"11"},{name:t("tasks","after end"),invert:!1,related:"END",id:"01"}],this._$scope.filterParams=function(t){var e;if(e=a.getById(r.route.taskID),!angular.isUndefined(e)&&null!==e)return e.due&&e.start?t:e.start?t.slice(0,2):t.slice(2)},this._$scope.deleteTask=function(t){return l(function(){return o.deleteTask(t).then(function(){return n.$apply()})},500)},this._$scope.triggerUpdate=function(t){o.triggerUpdate(t)},this._$scope.editName=function(t,n){n.calendar.writable&&(e(t.target).is("a")||r.setEditRoute("name"))},this._$scope.editDueDate=function(t,n){n.calendar.writable&&e(t.currentTarget).is(e(t.target).closest(".handler"))&&(r.setEditRoute("duedate"),o.initDueDate(n))},this._$scope.editStart=function(t,n){n.calendar.writable&&e(t.currentTarget).is(e(t.target).closest(".handler"))&&(r.setEditRoute("startdate"),o.initStartDate(n))},this._$scope.editReminder=function(t,n){if(n.calendar.writable&&e(t.currentTarget).is(e(t.target).closest(".handler")))return r.setEditRoute("reminer"),o.initReminder(r.route.taskID)},this._$scope.editNote=function(t,n){n.calendar.writable&&e(t.currentTarget).is(e(t.target).closest(".handler"))&&(e(t.target).is("a")||r.setEditRoute("note"))},this._$scope.editPriority=function(t,n){n.calendar.writable&&e(t.currentTarget).is(e(t.target).closest(".handler"))&&r.setEditRoute("priority")},this._$scope.editPercent=function(t,n){n.calendar.writable&&e(t.currentTarget).is(e(t.target).closest(".handler"))&&r.setEditRoute("percent")},this._$scope.endEdit=function(t){(e(t.target).closest(".end-edit").length||e(t.currentTarget).is(e(t.target).closest(".handler")))&&r.resetRoute()},this._$scope.endName=function(t){if(13===t.keyCode&&(t.preventDefault(),r.resetRoute()),27===t.keyCode)return r.resetRoute()},this._$scope.setEditRoute=function(t){var e=r.route.calendarID,n=r.route.collectionID;e?i.path("/calendars/"+e+"/tasks/"+r.route.taskID+"/edit/"+t):n&&i.path("/collections/"+n+"/tasks/"+r.route.taskID+"/edit/"+t)},this._$scope.resetRoute=function(){var t=r.route.calendarID,e=r.route.collectionID;t?i.path("/calendars/"+t+"/tasks/"+r.route.taskID):e&&i.path("/collections/"+e+"/tasks/"+r.route.taskID)},this._$scope.deletePercent=function(t){return o.setPercentComplete(t,0)},this._$scope.deleteReminder=function(){return o.deleteReminderDate(r.route.taskID)},this._$scope.toggleCompleted=function(t){t.completed?o.setPercentComplete(t,0):o.setPercentComplete(t,100)},this._$scope.setPercentComplete=function(t,e){o.setPercentComplete(t,e)},this._$scope.toggleStarred=function(t){t.priority>5?o.setPriority(t,0):o.setPriority(t,9)},this._$scope.deletePriority=function(t){return o.setPriority(t,0)},this._$scope.isDue=function(t){return a.due(t)},this._$scope.isOverDue=function(t){return a.overdue(t)},this._$scope.setstartday=function(t){return o.setStart(r.task,moment(t,"MM/DD/YYYY"),"day")},this._$scope.setstarttime=function(t){return o.setStart(r.task,moment(t,"HH:mm"),"time")},this._$scope.deleteStartDate=function(t){o.deleteStartDate(t)},this._$scope.setdueday=function(t){return o.setDue(r.task,moment(t,"MM/DD/YYYY"),"day")},this._$scope.setduetime=function(t){return o.setDue(r.task,moment(t,"HH:mm"),"time")},this._$scope.deleteDueDate=function(t){o.deleteDueDate(t)},this._$scope.isAllDayPossible=function(t){return!angular.isUndefined(t)&&t.calendar.writable&&(t.due||t.start)},this._$scope.toggleAllDay=function(t){o.setAllDay(t,!t.allDay)},this._$scope.setreminderday=function(t){return o.setReminderDate(r.route.taskID,moment(t,"MM/DD/YYYY"),"day")},this._$scope.setremindertime=function(t){return o.setReminderDate(r.route.taskID,moment(t,"HH:mm"),"time")},this._$scope.reminderType=function(t){if(!angular.isUndefined(t))return null===t.reminder?moment(t.start,"YYYYMMDDTHHmmss").isValid()||moment(t.due,"YYYYMMDDTHHmmss").isValid()?"DURATION":"DATE-TIME":t.reminder.type},this._$scope.changeReminderType=function(t){return o.checkReminderDate(t.id),"DURATION"===this.reminderType(t)?t.reminder?t.reminder.type="DATE-TIME":t.reminder={type:"DATE-TIME"}:t.reminder?t.reminder.type="DURATION":t.reminder={type:"DURATION"},o.setReminder(t.id)},this._$scope.setReminderDuration=function(t){return o.setReminder(r.route.taskID)},this._$scope.addComment=function(){var t;r.CommentContent&&(r.isAddingComment=!0,t={tmpID:"newComment"+Date.now(),comment:r.CommentContent,taskID:r.route.taskID,time:moment().format("YYYYMMDDTHHmmss"),name:e("#expandDisplayName").text()},o.addComment(t,function(t){a.updateComment(t),r.isAddingComment=!1},function(){r.isAddingComment=!1}),r.CommentContent="")},this._$scope.sendComment=function(t){if(13===t.keyCode)return r.addComment()},this._$scope.deleteComment=function(t){return o.deleteComment(r.route.taskID,t)},this._$scope.commentStrings=function(){return{button:t("tasks","Comment"),input:t("tasks","Add a comment")}},this._$scope.addCategory=function(t,e){r.task.categories=r.task.cats;var n=r.settingsmodel.getById("various").categories;n.indexOf(t)<0&&n.push(t),o.doUpdate(r.task)},this._$scope.removeCategory=function(t,e){r.task.categories=r.task.cats,o.doUpdate(r.task)}}return r}())(n,r,s,a,o,i,u,c,l,d,p)}]),angular.module("Tasks").controller("ListController",["$scope","$rootScope","$window","$routeParams","ListsModel","TasksBusinessLayer","CollectionsModel","ListsBusinessLayer","$location","SearchBusinessLayer","CalendarService","TasksModel","$timeout",function(n,r,s,a,o,i,u,c,l,d,p,m,h){return new(function(){function r(r,a,o,i,u,c,l,d,p,m,h,f,g){this._$scope=r,this._$window=o,this._$routeParams=i,this._$listsmodel=u,this._$tasksmodel=f,this._$tasksbusinesslayer=c,this._$collectionsmodel=l,this._$listsbusinesslayer=d,this.$location=p,this._$timeout=g,this._$searchbusinesslayer=m,this._$calendarservice=h,this._$scope.collections=this._$collectionsmodel.getAll(),this._$scope.calendars=this._$listsmodel.getAll(),this._$scope.draggedTasks=[],this._$scope.TasksBusinessLayer=this._$tasksbusinesslayer,this._$scope.nameError=!1,this._$scope.color="#31CC7C",this._$scope.deleteMessage=function(e){return t("tasks",'This will delete the Calendar "%s" and all of its entries.').replace("%s",e.displayname)},this._$scope.delete=function(t){return d.delete(t).then(function(){return p.path("/calendars/"+u.getStandardList().uri),n.$apply()})},this._$scope.startCreate=function(){r.status.addingList=!0,r.nameError=!1,e(".hasTooltip").tooltip("hide"),g(function(){e("#newList").focus()},50)},this._$scope.create=function(){r.isNameAllowed(r.status.newListName).allowed&&(r.status.addingList=!1,r.isAddingList=!0,d.add(r.status.newListName,r.color).then(function(t){return p.path("/calendars/"+t.uri),n.$apply()}),r.status.newListName="")},this._$scope.cancelCreate=function(){e(".hasTooltip").tooltip("hide"),r.nameError=!1,r.status.addingList=!1,r.status.newListName=""},this._$scope.startEdit=function(t){r.status.addingList=!1,r.nameError=!1,e(".hasTooltip").tooltip("hide"),t.prepareUpdate(),p.path("/calendars/"+r.route.calendarID+"/edit/name"),g(function(){e("#list_"+t.uri+" input.edit").focus()},50)},this._$scope.showCalDAVUrl=function(t){r.status.addingList=!1,r.nameError=!1,p.path("/calendars/"+r.route.calendarID+"/edit/caldav"),g(function(){e("#list_"+t.uri+" input.caldav").focus()},50)},this._$scope.hideCalDAVUrl=function(){p.path("/calendars/"+r.route.calendarID)},this._$scope.download=function(t){var e=t.url;"/"===e.slice(e.length-1)&&(e=e.slice(0,e.length-1)),e+="?export",s.open(e)},this._$scope.checkNew=function(t,e){r.checkName(t,e)},this._$scope.checkEdit=function(t,e){r.checkName(t,e.displayname,e.uri),27===t.keyCode&&r.cancelEdit(e)},this._$scope.checkName=function(t,n,s){var a=r.isNameAllowed(n,s),o=e(t.currentTarget);a.allowed?(o.tooltip("hide"),r.nameError=!1):(o.attr("title",a.msg).tooltip({placement:"bottom",trigger:"manual"}).tooltip("fixTitle").tooltip("show"),r.nameError=!0),27===t.keyCode&&(t.preventDefault(),o.tooltip("hide"),r.status.addingList=!1,r.status.newListName="",r.nameError=!1)},a.$on("cancelEditCalendar",function(t,e){var n=u.getByUri(e);r.cancelEdit(n)}),this._$scope.cancelEdit=function(t){t.resetToPreviousState(),e(".hasTooltip").tooltip("hide"),r.nameError=!1,p.path("/calendars/"+r.route.calendarID)},this._$scope.saveEdit=function(t){r.isNameAllowed(t.displayname,t.uri).allowed&&(d.rename(t),p.path("/calendars/"+r.route.calendarID))},this._$scope.isNameAllowed=function(e,n){var r={allowed:!1,msg:""};return u.isNameAlreadyTaken(e,n)?r.msg=t("tasks",'The name "%s" is already used.').replace("%s",e):e?r.allowed=!0:r.msg=t("tasks","An empty name is not allowed."),r},this._$scope.getCollectionCount=function(t){var e;return e=m.getFilter(),l.getCount(t,e)},this._$scope.hideCollection=function(t){var e;switch(e=l.getById(t),e.show){case 0:return!0;case 1:return!1;case 2:return this.getCollectionCount(t)<1}},this._$scope.getCollectionString=function(t){var e;return"completed"!==t?(e=m.getFilter(),l.getCount(t,e)):""},this._$scope.getListCount=function(t,e){var n;return n=m.getFilter(),u.getCount(t,e,n)},this._$scope.dragoverList=function(t,n){var r=e(t.target).closest("li.list").attr("calendarID");return u.getByUri(r).writable},this._$scope.dropList=function(t,n,s){if("move"===t.dataTransfer.dropEffect){var a=f.getByUri(s.uri),o=e(t.target).closest("li.list").attr("calendarID"),i=u.getByUri(o);c.changeCalendar(a,i).then(function(){r.$apply()})}return!0},this._$scope.dragoverCollection=function(t,n){if("copy"===t.dataTransfer.effectAllowed||"copyMove"===t.dataTransfer.effectAllowed&&t.ctrlKey)return!1;var r;return"starred"===(r=e(t.target).closest("li.collection").attr("collectionID"))||"completed"===r||"today"===r},this._$scope.dropCollection=function(t,n,r){if("move"===t.dataTransfer.dropEffect){var s=e(t.target).closest("li.collection").attr("collectionID");c.changeCollection(r.uri,s)}return!0}}return r}())(n,r,s,a,o,i,u,c,l,d,p,m,h)}]),angular.module("Tasks").controller("SettingsController",["$scope","$window","Status","$location","CollectionsModel","SettingsBusinessLayer","SettingsModel",function(e,n,r,s,a,o,i){return new(function(){function e(e,n,r,s,a,o,i){this._$scope=e,this._$window=n,this._$status=r,this._$location=s,this._$collectionsmodel=a,this._$settingsbusinesslayer=o,this._$settingsmodel=i,this._$scope.status=this._$status.getStatus(),this._$scope.collections=this._$collectionsmodel.getAll(),this._$scope.settingsmodel=this._$settingsmodel,this._$scope.collectionOptions=[{id:0,name:t("tasks","Hidden")},{id:1,name:t("tasks","Visible")},{id:2,name:t("tasks","Automatic")}],this._$scope.startOfWeekOptions=[{id:0,name:t("tasks","Sunday")},{id:1,name:t("tasks","Monday")},{id:2,name:t("tasks","Tuesday")},{id:3,name:t("tasks","Wednesday")},{id:4,name:t("tasks","Thursday")},{id:5,name:t("tasks","Friday")},{id:6,name:t("tasks","Saturday")}],this._$scope.setVisibility=function(t){var e;return e=a.getById(t),o.setVisibility(t,e.show)},this._$scope.setStartOfWeek=function(){return o.set("various","startOfWeek",i.getById("various").startOfWeek)}}return e}())(e,n,r,s,a,o,i)}]),function(){var r=[].indexOf||function(t){for(var e=0,n=this.length;e<n;e++)if(e in this&&this[e]===t)return e;return-1};angular.module("Tasks").controller("TasksController",["$scope","$window","$routeParams","TasksModel","ListsModel","CollectionsModel","TasksBusinessLayer","$location","SettingsBusinessLayer","SearchBusinessLayer","VTodo","SettingsModel",function(s,a,o,i,u,c,l,d,p,m,h,f){return new(function(){function a(a,o,i,u,c,l,d,p,m,f,g,y){this._$scope=a,this._$window=o,this._$routeParams=i,this._$tasksmodel=u,this._$listsmodel=c,this._$collectionsmodel=l,this._tasksbusinesslayer=d,this.$location=p,this._settingsbusinesslayer=m,this._searchbusinesslayer=f,this._vtodo=g,this._$scope.tasks=this._$tasksmodel.getAll(),this._$scope.draggedTasks=[],this._$scope.calendars=this._$listsmodel.getAll(),this._$scope.days=[0,1,2,3,4,5,6],this._$scope.isAddingTask=!1,this._$scope.focusInputField=!1,this._$scope.TasksModel=this._$tasksmodel,this._$scope.TasksBusinessLayer=this._tasksbusinesslayer,this._$settingsmodel=y,this._$scope.addTask=function(t,e,n,r){var o;null===n&&(n=""),a.isAddingTask=!0;var i={calendar:null,related:e,summary:t,priority:"0",due:!1,start:!1,reminder:null,completed:!1,complete:"0",note:""};"starred"===(o=a.route.collectionID)||"today"===o||"week"===o||"all"===o||"completed"===o||"current"===o?(i.calendar=e?n:c.getStandardList(),"starred"===a.route.collectionID&&(i.priority="1"),"today"===a.route.collectionID&&(i.due=moment().startOf("day").format("YYYY-MM-DDTHH:mm:ss")),"current"===a.route.collectionID&&(i.start=moment().format("YYYY-MM-DDTHH:mm:ss"))):i.calendar=c.getByUri(a.route.calendarID),i=h.create(i),d.add(i).then(function(t){return a.isAddingTask=!1,a.openDetails(t.uri,null),s.$apply()}),r&&d.setHideSubtasks(r,0),a.status.focusTaskInput=!1,a.status.focusSubtaskInput=!1,a.status.addSubtaskTo=null,a.status.taskName="",a.status.subtaskName=""},this._$scope.getAddString=function(){var e=c.getStandardList();if(angular.isDefined(e))if(angular.isDefined(a.route.collectionID))switch(a.route.collectionID){case"starred":return t("tasks",'Add an important item in "%s"...').replace("%s",e.displayname);case"today":return t("tasks",'Add an item due today in "%s"...').replace("%s",e.displayname);case"all":return t("tasks",'Add an item in "%s"...').replace("%s",e.displayname);case"current":return t("tasks",'Add a current item in "%s"...').replace("%s",e.displayname);case"completed":case"week":return null}else if(angular.isDefined(c.getByUri(a.route.calendarID)))return t("tasks",'Add an item in "%s"...').replace("%s",c.getByUri(a.route.calendarID).displayname)},this._$scope.getSubAddString=function(e){return t("tasks",'Add a subtask to "%s"...').replace("%s",e)},this._$scope.showSubtaskInput=function(t){a.status.addSubtaskTo=t},this._$scope.hideSubtasks=function(t){var e=a.route.taskID,n=u.getDescendantIDs(t);return t.uri!==e&&(!(r.call(n,e)>=0)&&t.hideSubtasks)},this._$scope.showInput=function(){var t=a.route.collectionID,e=c.getByUri(a.route.calendarID);return"completed"!==t&&"week"!==t&&(!angular.isDefined(e)||e.writable)},this._$scope.focusTaskInput=function(){a.status.focusTaskInput=!0},this._$scope.focusSubtaskInput=function(){a.status.focusSubtaskInput=!0},this._$scope.openDetails=function(t,n){var r=a.route.calendarID,o=a.route.collectionID;if(null===n||e(n.currentTarget).is(e(n.target).closest(".handler"))){var i=u.getByUri(t);i.loadedCompleted||d.getAll(i.calendar,!0,i).then(function(){i.loadedCompleted=!0,s.$apply()}),r?p.path("/calendars/"+r+"/tasks/"+t):o&&p.path("/collections/"+o+"/tasks/"+t)}},this._$scope.toggleCompleted=function(t){t.completed?d.setPercentComplete(t,0):d.setPercentComplete(t,100)},this._$scope.toggleStarred=function(t){t.priority>5?d.setPriority(t,0):d.setPriority(t,9)},this._$scope.toggleHidden=function(){return m.toggle("various","showHidden")},this._$scope.filterTasks=function(t,e){return function(t){return u.filterTasks(t,e)}},this._$scope.getSubTasks=function(t,e){var n,r,s,a;for(n=[],s=0,a=t.length;s<a;s++)r=t[s],r.related!==e.uid||r===e||e.hideCompletedSubtasks&&r.completed||n.push(r);return n},this._$scope.hasNoParent=function(t){return function(t){return u.hasNoParent(t)}},this._$scope.hasSubtasks=function(t){return u.hasSubtasks(t.uid)},this._$scope.hasCompletedSubtasks=function(t){return u.hasCompletedSubtasks(t.uid)},this._$scope.toggleSubtasks=function(t){d.setHideSubtasks(t,!t.hideSubtasks)},this._$scope.toggleCompletedSubtasks=function(t){d.setHideCompletedSubtasks(t,!t.hideCompletedSubtasks)},this._$scope.filterTasksByString=function(t){return function(t){var e=f.getFilter();return u.filterTasksByString(t,e)}},this._$scope.filteredTasks=function(){var t;return t=f.getFilter(),u.filteredTasks(t)},this._$scope.dayHasEntry=function(){return function(t){var e,n,r,s,a;for(e=f.getFilter(),r=u.filteredTasks(e),s=0,a=r.length;s<a;s++)if(n=r[s],!n.completed&&u.hasNoParent(n)&&u.taskAtDay(n,t))return!0;return!1}},this._$scope.taskAtDay=function(t,e){return function(t){return u.taskAtDay(t,e)}},this._$scope.filterLists=function(){return function(t){return a.getCount(t.uri,a.route.collectionID)}},this._$scope.getCount=function(t,e){var n=f.getFilter();return c.getCount(t,e,n)},this._$scope.getCountString=function(t,e){var r=f.getFilter();return n("tasks","%n Completed Task","%n Completed Tasks",c.getCount(t,e,r))},this._$scope.checkTaskInput=function(t){27===t.keyCode&&(e(t.currentTarget).blur(),a.status.taskName="",a.status.subtaskName="",a.status.addSubtaskTo=null,a.status.focusTaskInput=!1,a.status.focusSubtaskInput=!1)},this._$scope.getCompletedTasks=function(t){var e=c.getById(t);d.getAll(e,!0).then(function(){c.setLoadedCompleted(t),s.$apply()})},this._$scope.loadedCompleted=function(t){return c.loadedCompleted(t)},this._$scope.sortDue=function(t){return null===t.due?"last":t.due},this._$scope.sortStart=function(t){return null===t.start?"last":t.start},this._$scope.getSortOrder=function(){switch(a.settingsmodel.getById("various").sortOrder){case"due":return a.sortDue;case"start":return a.sortStart;case"priority":return"-priority";case"alphabetically":return"summary";case"manual":return"manual";default:return["completed",a.sortDue,"-priority",a.sortStart,"summary"]}},this._$scope.getSortOrderIcon=function(){switch(a.settingsmodel.getById("various").sortOrder){case"due":case"start":return"icon-calendar";case"priority":return"icon-task-star";case"alphabetically":return"icon-alphabetically";case"manual":return"icon-manual";default:return"icon-menu"}},this._$scope.setSortOrder=function(t,e){a.settingsmodel.getById("various").sortDirection=a.settingsmodel.getById("various").sortOrder===e?+!a.settingsmodel.getById("various").sortDirection:0,a.settingsmodel.getById("various").sortOrder=e,m.set("various","sortOrder",e),m.set("various","sortDirection",a.settingsmodel.getById("various").sortDirection)},this._$scope.dropAsSubtask=function(t,n,r){if("move"===t.dataTransfer.dropEffect){var s=e(t.target).closest(".task-item").attr("taskID"),a=u.getByUri(n.uri),o=u.getByUri(s);d.changeParent(a,o)}return e(".subtasks-container").removeClass("dropzone-visible"),!0},this._$scope.dropAsRootTask=function(t,n,r){if("move"===t.dataTransfer.dropEffect){var a=u.getByUri(n.uri),o=e(t.target).closest("ol[dnd-list]").attr("collectionID"),i=e(t.target).closest("ol[dnd-list]").attr("calendarID"),l=c.getByUri(i),p=d.makeRootTask(a,l,o);Promise.all(p).then(function(){s.$apply()})}return e(".subtasks-container").removeClass("dropzone-visible"),!0},this._$scope.dragover=function(t,n,r){e(".subtasks-container").removeClass("dropzone-visible");var s=e(t.target).closest("ol[dnd-list]").attr("calendarID");return!!c.getByUri(s).writable&&(e(t.target).closest(".task-item").children(".subtasks-container").addClass("dropzone-visible"),!0)},this._$scope.allow=function(t){return t.calendar.writable?"copyMove":"copy"},this._$scope.dragStart=function(t){("copy"===t.dataTransfer.effectAllowed||"copyMove"===t.dataTransfer.effectAllowed&&t.ctrlKey)&&e(t.target).addClass("copy")},this._$scope.dragEnd=function(t){e(t.target).removeClass("copy")}}return a}())(s,a,o,i,u,c,l,d,p,m,h,f)}])}.call(void 0),angular.module("Tasks").directive("appNavigationEntryUtils",function(){return{restrict:"C",link:function(t,n){var r,s;s=n.siblings(".app-navigation-entry-menu"),r=e(n).find(".app-navigation-entry-utils-menu-button button"),r.click(function(){s.toggleClass("open")}),t.$on("documentClicked",function(t,e){e.target!==r[0]&&s.removeClass("open")})}}}),angular.module("Tasks").directive("autofocusOnInsert",function(){return function(t,e){return e.focus()}}),angular.module("Tasks").directive("avatar",function(){return{restrict:"A",scope:!1,link:function(t,e,n){return n.$observe("userid",function(){if(n.userid)return e.avatar(n.userid,n.size)})}}});var a=function(t,e,n){if(Array.isArray(t)&&(e=t[1],n=t[2],t=t[0]),void 0===t)return[0,0,0];e/=100,n/=100;var r=(1-Math.abs(2*n-1))*e,s=t/60,a=r*(1-Math.abs(s%2-1));s=Math.floor(s);var o,i,u;0===s?(o=r,i=a,u=0):1===s?(o=a,i=r,u=0):2===s?(o=0,i=r,u=a):3===s?(o=0,i=a,u=r):4===s?(o=a,i=0,u=r):5===s&&(o=r,i=0,u=a);var c=n-r/2;return o+=c,i+=c,u+=c,[Math.round(255*o),Math.round(255*i),Math.round(255*u)]},o=function(t,e,n){return Array.isArray(t)&&(e=t[1],n=t[2],t=t[0]),"#"+parseInt(t,10).toString(16)+parseInt(e,10).toString(16)+parseInt(n,10).toString(16)},i=["#31CC7C","#317CCC","#FF7A66","#F1DB50","#7C31CC","#CC317C","#3A3B3D","#CACBCD"],u=function(){return"function"==typeof String.prototype.toHsl?o(a(Math.random().toString().toHsl())):i[Math.floor(Math.random()*i.length)]};angular.module("Tasks").directive("colorpicker",function(){if("function"==typeof String.prototype.toHsl){var t="",e="";i=["15","9","4","b","6","11","74","f","57"],i.forEach(function(n,r){t=n.toHsl(),e=a(t),i[r]=o(e)})}return{scope:{selected:"=",customizedColors:"=colors"},restrict:"AE",templateUrl:OC.filePath("tasks","templates","colorpicker.html"),link:function(t,e,n){t.colors=t.customizedColors||i,t.selected=t.selected||t.colors[0],t.random="#000000",t.randomizeColour=function(){t.random=u(),t.pick(t.random)},t.pick=function(e){t.selected=e}}}}),angular.module("Tasks").directive("confirmation",function(){return{priority:-1,restrict:"A",templateUrl:OC.generateUrl("/apps/tasks/templates/confirmation",{}),scope:{confirmationFunction:"&confirmation",confirmationMessage:"&confirmationMessage"},controller:"ConfirmationController"}}),angular.module("Tasks").controller("ConfirmationController",["$scope","$rootScope","$element","$attrs","$compile","$document","$window","$timeout",function(t,e,n,r,s,a,o,i){return new(function(){function e(e,n,r,s,a,o,i,u){this._$scope=e,this._$scope.countdown=3,r.bind("click",function(t){e.countdown=3,r.removeClass("active");var n=e.confirmationMessage()?e.confirmationMessage():"Are you sure?";r.hasClass("confirmed")||(t.stopPropagation(),e.activate(),r.children(".confirmation-confirm").tooltip({title:n,container:"body",placement:"right"}),r.addClass("confirmed"))}),r.children(".confirmation-confirm").bind("click",function(t){if(r.hasClass("confirmed active"))return void e.confirmationFunction();t.stopPropagation()}),this._$scope.documentClick=function(){r.removeClass("confirmed")},this._$scope.activate=function(){e.countdown?(r.find(".countdown").html(e.countdown+" s"),u(function(){e.activate()},1e3),e.countdown--):r.addClass("active")},o.bind("click",e.documentClick),o.bind("touchend",e.documentClick),t.$on("$destroy",function(){o.unbind("click",e.documentClick),o.unbind("touchend",e.documentClick)})}return e}())(t,e,n,r,s,a,o,i)}]),angular.module("Tasks").directive("datepicker",function(){return{restrict:"A",scope:!1,link:function(t,n,r){return n.datepicker({onSelect:function(e,n){return t["set"+r.datepicker+"day"](e),t.$apply()},beforeShow:function(n,r){var s,a;return s=e(r).datepicker("widget"),a=-Math.abs(e(n).outerWidth()-s.outerWidth())/2+"px",s.css({"margin-left":a}),e("div.ui-datepicker:before").css({left:"100px"}),e(".hasDatepicker").datepicker("option","firstDay",t.settingsmodel.getById("various").startOfWeek)},beforeShowDay:function(e){return 0===moment(e).startOf("day").diff(moment(t.task[r.datepicker],"YYYYMMDDTHHmmss").startOf("day"),"days")?[1,"selected"]:[1,""]},minDate:null})}}}),angular.module("Tasks").directive("ocClickFocus",["$timeout",function(t){return function(n,r,s){var a;if(a=n.$eval(s.ocClickFocus),angular.isDefined(a)&&angular.isDefined(a.selector))return r.click(function(){return angular.isDefined(a.timeout)?t(function(){return e(a.selector).focus()},a.timeout):e(a.selector).focus()})}}]),angular.module("Tasks").directive("timepicker",function(){return{restrict:"A",link:function(e,n,r){return n.timepicker({onSelect:function(t,n){return e["set"+r.timepicker+"time"](t),e.$apply()},myPosition:"center top",atPosition:"center bottom",hourText:t("tasks","Hours"),minuteText:t("tasks","Minutes")})}}}),angular.module("Tasks").filter("counterFormatter",function(){return function(t){switch(!1){case 0!==t:return"";case t<999:return"999+";default:return t}}}),angular.module("Tasks").filter("dateDetails",function(){return function(e){return moment(e,"YYYYMMDDTHHmmss").isValid()?moment(e,"YYYYMMDDTHHmmss").locale(e.isDate?"details_allday":"details").calendar():t("tasks","Set due date")}}),angular.module("Tasks").filter("dateDetailsShort",function(){return function(t){
+return moment(t,"YYYYMMDDTHHmmss").isValid()?moment(t,"YYYYMMDDTHHmmss").locale("details_short").calendar():""}}),angular.module("Tasks").filter("dateFromNow",function(){return function(t){return moment(t,"YYYYMMDDTHHmmss").isValid()?moment(t,"YYYYMMDDTHHmmss").fromNow():""}}),angular.module("Tasks").filter("dateTaskList",function(){return function(t){return moment(t,"YYYYMMDDTHHmmss").isValid()?moment(t,"YYYYMMDDTHHmmss").locale("tasks").calendar():""}}),angular.module("Tasks").filter("day",function(){return function(t){return moment().add("days",t).locale("list_week").calendar()}}),angular.module("Tasks").filter("dayTaskList",function(){return function(t){return moment(t,"YYYYMMDDTHHmmss").isValid()?moment(t,"YYYYMMDDTHHmmss").locale("tasks").calendar():""}}),angular.module("Tasks").filter("percentDetails",function(){return function(e){return t("tasks","%s %% completed").replace("%s",e).replace("%%","%")}}),angular.module("Tasks").filter("priorityDetails",function(){return function(e){var n;return n=t("tasks","priority %s: ").replace("%s",e),6==+e||7==+e||8==+e||9==+e?n+" "+t("tasks","high"):5==+e?n+" "+t("tasks","medium"):1==+e||2==+e||3==+e||4==+e?n+" "+t("tasks","low"):t("tasks","no priority assigned")}}),angular.module("Tasks").filter("reminderDetails",function(){return function(e,n){var r,s,a,o;if(angular.isUndefined(e)||null===e)return t("tasks","Remind me");if("DATE-TIME"===e.type&&moment(e.date,"YYYYMMDDTHHmmss").isValid())return moment(e.date,"YYYYMMDDTHHmmss").locale("reminder").calendar();if("DURATION"===e.type&&e.duration){r=t("tasks","Remind me"),o=n.durations;for(var i=0,u=o.length;i<u;i++)a=o[i],+e.duration[a.id]&&(s=1,r+=" "+e.duration[a.id]+" ",r+=function(t,e){return 1==+t.duration[e.id]?e.name:e.names}(e,a));return s?e.duration.params.invert?r+=function(e){return"END"===e?" "+t("tasks","before end"):" "+t("tasks","before beginning")}(e.duration.params.related):r+=function(e){return"END"===e?" "+t("tasks","after end"):" "+t("tasks","after beginning")}(e.duration.params.related):"END"===e.duration.params.related?r+=" "+t("tasks","at the end"):r+=" "+t("tasks","at the beginning"),r}return t("tasks","Remind me")}}),angular.module("Tasks").filter("startDetails",function(){return function(e){return moment(e,"YYYYMMDDTHHmmss").isValid()?moment(e,"YYYYMMDDTHHmmss").locale(e.isDate?"start_allday":"start").calendar():t("tasks","Set start date")}}),angular.module("Tasks").filter("timeTaskList",function(){return function(t){return moment(t,"YYYYMMDDTHHmmss").isValid()?moment(t,"YYYYMMDDTHHmmss").format("HH:mm"):""}}),angular.module("Tasks").service("CalendarService",["DavClient","Calendar",function(e,n){function s(t){return e.propFind(e.buildUrl(OC.linkToRemoteBase("dav")),["{"+e.NS_DAV+"}current-user-principal"],0,{requesttoken:OC.requestToken}).then(function(n){if(!e.wasRequestSuccessful(n.status))throw"CalDAV client could not be initialized - Querying current-user-principal failed";if(!(n.body.propStat.length<1)){var r=n.body.propStat[0].properties;return o._currentUserPrincipal=r["{"+e.NS_DAV+"}current-user-principal"][0].textContent,e.propFind(e.buildUrl(o._currentUserPrincipal),["{"+e.NS_IETF+"}calendar-home-set"],0,{requesttoken:OC.requestToken}).then(function(n){if(!e.wasRequestSuccessful(n.status))throw"CalDAV client could not be initialized - Querying calendar-home-set failed";if(!(n.body.propStat.length<1)){var r=n.body.propStat[0].properties;return o._CALENDAR_HOME=r["{"+e.NS_IETF+"}calendar-home-set"][0].textContent,t()}})}})}function a(t){return parseInt(t.split(" ")[1])}var o=this;this._CALENDAR_HOME=null,this._currentUserPrincipal=null,this._takenUrls=[],this._PROPERTIES=["{"+e.NS_DAV+"}displayname","{"+e.NS_IETF+"}calendar-description","{"+e.NS_IETF+"}calendar-timezone","{"+e.NS_APPLE+"}calendar-order","{"+e.NS_APPLE+"}calendar-color","{"+e.NS_IETF+"}supported-calendar-component-set","{"+e.NS_OWNCLOUD+"}calendar-enabled","{"+e.NS_DAV+"}acl","{"+e.NS_DAV+"}owner","{"+e.NS_OWNCLOUD+"}invite"],this.getAll=function(){return null===this._CALENDAR_HOME?s(function(){return o.getAll()}):e.propFind(e.buildUrl(this._CALENDAR_HOME),this._PROPERTIES,1,{requesttoken:OC.requestToken}).then(function(t){var r=[];if(!e.wasRequestSuccessful(t.status))throw"CalDAV client could not be initialized - Querying calendars failed";for(var s=0;s<t.body.length;s++){var i=t.body[s];if(!(i.propStat.length<1)){o._takenUrls.push(i.href);var u=a(i.propStat[0].status);if(e.wasRequestSuccessful(u)){var c=!1,l=i.propStat[0].properties["{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set"];if(l)for(var d=0;d<l.length;d++){var p=l[d].attributes.getNamedItem("name").textContent.toLowerCase();"vtodo"===p&&(c=!0)}if(c){o._getACLFromResponse(i);var m=i.href.substr(o._CALENDAR_HOME.length).replace(/[^\w\-]+/g,""),h=new n(i.href,i.propStat[0].properties,m);r.push(h)}}}}return r})},this.get=function(t){return null===this._CALENDAR_HOME?s(function(){return o.get(t)}):e.propFind(e.buildUrl(t),this._PROPERTIES,0,{requesttoken:OC.requestToken}).then(function(t){var r=t.body;if(!(r.propStat.length<1)){var s=a(r.propStat[0].status);if(e.wasRequestSuccessful(s)){o._getACLFromResponse(r);var i=r.href.substr(o._CALENDAR_HOME.length).replace(/[^\w\-]+/g,"");return new n(r.href,r.propStat[0].properties,i)}}})},this.create=function(t,n,r){if(null===this._CALENDAR_HOME)return s(function(){return o.create(t,n)});void 0===r&&(r=["vtodo"]);var a=document.implementation.createDocument("","",null),i=a.createElement("c:mkcalendar");i.setAttribute("xmlns:c","urn:ietf:params:xml:ns:caldav"),i.setAttribute("xmlns:d","DAV:"),i.setAttribute("xmlns:a","http://apple.com/ns/ical/"),i.setAttribute("xmlns:o","http://owncloud.org/ns"),a.appendChild(i);var u=a.createElement("d:set");i.appendChild(u);var c=a.createElement("d:prop");u.appendChild(c),c.appendChild(this._createXMLForProperty(a,"displayname",t)),c.appendChild(this._createXMLForProperty(a,"enabled",!0)),c.appendChild(this._createXMLForProperty(a,"color",n)),c.appendChild(this._createXMLForProperty(a,"components",r));var l=i.outerHTML,d=this._suggestUri(t),p=this._CALENDAR_HOME+d+"/",m={"Content-Type":"application/xml; charset=utf-8",requesttoken:OC.requestToken};return e.request("MKCALENDAR",p,m,l).then(function(t){if(201===t.status)return o._takenUrls.push(p),o.get(p).then(function(t){return t.enabled=!0,o.update(t)})})},this.update=function(t){var n=document.implementation.createDocument("","",null),r=n.createElement("d:propertyupdate");r.setAttribute("xmlns:c","urn:ietf:params:xml:ns:caldav"),r.setAttribute("xmlns:d","DAV:"),r.setAttribute("xmlns:a","http://apple.com/ns/ical/"),r.setAttribute("xmlns:o","http://owncloud.org/ns"),n.appendChild(r);var s=n.createElement("d:set");r.appendChild(s);var a=n.createElement("d:prop");s.appendChild(a);var o=t.updatedProperties;t.resetUpdatedProperties();for(var i=0;i<o.length;i++)a.appendChild(this._createXMLForProperty(n,o[i],t[o[i]]));var u=t.url,c=r.outerHTML,l={"Content-Type":"application/xml; charset=utf-8",requesttoken:OC.requestToken};return e.request("PROPPATCH",u,l,c).then(function(e){return t})},this.delete=function(t){return e.request("DELETE",t.url,{requesttoken:OC.requestToken},"").then(function(t){return 204===t.status})},this.share=function(n,s,a,o,i){var u=document.implementation.createDocument("","",null),c=u.createElement("o:share");c.setAttribute("xmlns:d","DAV:"),c.setAttribute("xmlns:o","http://owncloud.org/ns"),u.appendChild(c);var l=u.createElement("o:set");c.appendChild(l);var d=u.createElement("d:href");s===OC.Share.SHARE_TYPE_USER?d.textContent="principal:principals/users/":s===OC.Share.SHARE_TYPE_GROUP&&(d.textContent="principal:principals/groups/"),d.textContent+=a,l.appendChild(d);var p=u.createElement("o:summary");if(p.textContent=t("calendar","{calendar} shared by {owner}",{calendar:n.displayname,owner:n.owner}),l.appendChild(p),o){var m=u.createElement("o:read-write");l.appendChild(m)}var h={"Content-Type":"application/xml; charset=utf-8",requesttoken:r},f=c.outerHTML;return e.request("POST",n.url,h,f).then(function(t){200===t.status&&(i||(s===OC.Share.SHARE_TYPE_USER?n.sharedWith.users.push({id:a,displayname:a,writable:o}):s===OC.Share.SHARE_TYPE_GROUP&&n.sharedWith.groups.push({id:a,displayname:a,writable:o})))})},this.unshare=function(t,n,s){var a=document.implementation.createDocument("","",null),o=a.createElement("o:share");o.setAttribute("xmlns:d","DAV:"),o.setAttribute("xmlns:o","http://owncloud.org/ns"),a.appendChild(o);var i=a.createElement("o:remove");o.appendChild(i);var u=a.createElement("d:href");n===OC.Share.SHARE_TYPE_USER?u.textContent="principal:principals/users/":n===OC.Share.SHARE_TYPE_GROUP&&(u.textContent="principal:principals/groups/"),u.textContent+=s,i.appendChild(u);var c={"Content-Type":"application/xml; charset=utf-8",requesttoken:r},l=o.outerHTML;return e.request("POST",t.url,c,l).then(function(e){return 200===e.status&&(n===OC.Share.SHARE_TYPE_USER?t.sharedWith.users=t.sharedWith.users.filter(function(t){return t.id!==s}):n===OC.Share.SHARE_TYPE_GROUP&&(t.sharedWith.groups=t.sharedWith.groups.filter(function(t){return t.id!==s})),!0)})},this._createXMLForProperty=function(t,e,n){switch(e){case"enabled":var r=t.createElement("o:calendar-enabled");return r.textContent=n?"1":"0",r;case"displayname":var s=t.createElement("d:displayname");return s.textContent=n,s;case"order":var a=t.createElement("a:calendar-color");return a.textContent=n,a;case"color":var o=t.createElement("a:calendar-color");return o.textContent=n,o;case"components":for(var i=t.createElement("c:supported-calendar-component-set"),u=0;u<n.length;u++){var c=t.createElement("c:comp");c.setAttribute("name",n[u].toUpperCase()),i.appendChild(c)}return i}},this._getACLFromResponse=function(t){var n=!1,r=t.propStat[0].properties["{"+e.NS_DAV+"}acl"];if(r)for(var s=0;s<r.length;s++){var a=r[s].getElementsByTagNameNS("DAV:","href");if(0!==a.length&&(a=a[0].textContent)===o._currentUserPrincipal){var i=r[s].getElementsByTagNameNS("DAV:","write");i.length>0&&(n=!0)}}t.propStat[0].properties.canWrite=n},this._isUriAlreadyTaken=function(t){return-1!==this._takenUrls.indexOf(this._CALENDAR_HOME+t+"/")},this._suggestUri=function(t){var e=t.toString().toLowerCase().replace(/\s+/g,"-").replace(/[^\w\-]+/g,"").replace(/\-\-+/g,"-").replace(/^-+/,"").replace(/-+$/,"");if(!this._isUriAlreadyTaken(e))return e;if(-1===e.indexOf("-")&&(e+="-1",!this._isUriAlreadyTaken(e)))return e;for(;this._isUriAlreadyTaken(e);){var n=e.lastIndexOf("-"),r=e.substr(0,n),s=e.substr(n+1);s.match(/^\d+$/)?(s=parseInt(s),s++,e=r+"-"+s):""===s?e+="1":e=e="-1"}return e}}]),angular.module("Tasks").service("DavClient",[function(){var t;return t=new dav.Client({baseUrl:OC.linkToRemote("dav/calendars"),xmlNamespaces:{"DAV:":"d","urn:ietf:params:xml:ns:caldav":"c","http://apple.com/ns/ical/":"aapl","http://owncloud.org/ns":"oc","http://nextcloud.com/ns":"nc","http://calendarserver.org/ns/":"cs"}}),angular.extend(t,{NS_DAV:"DAV:",NS_IETF:"urn:ietf:params:xml:ns:caldav",NS_APPLE:"http://apple.com/ns/ical/",NS_OWNCLOUD:"http://owncloud.org/ns",NS_NEXTCLOUD:"http://nextcloud.com/ns",NS_CALENDARSERVER:"http://calendarserver.org/ns/",buildUrl:function(t){return window.location.protocol+"//"+window.location.host+t},wasRequestSuccessful:function(t){return t>=200&&t<=299}}),t}]),angular.module("Tasks").service("ICalFactory",[function(){return{new:function(){var t=new ICAL.Component(["vcalendar",[],[]]),e=angular.element("#app").attr("data-appVersion");return t.updatePropertyWithValue("prodid","-//Nextcloud Tasks v"+e),t}}}]),angular.module("Tasks").factory("Loading",[function(){return new(function(){function t(){this.count=0}return t.prototype.increase=function(){return this.count+=1},t.prototype.decrease=function(){return this.count-=1},t.prototype.getCount=function(){return this.count},t.prototype.isLoading=function(){return this.count>0},t}())}]),function(){angular.module("Tasks").factory("_Model",[function(){return function(){function t(){this._data=[],this._dataMap={},this._filterCache={}}return t.prototype.handle=function(t){var e,n,r,s;for(s=[],n=0,r=t.length;n<r;n++)e=t[n],s.push(this.add(e));return s},t.prototype.add=function(t,e){if(null===e&&(e=!0),e&&this._invalidateCache(),angular.isDefined(this._dataMap[t.id]))return this.update(t,e);this._data.push(t),this._dataMap[t.id]=t},t.prototype.update=function(t,e){var n,r,s,a;null===e&&(e=!0),e&&this._invalidateCache(),n=this.getById(t.id),a=[];for(r in t)s=t[r],"id"!==r&&a.push(n[r]=s);return a},t.prototype.getById=function(t){return this._dataMap[t]},t.prototype.getAll=function(){return this._data},t.prototype.removeById=function(t,e){var n,r,s,a,o,i;for(null===e&&(e=!0),i=this._data,n=a=0,o=i.length;a<o;n=++a)if(s=i[n],s.id===t)return this._data.splice(n,1),r=this._dataMap[t],delete this._dataMap[t],e&&this._invalidateCache(),r},t.prototype.clear=function(){return this._data.length=0,this._dataMap={},this._invalidateCache()},t.prototype._invalidateCache=function(){this._filterCache={}},t.prototype.get=function(t){var e;return e=t.hashCode(),angular.isDefined(this._filterCache[e])||(this._filterCache[e]=t.exec(this._data)),this._filterCache[e]},t.prototype.size=function(){return this._data.length},t}()}])}.call(void 0),angular.module("Tasks").factory("Persistence",["Request","Loading","$rootScope","$q","CalendarService",function(t,e,n,r,s){return new(function(){function t(t,e,n,r){this._request=t,this._Loading=e,this._$rootScope=n,this._CalendarService=r}return t.prototype.init=function(){var t=this;return this.deferred=r.defer(),function(){return t.deferred.resolve()},this.getCollections(),this.getSettings(),this.deferred.promise},t.prototype.getCollections=function(t,e){var n,r,s,a=this;return null===e&&(e=!0),t||(t=function(){}),e?(this._Loading.increase(),s=function(e){return t(),a._Loading.decrease()},n=function(t){return a._Loading.decrease()}):(s=function(e){return t()},n=function(t){}),r={onSuccess:s,onFailure:n},this._request.get("/apps/tasks/collections",r)},t.prototype.getSettings=function(t,e){var n,r,s,a=this;return null===e&&(e=!0),t||(t=function(){}),e?(this._Loading.increase(),s=function(e){return t(),a._Loading.decrease()},n=function(t){return a._Loading.decrease()}):(s=function(e){return t()},n=function(t){}),r={onSuccess:s,onFailure:n},this._request.get("/apps/tasks/settings",r)},t.prototype.setVisibility=function(t,e){var n={routeParams:{collectionID:t,visibility:e}};return this._request.post("/apps/tasks/collection/{collectionID}/visibility/{visibility}",n)},t.prototype.setting=function(t,e,n){var r={routeParams:{type:t,setting:e,value:n}};return this._request.post("/apps/tasks/settings/{type}/{setting}/{value}",r)},t}())(t,e,n,s)}]),angular.module("Tasks").factory("Publisher",["CollectionsModel","SettingsModel",function(t,e){return new(function(){function t(t,e){this._$collectionsmodel=t,this._$settingsmodel=e,this._subscriptions={},this.subscribeObjectTo(this._$collectionsmodel,"collections"),this.subscribeObjectTo(this._$settingsmodel,"settings")}return t.prototype.subscribeObjectTo=function(t,e){var n=this._subscriptions;return n[e]||(n[e]=[]),this._subscriptions[e].push(t)},t.prototype.publishDataTo=function(t,e){var n,r,s,a,o;for(n=this._subscriptions[e]||[],r=[],a=0,o=n.length;a<o;a++)s=n[a],r.push(s.handle(t));return r},t}())(t,e)}]),angular.module("Tasks").factory("RandomStringService",function(){return{generate:function(){return Math.random().toString(36).substr(2)}}}),angular.module("Tasks").factory("Request",["$http","Publisher",function(t,e){return new(function(){function t(t,e){this.$http=t,this.publisher=e,this.count=0,this.initialized=!1,this.shelvedRequests=[],this.initialized=!0,this._executeShelvedRequests()}return t.prototype.request=function(t,e){var n,r,s;return null===e&&(e={}),r={routeParams:{},data:{},onSuccess:function(){return{}},onFailure:function(){return{}},config:{}},angular.extend(r,e),this.initialized?(s=OC.generateUrl(t,r.routeParams),n={url:s,data:r.data},angular.extend(n,r.config),"GET"===n.method&&(n.params=n.data),this.$http(n).then(function(t){return function(e){var n,s,a;s=e.data.data;for(n in s)a=s[n],t.publisher.publishDataTo(a,n);return r.onSuccess(e.data,e.status,e.headers,e.config)}}(this)).catch(function(t){return r.onFailure(t.data,t.status,t.headers,t.config)})):void this._shelveRequest(t,r)},t.prototype.post=function(t,e){return null===e&&(e={}),e.config||(e.config={}),e.config.method="POST",this.request(t,e)},t.prototype.get=function(t,e){return null===e&&(e={}),e.config||(e.config={}),e.config.method="GET",this.request(t,e)},t.prototype.put=function(t,e){return null===e&&(e={}),e.config||(e.config={}),e.config.method="PUT",this.request(t,e)},t.prototype.delete=function(t,e){return null===e&&(e={}),e.config||(e.config={}),e.config.method="DELETE",this.request(t,e)},t.prototype._shelveRequest=function(t,e){var n={route:t,data:e};return this.shelvedRequests.push(n)},t.prototype._executeShelvedRequests=function(){var t,e,n,r,s;for(e=this.shelvedRequests,n=[],r=0,s=e.length;r<s;r++)t=e[r],n.push(this.request(t.route,t.data));return n},t}())(t,e)}]),angular.module("Tasks").factory("Status",[function(){return new(function(){function t(){this._$status={addingList:!1,focusTaskInput:!1}}return t.prototype.getStatus=function(){return this._$status},t}())}]),angular.module("Tasks").service("VTodoService",["DavClient","RandomStringService","$timeout",function(t,e,n){var r=this;this.getAll=function(e,n,r){null===n&&(n=!1),null===r&&(r=!1);var s=document.implementation.createDocument("","",null),a=s.createElement("c:calendar-query");a.setAttribute("xmlns:c","urn:ietf:params:xml:ns:caldav"),a.setAttribute("xmlns:d","DAV:"),a.setAttribute("xmlns:a","http://apple.com/ns/ical/"),a.setAttribute("xmlns:o","http://owncloud.org/ns"),s.appendChild(a);var o=s.createElement("d:prop");a.appendChild(o);var i=s.createElement("d:getetag");o.appendChild(i);var u=s.createElement("c:calendar-data");o.appendChild(u);var c=s.createElement("c:filter");a.appendChild(c);var l=s.createElement("c:comp-filter");l.setAttribute("name","VCALENDAR"),c.appendChild(l);var d=s.createElement("c:comp-filter");d.setAttribute("name","VTODO"),l.appendChild(d);var p=s.createElement("c:prop-filter");if(p.setAttribute("name","COMPLETED"),d.appendChild(p),!n){var m=s.createElement("c:is-not-defined");p.appendChild(m)}if(r){var h=s.createElement("c:prop-filter");h.setAttribute("name","RELATED-TO"),d.appendChild(h);var f=s.createElement("c:text-match"),g=s.createTextNode(r.uid);f.appendChild(g),h.appendChild(f)}var y=e.url,k={"Content-Type":"application/xml; charset=utf-8",Depth:1,requesttoken:OC.requestToken},_=a.outerHTML;return t.request("REPORT",y,k,_).then(function(n){if(t.wasRequestSuccessful(n.status)){var r=[];for(var s in n.body){var a=n.body[s],o=a.propStat[0].properties,i=a.href.substr(a.href.lastIndexOf("/")+1),u={calendar:e,properties:o,uri:i};r.push(u)}return r}})},this.get=function(e,n){var r=e.url+n;return t.request("GET",r,{requesttoken:OC.requestToken},"").then(function(t){return{calendar:e,properties:{"{urn:ietf:params:xml:ns:caldav}calendar-data":t.body,"{DAV:}getetag":t.xhr.getResponseHeader("ETag")},uri:n}})},this.create=function(e,n,s){void 0===s&&(s=!0);var a={"Content-Type":"text/calendar; charset=utf-8",requesttoken:OC.requestToken},o=this._generateRandomUri(),i=e.url+o;return t.request("PUT",i,a,n).then(function(n){return t.wasRequestSuccessful(n.status)?!s||r.get(e,o):(console.log(n),!1)})},this.update=function(e){var r=e.calendar.url+e.uri,s={"Content-Type":"text/calendar; charset=utf-8","If-Match":e.etag,requesttoken:OC.requestToken};return n.cancel(e.timers.update),t.request("PUT",r,s,e.data).then(function(n){return e.etag=n.xhr.getResponseHeader("ETag"),t.wasRequestSuccessful(n.status)})},this.delete=function(e){var n=e.calendar.url+e.uri,r={"If-Match":e.etag,requesttoken:OC.requestToken};return t.request("DELETE",n,r,"").then(function(e){return t.wasRequestSuccessful(e.status)})},this._generateRandomUri=function(){var t="Nextcloud-";return t+=e.generate(),t+=e.generate(),t+=".ics"}}]),angular.module("Tasks").factory("ListsBusinessLayer",["ListsModel","Persistence","TasksBusinessLayer","CalendarService",function(t,e,n,r){return new(function(){function e(t,e,n,r){this._$listsmodel=t,this._persistence=e,this._$tasksbusinesslayer=n,this._$calendarservice=r}return e.prototype.init=function(){return this._$calendarservice.getAll().then(function(e){var r,s,a,o;for(o=[],s=0,a=e.length;s<a;s++)r=e[s],t.add(r),o.push(n.getAll(r));return o})},e.prototype.add=function(e,n){return this._$calendarservice.create(e,n,["vtodo"]).then(function(e){return t.add(e),e})},e.prototype.delete=function(e){return this._$calendarservice.delete(e).then(function(){return t.delete(e)})},e.prototype.rename=function(t){this._$calendarservice.update(t).then(function(t){t.dropPreviousState()})},e}())(t,e,n,r)}]),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};angular.module("Tasks").factory("SearchBusinessLayer",["ListsModel","Persistence","TasksModel","$rootScope","$routeParams","$location",function(n,r,s,a,o,i){return new(function(){function n(e,n,r,s,a,o){this._$listsmodel=e,this._persistence=n,this._$tasksmodel=r,this._$rootScope=s,this._$routeparams=a,this._$location=o,this.getFilter=t(this.getFilter,this),this.setFilter=t(this.setFilter,this),this.attach=t(this.attach,this),this.initialize(),this._$searchString=""}return n.prototype.attach=function(t){var e=this;return t.setFilter("tasks",function(t){return e._$rootScope.$apply(function(){return e.setFilter(t)})}),t.setRenderer("task",this.renderTaskResult.bind(this)),t.setHandler("task",this.handleTaskClick.bind(this))},n.prototype.setFilter=function(t){this._$searchString=t},n.prototype.getFilter=function(){return this._$searchString},n.prototype.initialize=function(){var t=this;return this.handleTaskClick=function(e,n,r){return t._$location.path("/lists/"+n.calendarid+"/tasks/"+n.id)},this.renderTaskResult=function(n,r){var s;return t._$tasksmodel.filterTasks(r,t._$routeparams.listID)&&t._$tasksmodel.isLoaded(r)?null:(s=e("div.task-item.template"),s=s.clone(),n=e('<tr class="result"></tr>').append(s.removeClass("template")),n.data("result",r),n.find("span.title").text(r.name),r.starred&&n.find("span.task-star").addClass("task-starred"),r.completed&&(n.find("div.task-item").addClass("done"),n.find("span.task-checkbox").addClass("svg-checkmark")),r.complete&&n.find("div.percentdone").css({width:r.complete+"%","background-color":""+t._$listsmodel.getColor(r.calendarid)}),r.note&&n.find("div.title-wrapper").addClass("attachment"),n)},OC.Plugins.register("OCA.Search",this)},n}())(n,r,s,a,o,i)}])}.call(void 0),angular.module("Tasks").factory("SettingsBusinessLayer",["Persistence","SettingsModel",function(t,e){return new(function(){function t(t,e){this._persistence=t,this._$settingsmodel=e}return t.prototype.updateModel=function(){var t;return t=function(){},this._persistence.getCollections(t,!0)},t.prototype.setVisibility=function(t,e){return this._persistence.setVisibility(t,e)},t.prototype.toggle=function(t,e){this._$settingsmodel.toggle(t,e);var n=this._$settingsmodel.getById(t)[e];return this._persistence.setting(t,e,+n)},t.prototype.set=function(t,e,n){return this._persistence.setting(t,e,n)},t}())(t,e)}]),angular.module("Tasks").factory("TasksBusinessLayer",["TasksModel","Persistence","VTodoService","VTodo","$timeout",function(t,e,n,r,s){return new(function(){function e(t,e,n,r,s){this._$tasksmodel=t,this._persistence=e,this._$vtodoservice=n}return e.prototype.getAll=function(e,n,s){return this._$vtodoservice.getAll(e,n,s).then(function(e){var n,s,a,o;for(o=[],s=0,a=e.length;s<a;s++){n=e[s];var i=new r(n.calendar,n.properties,n.uri);o.push(t.ad(i))}return o})},e.prototype.add=function(e){return this._$vtodoservice.create(e.calendar,e.data).then(function(e){var n=new r(e.calendar,e.properties,e.uri);return t.ad(n),n})},e.prototype.getTask=function(e,n){return this._$vtodoservice.get(e,n).then(function(e){return t.ad(e),e})},e.prototype.setPriority=function(t,e){t.calendar.writable&&(t.priority=e,this.doUpdate(t))},e.prototype.setPercentComplete=function(t,e){t.calendar.writable&&(e<100?this.uncompleteParents(t.related):this.completeChildren(t),t.complete=e,this.triggerUpdate(t))},e.prototype.triggerUpdate=function(t,e){e||(e=1e3),t.timers.update&&s.cancel(t.timers.update),t.timers.update=s(function(t){n.update(t)},e,!0,t)},e.prototype.doUpdate=function(t){return this._$vtodoservice.update(t)},e.prototype.completeChildren=function(t){var e,n,r,s=this._$tasksmodel.getChildren(t),a=[];for(n=0,r=s.length;n<r;n++)e=s[n],a.push(this.setPercentComplete(e,100));return a},e.prototype.uncompleteParents=function(t){if(t){var e=this._$tasksmodel.getByUid(t);if(e.completed)return this.setPercentComplete(e,0)}},e.prototype.setHideSubtasks=function(t,e){t.hideSubtasks=e,t.calendar.writable&&this.doUpdate(t)},e.prototype.setHideCompletedSubtasks=function(t,e){t.hideCompletedSubtasks=e,t.calendar.writable&&this.doUpdate(t)},e.prototype.deleteTask=function(e){var n,r,s,a;for(r=this._$tasksmodel.getChildren(e),s=0,a=r.length;s<a;s++)n=r[s],this.deleteTask(n);return this._$vtodoservice.delete(e).then(function(){return t.delete(e)})},e.prototype.momentToICALTime=function(t,e){return e?ICAL.Time.fromDateString(t.format("YYYY-MM-DD")):ICAL.Time.fromDateTimeString(t.format("YYYY-MM-DDTHH:mm:ss"))},e.prototype.initDueDate=function(t){var e=moment(t.start,"YYYY-MM-DDTHH:mm:ss");if(!moment(t.due,"YYYY-MM-DDTHH:mm:ss").isValid()){var n=e.isAfter()?e:moment();return t.allDay?n.startOf("day").add(1,"d"):n.startOf("hour").add(1,"h"),this.setDue(t,n,"all")}},e.prototype.setDue=function(t,e,n){null===n&&(n="day");var r=t.allDay,s=moment(t.start,"YYYY-MM-DDTHH:mm:ss"),a=moment(t.due,"YYYY-MM-DDTHH:mm:ss"),o=a.clone();if("day"===n)moment(o).isValid()?o.year(e.year()).month(e.month()).date(e.date()):o=e.add(12,"h");else if("time"===n)moment(o).isValid()?o.hour(e.hour()).minute(e.minute()):o=e;else{if("all"!==n)return;o=e}(o.isBefore(s)||o.isSame(s))&&(s.subtract(a.diff(o),"ms"),t.start=this.momentToICALTime(s,r)),t.due=this.momentToICALTime(o,r),this.doUpdate(t)},e.prototype.deleteDueDate=function(t){t.due=null,this.doUpdate(t)},e.prototype.initStartDate=function(t){var e=moment(t.start,"YYYY-MM-DDTHH:mm:ss"),n=moment(t.due,"YYYY-MM-DDTHH:mm:ss");if(!e.isValid()){var r=moment().add(1,"h");return n.isBefore(r)&&(r=n.subtract(1,"m")),r.startOf(t.allDay?"day":"hour"),this.setStart(t,r,"all")}},e.prototype.setStart=function(t,e,n){null===n&&(n="day");var r=t.allDay,s=moment(t.due,"YYYY-MM-DDTHH:mm:ss"),a=moment(t.start,"YYYY-MM-DDTHH:mm:ss"),o=a.clone();if("day"===n)moment(o).isValid()?o.year(e.year()).month(e.month()).date(e.date()):o=e.add(12,"h");else if("time"===n)moment(o).isValid()?o.hour(e.hour()).minute(e.minute()):o=e;else{if("all"!==n)return;o=e}(o.isAfter(s)||o.isSame(s))&&(s.add(o.diff(a),"ms"),t.due=this.momentToICALTime(s,r)),t.start=this.momentToICALTime(o,r),this.doUpdate(t)},e.prototype.deleteStartDate=function(t){t.start=null,this.doUpdate(t)},e.prototype.setAllDay=function(t,e){if(t.allDay=e,e){var n=moment(t.due,"YYYY-MM-DDTHH:mm:ss"),r=moment(t.start,"YYYY-MM-DDTHH:mm:ss");(r.isAfter(n)||r.isSame(n))&&(r=moment(n).subtract(1,"day"),t.start=this.momentToICALTime(r,e))}this.doUpdate(t)},e.prototype.initReminder=function(t){var e,n;if(!this.checkReminderDate(t))return n=this._$tasksmodel.getById(t),n.reminder={type:"DURATION",action:"DISPLAY",duration:{token:"week",week:0,day:0,hour:0,minute:0,second:0,params:{invert:!0}}},moment(n.start,"YYYYMMDDTHHmmss").isValid()?(e=n.reminder.duration.params,e.related="START",e.id="10"):moment(n.due,"YYYYMMDDTHHmmss").isValid()?(e=n.reminder.duration.params,e.related="END",e.id="11"):(n.reminder.type="DATE-TIME",n.reminder.date=moment().startOf("hour").add(1,"h").format("YYYYMMDDTHHmmss")),this.setReminder(t)},e.prototype.setReminderDate=function(t,e,n){var r,s,a;if(null===n&&(n="day"),s=this._$tasksmodel.getById(t).reminder,r={type:"DATE-TIME",action:"DISPLAY",duration:null},"day"===n)this.checkReminderDate(t)||null===s?(a=moment(s.date,"YYYYMMDDTHHmmss"),r.action=s.action,a.isValid()&&"DATE-TIME"===s.type?a.year(e.year()).month(e.month()).date(e.date()):a=e.add(12,"h")):a=e.add(12,"h");else{if("time"!==n)return;this.checkReminderDate(t)||null===s?(a=moment(s.date,"YYYYMMDDTHHmmss"),r.action=s.action,a.isValid()&&"DATE-TIME"===s.type?a.hour(e.hour()).minute(e.minute()):a=e):a=e}return r.date=a.format("YYYYMMDDTHHmmss"),this._$tasksmodel.setReminder(t,r),this._persistence.setReminder(t,r)},e.prototype.setReminder=function(t){var e;if(this.checkReminderDate(t))return e=this._$tasksmodel.getById(t).reminder,this._persistence.setReminder(t,e)},e.prototype.checkReminderDate=function(t){var e,n,r,s,a,o,i,u,c;if(u=this._$tasksmodel.getById(t),null!==(o=u.reminder)&&"DURATION"===o.type){if(!o.duration)return!1;if("START"===o.duration.params.related)c="start";else{if("END"!==o.duration.params.related)return!1;c="due"}n=moment(u[c],"YYYYMMDDTHHmmss"),r=o.duration,e={w:r.week,d:r.day,h:r.hour,m:r.minute,s:r.second},n=r.params.invert?n.subtract(e):n.add(e),u.reminder.date=n.format("YYYYMMDDTHHmmss")}else{if(null===o||"DATE-TIME"!==o.type)return!1;if(r=o.duration,n=moment(o.date,"YYYYMMDDTHHmmss"),!n.isValid())return!1;if(r)a="START"===r.params.related?moment(u.start,"YYYYMMDDTHHmmss"):moment(u.due,"YYYYMMDDTHHmmss"),i=this.secondsToSegments(n.diff(a,"seconds")),r.params.invert=i.invert,r.token="week",r.week=i.week,r.day=i.day,r.hour=i.hour,r.minute=i.minute,r.second=i.second;else{if(u.start)a=moment(u.start,"YYYYMMDDTHHmmss"),s="START",e=0;else{if(!u.due)return!0;a=moment(u.due,"YYYYMMDDTHHmmss"),s="END",e=1}i=this.secondsToSegments(n.diff(a,"seconds")),o.duration={token:"week",params:{related:s,invert:i.invert,id:+i.invert+""+e},week:i.week,day:i.day,hour:i.hour,minute:i.minute,second:i.second}}}return!0},e.prototype.secondsToSegments=function(t){var e,n,r,s,a;return t<0?(t*=-1,r=!0):r=!1,a=Math.floor(t/604800),t-=604800*a,e=Math.floor(t/86400),t-=86400*e,n=Math.floor(t/3600),t-=3600*n,s=Math.floor(t/60),t-=60*s,{week:a,day:e,hour:n,minute:s,second:t,invert:r}},e.prototype.deleteReminderDate=function(t){return this._$tasksmodel.setReminder(t,null),this._persistence.setReminder(t,!1)},e.prototype.changeCalendar=function(s,a){if(s.calendar!==a&&a.writable){var o=angular.copy(s);if(o.calendar=a,!t.hasNoParent(o)){t.getByUid(o.related).calendar.uri!==o.calendar.uri&&(o.related=null,e.prototype.setPercentComplete(o,0))}return n.create(a,o.data).then(function(a){var i=new r(a.calendar,a.properties,a.uri);return t.ad(i),n.delete(s).then(function(){t.delete(s);var n,r,a,i=[],u=t.getChildren(o);for(n=0,r=u.length;n<r;n++)a=u[n],a.calendar.uri!==o.calendar.uri&&i.push(e.prototype.changeCalendar(a,o.calendar));return Promise.all(i)})})}return Promise.resolve(!0)},e.prototype.changeCollection=function(t,e){var n=this._$tasksmodel.getById(t);switch(e){case"starred":return n.priority=9,this.doUpdate(n);case"completed":return this.setPercentComplete(n,100);case"uncompleted":return!!n.completed&&this.setPercentComplete(n,0);case"today":return this.setDue(n,moment().startOf("day").add(12,"h"),"all");case"week":case"all":default:return!1}},e.prototype.changeParent=function(t,e){e.calendar.writable&&(t.related=e.uid,e.hideSubtasks=0,e.completed&&!t.completed?this.setPercentComplete(e,0):this.doUpdate(e),e.calendar.uri!==t.calendar.uri?this.changeCalendar(t,e.calendar):this.doUpdate(t))},e.prototype.makeRootTask=function(t,e,n){if(e.writable){var r=[];return t.related=null,"completed"!==n&&t.completed&&(t.complete=0),r.push(this.changeCollection(t.uri,n)),t.calendar!==e?r.push(this.changeCalendar(t,e)):r.push(this.doUpdate(t)),r}},e.prototype.addComment=function(t,e,n){var r;return e||(e=function(){}),n||(n=function(){}),this._$tasksmodel.addComment(t),r=function(t){return"error"===t.status?n():e(t.data)
+},this._persistence.addComment(t,r)},e.prototype.deleteComment=function(t,e){return this._$tasksmodel.deleteComment(t,e),this._persistence.deleteComment(t,e)},e}())(t,e,n,r,s)}]),angular.module("Tasks").factory("Calendar",["$rootScope","$filter","$window",function(e,n,r){function s(e,n,r){n.color=n["{http://apple.com/ns/ical/}calendar-color"],void 0!==n.color?9===n.color.length&&(n.color=n.color.substr(0,7)):n.color="#1d2d44",angular.extend(this,{_propertiesBackup:{},_properties:{url:e,uri:r,enabled:"1"===n["{http://owncloud.org/ns}calendar-enabled"],displayname:n["{DAV:}displayname"]||t("tasks","Unnamed"),color:n.color,order:parseInt(n["{http://apple.com/ns/ical/}calendar-order"])||0,components:{vevent:!1,vjournal:!1,vtodo:!1},writable:n.canWrite,shareable:n.canWrite,sharedWith:{users:[],groups:[]},owner:"",loadedCompleted:!1},_updatedProperties:[]}),this._propertiesBackup=angular.copy(this._properties);for(var s=n["{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set"],a=0;a<s.length;a++){var o=s[a].attributes.getNamedItem("name").textContent.toLowerCase();this._properties.components.hasOwnProperty(o)&&(this._properties.components[o]=!0)}var i=n["{http://owncloud.org/ns}invite"];if(void 0!==i)for(var u=0;u<i.length;u++){var c=i[u].getElementsByTagNameNS("DAV:","href");if(0!==c.length){c=c[0].textContent;var l=i[u].getElementsByTagNameNS("http://owncloud.org/ns","access");if(0!==l.length){l=l[0];var d=l.getElementsByTagNameNS("http://owncloud.org/ns","read-write");d=0!==d.length,c.startsWith("principal:principals/users/")?this._properties.sharedWith.users.push({id:c.substr(27),displayname:c.substr(27),writable:d}):c.startsWith("principal:principals/groups/")&&this._properties.sharedWith.groups.push({id:c.substr(28),displayname:c.substr(28),writable:d})}}}var p=n["{DAV:}owner"];void 0!==p&&0!==p.length&&(p=p[0].textContent.slice(0,-1),p.startsWith("/remote.php/dav/principals/users/")&&(this._properties.owner=p.substr(33)))}return s.prototype={get url(){return this._properties.url},get caldav(){return r.location.origin+this.url},get exportUrl(){var t=this.url;return"/"===t.slice(t.length-1)&&(t=t.slice(0,t.length-1)),t+="?export"},get enabled(){return this._properties.enabled},get uri(){return this._properties.uri},get components(){return this._properties.components},set enabled(t){this._properties.enabled=t,this._setUpdated("enabled")},get displayname(){return this._properties.displayname},set displayname(t){this._properties.displayname=t,this._setUpdated("displayname")},get color(){return this._properties.color},set color(t){this._properties.color=t,this._setUpdated("color")},get sharedWith(){return this._properties.sharedWith},set sharedWith(t){this._properties.sharedWith=t},get textColor(){var t,e=this.color;switch(e.length){case 4:return t=e.match(/^#([0-9a-f]{3})$/i)[1],t?this._generateTextColor(17*parseInt(t.charAt(0),16),17*parseInt(t.charAt(1),16),17*parseInt(t.charAt(2),16)):"#fff";case 7:case 9:var n=new RegExp("^#([0-9a-f]{"+(e.length-1)+"})$","i");return t=e.match(n)[1],t?this._generateTextColor(parseInt(t.substr(0,2),16),parseInt(t.substr(2,2),16),parseInt(t.substr(4,2),16)):"#fff";default:return"#fff"}},get order(){return this._properties.order},set order(t){this._properties.order=t,this._setUpdated("order")},get writable(){return this._properties.writable},get shareable(){return this._properties.shareable},get owner(){return this._properties.owner},get loadedCompleted(){return this._properties.loadedCompleted},set loadedCompleted(t){this._properties.loadedCompleted=t},_setUpdated:function(t){-1===this._updatedProperties.indexOf(t)&&this._updatedProperties.push(t)},get updatedProperties(){return this._updatedProperties},resetUpdatedProperties:function(){this._updatedProperties=[]},prepareUpdate:function(){this._propertiesBackup=angular.copy(this._properties)},resetToPreviousState:function(){this._properties=angular.copy(this._propertiesBackup),this._propertiesBackup={}},dropPreviousState:function(){this._propertiesBackup={}},toggleSharesEditor:function(){this.list.editingShares=!this.list.editingShares},_generateTextColor:function(t,e,n){return(299*t+587*e+114*n)/1e3>130?"#000000":"#FAFAFA"}},s}]),function(){var t={}.hasOwnProperty,e=function(e,n){function r(){this.constructor=e}for(var s in n)t.call(n,s)&&(e[s]=n[s]);return r.prototype=n.prototype,e.prototype=new r,e.__super__=n.prototype,e};angular.module("Tasks").factory("CollectionsModel",["TasksModel","_Model",function(t,n){return new(function(t){function n(t){this._$tasksmodel=t,this._nameCache={},n.__super__.constructor.call(this)}return e(n,t),n.prototype.add=function(t,e){if(null===e&&(e=!0),this._nameCache[t.displayname]=t,angular.isDefined(t.id))return n.__super__.add.call(this,t,e)},n.prototype.getCount=function(t,e){var n,r,s,a,o;for(null===e&&(e=""),n=0,s=this._$tasksmodel.filteredTasks(e),a=0,o=s.length;a<o;a++)r=s[a],n+=this._$tasksmodel.filterTasks(r,t)&&!r.related;return n},n}(n))(t)}])}.call(void 0),function(){var t={}.hasOwnProperty,e=function(e,n){function r(){this.constructor=e}for(var s in n)t.call(n,s)&&(e[s]=n[s]);return r.prototype=n.prototype,e.prototype=new r,e.__super__=n.prototype,e};angular.module("Tasks").factory("ListsModel",["TasksModel","_Model",function(t,n){return new(function(t){function n(t){this._$tasksmodel=t,this._tmpUriCache={},this._data=[],this._dataMap={},this._filterCache={}}return e(n,t),n.prototype.add=function(t,e){if(null===e&&(e=!0),angular.isDefined(t.uri)&&angular.isDefined(this.getByUri(t.uri)))return this.update(t,e);angular.isDefined(t.uri)&&(e&&this._invalidateCache(),angular.isDefined(this._dataMap[t.uri])||(this._data.push(t),this._dataMap[t.uri]=t))},n.prototype.getByUri=function(t){return this._dataMap[t]},n.prototype.update=function(t,e){var r;return null===e&&(e=!0),r=this._tmpIdCache[t.tmpID],angular.isDefined(t.id)&&angular.isDefined(r)&&angular.isUndefined(r.id)&&(r.id=t.id,this._dataMap[t.id]=r),t.void=!1,n.__super__.update.call(this,t,e)},n.prototype.delete=function(t,e){var n,r,s,a,o;for(null===e&&(e=!0),o=this._data,n=s=0,a=o.length;s<a;n=++s)if(o[n]===t)return this._data.splice(n,1),r=this._dataMap[t.uri],delete this._dataMap[t.uri],e&&this._invalidateCache(),r},n.prototype.getStandardList=function(){var t;if(this.size())return t=this.getAll(),t[0]},n.prototype.isNameAlreadyTaken=function(t,e){var n,r,s,a,o;for(r=this.getAll(),s=!1,a=0,o=r.length;a<o;a++)n=r[a],n.displayname===t&&n.uri!==e&&(s=!0);return s},n.prototype.getCount=function(t,e,n){var r,s,a,o,i;for(null===n&&(n=""),r=0,a=this._$tasksmodel.filteredTasks(n),o=0,i=a.length;o<i;o++)s=a[o],r+=this._$tasksmodel.filterTasks(s,e)&&s.calendar.uri===t&&!s.related;return r},n.prototype.loadedCompleted=function(t){return!angular.isUndefined(this.getById(t))&&this.getById(t).loadedCompleted},n.prototype.setLoadedCompleted=function(t){this.getById(t).loadedCompleted=!0},n.prototype.getColor=function(t){return angular.isUndefined(this.getById(t))?"#CCCCCC":this.getById(t).calendarcolor},n.prototype.getName=function(t){return angular.isUndefined(this.getById(t))?"":this.getById(t).displayname},n}(n))(t)}])}.call(void 0),function(){var t={}.hasOwnProperty,e=function(e,n){function r(){this.constructor=e}for(var s in n)t.call(n,s)&&(e[s]=n[s]);return r.prototype=n.prototype,e.prototype=new r,e.__super__=n.prototype,e};angular.module("Tasks").factory("SettingsModel",["_Model",function(t){return new(function(t){function n(){this._nameCache={},n.__super__.constructor.call(this)}return e(n,t),n.prototype.add=function(t,e){return null===e&&(e=!0),this._nameCache[t.displayname]=t,angular.isDefined(t.id)?n.__super__.add.call(this,t,e):this._data.push(t)},n.prototype.toggle=function(t,e){var n;n=this.getById(t),this.getById(t)[e]=!n[e]},n}(t))}])}.call(void 0),function(){var t={}.hasOwnProperty,e=function(e,n){function r(){this.constructor=e}for(var s in n)t.call(n,s)&&(e[s]=n[s]);return r.prototype=n.prototype,e.prototype=new r,e.__super__=n.prototype,e},n=[].indexOf||function(t){for(var e=0,n=this.length;e<n;e++)if(e in this&&this[e]===t)return e;return-1};angular.module("Tasks").factory("TasksModel",["_Model",function(t){return new(function(t){function r(){this._tmpIdCache={},r.__super__.constructor.call(this)}return e(r,t),r.prototype.ad=function(t,e){if(null===e&&(e=!0),angular.isDefined(t.uri)&&angular.isDefined(this.getByUri(t.uri)))return this.update(t,e);angular.isDefined(t.uri)&&(e&&this._invalidateCache(),angular.isDefined(this._dataMap[t.uri])||(this._data.push(t),this._dataMap[t.uri]=t))},r.prototype.getByUri=function(t){return this._dataMap[t]},r.prototype.update=function(t,e){var n;return null===e&&(e=!0),e&&this._invalidateCache(),n=this.getByUri(t.uri),n.components=t.components,n.components.toString(),n},r.prototype.removeById=function(t){return r.__super__.removeById.call(this,t)},r.prototype.delete=function(t,e){var n,r,s,a,o;for(null===e&&(e=!0),o=this._data,n=s=0,a=o.length;s<a;n=++s)if(o[n]===t)return this._data.splice(n,1),r=this._dataMap[t.uri],delete this._dataMap[t.uri],e&&this._invalidateCache(),r},r.prototype.removeByList=function(t){var e,n,r,s,a;s=this.getAll(),r=[];for(var o=0,i=s.length;o<i;o++)n=s[o],n.calendarid===t&&r.push(n.id);a=[];for(var u=0,c=r.length;u<c;u++)e=r[u],a.push(this.removeById(e));return a},r.prototype.taskAtDay=function(t,e){var n,r,s,a,o;if(a=moment(t.start,"YYYYMMDDTHHmmss"),r=moment(t.due,"YYYYMMDDTHHmmss"),a.isValid()&&!r.isValid()){if(n=a.diff(moment().startOf("day"),"days",!0),!e&&n<e+1)return!0;if(n<e+1&&n>=e)return!0}if(r.isValid()&&!a.isValid()){if(n=r.diff(moment().startOf("day"),"days",!0),!e&&n<e+1)return!0;if(n<e+1&&n>=e)return!0}if(a.isValid()&&r.isValid()){if(o=a.diff(moment().startOf("day"),"days",!0),s=r.diff(moment().startOf("day"),"days",!0),!e&&(o<e+1||s<e+1))return!0;if(o<e+1&&o>=e&&s>=e)return!0;if(s<e+1&&s>=e&&o>=e)return!0}return!1},r.prototype.isLoaded=function(t){return!!this.getById(t.id)},r.prototype.hasSubtasks=function(t){for(var e=this.getAll(),n=0,r=e.length;n<r;n++){if(e[n].related===t)return!0}return!1},r.prototype.hasCompletedSubtasks=function(t){for(var e=this.getAll(),n=0,r=e.length;n<r;n++){var s=e[n];if(s.related===t&&s.completed)return!0}return!1},r.prototype.hasNoParent=function(t){if(t.related){for(var e=this.getAll(),n=0,r=e.length;n<r;n++){var s=e[n];if(t.related===s.uid&&t!==s)return!1}return!0}return!0},r.prototype.getIdByUid=function(t){for(var e=this.getAll(),n=0,r=e.length;n<r;n++){var s=e[n];if(s.uid===t)return s.id}return!1},r.prototype.getByUid=function(t){for(var e=this.getAll(),n=0,r=e.length;n<r;n++){var s=e[n];if(s.uid===t)return s}return null},r.prototype.getChildren=function(t){var e,n,r;r=this.getAll(),e=[];for(var s=0,a=r.length;s<a;s++)n=r[s],n.related===t.uid&&n!==t&&e.push(n);return e},r.prototype.getDescendantIDs=function(t){var e,n,r;n=this.getChildren(t),r=[];for(var s=0,a=n.length;s<a;s++)e=n[s],r=r.concat(e.uri),r=r.concat(this.getDescendantIDs(e));return r},r.prototype.filterTasks=function(t,e){switch(e){case"completed":return!0===t.completed;case"all":return!1===t.completed;case"current":return!1===t.completed&&this.current(t.start,t.due);case"starred":return!1===t.completed&&t.priority>5;case"today":return!1===t.completed&&(this.today(t.start)||this.today(t.due));case"week":return!1===t.completed&&(this.week(t.start)||this.week(t.due));default:return""+t.calendar.uri==""+e}},r.prototype.filteredTasks=function(t){var e,n,r,s,a;if(r=[],a=this.getAll(),t){for(var o=0,i=a.length;o<i;o++)if(s=a[o],this.filterTasksByString(s,t)){if(this.objectExists(s,r))continue;r.push(s),n=this.getIdByUid(s.related),e=this.getAncestor(n,r),e&&(r=r.concat(e))}}else r=a;return r},r.prototype.objectExists=function(t,e){for(var n=0,r=e.length;n<r;n++){if(e[n].id===t.id)return!0}return!1},r.prototype.filterTasksByString=function(t,e){var r,s,a;s=["name","note","location","categories","comments"],e=e.toLowerCase();for(r in t)if(a=t[r],n.call(s,r)>=0)if("comments"===r){if(this.searchComments(t.comments,e))return!0}else if("categories"===r){if(this.searchCategories(t.categories,e))return!0}else if(-1!==a.toLowerCase().indexOf(e))return!0;return!1},r.prototype.searchComments=function(t,e){for(var n=0,r=t.length;n<r;n++){if(-1!==t[n].comment.toLowerCase().indexOf(e))return!0}return!1},r.prototype.searchCategories=function(t,e){for(var n=0,r=t.length;n<r;n++){if(-1!==t[n].toLowerCase().indexOf(e))return!0}return!1},r.prototype.setReminder=function(t,e){return this.update({id:t,reminder:e})},r.prototype.overdue=function(t){return moment(t,"YYYYMMDDTHHmmss").isValid()&&moment(t,"YYYYMMDDTHHmmss").diff(moment())<0},r.prototype.due=function(t){return moment(t,"YYYYMMDDTHHmmss").isValid()},r.prototype.today=function(t){return moment(t,"YYYYMMDDTHHmmss").isValid()&&moment(t,"YYYYMMDDTHHmmss").diff(moment().startOf("day"),"days",!0)<1},r.prototype.week=function(t){return moment(t,"YYYYMMDDTHHmmss").isValid()&&moment(t,"YYYYMMDDTHHmmss").diff(moment().startOf("day"),"days",!0)<7},r.prototype.current=function(t,e){return!moment(t,"YYYYMMDDTHHmmss").isValid()||moment(t,"YYYYMMDDTHHmmss").diff(moment(),"days",!0)<0||moment(e,"YYYYMMDDTHHmmss").diff(moment(),"days",!0)<0},r.prototype.addComment=function(t){var e;e=this.getById(t.taskID),e.comments?e.comments.push(t):e.comments=[t]},r.prototype.updateComment=function(t){var e,n,r,s,a,o,i;for(r=this.getById(t.taskID),n=0,o=r.comments,i=[],s=0,a=o.length;s<a;s++){if(e=o[s],e.tmpID===t.tmpID){r.comments[n]=t;break}i.push(n++)}return i},r.prototype.deleteComment=function(t,e){var n,r,s,a,o,i,u;for(s=this.getById(t),r=0,i=s.comments,u=[],a=0,o=i.length;a<o;a++){if(n=i[a],n.id===e){s.comments.splice(r,1);break}u.push(r++)}return u},r}(t))}])}.call(void 0),angular.module("Tasks").factory("VTodo",["$filter","ICalFactory","RandomStringService",function(t,e,n){function r(t,e,n){if(angular.extend(this,{calendar:t,data:e["{urn:ietf:params:xml:ns:caldav}calendar-data"],uri:n,etag:e["{DAV:}getetag"]||null,timers:[],loaded:!1}),this.jCal=ICAL.parse(this.data),this.components=new ICAL.Component(this.jCal),0===this.components.jCal.length)throw"invalid calendar"}return r.prototype={get summary(){return this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("summary")},set summary(t){this.components.getAllSubcomponents("vtodo")[0].updatePropertyWithValue("summary",t),this.updateLastModified(),this.data=this.components.toString()},get priority(){return(10-this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("priority"))%10},set priority(t){this.components.getAllSubcomponents("vtodo")[0].updatePropertyWithValue("priority",(10-t)%10),this.updateLastModified(),this.data=this.components.toString()},get complete(){return this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("percent-complete")||0},set complete(t){this.components.getAllSubcomponents("vtodo")[0].updatePropertyWithValue("percent-complete",t),this.updateLastModified(),this.data=this.components.toString(),t<100?(this.completed=null,this.status=0===t?"NEEDS-ACTION":"IN-PROCESS"):(this.completed=ICAL.Time.now(),this.status="COMPLETED")},get completed(){return!!this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("completed")},set completed(t){var e=this.components.getAllSubcomponents("vtodo");t?e[0].updatePropertyWithValue("completed",t):e[0].removeProperty("completed"),this.updateLastModified(),this.data=this.components.toString()},get completed_date(){var t=this.components.getAllSubcomponents("vtodo"),e=t[0].getFirstPropertyValue("completed");return e?e.toJSDate():null},get status(){return this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("status")},set status(t){this.components.getAllSubcomponents("vtodo")[0].updatePropertyWithValue("status",t),this.updateLastModified(),this.data=this.components.toString()},get note(){return this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("description")||""},set note(t){this.components.getAllSubcomponents("vtodo")[0].updatePropertyWithValue("description",t),this.updateLastModified(),this.data=this.components.toString()},get uid(){return this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("uid")||""},get related(){return this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("related-to")||null},set related(t){var e=this.components.getAllSubcomponents("vtodo");t?e[0].updatePropertyWithValue("related-to",t):e[0].removeProperty("related-to"),this.updateLastModified(),this.data=this.components.toString()},get hideSubtasks(){return+this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("x-oc-hidesubtasks")||0},set hideSubtasks(t){this.components.getAllSubcomponents("vtodo")[0].updatePropertyWithValue("x-oc-hidesubtasks",+t),this.updateLastModified(),this.data=this.components.toString()},get hideCompletedSubtasks(){return+this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("x-oc-hidecompletedsubtasks")||0},set hideCompletedSubtasks(t){this.components.getAllSubcomponents("vtodo")[0].updatePropertyWithValue("x-oc-hidecompletedsubtasks",+t),this.updateLastModified(),this.data=this.components.toString()},get reminder(){return null},get categories(){var t=this.components.getAllSubcomponents("vtodo"),e=t[0].getFirstProperty("categories");return e?e.getValues():[]},set categories(t){var e=this.components.getAllSubcomponents("vtodo"),n=e[0].getFirstProperty("categories");if(t.length>0)if(n)n.setValues(t);else{var r=new ICAL.Property("categories");r.setValues(t),n=e[0].addProperty(r)}else e[0].removeProperty("categories");this.updateLastModified(),this.data=this.components.toString()},get start(){return this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("dtstart")},set start(t){var e=this.components.getAllSubcomponents("vtodo");t?e[0].updatePropertyWithValue("dtstart",t):e[0].removeProperty("dtstart"),this.updateLastModified(),this.data=this.components.toString()},get due(){return this.components.getAllSubcomponents("vtodo")[0].getFirstPropertyValue("due")},set due(t){var e=this.components.getAllSubcomponents("vtodo");t?e[0].updatePropertyWithValue("due",t):e[0].removeProperty("due"),this.updateLastModified(),this.data=this.components.toString()},get allDay(){var t=this.components.getAllSubcomponents("vtodo"),e=t[0].getFirstPropertyValue("dtstart"),n=t[0].getFirstPropertyValue("due"),r=n||e;return null!==r&&r.isDate},set allDay(t){var e=this.components.getAllSubcomponents("vtodo"),n=e[0].getFirstPropertyValue("dtstart");n&&(n.isDate=t,e[0].updatePropertyWithValue("dtstart",n));var r=e[0].getFirstPropertyValue("due");r&&(r.isDate=t,e[0].updatePropertyWithValue("due",r)),this.updateLastModified(),this.data=this.components.toString()},get comments(){return null},get loadedCompleted(){return this.loaded},set loadedCompleted(t){this.loaded=t},updateLastModified:function(){var t=this.components.getAllSubcomponents("vtodo");t[0].updatePropertyWithValue("last-modified",ICAL.Time.now()),t[0].updatePropertyWithValue("dtstamp",ICAL.Time.now())}},r.create=function(t){var s=e.new(),a=new ICAL.Component("vtodo");return s.addSubcomponent(a),a.updatePropertyWithValue("created",ICAL.Time.now()),a.updatePropertyWithValue("dtstamp",ICAL.Time.now()),a.updatePropertyWithValue("last-modified",ICAL.Time.now()),a.updatePropertyWithValue("uid",n.generate()),a.updatePropertyWithValue("summary",t.summary),a.updatePropertyWithValue("priority",t.priority),a.updatePropertyWithValue("percent-complete",t.complete),a.updatePropertyWithValue("x-oc-hidesubtasks",0),t.related&&a.updatePropertyWithValue("related-to",t.related),t.note&&a.updatePropertyWithValue("description",t.note),t.due&&a.updatePropertyWithValue("due",t.due),t.start&&a.updatePropertyWithValue("dtstart",t.start),new r(t.calendar,{"{urn:ietf:params:xml:ns:caldav}calendar-data":s.toString(),"{DAV:}getetag":null},null)},r}])}(jQuery,oc_requesttoken);
//# sourceMappingURL=app.min.js.map
diff --git a/js/public/app.min.js.map b/js/public/app.min.js.map
index 6a110b89..38c9fafb 100644
--- a/js/public/app.min.js.map
+++ b/js/public/app.min.js.map
@@ -1 +1 @@
-{"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","directives/watchtop.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","config","$provide","$routeProvider","$interpolateProvider","$httpProvider","value","defaults","headers","common","requesttoken","when","otherwise","_update","run","$document","$rootScope","Config","$timeout","TasksBusinessLayer","ListsBusinessLayer","SearchBusinessLayer","timeOutUpdate","init","taskUpdateInterval","OCA","Search","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","_$listsbusinesslayer","_$route","_$scope","_$status","_$timeout","_$location","_$routeparams","_Loading","_$settingsmodel","_persistence","newListName","settingsmodel","then","Promise","results","all","target","listparameter","length","route","calendarID","is","$event","closest","angular","isUndefined","path","collectionID","focusTaskInput","addingList","addSubtaskTo","isLoading","DetailsController","$window","TasksModel","ListsModel","_$window","_$tasksmodel","_tasksbusinesslayer","_$listsmodel","task","getById","taskID","getByUri","cats","categories","found","add","id","isAddingComment","names","timers","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","tooltip","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","attr","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","addClass","allow","dragStart","dragEnd","directive","elm","find","menu","toggleClass","scope","focus","avatar","userid","$observe","size","saturation","hue","isArray","lightness","huePrime","red","chroma","Math","abs","floor","blue","secondComponent","green","lightnessAdjustment","rgbToHex","round","r","g","b","Array","listofcolours","toString","parseInt","randColour","String","random","hslToRgb","toHsl","prototype","forEach","hsl","hash","hslcolour","restrict","templateUrl","filePath","colors","selected","element","randomizeColour","pick","confirmationFunction","confirmationMessage","ConfirmationController","$element","$attrs","$compile","countdown","message","hasClass","stopPropagation","activate","bind","e","html","documentClick","unbind","onSelect","datepicker","inst","beforeShow","marginLeft","outerWidth","dp","css","margin-left","left","startOfWeek","minDate","options","selector","click","timeout","timepicker","atPosition","myPosition","minuteText","hourText","divTop","$watch","prev","outerHeight","count","isDate","fromNow","percent","string","ds","duration","token","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","_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","handle","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","attach","initialize","_$searchString","search","setRenderer","result","renderTaskResult","$row","$template","calendarid","isLoaded","clone","append","text","width","background-color","getColor","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","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","regex","_generateTextColor","_propertiesBackup","copy","dropPreviousState","toggleSharesEditor","list","brightness","editingShares","__hasProp","call","Ctor","_Model","__super__","__extends","_super","_nameCache","updateByUri","tmplist","_tmpIdCache","calendarcolor","getName","removeByList","taskIDs","_j","_len1","startdiff","duediff","hasSubtasks","getIdByUid","getDescendantIDs","concat","current","today","needle","ancestors","objectExists","getAncestor","keys","searchComments","comments","searchCategories","updateComment","com","icalfactory","loaded","jCal","Component","getAllSubcomponents","getFirstPropertyValue","updateLastModified","vtodos","removeProperty","completed_date","toJSDate","comp","getFirstProperty","getValues","setValues","prop","Property","addProperty","addSubcomponent"],"mappings":"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","file":"app.min.js","sourcesContent":["'use strict';\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 of its entries.').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 () {\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};\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 (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};\n\n\t\t\tthis._$scope.showCalDAVUrl = function (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};\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-menu';\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.children('.confirmation-confirm').tooltip({ title: message, container: 'body', placement: 'right' });\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};\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').directive('watchTop', function () {\n 'use strict';\n\n return {\n restrict: 'A',\n link: function link(scope, element, attr) {\n return scope.$watch(function () {\n scope.divTop = element.prev().outerHeight(true);\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.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._$rootScope.$apply(function () {\n\t\t\t\t\t\treturn _this.setFilter(query);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tsearch.setRenderer('task', this.renderTaskResult.bind(this));\n\t\t\t\treturn search.setHandler('task', this.handleTaskClick.bind(this));\n\t\t\t};\n\n\t\t\tSearchBusinessLayer.prototype.setFilter = function (query) {\n\t\t\t\tthis._$searchString = query;\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\t\t\t\tvar _this = this;\n\t\t\t\tthis.handleTaskClick = function ($row, result, event) {\n\t\t\t\t\treturn _this._$location.path('/lists/' + result.calendarid + '/tasks/' + result.id);\n\t\t\t\t};\n\t\t\t\tthis.renderTaskResult = function ($row, result) {\n\t\t\t\t\tvar $template;\n\t\t\t\t\tif (!_this._$tasksmodel.filterTasks(result, _this._$routeparams.listID) || !_this._$tasksmodel.isLoaded(result)) {\n\t\t\t\t\t\t$template = $('div.task-item.template');\n\t\t\t\t\t\t$template = $template.clone();\n\t\t\t\t\t\t$row = $('<tr class=\"result\"></tr>').append($template.removeClass('template'));\n\t\t\t\t\t\t$row.data('result', result);\n\t\t\t\t\t\t$row.find('span.title').text(result.name);\n\t\t\t\t\t\tif (result.starred) {\n\t\t\t\t\t\t\t$row.find('span.task-star').addClass('task-starred');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (result.completed) {\n\t\t\t\t\t\t\t$row.find('div.task-item').addClass('done');\n\t\t\t\t\t\t\t$row.find('span.task-checkbox').addClass('svg-checkmark');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (result.complete) {\n\t\t\t\t\t\t\t$row.find('div.percentdone').css({\n\t\t\t\t\t\t\t\t'width': result.complete + '%',\n\t\t\t\t\t\t\t\t'background-color': '' + _this._$listsmodel.getColor(result.calendarid)\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (result.note) {\n\t\t\t\t\t\t\t$row.find('div.title-wrapper').addClass('attachment');\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn $row;\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\treturn OC.Plugins.register('OCA.Search', this);\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.id);\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.getById(task.id)) {\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.getIdByUid = 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.id;\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.getIdByUid(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.id === task.id) {\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 = ['name', 'note', 'location', 'categories', 'comments'];\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 === 'comments') {\n\t\t\t\t\t\t\tif (this.searchComments(task.comments, 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 (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.searchComments = function (comments, filter) {\n\t\t\t\tfor (var _i = 0, _len = comments.length; _i < _len; _i++) {\n\t\t\t\t\tvar comment = comments[_i];\n\t\t\t\t\tif (comment.comment.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.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\tTasksModel.prototype.addComment = function (comment) {\n\t\t\t\tvar task;\n\t\t\t\ttask = this.getById(comment.taskID);\n\t\t\t\tif (task.comments) {\n\t\t\t\t\ttask.comments.push(comment);\n\t\t\t\t} else {\n\t\t\t\t\ttask.comments = [comment];\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tTasksModel.prototype.updateComment = function (comment) {\n\t\t\t\tvar com, i, task, _i, _len, _ref, _results;\n\t\t\t\ttask = this.getById(comment.taskID);\n\t\t\t\ti = 0;\n\t\t\t\t_ref = task.comments;\n\t\t\t\t_results = [];\n\t\t\t\tfor (_i = 0, _len = _ref.length; _i < _len; _i++) {\n\t\t\t\t\tcom = _ref[_i];\n\t\t\t\t\tif (com.tmpID === comment.tmpID) {\n\t\t\t\t\t\ttask.comments[i] = comment;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t_results.push(i++);\n\t\t\t\t}\n\t\t\t\treturn _results;\n\t\t\t};\n\n\t\t\tTasksModel.prototype.deleteComment = function (taskID, commentID) {\n\t\t\t\tvar comment, i, task, _i, _len, _ref, _results;\n\t\t\t\ttask = this.getById(taskID);\n\t\t\t\ti = 0;\n\t\t\t\t_ref = task.comments;\n\t\t\t\t_results = [];\n\t\t\t\tfor (_i = 0, _len = _ref.length; _i < _len; _i++) {\n\t\t\t\t\tcomment = _ref[_i];\n\t\t\t\t\tif (comment.id === commentID) {\n\t\t\t\t\t\ttask.comments.splice(i, 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t_results.push(i++);\n\t\t\t\t}\n\t\t\t\treturn _results;\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}]);"]} \ No newline at end of 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","config","$provide","$routeProvider","$interpolateProvider","$httpProvider","value","defaults","headers","common","requesttoken","when","otherwise","_update","run","$document","$rootScope","Config","$timeout","TasksBusinessLayer","ListsBusinessLayer","SearchBusinessLayer","timeOutUpdate","init","taskUpdateInterval","OCA","Search","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","_$listsbusinesslayer","_$route","_$scope","_$status","_$timeout","_$location","_$routeparams","_Loading","_$settingsmodel","_persistence","newListName","settingsmodel","then","Promise","results","all","target","listparameter","length","route","calendarID","is","$event","closest","angular","isUndefined","path","collectionID","focusTaskInput","addingList","addSubtaskTo","isLoading","DetailsController","$window","TasksModel","ListsModel","_$window","_$tasksmodel","_tasksbusinesslayer","_$listsmodel","task","getById","taskID","getByUri","cats","categories","found","add","id","isAddingComment","names","timers","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","tooltip","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","attr","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","addClass","allow","dragStart","dragEnd","directive","elm","find","menu","toggleClass","scope","focus","avatar","userid","$observe","size","saturation","hue","isArray","lightness","huePrime","red","chroma","Math","abs","floor","blue","secondComponent","green","lightnessAdjustment","rgbToHex","round","r","g","b","Array","listofcolours","toString","parseInt","randColour","String","random","hslToRgb","toHsl","prototype","forEach","hsl","hash","hslcolour","restrict","templateUrl","filePath","colors","selected","element","randomizeColour","pick","confirmationFunction","confirmationMessage","ConfirmationController","$element","$attrs","$compile","countdown","message","hasClass","stopPropagation","activate","bind","e","html","documentClick","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","duration","token","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","_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","handle","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","attach","initialize","_$searchString","search","setRenderer","result","renderTaskResult","$row","$template","calendarid","isLoaded","clone","append","text","width","background-color","getColor","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","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","regex","_generateTextColor","_propertiesBackup","copy","dropPreviousState","toggleSharesEditor","list","brightness","editingShares","__hasProp","call","Ctor","_Model","__super__","__extends","_super","_nameCache","updateByUri","tmplist","_tmpIdCache","calendarcolor","getName","removeByList","taskIDs","_j","_len1","startdiff","duediff","hasSubtasks","getIdByUid","getDescendantIDs","concat","current","today","needle","ancestors","objectExists","getAncestor","keys","searchComments","comments","searchCategories","updateComment","com","icalfactory","loaded","jCal","Component","getAllSubcomponents","getFirstPropertyValue","updateLastModified","vtodos","removeProperty","completed_date","toJSDate","comp","getFirstProperty","getValues","setValues","prop","Property","addProperty","addSubcomponent"],"mappings":"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","file":"app.min.js","sourcesContent":["'use strict';\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 of its entries.').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 () {\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};\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 (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};\n\n\t\t\tthis._$scope.showCalDAVUrl = function (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};\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-menu';\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.children('.confirmation-confirm').tooltip({ title: message, container: 'body', placement: 'right' });\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};\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.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._$rootScope.$apply(function () {\n\t\t\t\t\t\treturn _this.setFilter(query);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tsearch.setRenderer('task', this.renderTaskResult.bind(this));\n\t\t\t\treturn search.setHandler('task', this.handleTaskClick.bind(this));\n\t\t\t};\n\n\t\t\tSearchBusinessLayer.prototype.setFilter = function (query) {\n\t\t\t\tthis._$searchString = query;\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\t\t\t\tvar _this = this;\n\t\t\t\tthis.handleTaskClick = function ($row, result, event) {\n\t\t\t\t\treturn _this._$location.path('/lists/' + result.calendarid + '/tasks/' + result.id);\n\t\t\t\t};\n\t\t\t\tthis.renderTaskResult = function ($row, result) {\n\t\t\t\t\tvar $template;\n\t\t\t\t\tif (!_this._$tasksmodel.filterTasks(result, _this._$routeparams.listID) || !_this._$tasksmodel.isLoaded(result)) {\n\t\t\t\t\t\t$template = $('div.task-item.template');\n\t\t\t\t\t\t$template = $template.clone();\n\t\t\t\t\t\t$row = $('<tr class=\"result\"></tr>').append($template.removeClass('template'));\n\t\t\t\t\t\t$row.data('result', result);\n\t\t\t\t\t\t$row.find('span.title').text(result.name);\n\t\t\t\t\t\tif (result.starred) {\n\t\t\t\t\t\t\t$row.find('span.task-star').addClass('task-starred');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (result.completed) {\n\t\t\t\t\t\t\t$row.find('div.task-item').addClass('done');\n\t\t\t\t\t\t\t$row.find('span.task-checkbox').addClass('svg-checkmark');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (result.complete) {\n\t\t\t\t\t\t\t$row.find('div.percentdone').css({\n\t\t\t\t\t\t\t\t'width': result.complete + '%',\n\t\t\t\t\t\t\t\t'background-color': '' + _this._$listsmodel.getColor(result.calendarid)\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (result.note) {\n\t\t\t\t\t\t\t$row.find('div.title-wrapper').addClass('attachment');\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn $row;\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\treturn OC.Plugins.register('OCA.Search', this);\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.id);\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.getById(task.id)) {\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.getIdByUid = 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.id;\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.getIdByUid(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.id === task.id) {\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 = ['name', 'note', 'location', 'categories', 'comments'];\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 === 'comments') {\n\t\t\t\t\t\t\tif (this.searchComments(task.comments, 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 (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.searchComments = function (comments, filter) {\n\t\t\t\tfor (var _i = 0, _len = comments.length; _i < _len; _i++) {\n\t\t\t\t\tvar comment = comments[_i];\n\t\t\t\t\tif (comment.comment.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.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\tTasksModel.prototype.addComment = function (comment) {\n\t\t\t\tvar task;\n\t\t\t\ttask = this.getById(comment.taskID);\n\t\t\t\tif (task.comments) {\n\t\t\t\t\ttask.comments.push(comment);\n\t\t\t\t} else {\n\t\t\t\t\ttask.comments = [comment];\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tTasksModel.prototype.updateComment = function (comment) {\n\t\t\t\tvar com, i, task, _i, _len, _ref, _results;\n\t\t\t\ttask = this.getById(comment.taskID);\n\t\t\t\ti = 0;\n\t\t\t\t_ref = task.comments;\n\t\t\t\t_results = [];\n\t\t\t\tfor (_i = 0, _len = _ref.length; _i < _len; _i++) {\n\t\t\t\t\tcom = _ref[_i];\n\t\t\t\t\tif (com.tmpID === comment.tmpID) {\n\t\t\t\t\t\ttask.comments[i] = comment;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t_results.push(i++);\n\t\t\t\t}\n\t\t\t\treturn _results;\n\t\t\t};\n\n\t\t\tTasksModel.prototype.deleteComment = function (taskID, commentID) {\n\t\t\t\tvar comment, i, task, _i, _len, _ref, _results;\n\t\t\t\ttask = this.getById(taskID);\n\t\t\t\ti = 0;\n\t\t\t\t_ref = task.comments;\n\t\t\t\t_results = [];\n\t\t\t\tfor (_i = 0, _len = _ref.length; _i < _len; _i++) {\n\t\t\t\t\tcomment = _ref[_i];\n\t\t\t\t\tif (comment.id === commentID) {\n\t\t\t\t\t\ttask.comments.splice(i, 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t_results.push(i++);\n\t\t\t\t}\n\t\t\t\treturn _results;\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}]);"]} \ No newline at end of file
diff --git a/templates/part.details.php b/templates/part.details.php
index 7bbab19f..54ee29fa 100644
--- a/templates/part.details.php
+++ b/templates/part.details.php
@@ -1,12 +1,12 @@
<div ng-controller="DetailsController" ng-click="endEdit($event)" class="handler">
- <div ng-show="TaskState()=='found'" ng-class="{'disabled': !task.calendar.writable}">
- <a class="detail-checkbox" ng-click="toggleCompleted(task)" role="checkbox" aria-checked="{{task.completed}}" aria-label="<?php p($l->t('Task is completed')); ?>">
- <span class="icon detail-checkbox" ng-class="{'icon-checkmark':task.completed, 'disabled': !task.calendar.writable}"></span>
- </a>
- <a class="detail-star" ng-click="toggleStarred(task)">
- <span class="icon icon-task-star" ng-class="{'icon-task-star-high':task.priority>5,'icon-task-star-medium':task.priority==5,'icon-task-star-low':task.priority > 0 && task.priority < 5, 'disabled': !task.calendar.writable}"></span>
- </a>
+ <div class="flex-container" ng-show="TaskState()=='found'" ng-class="{'disabled': !task.calendar.writable}">
<div class="title" ng-class="{'editing':route.parameter=='name'}">
+ <a class="detail-checkbox" ng-click="toggleCompleted(task)" role="checkbox" aria-checked="{{task.completed}}" aria-label="<?php p($l->t('Task is completed')); ?>">
+ <span class="icon detail-checkbox" ng-class="{'icon-checkmark':task.completed, 'disabled': !task.calendar.writable}"></span>
+ </a>
+ <a class="detail-star" ng-click="toggleStarred(task)">
+ <span class="icon icon-task-star" ng-class="{'icon-task-star-high':task.priority>5,'icon-task-star-medium':task.priority==5,'icon-task-star-low':task.priority > 0 && task.priority < 5, 'disabled': !task.calendar.writable}"></span>
+ </a>
<span class="title-text handler" ng-class="{'strike-through':task.completed}" ng-click="editName($event, task)"
oc-click-focus="{selector: '#editName', timeout: 0}" ng-bind-html="task.summary | linky:'_blank':{rel: 'nofollow'}"></span>
<div class="expandable-container handler">
@@ -16,7 +16,7 @@
</div>
</div>
</div>
- <div class="body" watch-top ng-style="{top:divTop}">
+ <div class="body">
<div class="section detail-start handler" ng-class="{'date':isDue(task.start), 'editing':route.parameter=='startdate'}" ng-click="editStart($event, task)">
<!-- oc-click-focus="{selector: 'div.detail-start input.datepicker-input', timeout: 0}" -->
<span class="icon icon-calendar" ng-class="{'icon-calendar-due':isDue(task.start), 'icon-calendar-overdue':isOverDue(task.start)}"></span>