Skip to content
Snippets Groups Projects
bootstrap-tree.js 3.46 KiB
Newer Older
  • Learn to ignore specific revisions
  • Prosper De Laure's avatar
    Prosper De Laure committed
    var BootstrapTree = {
        init: function(tree) {
    
            tree.find('li')
                .children('ul')
                .parent()
                .addClass('parent_li')
                .find('> span')
                .find('i:first')
                .on('click', BootstrapTree.toggleNode);
    
    
            $('.parent_li').find('span:first')
                           .find('.fa:first')
                           .not('[data-closed-icon]')
                           .addClass('fa-plus-square');
    
            $('.parent_li').find('span:first')
                           .find('.fa[data-closed-icon]:first')
                           .each(function() {
                                $(this).addClass($(this).data('closed-icon'));
                           })
    
    
    Prosper De Laure's avatar
    Prosper De Laure committed
            $('.parent_li').find(' > ul > li').hide();
        },
    
        addRoot: function(tree, element) {
            if (!element || !tree) {
                return;
            }
    
            var ul = $('<ul/>')
    
            element.appendTo(ul);
            ul.appendTo(tree);
        },
    
        addNode: function(parent, element) {
            if (!element || !parent) {
                return;
            }
    
            var ul = parent.find('> ul');
            if (ul.length == 0) {
                ul = $('<ul/>').appendTo(parent);
    
                parent.addClass('parent_li')
    
                      .find('span:first')
                      .find('.fa:first')
                      .addClass(this.openedIcon)
                      .on('click', BootstrapTree.toggleNode);
    
    Prosper De Laure's avatar
    Prosper De Laure committed
            }
            //this.openNode(ul);
            element.appendTo(ul);
    
            console.log('ok');
    
    Prosper De Laure's avatar
    Prosper De Laure committed
        },
    
        removeNode: function(element) {
            if (element.prop("tagName") != 'LI') {
                return;
            }
    
            var ul = element.closest('ul');
            var li = ul.closest('li');
    
            if (ul.find('>li').length <= 1) {
                ul.remove();
    
                li.find('i.fa').removeClass(this.openedIcon + ' ' + this.closedIcon);
    
    Prosper De Laure's avatar
    Prosper De Laure committed
            } else {
                element.remove();
            }
    
            this.openNode(li);
        },
    
        openNode: function(element) {
    
            element.parents('li').find('i.' + this.closedIcon + ':first').click();
    
    Prosper De Laure's avatar
    Prosper De Laure committed
        },
    
        toggleNode: function(event) {
            var children = $(this).closest('li.parent_li').find(' > ul > li');
    
            var i = $(this).parent().find(' > i');
    
            var closedIcon = i.data('closed-icon');
            var openedIcon = i.data('opened-icon');
    
            if (!closedIcon) {
                closedIcon = 'fa-plus-square';
                openedIcon = 'fa-minus-square';
            }
    
    
            if (i.hasClass(openedIcon)) {
    
    Prosper De Laure's avatar
    Prosper De Laure committed
                children.hide('fast');
    
                i.addClass(closedIcon).removeClass(openedIcon);
    
    Prosper De Laure's avatar
    Prosper De Laure committed
            }
            else {
                children.show('fast');
    
                i.addClass(openedIcon).removeClass(closedIcon);
    
    Prosper De Laure's avatar
    Prosper De Laure committed
            }
            event.stopPropagation();
            $('.tree').find('.hideTreeElement').css('display', 'none');
        },
    
        findNode: function(tree, text) {
            this.openNode(tree.find("li:contains('"+text+"')"));
    
        },
    
        move: function(element, target) {
            if (!element || !target) {
                return;
            }
    
            var ul = target.find('> ul');
            if (ul.length == 0) {
                ul = $('<ul/>').appendTo(target);
    
                target.addClass('parent_li')
                      .find('span:first')
                      .find('.fa:first')
                      .addClass(this.openedIcon)
                      .on('click', BootstrapTree.toggleNode);
            }
            ul.append(element);
    
            var targetUl = target.find('ul');
            if (targetUl.length == 0) {
                targetUl.remove();
            }
    
            return newElement;
    
    Prosper De Laure's avatar
    Prosper De Laure committed
        }
    
    Prosper De Laure's avatar
    Prosper De Laure committed
    }