(function($){ //global variables //this is needed to temporarily disable doubles, e.g. for uncheckAll var uncheckAll_doubles = false; //this is now default and not changable anymore var checkDisabled = true; // var checkboxesGroups_grayed = false; var checkboxesGroups = false; //converter $(document).ready(function() { var converter = $(document).find(".hummingbird-treeview-converter"); if (converter) { //hide simple treeview structure converter.hide(); var converter_height = converter.attr("data-height"); var converter_scroll = converter.attr("data-scroll"); if (converter_scroll == "true") { converter_scroll = "scroll"; } //create new treeview container var tree_html = '
' + '' + "\n"; item = item + '' + "\n"; } // } }); item = item + '
'; //console.log(item) tree_html = tree_html + item; if (allowed == true) { $(".hummingbird-treeview-converter").after(tree_html); } else { $(".hummingbird-treeview-converter").after(msg); } } //end converter }); $.fn.hummingbird = function(options){ var methodName = options; var args = arguments; var options = $.extend( {}, $.fn.hummingbird.defaults, options); //initialisation if (typeof(methodName) == "undefined" ) { return this.each(function(){ //-------------------options-------------------------------------------------------// //change symbols if (options.collapsedSymbol != "fa-plus") { $(this).find("i").removeClass("fa-plus").addClass(options.collapsedSymbol); } //hide checkboxes if (options.checkboxes == "disabled") { $(this).find("input:checkbox").hide(); } if (options.checkboxesGroups == "disabled") { checkboxesGroups = true; //find all checkboxes which have children and disable them //tri-state logic will still be applied //this_checkbox.prop("disabled",true).parent("label").css({'color':'#c8c8c8'}); var groups = $(this).find('input:checkbox:not(".hummingbird-end-node")'); groups.prop("disabled",true).parent("label").css({"cursor":"not-allowed"}); } if (options.checkboxesGroups == "disabled_grayed") { checkboxesGroups_grayed = true; //find all checkboxes which have children and disable them //tri-state logic will still be applied //this_checkbox.prop("disabled",true).parent("label").css({'color':'#c8c8c8'}); var groups = $(this).find('input:checkbox:not(".hummingbird-end-node")'); groups.prop("disabled",true).parent("label").css({"cursor":"not-allowed",'color':'#c8c8c8'}); } //collapseAll if (options.collapseAll === false) { $.fn.hummingbird.expandAll($(this),options.collapsedSymbol,options.expandedSymbol); } //-------------------options-------------------------------------------------------// //initialise doubles logic var doubleMode = false; var allVariables = new Object; if (options.checkDoubles) { $(this).find('input:checkbox.hummingbird-end-node').each(function() { if (allVariables[$(this).attr("data-id")]) { allVariables[$(this).attr("data-id")].push($(this).attr("id")); //console.log($(this)) } else { allVariables[$(this).attr("data-id")] = [$(this).attr("id")]; } }); //console.log(JSON.stringify(allVariables)); } //three state logic //$.fn.hummingbird.ThreeStateLogic($(this),doubleMode,allVariables,options.checkDoubles,options.checkDisabled); $.fn.hummingbird.ThreeStateLogic($(this),doubleMode,allVariables,options.checkDoubles,checkDisabled); //expandSingle $(this).on("click", 'li i.' + options.collapsedSymbol, function() { $.fn.hummingbird.expandSingle($(this),options.collapsedSymbol,options.expandedSymbol); }); //collapseSingle $(this).on("click", 'li i.' + options.expandedSymbol, function() { $.fn.hummingbird.collapseSingle($(this),options.collapsedSymbol,options.expandedSymbol); }); }); } //checkAll if (methodName == "checkAll") { return this.each(function(){ $.fn.hummingbird.checkAll($(this)); }); } //ucheckAll if (methodName == "uncheckAll") { return this.each(function(){ $.fn.hummingbird.uncheckAll($(this)); }); } //disableNode if (methodName == "disableNode") { return this.each(function(){ var name = args[1].name; var attr = args[1].attr; var state = args[1].state; if (typeof args[1].disableChildren !== 'undefined') { var disableChildren = args[1].disableChildren; } else { var disableChildren = true; } $.fn.hummingbird.disableNode($(this),attr,name,state,disableChildren); }); } //enableNode if (methodName == "enableNode") { return this.each(function(){ var name = args[1].name; var attr = args[1].attr; var state = args[1].state; if (typeof args[1].enableChildren !== 'undefined') { var enableChildren = args[1].enableChildren; } else { var enableChildren = true; } $.fn.hummingbird.enableNode($(this),attr,name,state,enableChildren); }); } //checkNode if (methodName == "checkNode") { return this.each(function(){ var name = args[1].name; var attr = args[1].attr; var expandParents = args[1].expandParents; $.fn.hummingbird.checkNode($(this),attr,name); if (expandParents == true) { $.fn.hummingbird.expandNode($(this),attr,name,expandParents,options.collapsedSymbol,options.expandedSymbol); } }); } //uncheckNode if (methodName == "uncheckNode") { return this.each(function(){ var name = args[1].name; var attr = args[1].attr; var collapseChildren = args[1].collapseChildren; $.fn.hummingbird.uncheckNode($(this),attr,name); if (collapseChildren == true) { $.fn.hummingbird.collapseNode($(this),attr,name,collapseChildren,options.collapsedSymbol,options.expandedSymbol); } }); } //setNodeColor if (methodName == "setNodeColor") { return this.each(function(){ var attr = args[1]; var ID = args[2]; var color = args[3]; $.fn.hummingbird.setNodeColor($(this),attr,ID,color); }); } //collapseAll if (methodName == "collapseAll") { return this.each(function(){ $.fn.hummingbird.collapseAll($(this),options.collapsedSymbol,options.expandedSymbol); }); } //expandAll if (methodName == "expandAll") { return this.each(function(){ $.fn.hummingbird.expandAll($(this),options.collapsedSymbol,options.expandedSymbol); }); } //expandNode if (methodName == "expandNode") { return this.each(function(){ var name = args[1].name; var attr = args[1].attr; var expandParents = args[1].expandParents; $.fn.hummingbird.expandNode($(this),attr,name,expandParents,options.collapsedSymbol,options.expandedSymbol); }); } //collapseNode if (methodName == "collapseNode") { return this.each(function(){ var name = args[1].name; var attr = args[1].attr; var collapseChildren = args[1].collapseChildren; $.fn.hummingbird.collapseNode($(this),attr,name,collapseChildren,options.collapsedSymbol,options.expandedSymbol); }); } //getChecked if (methodName == "getChecked") { return this.each(function(){ var attr = args[1].attr; var list = args[1].list; var onlyEndNodes = args[1].onlyEndNodes; $.fn.hummingbird.getChecked($(this),attr,list,onlyEndNodes); }); } //getUnchecked if (methodName == "getUnchecked") { return this.each(function(){ var attr = args[1].attr; var list = args[1].list; var onlyEndNodes = args[1].onlyEndNodes; $.fn.hummingbird.getUnchecked($(this),attr,list,onlyEndNodes); }); } //search if (methodName == "search") { return this.each(function(){ var treeview_container = args[1].treeview_container; var search_input = args[1].search_input; var search_output = args[1].search_output; var search_button = args[1].search_button; if (typeof args[1].dialog !== 'undefined') { var dialog = args[1].dialog; } else { var dialog = ""; } if (typeof args[1].enter_key_1 !== 'undefined') { var enter_key_1 = args[1].enter_key_1; } else { var enter_key_1 = true; } if (typeof args[1].enter_key_2 !== 'undefined') { var enter_key_2 = args[1].enter_key_2; } else { var enter_key_2 = true; } if (typeof args[1].scrollOffset !== 'undefined') { var scrollOffset = args[1].scrollOffset; } else { var scrollOffset = false; } if (typeof args[1].onlyEndNodes !== 'undefined') { var onlyEndNodes = args[1].onlyEndNodes; } else { var onlyEndNodes = false; } if (typeof args[1].EnterKey !== 'undefined') { var EnterKey = args[1].EnterKey; } else { var EnterKey = true; } $.fn.hummingbird.search($(this),treeview_container,search_input,search_output,search_button,dialog,enter_key_1,enter_key_2,options.collapsedSymbol,options.expandedSymbol,scrollOffset,onlyEndNodes,EnterKey); }); } }; //options defaults $.fn.hummingbird.defaults = { expandedSymbol: "fa-minus", collapsedSymbol: "fa-plus", collapseAll: true, checkboxes: "enabled", checkboxesGroups: "enabled", checkDoubles: false, //checkDisabled: false, //this is now not changeable and true always }; //global vars var nodeDisabled = false; var nodeEnabled = false; //-------------------methods--------------------------------------------------------------------------// //-------------------checkAll---------------// $.fn.hummingbird.checkAll = function(tree){ tree.children("li").children("label").children("input:checkbox").prop('indeterminate', false).prop('checked', false).trigger("click"); }; //-------------------uncheckAll---------------// $.fn.hummingbird.uncheckAll = function(tree){ //console.log(tree.children("li").children("label").children("input:checkbox")) //find disabled groups var disabled_groups = tree.find('input:checkbox:disabled:not(.hummingbird-end-node)'); //console.log(disabled_groups) //enable these disabled_groups.prop('disabled', false) //disable checking for doubles temporarily uncheckAll_doubles = true; tree.children("li").children("label").children("input:checkbox").prop('indeterminate', false).prop('checked', true).trigger("click"); uncheckAll_doubles = false; //disable disabled groups again disabled_groups.prop('disabled', true) //console.log(tree.children("li").children("label").children("input:checkbox")); }; //-------------------collapseAll---------------// $.fn.hummingbird.collapseAll = function(tree,collapsedSymbol,expandedSymbol){ tree.find("ul").hide(); tree.find('.' + expandedSymbol).removeClass(expandedSymbol).addClass(collapsedSymbol); }; //------------------expandAll------------------// $.fn.hummingbird.expandAll = function(tree,collapsedSymbol,expandedSymbol){ tree.find("ul").show(); tree.find('.' + collapsedSymbol).removeClass(collapsedSymbol).addClass(expandedSymbol); }; //-------------------collapseSingle---------------// $.fn.hummingbird.collapseSingle = function(node,collapsedSymbol,expandedSymbol){ node.parent("li").children("ul").hide(); node.removeClass(expandedSymbol).addClass(collapsedSymbol); }; //-------------------expandSingle---------------// $.fn.hummingbird.expandSingle = function(node,collapsedSymbol,expandedSymbol){ node.parent("li").children("ul").show(); node.removeClass(collapsedSymbol).addClass(expandedSymbol); }; //-------------------expandNode---------------// $.fn.hummingbird.expandNode = function(tree,attr,name,expandParents,collapsedSymbol,expandedSymbol){ var that_node = tree.find('input[' + attr + '=' + name + ']'); var that_ul = that_node.parent("label").siblings("ul"); that_ul.show().siblings("i").removeClass(collapsedSymbol).addClass(expandedSymbol); //expand all parents and change symbol if (expandParents === true) { that_node.parents("ul").show().siblings("i").removeClass(collapsedSymbol).addClass(expandedSymbol); } }; //-------------------collapseNode---------------// $.fn.hummingbird.collapseNode = function(tree,attr,name,collapseChildren,collapsedSymbol,expandedSymbol){ var that_node = tree.find('input[' + attr + '=' + name + ']'); var that_ul = that_node.parent("label").siblings("ul"); //collapse children and change symbol if (collapseChildren === true) { that_node.parent("label").parent("li").find("ul").hide().siblings("i").removeClass(expandedSymbol).addClass(collapsedSymbol); } else { that_ul.hide().siblings("i").removeClass(expandedSymbol).addClass(collapsedSymbol); } }; //-------------------checkNode---------------// $.fn.hummingbird.checkNode = function(tree,attr,name){ tree.find('input:checkbox:not(:checked)[' + attr + '=' + name + ']').prop("indeterminate",false).trigger("click"); }; //-------------------uncheckNode---------------// $.fn.hummingbird.uncheckNode = function(tree,attr,name){ tree.find('input:checkbox:checked[' + attr + '=' + name + ']').prop("indeterminate",false).trigger("click"); }; //-------------------disableNode---------------// $.fn.hummingbird.disableNode = function(tree,attr,name,state,disableChildren){ var this_checkbox = tree.find('input:checkbox:not(:disabled)[' + attr + '=' + name + ']'); //for a disabled unchecked node, set node checked and then trigger a click to uncheck //for a disabled checked node, set node unchecked and then trigger a click to check this_checkbox.prop("checked",state === false); nodeDisabled = true; this_checkbox.trigger("click"); //disable this node and all children if (disableChildren === true) { this_checkbox.parent("label").parent("li").find('input:checkbox').prop("disabled",true).parent("label").parent("li").css({'color':'#c8c8c8',"cursor":"not-allowed"}); } else { //console.log(this_checkbox.prop("disabled",true).parent("label").parent("li")) this_checkbox.prop("disabled",true).parent("label").parent("li").css({'color':'#c8c8c8',"cursor":"not-allowed"}); } }; //-------------------enableNode---------------// $.fn.hummingbird.enableNode = function(tree,attr,name,state,enableChildren){ var this_checkbox = tree.find('input:checkbox:disabled[' + attr + '=' + name + ']'); //a checkbox cannot be enabled if all children are disabled AND enableChildren is false //get children checkboxes which are not disabled var children_not_disabled_sum= this_checkbox.parent("label").next("ul").children("li").children("label").children("input:checkbox:not(:disabled)").length; if (children_not_disabled_sum == 0 && enableChildren == false) { console.log("NOW!!!!!!!!!!!!!!!!!!!!!") return; } //the state where a parent is enabled and all children are disabled must be forbidden //for a disabled unchecked node, set node checked and then trigger a click to uncheck //for a disabled checked node, set node unchecked and then trigger a click to check this_checkbox.prop("disabled",false).parent("label").parent("li").css({'color':'#636b6f',"cursor":"default"}); //all parents enabled //no action on parents //this_checkbox.parent("label").parent("li").parents("li").children("label").children("input[type='checkbox']").prop("disabled",false).parents("label").parent("li").css({'color':'#636b6f',"cursor":"default"}); //all children enabled if (enableChildren === true) { this_checkbox.parent("label").parent("li").find('input:checkbox').prop("disabled",false).parent("label").parent("li").css({'color':'#636b6f',"cursor":"default"}); } this_checkbox.prop("checked",state === false); nodeEnabled = true; this_checkbox.trigger("click"); }; //--------------get all checked items------------------// $.fn.hummingbird.getChecked = function(tree,attr,list,onlyEndNodes){ if (onlyEndNodes == true) { tree.find('input:checkbox.hummingbird-end-node:checked').each(function() { if (attr == "text") { list.push($(this).parent("label").parent("li").text()); } else { list.push($(this).attr(attr)); } }); } else { tree.find('input:checkbox:checked').each(function() { if (attr == "text") { list.push($(this).parent("label").parent("li").text()); } else { list.push($(this).attr(attr)); } }); } }; //--------------get all checked items------------------// //--------------get all unchecked items------------------// $.fn.hummingbird.getUnchecked = function(tree,attr,list,onlyEndNodes){ if (onlyEndNodes == true) { tree.find('input:checkbox.hummingbird-end-node:not(:checked)').each(function() { list.push($(this).attr(attr)); }); } else { tree.find('input:checkbox:not(:checked)').each(function() { list.push($(this).attr(attr)); }); } }; //--------------get all unchecked items------------------// //-------------------setNodeColor---------------// $.fn.hummingbird.setNodeColor = function(tree,attr,ID,color){ tree.find('input:checkbox[' + attr + '=' + ID + ']').parent("li").css({'color':color}); }; //--------------three-state-logic----------------------// $.fn.hummingbird.ThreeStateLogic = function(tree,doubleMode,allVariables,checkDoubles,checkDisabled) { tree.find('input:checkbox').on('click', function(e) { //console.log($(this)) //check / uncheck all checkboxes below that node, if they have children weather they are disabled or not //do nothing with end-node-checkboxes which are disabled //thus three state logic is applyed to groups although they are disabled and if they have children //all not disabled var nodes_below_not_disabled = $(this).parent("label").parent("li").find("input:checkbox:not(:disabled)"); //all disabled without hummingbird-end-node var nodes_below_disabled_groups = $(this).parent("label").parent("li").find('input:checkbox:disabled:not(.hummingbird-end-node)'); //add them together var nodes_below = nodes_below_not_disabled.add(nodes_below_disabled_groups); //merge //var nodes_below = ; var ids = []; nodes_below.each(function(){ ids.push($(this).attr("id")); }); //console.log("this"); //console.log($(this)); if ($(this).prop("checked")) { var state = true; var checkSiblings = "input:checkbox:not(:checked)"; //fire event tree.trigger("nodeChecked",ids.join()); } else { var state = false; var checkSiblings = "input:checkbox:checked"; //fire event tree.trigger("nodeUnchecked",ids.join()); } //check / uncheck all checkboxes below that node nodes_below.prop("indeterminate",false).prop("checked",state); //set all parents indeterminate and unchecked //if checkDisabled===false treat all disabled as if they were not there //do it for all if checkDisabled===true //if checkDisabled===false do it if it was not a disabled node, i.e. nodeDisabled===false //if (checkDisabled || nodeDisabled === false) { $(this).parent("label").parent().parents("li").children("label").children("input:checkbox").prop("indeterminate",true); $(this).parent("label").parent().parents("li").children("label").children("input:checkbox").prop("checked",false); //travel down the dom through all ul's, but not the ul directly under that, because that will be changed //console.log($(this).parent("label").parent("li").find("ul")) $(this).parent("label").siblings("ul").find("ul").map(function(){ //console.log($(this)) //check if children are disabled //console.log($(this).parent("label").next("ul").children("li").children("label").children("input:checkbox")) //var not_disabled_sum_children = $(this).parent("label").next("ul").children("li").children("label").children("input:checkbox:not(:disabled)").length; var disabled_sum_children = $(this).children("li").children("label").children("input:checkbox:disabled").length; //console.log("disabled_sum_children= " + disabled_sum_children) //if a check has happened count how many are checked //if an uncheck has happened count how many are unchecked //var checked_unchecked_sum_children = $(this).parent("label").next("ul").children("li").children("label").children(checkSiblings).length; //a check has happened var checked_sum_children = $(this).children("li").children("label").children("input:checkbox:checked").length; var unchecked_sum_children = $(this).children("li").children("label").children("input:checkbox:not(:checked)").length; //console.log("checked_sum_children= " + checked_sum_children) //console.log("unchecked_sum_children= " + unchecked_sum_children) //if all children disabled set appropriate state of this checkbox //This happens e.g. if all children of this box are disabled and checked, so this box is actually also checked and disabled, but because it is //not an end-node it can be checked, unchecked. Now a parent of this has been unchecked, thus this box is also unchecked, although all children are checked //thus the appropriate state has to be set again //there are children disabled: //if a check happened, all children are checked //if an uncheck happened all children are unchecked if (disabled_sum_children > 0) { if (checked_sum_children == 0) { $(this).siblings("label").children("input:checkbox").prop("checked",false); } if (unchecked_sum_children == 0) { $(this).siblings("label").children("input:checkbox").prop("checked",true); } if (checked_sum_children > 0 && unchecked_sum_children > 0) { $(this).siblings("label").children("input:checkbox").prop("checked",false).prop("indeterminate",true); } } }); //} //travel up the DOM //test if siblings are all checked / unchecked / indeterminate //check / uncheck parents if all siblings are checked /unchecked //thus, set parents checked / unchecked, if children are all checked or all unchecked with no indeterminates //do this for all //if (checkDisabled) { $(this).parent("label").parents("li").map(function() { //console.log($(this)) var indeterminate_sum = 0; //number of checked if an uncheck happened or number of unchecked if a check happened var checked_unchecked_sum = $(this).siblings().addBack().children("label").children(checkSiblings).length; //check how many not disabled are here (below that parent) if (checkDisabled) { var not_disabled_sum = $(this).siblings().addBack().children("label").children("input:checkbox:not(:disabled)").length; //console.log("not_disabled_sum= " + not_disabled_sum) } //console.log("checkDisabled= " + checkDisabled) //checkDisabled means that disabled boxes are considered by the tri-state logic //these are the not disabled siblings together with node itself //var not_disabled_sum = $(this).siblings().addBack().children("label").children("input:checkbox:not(:disabled)").length; //console.log("not_disabled_sum= " + not_disabled_sum); $(this).siblings().addBack().children("label").children("input:checkbox").map(function() { indeterminate_sum = indeterminate_sum + $(this).prop("indeterminate"); }); //this is 0 if there are no checked, thus an uncheck has happened if ((indeterminate_sum + checked_unchecked_sum) == 0) { $(this).parent().parent().children("label").children("input:checkbox").prop("indeterminate",false); $(this).parent().parent().children("label").children("input:checkbox").prop("checked",state); } //if this click was together width a disableNode then, there is one more disabled child, thus not_disabled_sum-- if (checkDisabled) { if (nodeDisabled == true) { not_disabled_sum--; } //if all children are disabled, disable also parent if (not_disabled_sum == 0) { //console.log("here") //console.log($(this).parent().parent().children("label").children("input[type='checkbox']")) //only disable parents if they are not already disabled by the checkboxesGroups options if (checkboxesGroups_grayed == false && checkboxesGroups == false) { $(this).parent().parent().children("label").children("input[type='checkbox']").prop("disabled",true).parent("label").parent("li").css({'color':'#c8c8c8'}); } } } }); //} //------------------check if this variable has doubles-----------------------// //------------------and click doubles if needed------------------------------// //------------------only if this is not a double check-----------------------// if (checkDoubles == true && uncheckAll_doubles == false) { if (doubleMode == false) { //do this for all checked / unchecked checkboxes below that node $(this).parent("label").parent("li").find("input.hummingbird-end-node[type='checkbox']").each(function() { //check if this node has doubles var L = allVariables[$(this).attr("data-id")].length; if ( L > 1) { doubleMode = true; //if state of these checkboxes is not similar to state //-> trigger click var Zvar = allVariables[$(this).attr("data-id")]; for (var i=0;i 0 && num_state_inverse_Checkboxes.length > 0) { //only if the boxes are enabled disabledCheckboxes.parent("label").parent("li").parents("li").children("label").children("input:checkbox:not(:disabled)").prop("indeterminate",true).prop("checked",state); } } } //--------------------------disabled-----------------------------------------// //set nodeDisabled and nodeEnabled back to false //so that the next clicked node can be a normal node or again a disbaled node nodeDisabled = false; nodeEnabled = false; //fire event tree.trigger("CheckUncheckDone"); }); } //--------------three-state-logic----------------------// //----------------------------search--------------------------------------// $.fn.hummingbird.search = function(tree,treeview_container,search_input,search_output,search_button,dialog,enter_key_1,enter_key_2,collapsedSymbol,expandedSymbol,scrollOffset,onlyEndNodes,EnterKey) { //trigger search on enter key if (EnterKey == true) { $(document).keyup(function(e) { if (e.which == 13) { //console.log("current_page= " + enter_key_2) if (enter_key_1 == enter_key_2) { $(dialog + " #" + search_button).trigger("click"); } } }); } var first_search = true; var this_var_checkbox = {}; //hide dropdown search list $(dialog + " #" + search_input).on("click", function(e) { $(dialog + " #" + search_output).hide(); }); $(dialog + " #" + search_button).on("click", function(e) { //show dropdown search list $(dialog + " #" + search_output).show(); var search_str = $(dialog + " #" + search_input).val().trim(); //empty dropdown $(dialog + " #" + search_output).empty(); //loop through treeview var num_search_results = 0; if (onlyEndNodes == true) { var onlyEndNodes_Class = ".hummingbird-end-node"; } else { var onlyEndNodes_Class = ""; } tree.find('input:checkbox' + onlyEndNodes_Class).each(function() { if ($(this).parent().text().toUpperCase().includes(search_str.toUpperCase())) { //add items to dropdown $(dialog + " #" + search_output).append('
  • ' + $(this).parent().text() + '
  • '); num_search_results++; } }); if (num_search_results == 0) { $(dialog + " #" + search_output).append("    Nothing found"); } //click on search dropdown $(dialog + " #" + search_output + " li").on("click", function(e) { //no focus on the input field to trigger the search scrolling e.preventDefault(); //hide dropdown $(dialog + " #" + search_output).hide(); //set value of input field $(dialog + " #" + search_input).val($(this).text()); //reset color of last selection if (first_search == false) { if (this_var_checkbox.prop("disabled")) { this_var_checkbox.parent("label").parent("li").css({'color':'#c8c8c8',"cursor":"not-allowed"}); } else { this_var_checkbox.parent("label").parent("li").css({'color':'#636b6f',"cursor":"default"}); } } //before jumping to the hummingbird-end-node a collapse all is needed tree.hummingbird("collapseAll"); //get this checkbox this_var_checkbox = tree.find('input[id="' + $(this).attr("id").substring(5) + '"]'); //parent uls var prev_uls = this_var_checkbox.parents("ul"); //change plus to minus prev_uls.closest("li").children("i").removeClass(collapsedSymbol).addClass(expandedSymbol); //highlight hummingbird-end-node this_var_checkbox.parent("label").parent("li").css({'color':'#f0ad4e'}); first_search = false; //expand parent uls prev_uls.show(); //---------------------------scrolling-----------------------------------// //set scroll position to zero if (treeview_container == "body") { //Chrome document.body.scrollTop = 0; //Firefox document.documentElement.scrollTop = 0; } else { $(dialog + " #" + treeview_container)[0].scrollTop = 0; } //get position and offset of element var this_var_checkbox_position = this_var_checkbox.position().top; this_var_checkbox_position = this_var_checkbox_position+scrollOffset; if (treeview_container == "body") { //Chrome document.body.scrollTop += this_var_checkbox_position; //Firefox document.documentElement.scrollTop += this_var_checkbox_position; } else { $(dialog + " #" + treeview_container)[0].scrollTop = this_var_checkbox_position; } //---------------------------scrolling-----------------------------------// }); //if there is only one search result -> go to this without showing the dropdown if (num_search_results == 1) { var one_search_id = $("#" + search_output + " li").attr("id"); $("#" + one_search_id).trigger("click"); } }); } //----------------------------search--------------------------------------// })(jQuery);