Michael RICOIS f46be40623 Init
2017-06-07 16:31:24 +02:00

249 lines
6.8 KiB
JavaScript

var Tree = function (element, options)
{
this.$element = $(element);
this.options = $.extend({}, $.fn.tree.defaults, options);
this.init();
};
function getCategoryById(param) {
var elem = null;
$('input[name=id_parent]').each(function (index) {
if ($(this).val() === param + '') {
elem = $(this);
}
});
return elem;
}
function disableTreeItem(item) {
item.find('input[name=id_parent]').attr('disabled', 'disabled');
if (item.hasClass('tree-folder')) {
item.find('span.tree-folder-name').addClass('tree-folder-name-disable');
item.find('ul li').each(function (index) {
disableTreeItem($(this));
});
} else if (item.hasClass('tree-item')) {
item.addClass('tree-item-disable');
}
}
function organizeTree() {
var id = $('#id_category').val();
var item = getCategoryById(id).parent().parent();
disableTreeItem(item);
}
Tree.prototype =
{
constructor: Tree,
init: function ()
{
var that = $(this);
var name = this.$element.parent().find('ul.tree input').first().attr('name');
var idTree = this.$element.parent().find('.cattree.tree').first().attr('id');
this.$element.find("label.tree-toggler, .icon-folder-close, .icon-folder-open").unbind('click');
this.$element.find("label.tree-toggler, .icon-folder-close, .icon-folder-open").click(
function ()
{
if ($(this).parent().parent().children("ul.tree").is(":visible"))
{
$(this).parent().children(".icon-folder-open")
.removeClass("icon-folder-open")
.addClass("icon-folder-close");
that.trigger('collapse');
$(this).parent().parent().children("ul.tree").toggle(300);
}
else
{
$(this).parent().children(".icon-folder-close")
.removeClass("icon-folder-close")
.addClass("icon-folder-open");
var load_tree = (typeof(idTree) != 'undefined'
&& $(this).parent().closest('.tree-folder').find('ul.tree .tree-toggler').first().html() == '');
if (load_tree)
{
var category = $(this).parent().children('ul.tree input').first().val();
var inputType = $(this).parent().children('ul.tree input').first().attr('type');
var useCheckBox = 0;
if (inputType == 'checkbox')
{
useCheckBox = 1;
}
var thatOne = $(this);
$.get(
'ajax-tab.php',
{controller:'AdminProducts',token:currentToken,action:'getCategoryTree',type:idTree,category:category,inputName:name,useCheckBox:useCheckBox},
function(content)
{
thatOne.parent().closest('.tree-folder').find('ul.tree').html(content);
$('#'+idTree).tree('collapse', thatOne.closest('.tree-folder').children("ul.tree"));
that.trigger('expand');
thatOne.parent().parent().children("ul.tree").toggle(300);
$('#'+idTree).tree('init');
}
);
}
else
{
that.trigger('expand');
$(this).parent().parent().children("ul.tree").toggle(300);
}
}
}
);
this.$element.find("li").unbind('click');
this.$element.find("li").click(
function ()
{
$('.tree-selected').removeClass("tree-selected");
$('li input:checked').parent().addClass("tree-selected");
}
);
if (typeof(idTree) != 'undefined')
{
if ($('select#id_category_default').length)
{
this.$element.find(':input[type=checkbox]').unbind('click');
this.$element.find(':input[type=checkbox]').click(function()
{
if ($(this).prop('checked'))
addDefaultCategory($(this));
else
{
$('select#id_category_default option[value=' + $(this).val() + ']').remove();
if ($('select#id_category_default option').length == 0)
{
$('select#id_category_default').closest('.form-group').hide();
$('#no_default_category').show();
}
}
});
}
if (typeof(treeClickFunc) != 'undefined')
{
this.$element.find(":input[type=radio]").unbind('click');
this.$element.find(":input[type=radio]").click(treeClickFunc);
}
}
return $(this);
},
collapse : function(elem, $speed)
{
elem.find("label.tree-toggler").each(
function()
{
$(this).parent().children(".icon-folder-open")
.removeClass("icon-folder-open")
.addClass("icon-folder-close");
$(this).parent().parent().children("ul.tree").hide($speed);
}
);
return $(this);
},
collapseAll : function($speed)
{
this.$element.find("label.tree-toggler").each(
function()
{
$(this).parent().children(".icon-folder-open")
.removeClass("icon-folder-open")
.addClass("icon-folder-close");
$(this).parent().parent().children("ul.tree").hide($speed);
}
);
return $(this);
},
expandAll : function($speed)
{
var idTree = this.$element.parent().find('.cattree.tree').first().attr('id');
if (typeof(idTree) != 'undefined' && !$('#'+idTree).hasClass('full_loaded'))
{
var selected = [];
that = this;
$('#'+idTree).find('.tree-selected input').each(
function()
{
selected.push($(this).val());
}
);
var name = $('#'+idTree).find('ul.tree input').first().attr('name');
var inputType = $('#'+idTree).find('ul.tree input').first().attr('type');
var useCheckBox = 0;
if (inputType == 'checkbox')
{
useCheckBox = 1;
}
$.get(
'ajax-tab.php',
{controller:'AdminProducts',token:currentToken,action:'getCategoryTree',type:idTree,fullTree:1,selected:selected, inputName:name,useCheckBox:useCheckBox},
function(content)
{
$('#'+idTree).html(content);
organizeTree();
$('#'+idTree).tree('init');
that.$element.find("label.tree-toggler").each(
function()
{
$(this).parent().children(".icon-folder-close")
.removeClass("icon-folder-close")
.addClass("icon-folder-open");
$(this).parent().parent().children("ul.tree").show($speed);
$('#'+idTree).addClass('full_loaded');
}
);
}
);
}
else
{
this.$element.find("label.tree-toggler").each(
function()
{
$(this).parent().children(".icon-folder-close")
.removeClass("icon-folder-close")
.addClass("icon-folder-open");
$(this).parent().parent().children("ul.tree").show($speed);
}
);
}
return $(this);
}
};
$.fn.tree = function (option, value)
{
var methodReturn;
var $set = this.each(
function ()
{
var $this = $(this);
var data = $this.data('tree');
var options = typeof option === 'object' && option;
if (!data){
$this.data('tree', (data = new Tree(this, options)));
}
if (typeof option === 'string') {
methodReturn = data[option](value);
}
}
);
return (methodReturn === undefined) ? $set : methodReturn;
};
$.fn.tree.Constructor = Tree;