diff --git a/plugins/kolab_addressbook/kolab_addressbook.js b/plugins/kolab_addressbook/kolab_addressbook.js index 56090dc3..11965d5b 100644 --- a/plugins/kolab_addressbook/kolab_addressbook.js +++ b/plugins/kolab_addressbook/kolab_addressbook.js @@ -84,125 +84,137 @@ rcube_webmail.prototype.book_save = function() }; // action executed after book delete -rcube_webmail.prototype.book_delete_done = function(id) +rcube_webmail.prototype.book_delete_done = function(id, recur) { - var n, g, li = this.get_folder_li(id), groups = this.env.contactgroups; + var n, groups = this.env.contactgroups, + sources = this.env.address_sources, + olddata = sources[id]; + + this.treelist.remove(id); - // remove folder and its groups rows for (n in groups) - if (groups[n].source == id && (g = this.get_folder_li(n))) { - $(g).remove(); + if (groups[n].source == id) { delete this.env.contactgroups[n]; + delete this.env.contactfolders[n]; } - $(li).remove(); delete this.env.address_sources[id]; delete this.env.contactfolders[id]; + + if (recur) + return; + + // remove subfolders + olddata.realname += this.env.delimiter; + for (n in sources) + if (sources[n].realname && sources[n].realname.indexOf(olddata.realname) == 0) + this.book_delete_done(n, true); }; // action executed after book create/update -rcube_webmail.prototype.book_update = function(data, old) +rcube_webmail.prototype.book_update = function(data, old, recur) { - var n, i, id, len, link, row, refrow, olddata, name = '', realname = '', sources, level, - folders = [], class_name = 'addressbook', - list = this.gui_objects.folderlist, + var n, i, id, len, link, row, prop, olddata, oldid, name, sources, level, + folders = [], classes = ['addressbook'], groups = this.env.contactgroups; this.env.contactfolders[data.id] = this.env.address_sources[data.id] = data; this.show_contentframe(false); - // update + // update (remove old row) if (old && old != data.id) { olddata = this.env.address_sources[old]; delete this.env.address_sources[old]; delete this.env.contactfolders[old]; - refrow = $('#rcmli'+old); + this.treelist.remove(old); } sources = this.env.address_sources; // set row attributes if (data.readonly) - class_name += ' readonly'; + classes.push('readonly'); if (data.class_name) - class_name += ' '+data.class_name; + classes.push(data.class_name); // updated currently selected book if (this.env.source != '' && this.env.source == old) { - class_name += ' selected'; + classes.push('selected'); this.env.source = data.id; } - link = $('').attr({'href': '#', 'rel': data.id}).html(data.name) - .click(function() { return rcmail.command('list', data.id, this); }); - row = $('
  • ').attr({id: 'rcmli'+data.id, 'class': class_name}) - .append(link); + link = $('').html(data.name) + .attr({ + href: '#', rel: data.id, + onclick: "return rcmail.command('list', '" + data.id + "', this)" + }); - // sort kolab folders, to put the new one in order - for (n in sources) - if (sources[n].kolab && (name = sources[n].realname)) - folders.push(name); + // add row at the end of the list + // treelist widget is not very smart, we need + // to do sorting and add groups list by ourselves + this.treelist.insert({id: data.id, html:link, classes: classes, childlistclass: 'groups'}, '', false); + row = $(this.treelist.get_item(data.id)); + row.append($('