summaryrefslogtreecommitdiffstats
path: root/apps/contacts/js
diff options
context:
space:
mode:
authorThomas Tanghus <thomas@tanghus.net>2012-07-21 13:12:50 +0200
committerThomas Tanghus <thomas@tanghus.net>2012-07-21 13:13:41 +0200
commit687c87bc5b4d4c04cdb05adcab2465d8dfbb34cc (patch)
tree4886321160c11d75e7b78e34443d8268000703ec /apps/contacts/js
parent5381cc74188961899c3797c7d1634122bc8d0979 (diff)
downloadnextcloud-server-687c87bc5b4d4c04cdb05adcab2465d8dfbb34cc.tar.gz
nextcloud-server-687c87bc5b4d4c04cdb05adcab2465d8dfbb34cc.zip
DRYed inserting into contacts list.
Diffstat (limited to 'apps/contacts/js')
-rw-r--r--apps/contacts/js/contacts.js71
1 files changed, 41 insertions, 30 deletions
diff --git a/apps/contacts/js/contacts.js b/apps/contacts/js/contacts.js
index 9f5803706ae..8d881498768 100644
--- a/apps/contacts/js/contacts.js
+++ b/apps/contacts/js/contacts.js
@@ -187,20 +187,14 @@ Contacts={
// Name has changed. Update it and reorder.
$('#fn').change(function(){
var name = $('#fn').val().strip_tags();
- var item = $('.contacts li[data-id="'+Contacts.UI.Card.id+'"]');
+ var item = $('.contacts li[data-id="'+Contacts.UI.Card.id+'"]').detach();
$(item).find('a').html(name);
Contacts.UI.Card.fn = name;
- var added = false;
- $('.contacts li[data-bookid="'+Contacts.UI.Card.bookid+'"]').each(function(){
- if ($(this).text().toLowerCase() > name.toLowerCase()) {
- $(this).before(item).fadeIn('fast');
- added = true;
- return false;
- }
+ 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,
});
- if(!added) {
- $('#contacts ul[data-id="'+Contacts.UI.Card.bookid+'"]').append(item);
- }
Contacts.UI.Contacts.scrollTo(Contacts.UI.Card.id);
});
@@ -321,12 +315,15 @@ Contacts={
if(jsondata.status == 'success'){
if(bookid == 'unknown') {
bookid = jsondata.data.addressbookid;
- var entry = Contacts.UI.Card.createEntry(jsondata.data);
- $('#contacts ul[data-id="'+bookid+'"]').append(entry);
+ var contact = Contacts.UI.Contacts.insertContact({
+ contactlist:$('#contacts ul[data-id="'+bookid+'"]'),
+ data:jsondata.data
+ });
}
$('#contacts li[data-id="'+newid+'"],#contacts h3[data-id="'+bookid+'"]').addClass('active');
$('#contacts ul[data-id="'+bookid+'"]').slideDown(300);
Contacts.UI.Card.loadContact(jsondata.data, bookid);
+ Contacts.UI.Contacts.scrollTo(newid);
} else {
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
}
@@ -374,9 +371,6 @@ Contacts={
Contacts.UI.Card.add(';;;;;', '', '', true);
return false;
},
- createEntry:function(data) {
- return $('<li data-id="'+data.id+'" data-bookid="'+data.addressbookid+'" role="button"><a href="'+OC.linkTo('contacts', 'index.php')+'&id='+data.id+'" style="background: url('+OC.filePath('contacts', '', 'thumbnail.php')+'?id='+data.id+') no-repeat scroll 0% 0% transparent;">'+data.displayname+'</a></li>');
- },
add:function(n, fn, aid, isnew){ // add a new contact
console.log('Adding ' + fn);
aid = aid?aid:$('#contacts h3.active').first().data('id');
@@ -1503,6 +1497,33 @@ Contacts={
dropAddressbook:function(event, dragitem, droptarget) {
alert('Dropping address books not implemented yet');
},
+ /**
+ * @params params An object with the propeties 'contactlist':a jquery object of the ul to insert into,
+ * 'contacts':a jquery object of all items in the list and either 'data': an object with the properties
+ * id, addressbookid and displayname or 'contact': a listitem to be inserted directly.
+ * If 'contacts' is defined the new contact will be inserted alphabetically into the list, otherwise
+ * it will be appended.
+ */
+ insertContact:function(params) {
+ var contact = params.data
+ ? $('<li data-id="'+params.data.id+'" data-bookid="'+params.data.addressbookid+'" role="button"><a href="'+OC.linkTo('contacts', 'index.php')+'&id='+params.data.id+'" style="background: url('+OC.filePath('contacts', '', 'thumbnail.php')+'?id='+params.data.id+') no-repeat scroll 0% 0% transparent;">'+params.data.displayname+'</a></li>')
+ : params.contact;
+ var added = false;
+ var name = params.data ? params.data.displayname.toLowerCase() : contact.find('a').text().toLowerCase();
+ if(params.contacts) {
+ params.contacts.each(function() {
+ if ($(this).text().toLowerCase() > name) {
+ $(this).before(contact);
+ added = true;
+ return false;
+ }
+ });
+ }
+ if(!added || !params.contacts) {
+ params.contactlist.append(contact);
+ }
+ return contact;
+ },
// Reload the contacts list.
update:function(params){
if(!params) { params = {}; }
@@ -1564,7 +1585,7 @@ Contacts={
for(var c in book.contacts) {
if(book.contacts[c].id == undefined) { continue; }
if(!$('#contacts li[data-id="'+book.contacts[c]['id']+'"]').length) {
- var contact = Contacts.UI.Card.createEntry(book.contacts[c]);
+ var contact = Contacts.UI.Contacts.insertContact({contactlist:contactlist, contacts:contacts, data:book.contacts[c]});
if(c == self.batchnum-10) {
contact.bind('inview', function(event, isInView, visiblePartX, visiblePartY) {
$(this).unbind(event);
@@ -1576,17 +1597,6 @@ Contacts={
}
});
}
- var added = false;
- contacts.each(function(){
- if ($(this).text().toLowerCase() > book.contacts[c].displayname.toLowerCase()) {
- $(this).before(contact);
- added = true;
- return false;
- }
- });
- if(!added) {
- contactlist.append(contact);
- }
}
}
});
@@ -1617,9 +1627,10 @@ Contacts={
},
scrollTo:function(id){
var item = $('#contacts li[data-id="'+id+'"]');
+ console.log('scrollTo, found item '+id+'? ' + item.length);
if(item) {
- $('.contacts').animate({
- scrollTop: $('#contacts li[data-id="'+id+'"]').offset().top-20}, 'slow','swing');
+ $('#contacts').animate({
+ scrollTop: item.offset().top-40}, 'slow','swing');
}
}
}