{"version":3,"sources":["treeview.js"],"names":["uuidv4","uid","replace","c","crypto","getRandomValues","Uint8Array","toString","isEmptyOrSpaces","str","match","treeView","controlId","allowSelection","loadDataAsync","loadDataCallback","selectItemCallback","container","$","this","generateTreeNode","loadTreeNodeData","loadDataCallBack","data","treeNode","node","actions","childWrapper","prop","nodeUid","next","remove","isEmpty","class","id","value","treeViewDataTag","valueTag","isEmptyTag","key","push","dataTags","length","j","tags","children","canHaveChildren","childUid","off","i","append","currentChild","on","hide","e","stopPropagation","toggle","treeViewNode","type"],"mappings":"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","file":"treeview.min.js","sourcesContent":["$(\"ul[class='policy-tree'] li ul\").hide();\r\n\r\n$(\"ul[class='policy-tree'] li\").on(\"click\", function (e) {\r\n e.stopPropagation();\r\n $(this).children('ul').toggle();\r\n});\r\n\r\nfunction uuidv4() {\r\n //Returns Close to Unique Id\r\n var uid = ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));\r\n return uid;\r\n}\r\n\r\nfunction isEmptyOrSpaces(str) {\r\n return str === null || str.match(/^ *$/) !== null;\r\n}\r\n\r\nvar treeViewDataTag = function () {\r\n this.key = \"\";\r\n this.value = \"\";\r\n\r\n return {\r\n key: this.key,\r\n value: this.value\r\n };\r\n};\r\n\r\nvar treeViewNode = function () {\r\n this.value = \"\";\r\n this.id = \"\";\r\n this.type = \"\";\r\n this.class = \"\";\r\n this.canHaveChildren = false;\r\n this.isEmpty = false;\r\n this.children = [];\r\n this.dataTags = [];\r\n this.allowSelection = false;\r\n\r\n this.loadDataCallback = null;\r\n this.selectItemCallback = null;\r\n\r\n return {\r\n value: this.value,\r\n id: this.id,\r\n type: this.type,\r\n class: this.class,\r\n canHaveChildren: this.canHaveChildren,\r\n isEmpty: this.isEmpty,\r\n loadDataCallback: this.loadDataCallback,\r\n selectItemCallback: this.selectItemCallback,\r\n children: this.children,\r\n dataTags: this.dataTags,\r\n allowSelection: this.allowSelection\r\n };\r\n};\r\n\r\nfunction treeView(controlId, allowSelection, loadDataAsync, loadDataCallback, selectItemCallback) {\r\n //TODO: Add setting to start tree as expanded or not (not possible for loadDataAsync)\r\n //TODO: Convert to library call and initialization with settings\r\n var container = $(\"#\" + controlId);\r\n this.allowSelection = allowSelection;\r\n this.loadDataAsync = loadDataAsync;\r\n\r\n //TODO: if needed add data source to tree with prefilled nodes\r\n generateTreeNode(container, null, this.allowSelection, this.loadDataAsync, loadDataCallback, selectItemCallback);\r\n}\r\n\r\nfunction loadTreeNodeData(container, loadDataAsync, loadDataCallBack) {\r\n var data = loadDataAsync(container);\r\n\r\n return data;\r\n}\r\n\r\nfunction generateTreeNode(container, treeNode, allowSelection, loadDataAsync, loadDataCallback, selectItemCallback) {\r\n\r\n //Generates node html from template\r\n var node = \"
{{value}}
{{childWrapper}}\";\r\n var actions = \" data-bs-toggle=\\\"collapse\\\" data-bs-target=\\\"#{{childId}}\\\"\";\r\n var childWrapper = \"
\";\r\n var nodeUid = uuidv4();\r\n var childUid = uuidv4();\r\n\r\n //Clear Items from container\r\n if (container.prop(\"id\") == \"policy-tree\") {\r\n nodeUid = \"policy-tree\";\r\n container.empty();\r\n container.next('.policy-tree.inner-wrapper').remove();\r\n }\r\n //Clear Items from container\r\n\r\n //Load node data if no node was passed\r\n if (!treeNode || treeNode.isEmpty) {\r\n\r\n var data = loadDataCallback(container);\r\n\r\n if (data.isEmpty) { return; }\r\n\r\n treeNode = data;\r\n if (!treeNode.loadDataCallback) {\r\n //Node doesn't have specific loadDataCallback - setting to default\r\n treeNode.loadDataCallback = loadDataCallback;\r\n }\r\n if (!treeNode.selectItemCallback) {\r\n //Node doesn't have specific selectDataCallback - setting to default\r\n treeNode.selectItemCallback = selectItemCallback;\r\n }\r\n }\r\n\r\n node = node.replace(\"{{uid}}\", nodeUid);\r\n node = node.replace(\"{{class}}\", \"tree-view--item \" + treeNode.class);\r\n node = node.replace(\"{{id}}\", treeNode.id);\r\n node = node.replace(\"{{value}}\", treeNode.value);\r\n\r\n //Adding value and isEmpty data tags\r\n var valueTag = new treeViewDataTag();\r\n valueTag.key = \"value\";\r\n valueTag.value = treeNode.value;\r\n var isEmptyTag = new treeViewDataTag();\r\n isEmptyTag.key = \"isempty\";\r\n isEmptyTag.value = treeNode.isEmpty;\r\n treeNode.dataTags.push(valueTag);\r\n treeNode.dataTags.push(isEmptyTag);\r\n\r\n var tags = \"\";\r\n for (var j = 0; j < treeNode.dataTags.length; j++) {\r\n tags = tags + \"data-\" + treeNode.dataTags[j].key + \"=\\\"\" + treeNode.dataTags[j].value + \"\\\" \";\r\n }\r\n node = node.replace(\"{{datatags}}\", tags);\r\n\r\n //making sure that canHaveChildren is set to true if children are already loaded\r\n if (treeNode.children.length > 0) { treeNode.canHaveChildren = true; }\r\n\r\n if (treeNode.canHaveChildren) {\r\n actions = actions.replace(\"{{childId}}\", childUid);\r\n node = node.replace(\"{{actions}}\", actions);\r\n childWrapper = childWrapper.replace(\"{{childUid}}\", childUid);\r\n childWrapper = childWrapper.replace(\"{{id}}\", treeNode.id);\r\n node = node.replace(\"{{childWrapper}}\", childWrapper);\r\n } else {\r\n node = node.replace(\"{{actions}}\", \"\");\r\n node = node.replace(\"{{childWrapper}}\", \"\");\r\n }\r\n\r\n container.replaceWith(node);\r\n $(\"#\" + nodeUid).off(\"click\");\r\n\r\n if (treeNode.children && treeNode.children.length > 0) {\r\n //Node has loaded children adding them\r\n for (var i = 0; i < treeNode.children.length; i++) {\r\n // Creating Child wrapper\r\n var currentChild = uuidv4();\r\n $(\"#\" + childUid).append(\"
\");\r\n generateTreeNode($(\"#\" + currentChild), treeNode.children[i], allowSelection, loadDataAsync, treeNode.children[i].loadDataCallback, treeNode.children[i].selectItemCallback);\r\n }\r\n }\r\n\r\n if (treeNode.canHaveChildren && (!treeNode.children || treeNode.children.length === 0) && !loadDataAsync) {\r\n //Data should be loaded right away\r\n if (treeNode.loadDataCallback) {\r\n //Has specific loadDataCallback\r\n generateTreeNode($(\"#\" + nodeUid), null, allowSelection, loadDataAsync, treeNode.loadDataCallback, selectItemCallback);\r\n } else {\r\n //Use normal loadDataCallback\r\n generateTreeNode($(\"#\" + nodeUid), null, allowSelection, loadDataAsync, loadDataCallback, selectItemCallback);\r\n }\r\n }\r\n //Bind the selection callback\r\n if (selectItemCallback) {\r\n $(\"#\" + nodeUid).off(\"click\").on(\"click\", selectItemCallback);\r\n }\r\n if (loadDataAsync && treeNode.canHaveChildren && (!treeNode.children || treeNode.children.length === 0)) {\r\n //Data should be loaded only once requested\r\n $(\"#\" + nodeUid).off(\"click\").on(\"click\", function () {\r\n if (treeNode.loadDataCallback) {\r\n //Has specific loadDataCallback\r\n generateTreeNode($(\"#\" + nodeUid), null, allowSelection, loadDataAsync, treeNode.loadDataCallback, selectItemCallback);\r\n } else {\r\n //Use normal loadDataCallback\r\n generateTreeNode($(\"#\" + nodeUid), null, allowSelection, loadDataAsync, loadDataCallback, selectItemCallback);\r\n }\r\n });\r\n }\r\n}\r\n\r\n$(\"div[class='tree-view--item']\").on(\"click\", function (e) {\r\n e.stopPropagation();\r\n $(this).children('div[class=\\\"tree-view--collapse--wrapper\\\"]').toggle();\r\n});"]}