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