From b08986f37521cbb6224d225f102f76636f22f1d7 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Wed, 14 May 2014 14:35:16 -0400
Subject: [PATCH] Small improvements to make treelist work in search-mode

---
 program/js/treelist.js |   28 +++++++++++++++++++++-------
 1 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/program/js/treelist.js b/program/js/treelist.js
index 1dd30a2..a99ee1e 100644
--- a/program/js/treelist.js
+++ b/program/js/treelist.js
@@ -83,6 +83,7 @@
   this.insert = insert;
   this.remove = remove;
   this.get_item = get_item;
+  this.get_node = get_node;
   this.get_selection = get_selection;
 
   /////// startup code (constructor)
@@ -224,9 +225,17 @@
   /**
    * Return the DOM element of the list item with the given ID
    */
-  function get_item(id)
+  function get_node(id)
   {
-    return id2dom(id).get(0);
+    return indexbyid[id];
+  }
+
+  /**
+   * Return the DOM element of the list item with the given ID
+   */
+  function get_item(id, real)
+  {
+    return id2dom(id, real).get(0);
   }
 
   /**
@@ -237,6 +246,11 @@
     var li, parent_li,
       parent_node = parent_id ? indexbyid[parent_id] : null
       search_ = search_active;
+
+    // ignore, already exists
+    if (indexbyid[node.id]) {
+      return;
+    }
 
     // apply saved state
     state = get_state(node.id, node.collapsed);
@@ -341,7 +355,7 @@
     if (sibling) {
       li.insertAfter(sibling);
     }
-    else if (first.id != myid) {
+    else if (first && first.id != myid) {
       li.insertBefore(first);
     }
 
@@ -357,7 +371,7 @@
     var node, li;
 
     if (node = indexbyid[id]) {
-      li = id2dom(id);
+      li = id2dom(id, true);
       li.remove();
 
       node.deleted = true;
@@ -610,11 +624,11 @@
   /**
    * Get the <li> element for the given node ID
    */
-  function id2dom(id)
+  function id2dom(id, real)
   {
     var domid = p.id_encode ? p.id_encode(id) : id,
-      suffix = search_active ? '--xsR' : '';
-    return $('#' + p.id_prefix + domid + suffix);
+      suffix = search_active && !real ? '--xsR' : '';
+    return $('#' + p.id_prefix + domid + suffix, container);
   }
 
   /**

--
Gitblit v1.9.1