Cache DOM lookups, general cleanup.

This commit is contained in:
Thomas Tanghus 2012-07-23 01:15:20 +02:00
parent b60e5942a5
commit 67b6ff22bc
1 changed files with 132 additions and 113 deletions

View File

@ -222,11 +222,7 @@ Contacts={
var item = $('.contacts li[data-id="'+Contacts.UI.Card.id+'"]').detach();
$(item).find('a').html(name);
Contacts.UI.Card.fn = name;
Contacts.UI.Contacts.insertContact({
contactlist:$('#contacts ul[data-id="'+Contacts.UI.Card.bookid+'"]'),
contacts:$('#contacts ul[data-id="'+Contacts.UI.Card.bookid+'"] li'),
contact:item,
});
Contacts.UI.Contacts.insertContact({contact:item});
Contacts.UI.Contacts.scrollTo(Contacts.UI.Card.id);
});
@ -315,10 +311,11 @@ Contacts={
newid = parseInt($('#contacts').find('li[data-bookid="'+bookid+'"]').first().data('id'));
} else if(parseInt(params.cid) && !parseInt(params.aid)) {
newid = parseInt(params.cid);
var listitem = $('#contacts li[data-id="'+newid+'"]');
var listitem = Contacts.UI.Contacts.getContact(newid); //$('#contacts li[data-id="'+newid+'"]');
console.log('Is contact in list? ' + listitem.length);
if(listitem.length) {
bookid = parseInt($('#contacts li[data-id="'+newid+'"]').data('bookid'));
//bookid = parseInt($('#contacts li[data-id="'+newid+'"]').data('bookid'));
bookid = parseInt(Contacts.UI.Contacts.getContact(newid).data('bookid'));
} else { // contact isn't in list yet.
bookid = 'unknown';
}
@ -406,19 +403,7 @@ Contacts={
$.getJSON(OC.filePath('contacts', 'ajax', 'contactdetails.php'),{'id':id},function(jsondata){
if(jsondata.status == 'success'){
Contacts.UI.Card.loadContact(jsondata.data, aid);
$('#contacts .active').removeClass('active');
var item = $('<li data-id="'+jsondata.data.id+'" class="active"><a href="index.php?id='+jsondata.data.id+'" style="background: url('+OC.filePath('contacts', '', 'thumbnail.php')+'?id='+jsondata.data.id+') no-repeat scroll 0% 0% transparent;">'+Contacts.UI.Card.fn+'</a></li>');
var added = false;
$('#contacts ul[data-id="'+aid+'"] li').each(function(){
if ($(this).text().toLowerCase() > Contacts.UI.Card.fn.toLowerCase()) {
$(this).before(item).fadeIn('fast');
added = true;
return false;
}
});
if(!added) {
$('#contacts ul[data-id="'+aid+'"]').append(item);
}
var item = Contacts.UI.Contacts.insertContact({data:jsondata.data});
if(isnew) { // add some default properties
Contacts.UI.Card.addProperty('EMAIL');
Contacts.UI.Card.addProperty('TEL');
@ -455,9 +440,14 @@ Contacts={
}
},
delayedDelete:function() {
/* TODO:
$(window).unload(function() {
deleteFilesInQueue();
});
*/
$('#contacts_deletecard').tipsy('hide');
var newid = '', bookid;
var curlistitem = $('#contacts li[data-id="'+Contacts.UI.Card.id+'"]');
var curlistitem = Contacts.UI.Contacts.getContact(this.id);
curlistitem.removeClass('active');
var newlistitem = curlistitem.prev('li');
if(!newlistitem) {
@ -468,9 +458,12 @@ Contacts={
newid = newlistitem.data('id');
bookid = newlistitem.data('bookid');
}
$('#rightcontent').data('id',newid);
this.id = this.fn = this.fullname = this.shortname = this.famname = this.givname = this.addname = this.honpre = this.honsuf = '';
this.data = undefined;
$('#rightcontent').data('id', newid);
with(this) {
delete id; delete fn; delete fullname; delete shortname; delete famname;
delete givname; delete addname; delete honpre; delete honsuf; delete data;
}
if($('.contacts li').length > 0) {
Contacts.UI.Card.update({cid:newid, aid:bookid});
@ -479,8 +472,7 @@ Contacts={
$.getJSON(OC.filePath('contacts', 'ajax', 'loadintro.php'),{},function(jsondata){
if(jsondata.status == 'success'){
id = '';
$('#rightcontent').data('id','');
$('#rightcontent').html(jsondata.data.page);
$('#rightcontent').html(jsondata.data.page).removeData('id');
}
else{
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
@ -520,21 +512,22 @@ Contacts={
this.loadAddresses();
this.loadSingleProperties();
Contacts.UI.loadListHandlers();
var note = $('#note');
if(this.data.NOTE) {
$('#note').data('checksum', this.data.NOTE[0]['checksum']);
var note = $('#note').find('textarea');
note.data('checksum', this.data.NOTE[0]['checksum']);
var textarea = note.find('textarea');
var txt = this.data.NOTE[0]['value'];
var nheight = txt.split('\n').length > 4 ? txt.split('\n').length+2 : 5;
note.css('min-height', nheight+'em');
note.attr('rows', nheight);
note.val(txt);
$('#note').show();
note.expandingTextarea();
textarea.css('min-height', nheight+'em');
textarea.attr('rows', nheight);
textarea.val(txt);
note.show();
textarea.expandingTextarea();
$('#contacts_propertymenu_dropdown a[data-type="NOTE"]').parent().hide();
} else {
$('#note').data('checksum', '');
$('#note').find('textarea').val('');
$('#note').hide();
note.removeData('checksum');
note.find('textarea').val('');
note.hide();
$('#contacts_propertymenu_dropdown a[data-type="NOTE"]').parent().show();
}
},
@ -560,10 +553,11 @@ Contacts={
var val = $.datepicker.parseDate('yy-mm-dd', value.substring(0, 10));
value = $.datepicker.formatDate('dd-mm-yy', val);
}
$('#contact_identity').find('#'+propname.toLowerCase()).val(value);
$('#contact_identity').find('#'+propname.toLowerCase()+'_value').data('checksum', checksum);
$('#contact_identity').find('#'+propname.toLowerCase()+'_label').show();
$('#contact_identity').find('#'+propname.toLowerCase()+'_value').show();
var identcontainer = $('#contact_identity');
identcontainer.find('#'+propname.toLowerCase()).val(value);
identcontainer.find('#'+propname.toLowerCase()+'_value').data('checksum', checksum);
identcontainer.find('#'+propname.toLowerCase()+'_label').show();
identcontainer.find('#'+propname.toLowerCase()+'_value').show();
} else {
$('#contacts_propertymenu_dropdown a[data-type="'+propname+'"]').parent().show();
}
@ -767,17 +761,9 @@ Contacts={
},
addProperty:function(type){
switch (type) {
case 'PHOTO':
this.loadPhoto(true);
$('#file_upload_form').show();
$('#contacts_propertymenu_dropdown a[data-type="'+type+'"]').parent().hide();
$('#file_upload_start').trigger('click');
break;
case 'NOTE':
$('#note').show();
$('#contacts_propertymenu_dropdown a[data-type="'+type+'"]').parent().hide();
$('#note').find('textarea').expandingTextarea();
$('#note').find('textarea').focus();
$('#note').find('textarea').expandingTextarea().show().focus();
break;
case 'EMAIL':
if($('#emaillist>li').length == 1) {
@ -832,8 +818,7 @@ Contacts={
}
} else {
$('dl dt[data-element="'+proptype+'"],dd[data-element="'+proptype+'"]').hide();
$('dl dd[data-element="'+proptype+'"]').data('checksum', '');
$('dl dd[data-element="'+proptype+'"]').find('input').val('');
$('dl dd[data-element="'+proptype+'"]').data('checksum', '').find('input').val('');
}
$('#contacts_propertymenu_dropdown a[data-type="'+proptype+'"]').parent().show();
Contacts.UI.loading(obj, false);
@ -860,14 +845,14 @@ Contacts={
}
}
},
editName:function(){
editName:function() {
var params = {id: this.id};
/* Initialize the name edit dialog */
if($('#edit_name_dialog').dialog('isOpen') == true){
if($('#edit_name_dialog').dialog('isOpen') == true) {
$('#edit_name_dialog').dialog('moveToTop');
}else{
$.getJSON(OC.filePath('contacts', 'ajax', 'editname.php'),{id: this.id},function(jsondata){
if(jsondata.status == 'success'){
} else {
$.getJSON(OC.filePath('contacts', 'ajax', 'editname.php'),{id: this.id},function(jsondata) {
if(jsondata.status == 'success') {
$('body').append('<div id="name_dialog"></div>');
$('#name_dialog').html(jsondata.data.page).find('#edit_name_dialog' ).dialog({
modal: true,
@ -939,10 +924,11 @@ Contacts={
loadAddresses:function(){
$('#addresses').hide();
$('#addressdisplay dl.propertycontainer').remove();
var addresscontainer = $('#addressdisplay');
for(var adr in this.data.ADR) {
$('#addressdisplay dl').first().clone().insertAfter($('#addressdisplay dl').last()).show();
$('#addressdisplay dl').last().removeClass('template').addClass('propertycontainer');
$('#addressdisplay dl').last().data('checksum', this.data.ADR[adr]['checksum']);
addresscontainer.find('dl').first().clone().insertAfter($('#addressdisplay dl').last()).show();
addresscontainer.find('dl').last().removeClass('template').addClass('propertycontainer');
addresscontainer.find('dl').last().data('checksum', this.data.ADR[adr]['checksum']);
var adrarray = this.data.ADR[adr]['value'];
var adrtxt = '';
if(adrarray[0] && adrarray[0].length > 0) {
@ -954,7 +940,7 @@ Contacts={
if(adrarray[2] && adrarray[2].length > 0) {
adrtxt = adrtxt + '<li>' + adrarray[2].strip_tags() + '</li>';
}
if((adrarray[3] && adrarray[5]) && adrarray[3].length > 0 || adrarray[5].length > 0) {
if((3 in adrarray && 5 in adrarray) && adrarray[3].length > 0 || adrarray[5].length > 0) {
adrtxt = adrtxt + '<li>' + adrarray[5].strip_tags() + ' ' + adrarray[3].strip_tags() + '</li>';
}
if(adrarray[4] && adrarray[4].length > 0) {
@ -963,7 +949,7 @@ Contacts={
if(adrarray[6] && adrarray[6].length > 0) {
adrtxt = adrtxt + '<li>' + adrarray[6].strip_tags() + '</li>';
}
$('#addressdisplay dl').last().find('.addresslist').html(adrtxt);
addresscontainer.find('dl').last().find('.addresslist').html(adrtxt);
var types = new Array();
var ttypes = new Array();
for(var param in this.data.ADR[adr]['parameters']) {
@ -972,12 +958,12 @@ Contacts={
ttypes.push(this.data.ADR[adr]['parameters'][param]);
}
}
$('#addressdisplay dl').last().find('.adr_type_label').text(types.join('/'));
$('#addressdisplay dl').last().find('.adr_type').val(ttypes.join(','));
$('#addressdisplay dl').last().find('.adr').val(adrarray.join(';'));
$('#addressdisplay dl').last().data('checksum', this.data.ADR[adr]['checksum']);
addresscontainer.find('dl').last().find('.adr_type_label').text(types.join('/'));
addresscontainer.find('dl').last().find('.adr_type').val(ttypes.join(','));
addresscontainer.find('dl').last().find('.adr').val(adrarray.join(';'));
addresscontainer.find('dl').last().data('checksum', this.data.ADR[adr]['checksum']);
}
if($('#addressdisplay dl').length > 1) {
if(addresscontainer.find('dl').length > 1) {
$('#addresses').show();
$('#contact_communication').show();
}
@ -1022,9 +1008,6 @@ Contacts={
close : function(event, ui) {
$(this).dialog('destroy').remove();
$('#address_dialog').remove();
if(isnew) {
container.remove();
}
},
open : function(event, ui) {
$( "#adr_city" ).autocomplete({
@ -1063,7 +1046,7 @@ Contacts={
$( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
}
});
$( "#adr_country" ).autocomplete({
$('#adr_country').autocomplete({
source: function( request, response ) {
$.ajax({
url: "http://ws.geonames.org/searchJSON",
@ -1114,15 +1097,23 @@ Contacts={
saveAddress:function(dlg, obj, isnew){
if(isnew) {
container = $('#addressdisplay dl').last();
obj = $('#addressdisplay dl:last-child').find('input').first();
obj = container.find('input').first();
} else {
checksum = Contacts.UI.checksumFor(obj);
container = Contacts.UI.propertyContainerFor(obj);
}
var adr = new Array($(dlg).find('#adr_pobox').val().strip_tags(),$(dlg).find('#adr_extended').val().strip_tags(),$(dlg).find('#adr_street').val().strip_tags(),$(dlg).find('#adr_city').val().strip_tags(),$(dlg).find('#adr_region').val().strip_tags(),$(dlg).find('#adr_zipcode').val().strip_tags(),$(dlg).find('#adr_country').val().strip_tags());
$(container).find('.adr').val(adr.join(';'));
$(container).find('.adr_type').val($(dlg).find('#adr_type').val());
$(container).find('.adr_type_label').html(t('contacts',ucwords($(dlg).find('#adr_type').val().toLowerCase())));
var adr = new Array(
$(dlg).find('#adr_pobox').val().strip_tags(),
$(dlg).find('#adr_extended').val().strip_tags(),
$(dlg).find('#adr_street').val().strip_tags(),
$(dlg).find('#adr_city').val().strip_tags(),
$(dlg).find('#adr_region').val().strip_tags(),
$(dlg).find('#adr_zipcode').val().strip_tags(),
$(dlg).find('#adr_country').val().strip_tags()
);
container.find('.adr').val(adr.join(';'));
container.find('.adr_type').val($(dlg).find('#adr_type').val());
container.find('.adr_type_label').html(t('contacts',ucwords($(dlg).find('#adr_type').val().toLowerCase())));
Contacts.UI.Card.saveProperty($(container).find('input').first());
var adrtxt = '';
if(adr[0].length > 0) {
@ -1143,7 +1134,7 @@ Contacts={
if(adr[6].length > 0) {
adrtxt = adrtxt + '<li>' + adr[6] + '</li>';
}
$(container).find('.addresslist').html(adrtxt);
container.find('.addresslist').html(adrtxt);
},
uploadPhoto:function(filelist) {
if(!filelist) {
@ -1170,24 +1161,25 @@ Contacts={
form.submit();
}
},
loadPhotoHandlers:function(){
$('#phototools li a').tipsy('hide');
$('#phototools li a').tipsy();
loadPhotoHandlers:function() {
var phototools = $('#phototools');
phototools.find('li a').tipsy('hide');
phototools.find('li a').tipsy();
if(this.data.PHOTO) {
$('#phototools .delete').click(function() {
phototools.find('.delete').click(function() {
$(this).tipsy('hide');
Contacts.UI.Card.deleteProperty($('#contacts_details_photo'), 'single');
$(this).hide();
});
$('#phototools .edit').click(function() {
phototools.find('.edit').click(function() {
$(this).tipsy('hide');
Contacts.UI.Card.editCurrentPhoto();
});
$('#phototools .delete').show();
$('#phototools .edit').show();
phototools.find('.delete').show();
phototools.find('.edit').show();
} else {
$('#phototools .delete').hide();
$('#phototools .edit').hide();
phototools.find('.delete').hide();
phototools.find('.edit').hide();
}
},
cloudPhotoSelected:function(path){
@ -1219,6 +1211,7 @@ Contacts={
// notify the user that the image could not be loaded
Contacts.UI.notify({message:t('contacts','Error loading profile picture.')});
}).attr('src', OC.linkTo('contacts', 'photo.php')+'?id='+self.id+refreshstr);
this.loadPhotoHandlers()
},
editCurrentPhoto:function(){
$.getJSON(OC.filePath('contacts', 'ajax', 'currentphoto.php'),{'id':this.id},function(jsondata){
@ -1272,10 +1265,11 @@ Contacts={
},
addMail:function() {
//alert('addMail');
$('#emaillist li.template:first-child').clone(true).appendTo($('#emaillist')).show().find('a .tip').tipsy();
$('#emaillist li.template:last-child').find('select').addClass('contacts_property');
$('#emaillist li.template:last-child').removeClass('template').addClass('propertycontainer');
$('#emaillist li:last-child').find('input[type="email"]').focus();
var emaillist = $('#emaillist');
emaillist.find('li.template:first-child').clone(true).appendTo(emaillist).show().find('a .tip').tipsy();
emaillist.find('li.template:last-child').find('select').addClass('contacts_property');
emaillist.find('li.template:last-child').removeClass('template').addClass('propertycontainer');
emaillist.find('li:last-child').find('input[type="email"]').focus();
return false;
},
loadMails:function() {
@ -1311,35 +1305,37 @@ Contacts={
return false;
},
addPhone:function() {
$('#phonelist li.template:first-child').clone(true).appendTo($('#phonelist')); //.show();
$('#phonelist li.template:last-child').find('select').addClass('contacts_property');
$('#phonelist li.template:last-child').removeClass('template').addClass('propertycontainer');
$('#phonelist li:last-child').find('input[type="text"]').focus();
$('#phonelist li:last-child').find('select').multiselect({
var phonelist = $('#phonelist');
phonelist.find('li.template:first-child').clone(true).appendTo(phonelist); //.show();
phonelist.find('li.template:last-child').find('select').addClass('contacts_property');
phonelist.find('li.template:last-child').removeClass('template').addClass('propertycontainer');
phonelist.find('li:last-child').find('input[type="text"]').focus();
phonelist.find('li:last-child').find('select').multiselect({
noneSelectedText: t('contacts', 'Select type'),
header: false,
selectedList: 4,
classes: 'typelist'
});
$('#phonelist li:last-child').show();
phonelist.find('li:last-child').show();
return false;
},
loadPhones:function() {
$('#phones').hide();
$('#phonelist li.propertycontainer').remove();
var phonelist = $('#phonelist');
for(var phone in this.data.TEL) {
this.addPhone();
$('#phonelist li:last-child').find('select').multiselect('destroy');
$('#phonelist li:last-child').data('checksum', this.data.TEL[phone]['checksum'])
$('#phonelist li:last-child').find('input[type="text"]').val(this.data.TEL[phone]['value']);
phonelist.find('li:last-child').find('select').multiselect('destroy');
phonelist.find('li:last-child').data('checksum', this.data.TEL[phone]['checksum'])
phonelist.find('li:last-child').find('input[type="text"]').val(this.data.TEL[phone]['value']);
for(var param in this.data.TEL[phone]['parameters']) {
if(param.toUpperCase() == 'PREF') {
$('#phonelist li:last-child').find('input[type="checkbox"]').attr('checked', 'checked');
phonelist.find('li:last-child').find('input[type="checkbox"]').attr('checked', 'checked');
}
else if(param.toUpperCase() == 'TYPE') {
for(ptype in this.data.TEL[phone]['parameters'][param]) {
var pt = this.data.TEL[phone]['parameters'][param][ptype];
$('#phonelist li:last-child').find('select option').each(function(){
phonelist.find('li:last-child').find('select option').each(function(){
//if ($(this).val().toUpperCase() == pt.toUpperCase()) {
if ($.inArray($(this).val().toUpperCase(), pt.toUpperCase().split(',')) > -1) {
$(this).attr('selected', 'selected');
@ -1348,14 +1344,14 @@ Contacts={
}
}
}
$('#phonelist li:last-child').find('select').multiselect({
noneSelectedText: t('contacts', 'Select type'),
header: false,
selectedList: 4,
classes: 'typelist'
});
phonelist.find('li:last-child').find('select').multiselect({
noneSelectedText: t('contacts', 'Select type'),
header: false,
selectedList: 4,
classes: 'typelist'
});
}
if($('#phonelist li').length > 1) {
if(phonelist.find('li').length > 1) {
$('#phones').show();
$('#contact_communication').show();
}
@ -1480,7 +1476,25 @@ Contacts={
}
},
Contacts:{
contacts:{},
batchnum:50,
getContact:function(id) {
if(!this.contacts[id]) {
this.contacts[id] = $('#contacts li[data-id="'+id+'"]');
if(!this.contacts[id]) {
self = this;
$.getJSON(OC.filePath('contacts', 'ajax', 'contactdetails.php'),{'id':id},function(jsondata){
if(jsondata.status == 'success'){
self.contacts[id] = self.insertContact({data:jsondata.data});
}
else{
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
}
});
}
}
return this.contacts[id];
},
drop:function(event, ui) {
var dragitem = ui.draggable, droptarget = $(this);
if(dragitem.is('li')) {
@ -1519,13 +1533,16 @@ Contacts={
* If 'contactlist' or 'contacts' aren't defined they will be search for based in the properties in 'data'.
*/
insertContact:function(params) {
var id, bookid;
if(!params.contactlist) {
// FIXME: Check if contact really exists.
var bookid = params.data ? params.data.addressbookid : params.contact.data('bookid');
bookid = params.data ? params.data.addressbookid : params.contact.data('bookid');
id = params.data ? params.data.id : params.contact.data('id');
params.contactlist = $('#contacts ul[data-id="'+bookid+'"]');
}
if(!params.contacts) {
var bookid = params.data ? params.data.addressbookid : params.contact.data('bookid');
bookid = params.data ? params.data.addressbookid : params.contact.data('bookid');
id = params.data ? params.data.id : params.contact.data('id');
params.contacts = $('#contacts ul[data-id="'+bookid+'"] li');
}
var contact = params.data
@ -1545,6 +1562,7 @@ Contacts={
if(!added || !params.contacts) {
params.contactlist.append(contact);
}
//this.contacts[id] = contact;
return contact;
},
next:function(reverse) {
@ -1991,14 +2009,15 @@ $(document).ready(function(){
$('#selectaddressbook_dialog').dialog('moveToTop');
} else {
$('#dialog_holder').html(jsondata.data.page).ready(function($) {
$('#selectaddressbook_dialog').dialog({
var select_dlg = $('#selectaddressbook_dialog');
select_dlg.dialog({
modal: true, height: 'auto', width: 'auto',
buttons: {
'Ok':function() {
aid = $('#selectaddressbook_dialog').find('input:checked').val();
aid = select_dlg.find('input:checked').val();
if(aid == 'new') {
var displayname = $('#selectaddressbook_dialog').find('input.name').val();
var description = $('#selectaddressbook_dialog').find('input.desc').val();
var displayname = select_dlg.find('input.name').val();
var description = select_dlg.find('input.desc').val();
if(!displayname.trim()) {
OC.dialogs.alert(t('contacts', 'The address book name cannot be empty.'), t('contacts', 'Error'));
return false;