/** * Kolab groupware folders treelist widget * * @author Thomas Bruederli * * @licstart The following is the entire license notice for the * JavaScript code in this file. * * Copyright (C) 2014, Kolab Systems AG * * 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 . * * @licend The above is the entire license notice * for the JavaScript code in this file. */ function kolab_folderlist(node, p) { // extends treelist.js rcube_treelist_widget.call(this, node, p); // private vars var me = this; var search_results; var search_results_widget; var search_results_container; var listsearch_request; var Q = rcmail.quote_html; // render the results for folderlist search function render_search_results(results) { if (results.length) { // create treelist widget to present the search results if (!search_results_widget) { search_results_container = $('
') .html('

' + rcmail.gettext('calsearchresults','calendar') + '

') .insertAfter(me.container); search_results_widget = new rcube_treelist_widget('
    ', { id_prefix: p.id_prefix, selectable: false }); // register click handler on search result's checkboxes to select the given item for listing search_results_widget.container .appendTo(search_results_container) .on('click', 'input[type=checkbox]', function(e) { if (!this.checked) return; var li = $(this).closest('li'), id = li.attr('id').replace(new RegExp('^'+p.id_prefix), ''), prop = search_results[id], parent_id = prop.parent || null; // find parent node and insert at the right place if (parent_id && $('#' + p.id_prefix + parent_id, me.container).length) { prop.listname = prop.editname; li.children().first().children('span,a').first().html(Q(prop.listname)); } // move this result item to the main list widget me.insert({ id: id, classes: [], html: li.children().first() }, parent_id, parent_id ? true : false); delete prop.html; me.triggerEvent('insert-item', { id: id, data: prop, item: li }); li.remove(); }); } // add results to list for (var prop, i=0; i < results.length; i++) { prop = results[i]; search_results[prop.id] = prop; $('
  • ') .attr('id', p.id_prefix + prop.id) .html(prop.html) .appendTo(search_results_widget.container); } search_results_container.show(); } } // do some magic when search is performed on the widget this.addEventListener('search', function(search) { // hide search results if (search_results_widget) { search_results_container.hide(); search_results_widget.reset(); } search_results = {}; // send search request(s) to server if (search.query && search.execute) { var sources = [ 'folders' /*, 'users'*/ ]; var reqid = rcmail.multi_thread_http_request({ items: sources, threads: rcmail.env.autocomplete_threads || 1, action: p.search_action || 'listsearch', postdata: { action:'search', q:search.query, source:'%s' }, lock: rcmail.display_message(rcmail.get_label('searching'), 'loading'), onresponse: render_search_results }); listsearch_request = { id:reqid, sources:sources.slice(), num:sources.length }; } }); } // link prototype from base class kolab_folderlist.prototype = rcube_treelist_widget.prototype;