(function ($) {
$.fn.select2tree = function (options) {
var defaults = {
language: "zh-CN",
minimumResultsForSearch: -1
/*theme: "bootstrap"*/
};
var opts = $.extend(defaults, options);
opts.templateResult = function (data, container) {
if (data.element) {
//insert span element and add 'parent' property
var $wrapper = $("" + data.text + "");
var $element = $(data.element);
$(container).attr("val", $element.val());
if ($element.attr("parent")) {
$(container).attr("parent", $element.attr("parent"));
}
return $wrapper;
} else {
return data.text;
}
};
var $that = $(this);
$(this).select2(opts).on("select2:open",open);
};
function moveOption(id, index) {
index = index || 0;
if (id) {
$(".select2-results__options li[parent=" + id + "]").insertAfter(".select2-results__options li[val=" + id + "]");
$(".select2-results__options li[parent=" + id + "]").each(function () {
$(this).attr('level', index);
moveOption($(this).attr("val"), index + 1);
});
} else {
$(".select2-results__options li:not([parent])").appendTo(".select2-results__options ul");
$(".select2-results__options li:not([parent])").each(function () {
$(this).attr('level', index);
moveOption($(this).attr("val"), index + 1);
});
}
}
//deal switch action
function switchAction(id, open, isAll) {
if (!id||$(".select2-results__options li[parent='" + id + "']").length<=0) {
return;
}
if (isAll&&$(".select2-results__options li[val=" + id + "][level='1']").length>0) {
return;
}
if (open) {
$(".select2-results__options li[val=" + id + "] span[class]:eq(0)").removeClass("icon-add").addClass("icon-delete");
//$(".select2-results__options li[parent='" + id + "']").slideDown();
} else {
$(".select2-results__options li[val=" + id + "] span[class]:eq(0)").addClass("icon-add").removeClass("icon-delete");
// $(".select2-results__options li[parent='" + id + "']").slideUp();
}
$(".select2-results__options li[parent='" + id + "']").each(function() {
var $that = $(this);
open ? $that.slideDown() : $that.slideUp();
switchAction($that.attr("val"), open, isAll);
});
}
function open() {
setTimeout(function () {
moveOption();
$(".select2-results__options li").each(function () {
var $this = $(this);
$this.find("span:eq(0)").addClass('iconfont icon-safety-certificate');
if ($this.attr("parent")) {
$(this).siblings("li[val=" + $this.attr("parent") + "]").find("span:eq(0)")
.removeClass("icon-ban").addClass("icon-add switch").css({"cursor": "pointer"});
$(this).siblings("li[val=" + $this.attr("parent") + "]").find("span:eq(1)").css("font-weight", "bold");
}
if (!$this.attr("style")) {
var level = $this.attr("level");
var paddingLeft = level;
$("li[parent='" + $this.attr("parent") + "']").css("display", "none").css("padding-left", paddingLeft + "em");
}
});
$(".select2-results__options li[level='0']").each(function () {
var $this = $(this);
var id = $this.attr("val");
switchAction(id, true, true);
});
//override mousedown for collapse/expand
$(".switch").off("mousedown").on("mousedown", function (event) {
switchAction($(this).parent().attr("val"), $(this).hasClass("icon-add"));
event.stopPropagation();
event.preventDefault();
});
//override mouseup to nothing
$(".switch").off("mouseup").on("mouseup", function () {
return false;
});
}, 0);
}
})(jQuery);