![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/dceprojects.corals.io/public/assets/corals/plugins/nestable/ |
/*! * Select2-to-Tree 1.1.1 * https://github.com/clivezhg/select2-to-tree */ (function ($) { $.fn.select2ToTree = function (options) { var opts = $.extend({}, options); if (opts.treeData) { buildSelect(opts.treeData, this); } opts._templateResult = opts.templateResult; opts.templateResult = function (data, container) { var label = data.text; if (typeof opts._templateResult === "function") { label = opts._templateResult(data, container); } var $iteme = $("<span class='item-label'></span>").append(label); if (data.element) { var ele = data.element; container.setAttribute("data-val", ele.value); if (ele.className) container.className += " " + ele.className; if (ele.getAttribute("data-pup")) { container.setAttribute("data-pup", ele.getAttribute("data-pup")); } if ($(container).hasClass("non-leaf")) { return $.merge($('<span class="expand-collapse" onmouseup="expColMouseupHandler(event);"></span>'), $iteme); } } return $iteme; }; window.expColMouseupHandler = function (evt) { toggleSubOptions(evt.target || evt.srcElement); /* prevent Select2 from doing "select2:selecting","select2:unselecting","select2:closing" */ evt.stopPropagation ? evt.stopPropagation() : evt.cancelBubble = true; evt.preventDefault ? evt.preventDefault() : evt.returnValue = false; } var s2inst = this.select2(opts); s2inst.on("select2:open", function (evt) { var s2data = s2inst.data("select2"); s2data.$dropdown.addClass("s2-to-tree"); s2data.$dropdown.removeClass("searching-result"); var $allsch = s2data.$dropdown.find(".select2-search__field").add( s2data.$container.find(".select2-search__field") ); $allsch.off("input", inputHandler); $allsch.on("input", inputHandler); }); /* Show search result options even if they are collapsed */ function inputHandler(evt) { var s2data = s2inst.data("select2"); if ($(this).val().trim().length > 0) { s2data.$dropdown.addClass("searching-result"); } else { s2data.$dropdown.removeClass("searching-result"); } } return s2inst; }; function buildSelect(treeData, $el) { // build Select options according to Select-to-Tree specification function buildOptions(dataArr, curLevel, pup) { for (var i = 0; i < dataArr.length; i++) { var data = dataArr[i] || {}; var $opt = $("<option></option>"); $opt.text(data[treeData.labelFld || "text"]); $opt.val(data[treeData.valFld || "id"]); if (data[treeData.selFld || "selected"] && String(data[treeData.selFld || "selected"]) === "true") { $opt.prop("selected", data[treeData.selFld || "selected"]); } if($opt.val() === "") { $opt.prop("disabled", true); $opt.val(getUniqueValue()); } $opt.addClass("l" + curLevel); if (pup) $opt.attr("data-pup", pup); $el.append($opt); var inc = data[treeData.incFld || "inc"]; if (inc && inc.length > 0) { $opt.addClass("non-leaf"); buildOptions(inc, curLevel+1, $opt.val()); } } } buildOptions(treeData.dataArr, 1, ""); if (treeData.dftVal) $el.val(treeData.dftVal); } var uniqueIdx = 1; function getUniqueValue() { return "autoUniqueVal_" + uniqueIdx++; } function toggleSubOptions(target) { $(target.parentNode).toggleClass("opened"); showHideSub(target.parentNode); } function showHideSub(ele) { var curEle = ele; var $options = $(ele).parent(".select2-results__options"); var shouldShow = true; do { var pup = ($(curEle).attr("data-pup") || "").replace(/'/g, "\\'"); curEle = null; if (pup) { var pupEle = $options.find(".select2-results__option[data-val='" + pup + "']"); if (pupEle.length > 0) { if (!pupEle.eq(0).hasClass("opened")) { // hide current node if any parent node is collapsed $(ele).removeClass("showme"); shouldShow = false; break; } curEle = pupEle[0]; } } } while (curEle); if (shouldShow) $(ele).addClass("showme"); var val = ($(ele).attr("data-val") || "").replace(/'/g, "\\'"); $options.find(".select2-results__option[data-pup='" + val + "']").each(function () { showHideSub(this); }); } })(jQuery);