{"id":11988,"date":"2022-03-12T12:59:36","date_gmt":"2022-03-12T03:59:36","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=11988"},"modified":"2022-04-19T11:59:10","modified_gmt":"2022-04-19T02:59:10","slug":"gwc-ui-library-tree","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=11988","title":{"rendered":"#GWC UI Library : Tree"},"content":{"rendered":"<p>\uc6f9 UI \ub77c\uc774\ube0c\ub7ec\ub9ac\uc778 GWC\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 Tree \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \ub300\ud55c \uc608\uc81c \ucf54\ub4dc\uc785\ub2c8\ub2e4.<\/p>\n<p>\uba3c\uc800 DOM \uad6c\uc131\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\">\r\n<div class=\"center\">\r\n    <div class=\"h-center\">\r\n        <gwc-label id=\"label\" content=\"gwc-tree \uc774\ubca4\ud2b8\" outline-type=\"concave\"><\/gwc-label>\r\n    <\/div>            \r\n    <gwc-vscrollview id=\"vscrollview\">\r\n        <content>\r\n            <gwc-tree id=\"tree\"><\/gwc-tree>\r\n        <\/content>\r\n    <\/gwc-vscrollview>\r\n    <div class=\"h-center\">\r\n        <gwc-button id=\"btnProgramOpenClose\" title=\"\uc544\uce74\uc774\ube0c \uc5f4\uae30\/\ub2eb\uae30\"><\/gwc-button>\r\n        <gwc-button id=\"btnAddFile\" title=\"\ubb38\uc11c \ucd94\uac00\/\uc0ad\uc81c\"><\/gwc-button>\r\n    <\/div>\r\n<\/div>\r\n<\/pre>\n<p>\uadf8\ub9ac\uace0 CSS \uad6c\uc131\uc740 \ub2e4\uc74c\uacfc \uac19\uad6c\uc694.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"css\">\r\n.center {\r\n    display: flex;\r\n    width: 100%;\r\n    height: 100%;\r\n    justify-content: center;\r\n    align-items: center;\r\n    flex-direction: column;\r\n    gap: 1em;\r\n}\r\n\r\ngwc-vscrollview {\r\n    width: 22em;\r\n    height: 30em;\r\n    background: rgba(0,0,0,0.3);\r\n    border: 1px solid black;\r\n}\r\n\r\ngwc-tree {\r\n    width: 100%;\r\n    padding: 0.5em 0.5em;\r\n}\r\n\r\n.h-center {\r\n    display: fex;\r\n    justify-content: center;\r\n    align-items: center;\r\n}\r\n<\/pre>\n<p>js \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">\r\nwindow.onload = () => {\r\n    \/\/ \ucd5c\uc0c1\uc704 \ud3f4\ub354(root) \r\n    const rootFolder = tree.rootFolder;\r\n    \r\n    \/\/ \ud3f4\ub354 \ucd94\uac00\r\n    const gaFolder = rootFolder.addFolder(\"\uc544\uce74\uc774\ube0c\");\r\n    const docFolder = rootFolder.addFolder(\"\ubb38\uc11c\").open();\r\n\r\n    rootFolder.addFolder(\"\ud504\ub85c\uadf8\ub7a8\");\r\n    const programFolder = rootFolder.getFolder(\"\ud504\ub85c\uadf8\ub7a8\");\r\n\r\n    const humanGeoFolder = gaFolder.addFolder(\"\uc778\ubb38\uacf5\uac04\ub370\uc774\ud130\");\r\n    const adminGeoFolder = gaFolder.addFolder(\"\ud589\uc815\uacbd\uacc4\");\r\n\r\n    \/\/ \ud3f4\ub354\uc5d0 \ud30c\uc77c \ucd94\uac00    \r\n    humanGeoFolder.addFile(\"\uc778\uad6c\ud1b5\uacc4.zip\", \"url(..\/examples\/images\/icon7.png)\");\r\n    humanGeoFolder.addFile(\"\uc720\ub3d9\uc778\uad6c.zip\", \"url(..\/examples\/images\/icon7.png)\");\r\n    humanGeoFolder.addFile(\"\uc720\uc544\ud1b5\uacc4.zip\", \"url(..\/examples\/images\/icon7.png)\");\r\n\r\n    const koreaFolder = adminGeoFolder.addFolder(\"\ub300\ud55c\ubbfc\uad6d\");\r\n    koreaFolder.addFile(\"\uc2dc\ub3c4.zip\", \"url(..\/examples\/images\/icon3.png)\");\r\n    koreaFolder.addFile(\"\uc2dc\uad70\uad6c.zip\", \"url(..\/examples\/images\/icon3.png)\");\r\n    koreaFolder.addFile(\"\uc74d\uba74\ub3d9.zip\", \"url(..\/examples\/images\/icon3.png)\");\r\n\r\n    adminGeoFolder.addFile(\"\uc11c\uc6b8\ud2b9\ubcc4\uc2dc.zip\", \"url(..\/examples\/images\/icon3.png)\");\r\n    adminGeoFolder.addFile(\"\uacbd\uae30\ub3c4.zip\", \"url(..\/examples\/images\/icon3.png)\");\r\n\r\n    docFolder.addFile(\"\ub808\ud3ec\ud2b81.pdf\", \"url(..\/examples\/images\/icon6.png)\");\r\n    docFolder.addFile(\"\ub808\ud3ec\ud2b82.pdf\", \"url(..\/examples\/images\/icon6.png)\");\r\n    docFolder.addFile(\"\ub808\ud3ec\ud2b83.pdf\", \"url(..\/examples\/images\/icon6.png)\");\r\n\r\n    programFolder.addFile(\"VisualSudio.Code.zip\", \"url(..\/examples\/images\/icon5.png)\")\r\n    programFolder.addFile(\"PhotoShop.zip\", \"url(..\/examples\/images\/icon5.png)\")\r\n    programFolder.addFile(\"\ub9ac\ud130\ub110_PS5.zip\", \"url(..\/examples\/images\/icon5.png)\")\r\n\r\n    \/\/ \ud3f4\ub354 \uc5f4\uace0 \ub2eb\uae30\r\n    btnProgramOpenClose.addEventListener(\"click\", () => {\r\n        const folder = tree.rootFolder.getFolder(\"\uc544\uce74\uc774\ube0c\");\r\n        if(folder.isOpen()) folder.close();\r\n        else folder.open();\r\n    });\r\n\r\n    \/\/ \ud2b9\uc815 \ud3f4\ub354\uc5d0 \ud30c\uc77c \ucd94\uac00\r\n    btnAddFile.addEventListener(\"click\", () => {\r\n        const folder = tree.rootFolder.getFolder(\"\ubb38\uc11c\");\r\n        const file = folder.getFile(\"NEW \ub808\ud3ec\ud2b8.pdf\");\r\n        if(file) {\r\n            file.remove();\r\n        } else {\r\n            const file = folder.addFile(\"NEW \ub808\ud3ec\ud2b8.pdf\", \"url(..\/examples\/images\/icon6.png)\");\r\n\r\n            \/\/ \ud30c\uc77c \ub610\ub294 \ud3f4\ub354\uc5d0 \uc0ac\uc6a9\uc790 \uc815\uc758 \ub370\uc774\ud130 \ucd94\uac00\r\n            file.setData(\"\uc0dd\uc131\uc77c\uc790\", \"2022\ub144 2\uc6d4 10\uc77c\");\r\n            console.log(file.getData(\"\uc0dd\uc131\uc77c\uc790\"));\r\n        }\r\n    });\r\n\r\n    \/\/ \ud30c\uc77c(\ud3f4\ub354+\ud30c\uc77c)\uc5d0 \ub300\ud55c \ud074\ub9ad \uc774\ubca4\ud2b8\r\n    tree.addEventListener(\"fileClick\", (event) => {\r\n        const file = event.detail.file;\r\n        \r\n        const parentFolderName = file.parentFolder.name;\r\n        const bFolder = file.isFolder();\r\n        const bOpen = file.isOpen();\r\n\r\n        label.content = `\r\n            \uc774\ub984: <span style=\"color:yellow\">${file.name}<\/span> \r\n            \ubd80\ubaa8\ud3f4\ub354: <span style=\"color:yellow\">${parentFolderName?parentFolderName:\"\uc5c6\uc74c\"}<\/span> \r\n            \uc885\ub958: <span style=\"color:yellow\">${bFolder?\"\ud3f4\ub354\":\"\ud30c\uc77c\"}<\/span> \r\n            ${bFolder?`\uc0c1\ud0dc: <span style=\"color:yellow\">${bOpen?\"\uc5f4\ub9bc\":\"\ub2eb\ud798\"}<\/span>`:\"\"}\r\n        `;\r\n\r\n        vscrollview.refresh(); \/\/ \ud3f4\ub354 \uc5f4\uae30\ub85c \uc778\ud55c \ud2b8\ub9ac \ucef4\ud3ec\ub10c\ud2b8 \ud06c\uae30 \ubcc0\uacbd\uc5d0 \ub530\ub978 \uc2a4\ud06c\ub864\ubdf0 \uc5c5\ub370\uc774\ud2b8\r\n    });\r\n\r\n    \/\/ \ud2b8\ub9ac \ucef4\ud3ec\ub10c\ud2b8\uc758 \ud06c\uae30\uac00 \uac00\ubcc0\uc774\ubbc0\ub85c \uc2a4\ud06c\ub864\ubdf0\ub97c \uc5c5\ub370\uc774\ud2b8 \ud574\uc90c\r\n    vscrollview.refresh();\r\n\r\n    GeoServiceWebComponentManager.instance.update();\r\n};\r\n<\/pre>\n<p>\uc2e4\ud589 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><center><video controls=\"controls\" ><source src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2022\/02\/gwc-tree.mp4\" \/>\ube44\ub514\uc624\ub97c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \uc6f9\ube0c\ub77c\uc6b0\uc838\uc785\ub2c8\ub2e4.<\/video><\/center><\/p>\n<p>\ud2b8\ub9ac\uc758 \ud56d\ubaa9\uc5d0 \ub300\ud55c \ud31d\uc5c5 \uba54\ub274 \uae30\ub2a5\uc744 \uc801\uc6a9\ud560 \ub54c\uc5d0 \ub300\ud55c \ucf54\ub4dc\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">\r\n\/\/ PopupMenu \uc0dd\uc131 \uc2dc\uc791\r\nconst popupMenu = gwcCreatePopupMenu();\r\npopupMenu.addMenuItem(\"menu1\", {\r\n    text: \"\uc0dd\uc131\",\r\n    _icon: \"images\/icon1.png\",\r\n    onClick: (menuId) => { \r\n        gwcMessage(`\ud3f4\ub354 \uc0dd\uc131(${menuId})`);\r\n        popupMenu.hide();                \r\n    }\r\n});\r\npopupMenu.addMenuItem(\"menu2\", {\r\n    text: \"\uc774\ub984 \ubcc0\uacbd\",\r\n    _icon: \"images\/icon2.png\",\r\n    onClick: (menuId) => { \r\n        gwcMessage(`${popupMenu.fileData.name} \uc774\ub984 \ubcc0\uacbd(${menuId})`);\r\n        popupMenu.hide();                \r\n    }\r\n});\r\npopupMenu.addMenuItem(\"menu3\", {\r\n    text: \"\uc0ad\uc81c\",\r\n    _icon: \"images\/icon3.png\",\r\n    onClick: (menuId) => { \r\n        gwcMessage(`${popupMenu.fileData.name} \uc0ad\uc81c(${menuId})`);\r\n        popupMenu.hide();\r\n    }\r\n});\r\npopupMenu.addMenuItem(\"menu4\", {\r\n    text: \"\uc798\ub77c\ub0b4\uae30\",\r\n    _icon: \"images\/icon4.png\",\r\n    onClick: (menuId) => { \r\n        gwcMessage(`${popupMenu.fileData.name} \uc798\ub77c\ub0b4\uae30(${menuId})`);\r\n        popupMenu.hide();\r\n    }\r\n});\r\npopupMenu.addMenuItem(\"menu5\", {\r\n    text: \"\ubd99\uc5ec\ub123\uae30\",\r\n    _icon: \"images\/icon5.png\",\r\n    onClick: (menuId) => { \r\n        gwcMessage(`${popupMenu.fileData.name}\uc5d0 \ubd99\uc5ec\ub123\uae30(${menuId})`);\r\n        popupMenu.hide();\r\n    }\r\n});\r\n\/\/ PopupMenu \uc0dd\uc131 \uc644\ub8cc\r\n\r\n\/\/ \ud30c\uc77c(\ud3f4\ub354+\ud30c\uc77c)\uc5d0 \ub300\ud55c \ud074\ub9ad \uc774\ubca4\ud2b8\r\ntree.addEventListener(\"fileClick\", (event) => {\r\n    const file = event.detail.file;\r\n    const contextMenu = event.detail.contextMenu;\r\n\r\n    if(contextMenu)  {\r\n        console.log(event.detail.originalEvent);\r\n        popupMenu.fileData = file; \/\/ fileData\ub294 \uc784\uc758\ub85c \ubd80\uc5ec\ud55c \uc18d\uc131\uc73c\ub85c \ud31d\uc5c5 \uba54\ub274 \uc2e4\ud589 \uc2dc\uc5d0 \ucc38\uc870\ub428\r\n        popupMenu.show(event.detail.originalEvent.clientX, event.detail.originalEvent.clientY);\r\n    }\r\n});\r\n<\/pre>\n<p>\uc704\uc758 \ucf54\ub4dc\uc5d0 \ub300\ud55c \uc2e4\ud589 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><center><video controls=\"controls\" ><source src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2022\/02\/gwc-tree-popupmenu.mp4\" \/>\ube44\ub514\uc624\ub97c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \uc6f9\ube0c\ub77c\uc6b0\uc838\uc785\ub2c8\ub2e4.<\/video><\/center><\/p>\n<p>\ud2b8\ub9ac\ub97c \uad6c\uc131\ud558\ub294 \ud56d\ubaa9\uc5d0 \ub300\ud574\uc11c \uc120\ud0dd\ub41c \ud56d\ubaa9\uc774\ub77c\ub294 \ud53c\ub4dc\ubc31\uc744 \uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c \ucf54\ub4dc\ub97c \ucc38\uace0\ud558\uae30 \ubc14\ub78d\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">\r\ntree.clearSelection(); \/\/ \uc77c\ub2e8 \uae30\uc874\uc758 \uc120\ud0dd\ub41c \ud56d\ubaa9\uc5d0 \ub300\ud574 \uc120\ud0dd \ud574\uc81c\r\ntree.rootFolder.getFolder(\"\uc544\uce74\uc774\ube0c\").selected = true; \/\/ \ud3f4\ub354\ub97c \uc5bb\uace0 \ud574\ub2f9 \ud3f4\ub354\ub97c \uc120\ud0dd\ub41c \uc0c1\ud0dc\ub85c \ud45c\uc2dc\r\n<\/pre>\n<p>\ud3f4\ub354 \ub610\ub294 \ud30c\uc77c \ud56d\ubaa9\uc758 \uc6b0\uce21\uc5d0 Tag \uc815\ubcf4\ub97c \ud45c\uc2dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc989, getFolder \ub610\ub294 getFile\uc744 \ud1b5\ud574 \uc5bb\uc740 item \uac1d\uccb4\uc758 tag \uc18d\uc131(get, set)\uc744 \uc124\uc815\ud558\uba74 \ub429\ub2c8\ub2e4. \uc544\ub798\ub294 \ud30c\uc77c\ud56d\ubaa9\uc758 \uc6b0\uce21\uc5d0 \ud30c\uc77c\uc758 \ud06c\uae30\ub97c \ud45c\uc2dc\ud558\ub294 \uc608\uc2dc\uc785\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2022\/02\/gwc-tree-tag.png\" alt=\"\" width=\"970\" height=\"1037\" class=\"aligncenter size-full wp-image-12132\" \/><\/p>\n<p>tree \ucef4\ud3ec\ub10c\ud2b8\ub294 \ub3d9\uc77c\ud55c \uacc4\uce35\uc5d0 \ub3d9\uc77c\ud55c \uc774\ub984\uc744 \uac00\uc9c4 \ud56d\ubaa9\uc744 \ucd94\uac00\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc774\ub54c label \uc18d\uc131\uc744 \uc774\uc6a9\ud574 \uc774\ub984\uc740 \ub2e4\ub974\uc9c0\ub9cc \ud45c\uc2dc\ub418\ub294 \uc81c\ubaa9\ub9cc\uc744 \ubcc0\uacbd\ud574 \uc904 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucf54\ub4dc \uc608\uc2dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">\r\ndata.forEach(item => {\r\n    const rootFolder = this.#tree.rootFolder;\r\n    rootFolder.addFile(item.id, \"url(..\/images\/layers.svg)\").label = item.title;\r\n});\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\uc6f9 UI \ub77c\uc774\ube0c\ub7ec\ub9ac\uc778 GWC\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 Tree \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \ub300\ud55c \uc608\uc81c \ucf54\ub4dc\uc785\ub2c8\ub2e4. \uba3c\uc800 DOM \uad6c\uc131\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 CSS \uad6c\uc131\uc740 \ub2e4\uc74c\uacfc \uac19\uad6c\uc694. .center { display: flex; width: 100%; height: 100%; justify-content: center; align-items: center; flex-direction: column; gap: 1em; } gwc-vscrollview { width: 22em; height: 30em; background: rgba(0,0,0,0.3); border: 1px solid black; } gwc-tree { width: 100%; padding: &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=11988\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;#GWC UI Library : Tree&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[140],"tags":[],"class_list":["post-11988","post","type-post","status-publish","format-standard","hentry","category-gwc"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/11988","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=11988"}],"version-history":[{"count":7,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/11988\/revisions"}],"predecessor-version":[{"id":12087,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/11988\/revisions\/12087"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=11988"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=11988"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=11988"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}