123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772 |
- /*
- CalDavZAP - the open source CalDAV Web Client
- Copyright (C) 2011-2015
- Jan Mate <jan.mate@inf-it.com>
- Andrej Lezo <andrej.lezo@inf-it.com>
- Matej Mihalik <matej.mihalik@inf-it.com>
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
- This program 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 program. If not, see <http://www.gnu.org/licenses/>.
- */
- function handleCalDAVError(isError, inputResource)
- {
- var collections='';
- collections=globalResourceCalDAVList.collections;
- for(var i=0; i<collections.length;i++)
- {
- if(collections[i].uid!=undefined)
- {
- var tmp=collections[i].accountUID.match(RegExp('^(https?://)([^@/]+(?:@[^@/]+)?)@([^/]+)(.*/)','i'));
- var resource_href=tmp[1]+tmp[3]+tmp[4];
- var resource_user=tmp[2];
- if(inputResource.href==resource_href && inputResource.userAuth.userName==resource_user)
- {
- if(globalSettingsSaving =='event' && isError)
- {
- var isLoaded=false;
- if(typeof globalCrossServerSettingsURL!='undefined'&&globalCrossServerSettingsURL!=null&globalCrossServerSettingsURL)
- {
- var uidParts=(collections[i].uid).match(RegExp('/([^/]+/[^/]+/)$'));
- var tmpParts = uidParts[1].match('^(.*/)([^/]+)/$');
- var checkHref=decodeURIComponent(tmpParts[1])+tmpParts[2]+'/';
- var found=false;
- for(var l=0;l<globalSettings.loadedcalendarcollections.value.length;l++)
- {
- var tmpParts2 = globalSettings.loadedcalendarcollections.value[l].match('^(.*/)([^/]+)/([^/]+)/$');
- var checkHref2=decodeURIComponent(tmpParts2[2])+'/'+tmpParts2[3]+'/';
- if(checkHref==checkHref2)
- {
- found=true;
- break;
- }
- }
- isLoaded=found;
- }
- else
- {
- var uidParts=(collections[i].uid).match(RegExp('^(https?://)([^@/]+(?:@[^@/]+)?)@(.*)'));
- var checkHref = uidParts[1]+uidParts[3];
- isLoaded=(globalSettings.loadedcalendarcollections.value.indexOf(checkHref)!=-1);
- }
- if(isLoaded && collections[i].oldSyncToken=='')
- {
- var newObj = $.extend(collections[i],{makeLoaded:true});
- globalResourceCalDAVList.insertResource(newObj, collections[i].resourceIndex, true);
- updateMainLoaderText(collections[i].listType);
- updateMainLoader();
- }
- }
- if(isError)
- $('#ResourceCalDAVList').find('[data-id="'+collections[i].uid+'"]').addClass('r_error');
- else
- $('#ResourceCalDAVList').find('[data-id="'+collections[i].uid+'"]').removeClass('r_error');
- }
- }
- }
- collections=globalResourceCalDAVList.TodoCollections;
- for(var i=0; i<collections.length;i++)
- {
- if(collections[i].uid!=undefined)
- {
- var tmp=collections[i].accountUID.match(RegExp('^(https?://)([^@/]+(?:@[^@/]+)?)@([^/]+)(.*/)','i'));
- var resource_href=tmp[1]+tmp[3]+tmp[4];
- var resource_user=tmp[2];
- if(inputResource.href==resource_href && inputResource.userAuth.userName==resource_user)
- {
- if(globalSettingsSaving =='todo' && isError)
- {
- var isLoaded=false;
- if(typeof globalCrossServerSettingsURL!='undefined'&&globalCrossServerSettingsURL!=null&globalCrossServerSettingsURL)
- {
- var uidParts=(collections[i].uid).match(RegExp('/([^/]+/[^/]+/)$'));
- var tmpParts = uidParts[1].match('^(.*/)([^/]+)/$');
- var checkHref=decodeURIComponent(tmpParts[1])+tmpParts[2]+'/';
- var found=false;
- for(var l=0;l<globalSettings.loadedtodocollections.value.length;l++)
- {
- var tmpParts2 = globalSettings.loadedtodocollections.value[l].match('^(.*/)([^/]+)/([^/]+)/$');
- var checkHref2=decodeURIComponent(tmpParts2[2])+'/'+tmpParts2[3]+'/';
- if(checkHref==checkHref2)
- {
- found=true;
- break;
- }
- }
- isLoaded=found;
- }
- else
- {
- var uidParts=(collections[i].uid).match(RegExp('^(https?://)([^@/]+(?:@[^@/]+)?)@(.*)'));
- var checkHref = uidParts[1]+uidParts[3];
- isLoaded=(globalSettings.loadedtodocollections.value.indexOf(checkHref)!=-1);
- }
- if(isLoaded && collections[i].oldSyncToken=='')
- {
- var newObj = $.extend(collections[i],{makeLoaded:true});
- globalResourceCalDAVList.insertResource(newObj, collections[i].resourceIndex, false);
- updateMainLoaderText(collections[i].listType);
- updateMainLoader();
- }
- }
- if(isError)
- $('#ResourceCalDAVTODOList').find('[data-id="'+collections[i].uid+'"]').addClass('r_error');
- else
- $('#ResourceCalDAVTODOList').find('[data-id="'+collections[i].uid+'"]').removeClass('r_error');
- }
- }
- }
- }
- function unloadCalDAVCollection(unloadArray, isEvent)
- {
- var collArray = {}, todoString='';
- if(isEvent)
- collArray=globalResourceCalDAVList.collections;
- else
- {
- collArray=globalResourceCalDAVList.TodoCollections;
- todoString='TODO';
- }
- for(var i=0; i<collArray.length; i++)
- {
- if(collArray[i].uid!=undefined)
- {
- var uidParts=(collArray[i].uid).match(RegExp('^(https?://)([^@/]+(?:@[^@/]+)?)@(.*)'));
- var checkHref = uidParts[1]+uidParts[3];
- if(unloadArray.indexOf(checkHref)!=-1)
- {
- $('#CalendarLoader'+todoString).children('.loaderInfo').text(localization[globalInterfaceLanguage].unloadingCalendars);
- if(window['globalVisibleCalDAV'+todoString+'Collections'].indexOf(collArray[i].uid)!=-1)
- window['globalVisibleCalDAV'+todoString+'Collections'].splice(window['globalVisibleCalDAV'+todoString+'Collections'].indexOf(collArray[i].uid),1);
- if(isEvent)
- {
- var beforeScroll = $('#main').width()-$('#calendar').width();
- $('#calendar').fullCalendar('removeEventSource', collArray[i].fcSource);
- var afterScroll = $('#main').width()-$('#calendar').width();
- rerenderCalendar(beforeScroll!=afterScroll);
- globalEventList.events[collArray[i].uid]={};
- globalEventList.displayEventsArray[collArray[i].uid]=new Array();
- }
- else
- {
- var beforeScroll = $('#mainTODO').width()-$('#todoList').width();
- $('#todoList').fullCalendar('removeEventSource', collArray[i].fcSource);
- var afterScroll = $('#mainTODO').width()-$('#todoList').width();
- rerenderTodo(beforeScroll!=afterScroll);
- globalEventList.todos[collArray[i].uid]={};
- globalEventList.displayTodosArray[collArray[i].uid]=new Array();
- }
- collArray[i].fcSource = null;
- collArray[i].someChanged=false;
- collArray[i].makeLoaded=false;
- collArray[i].syncToken='';
- collArray[i].oldSyncToken='';
- }
- }
- }
- if((globalSettingsSaving=='event' || globalSettingsSaving=='todo') && !globalFirstHideLoader)
- setTimeout(function(){hideUnloadCollectionCallback(globalSettingsSaving);},300);
- }
- function addLoadCalDAVCollection(loadingArray, isEvent)
- {
- var collArray = {}, todoString='';
- if(isEvent)
- collArray=globalResourceCalDAVList.collections;
- else
- {
- collArray=globalResourceCalDAVList.TodoCollections;
- todoString='TODO';
- }
- for(var i=0; i<collArray.length; i++)
- {
- if(collArray[i].uid!=undefined)
- {
- var uidParts=(collArray[i].uid).match(RegExp('^(https?://)([^@/]+(?:@[^@/]+)?)@(.*)'));
- var checkHref = uidParts[1]+uidParts[3];
- if(loadingArray.indexOf(checkHref)!=-1&&!collArray[i].makeLoaded)
- {
- collArray[i].urlArray={};
- var resDOMItem=$('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV'+todoString+'_item[data-id="'+jqueryEscapeSelector(collArray[i].uid)+'"]');
- collArray[i].someChanged=true;
- collArray[i].makeLoaded=true;
- var rex=vCalendar.pre['accountUidParts'];
- var tmp=collArray[i].accountUID.match(rex);
- var resourceCalDAV_href=tmp[1]+tmp[3]+tmp[4];
- var resourceCalDAV_user=tmp[2];
- for(var j=0;j<globalAccountSettings.length;j++)
- if(globalAccountSettings[j].href==resourceCalDAV_href && globalAccountSettings[j].userAuth.userName==resourceCalDAV_user && globalLoadedPrincipals.indexOf(resourceCalDAV_href)==-1)
- {
- globalLoadedPrincipals.push(globalAccountSettings[j].href);
- break;
- }
- var resDOMHeader=resDOMItem.prevUntil('.resourceCalDAV'+todoString+'_header').last().prev();
- if(!resDOMHeader.length)
- resDOMHeader=resDOMItem.prev();
- resDOMHeader.css('display','block');
- resDOMItem.css('display','');
- var input=resDOMItem.find('input[type=checkbox]').not('.unloadCheck');
- input.prop('checked',true);
- collectionChBoxClick(input.get(0), '#ResourceCalDAV'+todoString+'List', '.resourceCalDAV'+todoString+'_header', '.resourceCalDAV'+todoString+'_item', null, false);
- if(window['globalVisibleCalDAV'+todoString+'Collections'].indexOf(collArray[i].uid)==-1)
- window['globalVisibleCalDAV'+todoString+'Collections'].splice(window['globalVisibleCalDAV'+todoString+'Collections'].length, 0, collArray[i].uid);
- collArray[i].newlyAdded=true;
- }
- }
- }
- var calendarsArray=new Array();
- for(var i=0;i<collArray.length;i++)
- if(collArray[i].uid!=undefined)
- calendarsArray[calendarsArray.length]={displayValue:collArray[i].displayvalue,uid:collArray[i].uid, permissions_read_only:collArray[i].permissions.read_only, makeLoaded:collArray[i].makeLoaded};
- calendarsArray.sort(customResourceCompare);
- globalResourceCalDAVList.sortedCollections = calendarsArray;
- }
- // ResourceCalDAVList Class
- function ResourceCalDAVList()
- {
- this.collections=new Array();
- this.TodoCollections=new Array();
- this.calendarsLoaded=null;
- this.counterList=new Array();
- this.sortedTodoCollections=new Array();
- this.sortedCollections=new Array();
- this.reset=function()
- {
- this.TodoCollections.splice(0, this.TodoCollections.length);
- this.collections.splice(0, this.collections.length);
- this.counterList=new Array();
- this.sortedTodoCollections=new Array();
- this.sortedCollections=new Array();
- }
- // resource header value
- this.getHeaderValue=function(inputResource)
- {
- var re=new RegExp('^(https?://)([^@/]+(?:@[^@/]+)?)@([^/]+).*/([^/]*)/','i');
- var tmp=inputResource.accountUID.match(re);
- var tmp_host=tmp[3]; // hostname [%H]
- var tmp_host_wo_port=tmp[3].replace(vCalendar.pre['numberPortRex'],''); // hostname without port [%h]
- var tmp_domain=tmp_host_wo_port.replace(vCalendar.pre['domainRex'], ''); // domain name [%D]
- var tmp_domain_min=tmp_host_wo_port.match(vCalendar.pre['domainNameRex'])[2]; // domain name min. (only 1 or 2 level domain string) [%d]
- var tmp_principal=decodeURIComponent(tmp[4]); // principal username [%P]
- var tmp_principal_wo_domain=decodeURIComponent(tmp[4]).replace(vCalendar.pre['principalUserNameRex'],''); // principal username without @domain.com [%p]
- var tmp_user=inputResource.userAuth.userName; // login name [%U]
- var tmp_user_wo_domain=inputResource.userAuth.userName.replace(vCalendar.pre['loginRex'],''); // login name without @domain.com [%u]
- if(!inputResource.subscription && (typeof inputResource.hrefLabel!='string' || inputResource.hrefLabel=='' || (inputResource.hrefLabel=='%x' && inputResource.headervalue=='')))
- inputResource.hrefLabel='%d/%p [%u]';
- else if(inputResource.subscription && (typeof inputResource.hrefLabel!='string' || inputResource.hrefLabel==''))
- inputResource.hrefLabel=localization[globalInterfaceLanguage].txtSubscribed;
- var result=inputResource.hrefLabel;
- result=result.replace(vCalendar.pre['HRex'], tmp_host);
- result=result.replace(vCalendar.pre['hRex'], tmp_host_wo_port);
- result=result.replace(vCalendar.pre['DRex'], tmp_domain);
- result=result.replace(vCalendar.pre['dRex'], tmp_domain_min);
- result=result.replace(vCalendar.pre['PRex'], tmp_principal);
- result=result.replace(vCalendar.pre['pRex'], tmp_principal_wo_domain);
- result=result.replace(vCalendar.pre['URex'], tmp_user);
- result=result.replace(vCalendar.pre['uRex'], tmp_user_wo_domain);
- result=result.replace(vCalendar.pre['xRex'], inputResource.headervalue);
- inputResource.hrefLabel=result;
- return result;
- }
- this.getSortKey=function(inputResource, forHeader, inputResourceIndex)
- {
- var re=new RegExp('^(https?://)([^@/]+(?:@[^@/]+)?)@([^/]+)(.*/)([^/]+/)([^/]+/)([^/]*)','i');
- var tmp=inputResource.uid.match(re);
- var out='';
- if(!inputResource.subscription)
- out='A';
- else
- out='B';
- // custom sorting (instead of alphabetical)
- if(globalSettings.resourcealphabetsorting.value!=true)
- out+=inputResourceIndex.pad(String(globalAccountSettings.length).length);
- out+=tmp[1]+tmp[3]+'/'+(inputResource.hrefLabel==undefined || inputResource.hrefLabel==null ? tmp[5] : inputResource.hrefLabel)+' '+inputResource.userAuth.userName;
- if(forHeader==false)
- out+=' '+inputResource.displayvalue;
- return out;
- }
- // Resource list is not sorted, instead "insert sort" is performed
- this.insertResource=function(inputResource, index, isEvent)
- {
- var oldHrefLabel = inputResource.hrefLabel;
- var headerValue = this.getHeaderValue(inputResource);
- inputResource.sortkey=this.getSortKey(inputResource, false, index);
- var collObject={};
- var todoString = '';
- var makeChecked=false;
- var nameChanged=false;
- if(isEvent)
- collObject = this.collections;
- else
- {
- collObject = this.TodoCollections;
- todoString = 'TODO';
- }
- // do not insert entry with duplicate UID
- for(var i=0;i<collObject.length;i++)
- if(collObject[i].uid==inputResource.uid)
- {
- collObject[i].urlArray={};
- var resDOMItem=$('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV'+todoString+'_item[data-id="'+jqueryEscapeSelector(inputResource.uid)+'"]');
- if(collObject[i].displayvalue==inputResource.displayvalue && collObject[i].permissions.read_only==inputResource.permissions.read_only && collObject[i].headervalue==inputResource.headervalue)
- {
- collObject[i]=$.extend(inputResource, {fcSource: collObject[i].fcSource, syncToken: collObject[i].syncToken, oldSyncToken: collObject[i].oldSyncToken, newlyAdded: collObject[i].newlyAdded,forceSyncPROPFIND: collObject[i].forceSyncPROPFIND});
- return 0;
- }
- else
- {
- nameChanged=true;
- $.extend(inputResource, {fcSource: collObject[i].fcSource, syncToken: collObject[i].syncToken, oldSyncToken: collObject[i].oldSyncToken, newlyAdded: collObject[i].newlyAdded,forceSyncPROPFIND: collObject[i].forceSyncPROPFIND});
- makeChecked=resDOMItem.find('input[type=checkbox]').not('.unloadCheck').prop('checked');
- // the collection name is changed and must be moved to correct place (we first remove it and then reinsert)
- this.removeResource(inputResource.uid, false,isEvent);
- break;
- }
- }
- if(!globalCalDAVInitLoad&&!nameChanged)
- {
- var uidParts=inputResource.uid.match(RegExp('^(https?://)([^@/]+(?:@[^@/]+)?)@(.*)'));
- var checkHref = uidParts[1]+uidParts[3];
- var loadedColl=null;
- var isLoaded=false;
- if(isEvent)
- loadedColl=globalSettings.loadedcalendarcollections.value;
- else
- loadedColl=globalSettings.loadedtodocollections.value;
- if(typeof globalCrossServerSettingsURL!='undefined'&&globalCrossServerSettingsURL!=null&globalCrossServerSettingsURL)
- {
- var uidParts=inputResource.uid.match(RegExp('/([^/]+/[^/]+/)$'));
- var tmpParts = uidParts[1].match('^(.*/)([^/]+)/$');
- var checkHref3=decodeURIComponent(tmpParts[1])+tmpParts[2]+'/';
- var found=false;
- for(var l=0;l<loadedColl.length;l++)
- {
- var tmpParts2 = loadedColl[l].match('^(.*/)([^/]+)/([^/]+)/$');
- var checkHref2=decodeURIComponent(tmpParts2[2])+'/'+tmpParts2[3]+'/';
- if(checkHref3==checkHref2)
- {
- found=true;
- break;
- }
- }
- isLoaded=found;
- }
- else
- isLoaded=(loadedColl.indexOf(checkHref)!=-1);
- // if(!isLoaded)
- // loadedColl.push(checkHref);
- if(!isLoaded)
- {
- inputResource.makeLoaded=false;
- inputResource.newlyAdded=false;
- }
- else
- {
- inputResource.makeLoaded=true;
- inputResource.newlyAdded=true;
- }
- inputResource.oldSyncToken = '';
- inputResource.someChanged=false;
- makeChecked=true;
- }
- // create header
- var headerObject={headerOnly: true, sortkey: this.getSortKey(inputResource, true, index), displayvalue: (oldHrefLabel=='%x' ? headerValue.replace(RegExp('^[^#]+#'),'') : headerValue), index:0};
- // find the index where to insert the new resource
- // find the index where to insert the new resource O(n*log(n))
- var insertIndex=0;
- var low=0;
- var high=collObject.length-1;
- if(collObject.length>0)
- while(low<high)
- {
- insertIndex=low+Math.round((high-low)/2);
- var result=(cmp_str=collObject[insertIndex].sortkey).customCompare(inputResource.sortkey,globalSortAlphabet,1,false);
- if(result==-1)
- {
- if(insertIndex+1==collObject.length-1 && typeof collObject[insertIndex+1]!='undefined' && (cmp_str=collObject[insertIndex+1].sortkey).customCompare(inputResource.sortkey,globalSortAlphabet,1,false)==-1)
- {
- insertIndex+=2;
- break;
- }
- else
- low=++insertIndex;
- }
- else if(result==1)
- {
- if((cmp_str=collObject[insertIndex-1].sortkey).customCompare(inputResource.sortkey,globalSortAlphabet,1,false)==-1)
- break;
- else
- high=--insertIndex;
- }
- }
- // check for header existence
- var headerMiss=1;
- for(var i=0;i<collObject.length;i++)
- if(collObject[i].headerOnly==true && collObject[i].displayvalue==headerObject.displayvalue)
- {
- headerMiss=0;
- break;
- }
- // insert header if not exists
- if(headerMiss)
- {
- headerObject.index=insertIndex;
- collObject.splice(insertIndex, 0, headerObject);
- }
- // insert the resource
- if(collObject.length==1 && globalCalDAVInitLoad)
- $('#SystemCalDavZAP .fc-header-center ').addClass('r_operate_all');
- this.counterList[inputResource.uid+' '+inputResource.listType]={collectionLength: 0, counter: 0, uid: inputResource.uid, isLoading: false, isSaving: false};
- collObject.splice(insertIndex+headerMiss, 0, inputResource);
- if(!nameChanged)
- {
- if(isEvent)
- {
- globalEventList.displayEventsArray[inputResource.uid]=new Array();
- globalEventList.events[inputResource.uid]={};
- }
- else
- {
- globalEventList.displayTodosArray[inputResource.uid]=new Array();
- globalEventList.todos[inputResource.uid]={};
- }
- }
- var resList = '#ResourceCalDAV'+todoString+'List';
- var resHeader = '.resourceCalDAV'+todoString+'_header';
- var resItem = '.resourceCalDAV'+todoString+'_item';
- if(headerMiss)
- {
- var newElement=$('#ResourceCalDAV'+todoString+'ListTemplate').find('.resourceCalDAV'+todoString+'_header').clone().wrap('<div>');
- newElement.append(headerObject.displayvalue);
- if(todoString=='')
- newElement.find('input[type=checkbox]').attr('onclick','resourceChBoxClick(this, \'#\'+$(this).parent().parent().attr(\'id\'), \''+resHeader+'\', false);if(isCalDAVLoaded && $(this).parent().parent().attr(\'id\')== \'ResourceCalDAV'+todoString+'List\'){$(this).prop(\'checked\')?enableResource($(this).parent()):disableResource($(this).parent());}');
- else
- newElement.find('input[type=checkbox]').attr('onclick','resourceChBoxClick(this, \'#\'+$(this).parent().parent().attr(\'id\'), \''+resHeader+'\', false);if(isCalDAVLoaded && $(this).parent().parent().attr(\'id\')== \'ResourceCalDAV'+todoString+'List\'){$(this).prop(\'checked\')?enableResourceTodo($(this).parent()):disableResourceTodo($(this).parent());}');
- newElement.css('display', 'none');
- newElement=newElement.parent().html();
- $('#ResourceCalDAV'+todoString+'List').children().eq(insertIndex).after(newElement);
- }
- // insert the resource to interface
- console.log('insert inputResource with uid=' + inputResource.uid);
- var newElement = $('#ResourceCalDAV'+todoString+'ListTemplate').find('.resourceCalDAV'+todoString+'_item').clone().wrap('<div>');
- var par=inputResource.uid.split('/');
- if(inputResource.permissions.read_only)
- newElement.addClass('resourceCalDAV_item_ro');
- newElement.attr('data-id', inputResource.uid);
- if(globalCalDAVInitLoad)
- newElement.addClass('r_operate');
- newElement.html("<div class='resourceCalDAVColor' style='background:"+inputResource.ecolor+"'></div><input type='text' class='colorPicker'/><input type='checkbox' name="+inputResource.uid+" />"+$('<div/>').text(inputResource.displayvalue).html());
- newElement.attr('title', $('<div/>').text(inputResource.displayvalue).html());
- if(todoString=='')
- newElement.find('input[type=checkbox]').attr({'data-id':inputResource.uid, 'onclick':'var evt = arguments[0];evt.stopPropagation();collectionChBoxClick(this, \'#\'+$(this).parent().parent().attr(\'id\'), \''+resHeader+'\', \''+resItem+'\', null, false);if(isCalDAVLoaded && $(this).parent().parent().attr(\'id\')== \'ResourceCalDAV'+todoString+'List\'){$(this).prop(\'checked\')?enableCalendar(\''+inputResource.uid+'\'):disableCalendar(\''+inputResource.uid+'\');}'});
- else
- newElement.find('input[type=checkbox]').attr({'data-id':inputResource.uid, 'onclick':'var evt = arguments[0];evt.stopPropagation();collectionChBoxClick(this, \'#\'+$(this).parent().parent().attr(\'id\'), \''+resHeader+'\', \''+resItem+'\', null, false);if(isCalDAVLoaded && $(this).parent().parent().attr(\'id\')== \'ResourceCalDAV'+todoString+'List\'){$(this).prop(\'checked\')?enableCalendarTodo(\''+inputResource.uid+'\'):disableCalendarTodo(\''+inputResource.uid+'\');}'});
- newElement.click(function(e){
- if(($(this).hasClass('resourceCalDAV_item')&&globalEventCollectionsLoading) || ($(this).hasClass('resourceCalDAVTODO_item')&&globalTodoCollectionsLoading))
- return true;
- if(e.shiftKey) {
- if(isEvent)
- enableOne($(this).attr('data-id'));
- else
- enableOneTodo($(this).attr('data-id'));
- }
- $('#ResourceCalDAV'+todoString+'List .resourceCalDAV_item_selected').removeClass('resourceCalDAV_item_selected');
- $(this).addClass('resourceCalDAV_item_selected');
- });
- if(typeof globalCalendarColorPropertyXmlns== 'undefined' || globalCalendarColorPropertyXmlns== null || globalCalendarColorPropertyXmlns==='' || globalCalendarColorPropertyXmlns!==false)
- bindColorPickerClick(newElement.find('.resourceCalDAVColor'));
- $('#ResourceCalDAV'+todoString+'List').children().eq(insertIndex+headerMiss).after(newElement);
- if(inputResource.makeLoaded)
- {
- var resDOMHeader=newElement.prevUntil('.resourceCalDAV'+todoString+'_header').last().prev();
- if(!resDOMHeader.length)
- resDOMHeader=newElement.prev();
- resDOMHeader.css('display','block');
- var rex=vCalendar.pre['accountUidParts'];
- var tmp=inputResource.accountUID.match(rex);
- var resourceCalDAV_href=tmp[1]+tmp[3]+tmp[4];
- var resourceCalDAV_user=tmp[2];
- for(var i=0;i<globalAccountSettings.length;i++)
- if(globalAccountSettings[i].href==resourceCalDAV_href && globalAccountSettings[i].userAuth.userName==resourceCalDAV_user && globalLoadedPrincipals.indexOf(resourceCalDAV_href)==-1)
- {
- globalLoadedPrincipals.push(globalAccountSettings[i].href);
- break;
- }
- }
- else
- newElement.css('display','none');
- // restore the checked state
- if(makeChecked)
- {
- if(window['globalVisibleCalDAV'+todoString+'Collections'].indexOf(inputResource.uid)==-1)
- window['globalVisibleCalDAV'+todoString+'Collections'].splice(window['globalVisibleCalDAV'+todoString+'Collections'].length, 0, inputResource.uid);
- $('#ResourceCalDAV'+todoString+'List').children().eq(insertIndex+headerMiss+1).find('input[type=checkbox]').prop('checked', true);
- }
- if(!globalCalDAVInitLoad)
- collectionChBoxClick(newElement.find('input[type=checkbox]').get(0), '#ResourceCalDAV'+todoString+'List', '.resourceCalDAV'+todoString+'_header', '.resourceCalDAV'+todoString+'_item', null, false);
- };
- this.removeOldResources=function(inputUidBase, inputTimestamp)
- {
- var tmp=inputUidBase.match(vCalendar.pre['hrefRex']);
- var inputHref=tmp[2];
- for(var i=this.collections.length-1;i>=0;i--)
- {
- if(this.collections[i]!=undefined && !this.collections[i].subscription && this.collections[i].timestamp!=undefined && this.collections[i].uid.indexOf(inputUidBase)==0 && this.collections[i].timestamp<inputTimestamp)
- {
- var uidRemoved=this.collections[i].uid;
- //if(globalEventList.displayEventsArray[uidRemoved].length>0)
- //{
- var beforeScroll = $('#main').width()-$('#calendar').width();
- $('#calendar').fullCalendar('removeEventSource', this.collections[i].fcSource);
- var afterScroll = $('#main').width()-$('#calendar').width();
- rerenderCalendar(beforeScroll!=afterScroll);
- //}
- var item=$('#ResourceCalDAVList').find('.resourceCalDAV_item[data-id^="'+jqueryEscapeSelector(this.collections[i].uid)+'"]');
- var item_header=item.prevUntil('.resourceCalDAV_header').last().prev();
- if(!item_header.length)
- item_header=item.prev();
- item.remove();
- this.collections.splice(i, 1);
- // if next item is undefined or it is a header and the previous item is header delete it
- if((this.collections[i]==undefined || this.collections[i].headerOnly==true) && this.collections[i-1].headerOnly==true)
- {
- item_header.remove();
- this.collections.splice(--i, 1);
- }
- else
- {
- var firstVisibleCollection=null;
- for(var vi=i-1;vi>0;vi--)
- {
- if(this.collections[vi].headerOnly==true)
- break;
- if(this.collections[vi].makeLoaded)
- {
- firstVisibleCollection=this.collections[vi];
- break;
- }
- }
- if(firstVisibleCollection==null)
- {
- for(var vi=i;vi<this.collections.length;vi++)
- {
- if(this.collections[vi].headerOnly==true)
- break;
- if(this.collections[vi].makeLoaded)
- {
- firstVisibleCollection=this.collections[vi];
- break;
- }
- }
- }
- if(firstVisibleCollection==null)
- item_header.css('display','none');
- else
- {
- var triggerInput=$('#ResourceCalDAVList').find('.resourceCalDAV_item[data-id^="'+jqueryEscapeSelector(firstVisibleCollection.uid)+'"]').find('input[type=checkbox]');
- collectionChBoxClick(triggerInput.get(0), '#ResourceCalDAVList', '.resourceCalDAV_header', '.resourceCalDAV_item', null, false);
- }
- }
- }
- }
- for(var i=this.TodoCollections.length-1;i>=0;i--)
- {
- if(this.TodoCollections[i]!=undefined && !this.TodoCollections[i].subscription && this.TodoCollections[i].timestamp!=undefined && this.TodoCollections[i].uid.indexOf(inputUidBase)==0 && this.TodoCollections[i].timestamp<inputTimestamp)
- {
- var uidRemoved=this.TodoCollections[i].uid;
- //if(globalEventList.displayEventsArray[uidRemoved].length>0)
- //{
- var beforeScroll = $('#mainTODO').width()-$('#todoList').width();
- $('#todoList').fullCalendar('removeEventSource', this.TodoCollections[i].fcSource);
- var afterScroll = $('#mainTODO').width()-$('#todoList').width();
- rerenderTodo(beforeScroll!=afterScroll);
- //}
- var item=$('#ResourceCalDAVTODOList').find('.resourceCalDAVTODO_item[data-id^="'+jqueryEscapeSelector(this.TodoCollections[i].uid)+'"]');
- var item_header=item.prevUntil('.resourceCalDAVTODO_header').last().prev();
- if(!item_header.length)
- item_header=item.prev();
- item.remove();
- this.TodoCollections.splice(i, 1);
- // if next item is undefined or it is a header and the previous item is header delete it
- if((this.TodoCollections[i]==undefined || this.TodoCollections[i].headerOnly==true) && this.TodoCollections[i-1].headerOnly==true)
- {
- item_header.remove();
- this.TodoCollections.splice(--i, 1);
- }
- else
- {
- var firstVisibleCollection=null;
- for(var vi=i-1;vi>0;vi--)
- {
- if(this.TodoCollections[vi].headerOnly==true)
- break;
- if(this.TodoCollections[vi].makeLoaded)
- {
- firstVisibleCollection=this.TodoCollections[vi];
- break;
- }
- }
- if(firstVisibleCollection==null)
- {
- for(var vi=i;vi<this.TodoCollections.length;vi++)
- {
- if(this.TodoCollections[vi].headerOnly==true)
- break;
- if(this.TodoCollections[vi].makeLoaded)
- {
- firstVisibleCollection=this.TodoCollections[vi];
- break;
- }
- }
- }
- if(firstVisibleCollection==null)
- item_header.css('display','none');
- else
- {
- var triggerInput=$('#ResourceCalDAVTODOList').find('.resourceCalDAVTODO_item[data-id^="'+jqueryEscapeSelector(firstVisibleCollection.uid)+'"]').find('input[type=checkbox]');
- collectionChBoxClick(triggerInput.get(0), '#ResourceCalDAVTODOList', '.resourceCalDAVTODO_header', '.resourceCalDAVTODO_item', null, false);
- }
- }
- }
- }
- };
- this.removeResource=function(inputUid, loadNext,isEvent)
- {
- if(isEvent)
- {
- for(var i=this.collections.length-1;i>=0;i--)
- if(this.collections[i].uid==inputUid)
- {
- var uidRemoved=this.collections[i].uid;
- var item=$('#ResourceCalDAVList').find('[data-id^="'+jqueryEscapeSelector(this.collections[i].uid)+'"]');
- var item_prev=item.prev();
- item.remove();
- this.collections.splice(i, 1);
- // if next item is undefined or it is a header and the previous item is header delete it
- if((this.collections[i]==undefined || this.collections[i].headerOnly==true) && i>0 && this.collections[i-1].headerOnly==true)
- {
- item_prev.remove();
- this.collections.splice(i, 1);
- }
- }
- }
- else
- for(var i=this.TodoCollections.length-1;i>=0;i--)
- if(this.TodoCollections[i].uid==inputUid)
- {
- var uidRemoved=this.TodoCollections[i].uid;
- var item=$('#ResourceCalDAVTODOList').find('[data-id^="'+jqueryEscapeSelector(this.TodoCollections[i].uid)+'"]');
- var item_prev=item.prev();
- item.remove();
- this.TodoCollections.splice(i, 1);
- // if next item is undefined or it is a header and the previous item is header delete it
- if((this.TodoCollections[i]==undefined || this.TodoCollections[i].headerOnly==true) && i>0 && this.TodoCollections[i-1].headerOnly==true)
- {
- item_prev.remove();
- this.TodoCollections.splice(i, 1);
- }
- }
- };
- this.getCollectionByUID=function(inputUID)
- {
- for(var i=0;i<this.collections.length;i++)
- {
- if(this.collections[i].uid==inputUID)
- return this.collections[i];
- }
- for(var i=0;i<this.TodoCollections.length;i++)
- {
- if(this.TodoCollections[i].uid==inputUID)
- return this.TodoCollections[i];
- }
- return null;
- };
- this.getEventCollectionByUID=function(inputUID)
- {
- for(var i=0;i<this.collections.length;i++)
- {
- if(this.collections[i].uid==inputUID)
- return this.collections[i];
- }
- return null;
- };
- this.getTodoCollectionByUID=function(inputUID)
- {
- for(var i=0;i<this.TodoCollections.length;i++)
- {
- if(this.TodoCollections[i].uid==inputUID)
- return this.TodoCollections[i];
- }
- return null;
- };
- this.getTodoCollectionAndIndexByUID=function(inputUID)
- {
- for(var i=0;i<this.TodoCollections.length;i++)
- {
- if(this.TodoCollections[i].uid==inputUID)
- return {coll:this.TodoCollections[i],index:i};
- }
- return null;
- };
- this.getResources=function()
- {
- return this.collections;
- };
- this.getSyncResourceArray=function()
- {
- return this.syncResourceArray;
- };
- }
|