//META{"name":"ServerFolders"}*// class ServerFolders { getName () {return "ServerFolders";} getVersion () {return "6.0.6";} getAuthor () {return "DevilBro";} getDescription () {return "Adds the feature to create folders to organize your servers. Right click a server > 'Serverfolders' > 'Create Server' to create a server. To add servers to a folder hold 'Ctrl' and drag the server onto the folder, this will add the server to the folderlist and hide it in the serverlist. To open a folder click the folder. A folder can only be opened when it has at least one server in it. To remove a server from a folder, open the folder and either right click the server > 'Serverfolders' > 'Remove Server from Folder' or hold 'Del' and click the server in the folderlist.";} initConstructor () { this.labels = {}; this.patchModules = { "Guilds":"componentDidMount", "Guild":["componentDidMount","componentWillUnmount"] }; this.css = ` .${this.getName()}-modal .ui-icon-picker-icon { position: relative; width: 70px; height: 70px; border: 4px solid transparent; border-radius: 12px; margin: 0; } .${this.getName()}-modal .ui-icon-picker-icon .ui-picker-inner { margin: 5px 5px; width: 60px; height: 60px; background-repeat: no-repeat; background-clip: padding-box; background-position: 50%; background-size: cover; border-radius: 12px; } .${this.getName()}-modal .ui-icon-picker-icon.selected ${BDFDB.dotCN.hovercardbutton} { display: none !important; } .${this.getName()}-modal .ui-icon-picker-icon ${BDFDB.dotCN.hovercardbutton} { position: absolute; top: -10px; right: -10px; } .${this.getName()}-modal .ui-icon-picker-icon.preview.nopic .ui-picker-inner { background-image: url('data:image/svg+xml; utf8, '); } ${BDFDB.dotCN.guild}.folder ${BDFDB.dotCN.avataricon} { background-clip: padding-box !important; background-position: center !important; background-size: cover !important; } ${BDFDB.dotCN.guild}.folder ${BDFDB.dotCN.badge}.folder.count { background: #7289DA; top: -2px; left: -2px; right: unset; bottom: unset; } ${BDFDB.dotCN.guild}.serverfolders-dragpreview { pointer-events: none !important; position: absolute !important; opacity: 0.5 !important; z-index: 10000 !important; } ${BDFDB.dotCN.guild}.serverfolders-dragpreview, ${BDFDB.dotCN.guild}.serverfolders-dragpreview ${BDFDB.dotCN.guildinner}, ${BDFDB.dotCN.guild}.serverfolders-dragpreview ${BDFDB.dotCN.guildinner} a, ${BDFDB.dotCN.guild}.serverfolders-dragpreview ${BDFDB.dotCNS.guildinner + BDFDB.dotCN.guildicon} { border-radius: 50% !important; width: 50px !important; height: 50px !important; } ${BDFDB.dotCN.guild}.serverfolders-dragpreview:before, ${BDFDB.dotCN.guild}.serverfolders-dragpreview:after, ${BDFDB.dotCN.guild}.serverfolders-dragpreview ${BDFDB.dotCN.badge} { display: none !important; } ${BDFDB.dotCN.guild}.serverfolders-dragpreview ${BDFDB.dotCN.avataricon} { background-color: transparent !important; overflow: hidden !important; } ${BDFDB.dotCN.guildswrapper}.foldercontent { transition: width .3s linear !important; } ${BDFDB.dotCN.guildswrapper}.foldercontent .folderseparator { margin-top: 10px; } ${BDFDB.dotCN.guildswrapper}.foldercontent.foldercontentclosed { width: 0px !important; }`; this.serverContextEntryMarkup = `
REPLACE_servercontext_serverfolders_text
`; this.serverContextSubMenuMarkup = `
REPLACE_serversubmenu_createfolder_text
REPLACE_serversubmenu_removefromfolder_text
`; this.folderContextMarkup = `
REPLACE_foldercontext_unreadfolder_text
REPLACE_foldercontext_autounreadfolder_text
REPLACE_foldercontext_foldersettings_text
REPLACE_foldercontext_createfolder_text
REPLACE_foldercontext_removefolder_text
`; this.folderContentMarkup = `
`; this.folderIconMarkup = `
`; this.folderSettingsModalMarkup = `

REPLACE_modal_header_text

REPLACE_modal_tabheader1_text
REPLACE_modal_tabheader2_text
REPLACE_modal_tabheader3_text
REPLACE_modal_tabheader4_text

REPLACE_modal_foldername_text

REPLACE_modal_iconpicker_text

REPLACE_modal_colorpicker1_text

REPLACE_modal_colorpicker2_text

REPLACE_modal_colorpicker3_text

REPLACE_modal_colorpicker4_text

REPLACE_modal_copytooltipcolor_text

REPLACE_modal_customopen_text

REPLACE_modal_customclosed_text

REPLACE_modal_custompreview_text

`; this.folderIcons = [ {"openicon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAAB2ElEQVR4Xu2Z4W6DMAwG4f0fmqloq0YJw0dIhLPb7y+qfT0Hr8yTf2ECczhpcBIWkEBYwgIEQFSzhAUIgKhmCQsQAFHNEhYgAKKaJSxAAETvMGsBn1eK3lFDZQmx4zWF1kL6rLCmlli3lamrBd4N6qeNq/VUYogdv1JcK1CPByasmFRrisJqbdWj7RLWAGaBFi5FqSSPHsNLBOAhDIwe6HVnwb4vx1H/KDxN02iw0ENOWGAjEJaw0B0WFiYc/P547yzwPYwI66j9nUiadW7Km5GwzmG91wthCStGAKRWqbqatSw5ng/zXL7bu8FKDKr/nSWs4NAnB9XXLGEFrXrFksPqt5QmB7XZGJo/DZPD2vBpCis5qN0eKqzXZr5fQosLezNYo1nV9N8dYYG3O8lhFSeuyRgmB3U4ccLaL9eHTG6HNapVTS745LD+lEeztmPYD9bIVt0+hsLaanr4I3pyUCFxbruzksMKcQiFfsk1qlkhDqHQGaz/YFVoTj8W3Bwv/sBP3uTdKTVr/Umd1fLoNOofhc/G8dFYysWh/lF4sJHEveMDhS8o01hW9Vt1OOHYVZUsLIBPWMICBEBUs4QFCICoZgkLEABRzRIWIACimiUsQABENQvA+gLIy3lMlnMoMQAAAABJRU5ErkJggg==", "closedicon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAABkElEQVR4Xu3a6xKCIABEYXz/h7bpOl1M94CWMqffywRfK1I2FF+xwBAnDRaxQAnEEgsIgKjNEgsIgKjNEgsIgKjNEgsIgKjNEgsIgOgazRrB+01F15hD4xSy4S0TbUV6n2HLXLLVNqZqJ7g21H0ZtfNpZMiG10xuK6jdg4mVleqSolhbt2rX7RKrg2aBJVRFaUl2fRlWCcBBGIwO+NWeBdddHUfrR+FSSm9Y6CYnFjgRNGON43HKNgyTy40N4uBtV3iRORLU4wD3CRYbxEGxwPUqlli/uxu6Z82f79zgwflXLLEyAY8O4CYnlljfL6uJrzxxYeKgh1JQQbHE8gQ/dxBwz8qOSdeHDv5Ek2uJlVvZLGAlllhEAGTds8QCAiBqs8QCAiBqs8QCAiBqs8QCAiD6t2ad53ikB61//ReNWOCJNGj/nqPxc4g4+LTa4/x7bfkjQutH4c7A8NrxgE7AqtZdNWi53X0mxAKfq1hiAQEQtVliAQEQtVliAQEQtVliAQEQtVliAQEQtVliAQEQPQHGLZBMBnSlGQAAAABJRU5ErkJggg=="}, {"openicon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAAB5ElEQVR4Xu3b0XaDIBBFUfz/j7YraZqooM4dxljg9HkU2dwh6rJT4s8sMJkrKUxgCSEACyxBQCglWWAJAkIpyQJLEBBKSRZYgoBQSrLAEgSEUm+yZmGMZal3POdwsYd5Lt4L9XflnjFjZ+08m3rhtVBNg1VhzbPdbpqyodSxnXmIO0y94LeOAvWOUw4WNxP9TOrc5fdZVViP+RQSpk8z7ggJTCpOKVVjtQx2C1ZcMPQz1eydw2EVkm02MBe+1jCkDfU8xB6xSZfZwFwIVrru1/Cf/erVRvMZqkuS1RnU5zZRJDftWWD9qrqwPHf74iKGl5duMb7ShmDtPERvV6QXqEs2eLA+O8LpngWWE6vFFjx6HArd4HtOVfieBdb6DuZwzwLLiNU7VGgbgpU/ROy2IVhGrBGgwtoQrPJzfLENwTJijQIV0oZg7b9Ky9oQLCPWSFDVbQjW8dvsVRuC5cTq7d1VicH9Pmt7shax1I9EwFqv+qEHWN/GGqEFq24dlgsC1smzIVjnXwxk33KPkqqQNgTL8Gx4HsKmKkx3BaaixbTt/1LRjpXZwFz4mjtY7YTg3itVk3Xv1d48OljCAoAFliAglJIssAQBoZRkgSUICKUkCyxBQCglWWAJAkIpyQJLEBBKfwAHhexMOBnKeAAAAABJRU5ErkJggg==", "closedicon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAABj0lEQVR4Xu3b2w6CMBBF0fb/PxpDgsQAMbOnExtw+3zoZfUoxGhvvsICPZw02MQCJRBLLCAAojZLLCAAojZLLCAAojZLLCAAojZLLCAAotlmLWCOz2h2vuR0tZdlFp+Feq88M2ftrpOj0YWPQt0abAhrWeJ2vZ+monMn+1B3GV3wrkOg9jqdwep2wkeie8ffZw1hrfu5aBjfZt0VCAyFW2vDWHcGm4JVVww+0shn599hXTQ7bBAObmdY8jbkfai94tCusEE4KFbL3w1rz3rqaOHChIPHZk3dXu3kYYNwUKzBt2HmKb62FHw0Hx2gmXdDACaWWEAARG2WWEAARG2WWEAARG2WWEAARG2WWEAARG2WWEAARG2WWEAARG2WWEAARG2WWEAARG2WWEAARG2WWEAARG2WWEAARG2WWEAARH/erHVt/jDk+wnF/yUATnpyNPyzq3Bw25BY8GSfBIbKgsIQ9XFxscCRiiUWEABRmyUWEABRmyUWEABRmyUWEABRmyUWEABRmyUWEABRmwWwXiH/oUz3h3vUAAAAAElFTkSuQmCC"}, {"openicon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAABsElEQVR4Xu3Z4XLCIBBFYfP+D52OjbXGxmQPQgrr6b/OrAKfdwnidPEvLDCFKy28iAVCIJZYQACUmiyxgAAoNVliAQFQarLEAgKg1GSJBQRAaWmyZjDGY2npeIXD1X1ZyeRLoX5mXjJm3VUXvhud+LtQQ4P9F9YVjY5dmId6L6MTrpWseisofye6dvzpZsLC6aa62bAQmFhg7xRLLLTrhwMTLrwN754FPoeMWJHlf4fKZEWolppJrN6w5nm87p3+5uicZIkVjG8WqFM2eLGCqbqWiRXEGhFqOSOsDgn3f5oeHUbE2noKll7vojOAWMEWzLZfNX0aZkuVWE9dsrdfidUDVsYWbJYssZbIho4OYgWxskI1aUOxfp8ah20oVhArM1T1NhRrfXDbbUOxglgjQu3dXW3dF1S7zxoR6+i74DOYWGuRXQ+xzsb6hBasdnQQa/v6ePPoIFYQ61OgqrShWK9/wTn8Ig1+/OmpNHQqCBU9rCojVtggXHgDE6unfuh5LjRZPa+l+dzEAsRiiQUEQKnJEgsIgFKTJRYQAKUmSywgAEpNllhAAJSaLLGAACj9AiC1iUwkZlXyAAAAAElFTkSuQmCC", "closedicon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAABgElEQVR4Xu3a7a6CMBREUXj/h8aQKEGMMvvYACX7/r2jLatDrR/j4F8sMMZJg4NYoARiiQUEQNRmiQUEQNRmiQUEQNRmiQUEQNRmiQUEQLTarAmMsY5WxysO1/ZhlclXoV4zr4zZ9qqLz0Yn/i9U12BnYc1odOxiH9o9jE64VbPaXUH9mei149W9ExZuN9W9GxYCEwvsnWKJhXb9uDBx8Dm8exZYB7HEygS8DY/a4Kepv7tyHD/6ERcmDm43+B6hlnfx72CxQRwUC9yvYol1zHtD96z948by8ieWWD8FfDUE+7ZYYv3eTzan+LgwcdBzFqigWGJ5KN07Abln7Qmt/i+WWEAARG2WWEAARG2WWEAARG2WWEAARG2WWEAARG2WWEAARG3WlbHmufX4ddgpPwwBC3n1aPzRehzcfqx8dQEwv9ggDq4G7+9HWd/l0PWjMFitW0bFAssqllhAAERtllhAAERtllhAAERtllhAAERtllhAAERtllhAAERtFsB6ACnIiUxdpMfOAAAAAElFTkSuQmCC"}, {"openicon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAAByUlEQVR4Xu3a4XKCMBBFYXj/h6bTakEFYU+yjJic/r4Y+LwLNOM4+BcWGMNJg4NYoARiiQUEQNRmiQUEQNRmiQUEQNRmiQUEQNRmiQUEQLS0WRNY4zFaul7hcrmHlZx8KdT/mZesmXvVhZ9GT7wW6qvBqrCmKW43jqul6NqFfcg7jJ7wrEOg5jqtwfKuhH8SvXa8n1WF9Xs9Gw3jl5l3BAJD4WEYqrG+GewjWHnF4J9Uc+/sDmuj2WGDcPD+HaaMIe9D7hEv7QobhINiDec9DS/21Kut5l+pTmlWY1DLayIkD92zxLqpigXaJVYmVqsjeMoNXqyleodjKFbfWPPrVep7VsutSr9nifX8qNy9Z4kVxGodKnUMxVq/rb4dQ7GCWD1ApY2hWNv/MG6OoVhBrF6gUsZQrPd7NqsxFCuI1RNU9RiKtb9t+jSGYvWNtbtlVbyfBfbtvykqFvi2xBILCASjh7ekw8DLQvFf3AbP8EKxQ4vDgFiLgFg3i5BDKPTQrlbHMOQQCokF6tc4Vrgw4eAdrMUxDBuEgxd6xH/sVMQC9GKJBQRA1GaJBQRA1GaJBQRA1GaJBQRA1GaJBQRA1GaJBQRA1GYBrB8F4ZJMlK2iwQAAAABJRU5ErkJggg==", "closedicon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAABkklEQVR4Xu2bywrCQBAEN///0RFFg6iHrtmRNVieK/uo9LQguA0/sYEtJgWHskAIlKUsYACgJktZwABATZaygAGAmixlAQMANVnKAgYAWk3WDvZ4Rqv7Fbfrfaxy+Kqox8kre/beurgaPfisqFMLm5K177m7bXvbiu5dzEPfY/TAhx0i6ojTu7C+m/CV6N3x71lTsq73+ZAwfs2+J5AwBI8xpmWdWdgSWX3B4CvNdOffyfqQ7NhBDN7fYcsY8jz0PvGSrthBDCpr1L8Ne9/10tXiwMTga7KWXq9389hBDCrLMbx9OaZBjUGTBawqS1mOYdpBdy6uohh0DB1Dx9AxhAYAHldRDNpZdpadBUZQWcqCBgAe93YMWvAWvJ0FRlBZyoIGAB73dgxa8Ba8nQVGUFnKggYAHvd2DFrwFrydBUZQWcqCBgAe93YMWvAWvJ0FRvCrsq6L5/9BgadegKMaQvCCy/zUlsoCr0NZygIGAGqylAUMANRkKQsYAKjJUhYwAFCTpSxgAKAmS1nAAEBNFpB1ARZcR0zScgj8AAAAAElFTkSuQmCC"}, {"openicon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAAB4ElEQVR4Xu2Z0XWDMAxFxWdH6A6docN3hu7QEfpJT9NAQwJIz0duQefm+8WY6yvZwGD8wgSGcJKgAUuQAFjAEggIUcwClkBAiGIWsAQCQhSzgCUQEKKYBSyBgBDFrA6wRmHMaPR0CxWZcA9QE9DI9aPwu+cikwXWdRn+G9b3NCJz6G5N5AKRifY0C1iRVbrLRBatYdjcv0Qm2dus09h1FFi5CuijRTiEmutfmKXfXv4/XGBuwMyAdaCjQ74jbSO64riBW7PGsa5kwzC4LNwAsH41BdbUjzAr3rwowzgrA9bRYQVKX7iFw0QvvT29wQPrusDeOasoqFmqVLOAdfNsiFl+D52fcfZgVbcqtcED68c6zGp5RbNVhoWtWlRfym5YGNaCD7D2N7hcWIWtetgAW8x6M7PXaUEKw3pg0wLr3cxegLVev/dHhw8ze7446r+29o+8x02kmPVpZk/Aipk1pwqbtdqeWnrWBVZhUJuPgcBarybMEvaSPFjFSzC3DIvD2mxNUs8SND5zFFjC6gELWAIBIYpZQVi7PZwGv6QIrKBV7teuiFmLLzzChc8WdVm4gbPdcc/5AkugCyxgCQSEKGYBSyAgRDELWAIBIYpZwBIICFHMApZAQIhiFrAEAkL0C09hh0yOgU58AAAAAElFTkSuQmCC", "closedicon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAABv0lEQVR4Xu2aYW7CMBSDX26ChHabXZfbTJN2kqKCNpCg+Jk0axp9/MVpky+220JL8EkTKGklwgCWYQJgAcsgYEhxFrAMAoYUZwHLIGBIcRawDAKGFGcByyBgSHFWA1iTccys9BARP1lxD7qMs1qA+l175vw9cLrMITPZlrA+I+LUDQ0xka1hZTesC57AMrahB1i7cVdPsOa5tOxHw0PPpb3Aql5I5QEyHDa/GlaucdXhx4j4fnXEDNGuo7EiLnmTDKwb7Y+I+FrNWdM0rslKKdI4UnB/hQKWDv2fnYAFrOtD8n/EMHEOvR0bK+bENIc1Aqi7fZL9LQWvCh5Yj5FYLHhgAWuxQYnhDY1kIQV0lkETWMB61ksyZVKAs3AWzqp8apIpkwJiSAyJITGsJGAMl5UkBXQWnUVnGZEDFrAqCRjDZX9LwVLBD/Yr6eUPHgVWCnp/DUgt0PhespACYL1562Ds0h6l0jhSgLNwVvv7rD1my5izTJkUEENiSAyNyDWDNR943Pcjr9gydZQTVe7YMMNTRIdZbeVCgGUABBawDAKGFGcByyBgSHEWsAwChhRnAcsgYEhxFrAMAoYUZxmwzq8phkz4oCrBAAAAAElFTkSuQmCC"}, {"openicon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAAByElEQVR4Xu3Z0XaDIBCE4fj+D21OepqkWnRnZPUA/rntxuDnsICdHnxkgUmupPABlhECsMAyBIxSkgWWIWCUkiywDAGjlGSBZQgYpSQLLEPAKCVZJ2PNxvWV0m4emDvQbKg3pjsO5SGk1ziDPAuqGzAV62yoLsBaw3qhqWNKn2bRBdWBXZWsphPWKlb0kDP+rt7757fUL1ydrAwM9RqqgdwfRsaS+6SqCpax8oyOJaWLZH07W2gRFvxei2QxDRcLZhicsKAmWfPcdiCnaXH7oUVYcASrdaStDdi00lvXpWP1CvU5Z+2AgVWI2VbCUrF6T1WULrBIlnqGLtcxDQ2/07FG6Vc/h8SNFTGtZ4H1jW64FQfrhlh7u3im4arxg5WwEkpvB5WD9B36FVjG7h0ssIwGZTR3knU11l2ae0qywPo/7TePO2CBVVwlqo87oyQr+s9Odc8aBWrvHdbfiFUlC6zynq7Y4MG6IZbSr6p61t1S5WC9ahdTEaz9M+iQWOoUdJO1SNcIyXKgjmC9szf3juVC1WAdf2nU8TfVTWnHt5g3dLAMS7DAMgSMUpIFliFglJIssAwBo5RkgWUIGKUkCyxDwCglWQbWE/kykkzUi2UWAAAAAElFTkSuQmCC", "closedicon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAABZklEQVR4Xu3awZKCMBQFUfL/Hx0rKizccNtKKHjVs/WKeGh0FrbNv1igxUuHm1ggArHEAgJgalliAQEwtSyxgACYWpZYQABMLUssIACmlrUYq4PjJ9PHXDB6orOhdkx6HslFmL4hJ7kK6jFgKdZqqEeA3Q1roKXnNP02OztgemJXlXXrwv7C6v1qu7Nrzh9vraXv/Th4+oS3TgWkX1aCFmNVhDru+bAyscY3ykysXjmrb14JWFSWWB9RsSxrzb8SlmVZlsUFwDP8NhQLCICpZYkFBMDUssQCAmBqWWIBATC1LLGAAJhallhAAEwtSywgAKaWJRYQAFPLEgsIgKlliQUEwNSyxAICYGpZYgEBMLUssYAAmE4ra7xm5d9oJVDDIPoVjVifRGOsqmBpVRhr/wiocEsSpP19o7LA52XJqVjgsoolFhAAU8sSCwiAqWWJBQTA1LLEAgJgalliAQEwtSyxgACYvgCckKpMkaN7zAAAAABJRU5ErkJggg=="}, {"openicon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAABrklEQVR4Xu3ayZLCMAxFUfz/H50upnQanFjXdi8SXba8TAdJGBfl5issUMJJgzexQBGIJRYQAFErSywgAKJWllhAAEStLLGAAIhaWWIBARC1ssQCAiDaU1kLOH8t2nPNwUvOOZze+CjU+67pdec87eBZ6E3PwrrfNr324KOOH05veCbW6cCGsJZltt34p986QymFPvN6SnrgqnNGqHVgdoJ1YZ0Z6tH7YrUa8Pd9seJWj2QPWMo2fGHhb+PsWAhMLLA4Fkus9rTfrB7CBXMUPN/yvG0USeya7L2RFepwV6SGlR1qF0ys/cb8shFLrMgcb2asrCbR5vf2Z9Y2tA1B/Qxi3Q/Pvnyorj9dlNYrSyzQnGL9F1bmuYV/SItVKUO3aL5RrKzReRXZrM+23jrcNW1tqYq1KUmx/vanlTVjXkVmVqYlRKvLQv++yzK3xJrVgrYhGO5RrAxzq9mCYh3st9faNySaYOc05BAKifWssyjWledW2CAcvHB1hQ3CQbBeuWxULPDRiiUWEABRK0ssIACiVpZYQABErSyxgACIWlliAQEQtbLEAgIgamUBrB+JEUtMl61hQwAAAABJRU5ErkJggg==", "closedicon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAABhUlEQVR4Xu3YwQqDMBBF0eT/P9oiVAji4l1rIh1u1w8zHifTaG/+YoEeJw02sUATiCUWEABRO0ssIACidpZYQABE7SyxgACI2lliAQEQtbPEAgIgeqezNnD9q+idNa+us7wOWvivBR43Tdc9Y71SBy36qSL3m6drH2BP1oDqoAW/VuhX6un112Ft24zarydi7/S5xpM1vnAcPD/ZIlDzO6sQVB2siVtv3KPx7oqD4zZc0VmLoOZ3Vjw6/yMYN0wcnPjX/TZpbBAHW2vrzglr+WKDOCgWe+Wws0DHiyVW/kLvzAKjSCyxwHARSywkAMLxKIqDHkrBfhVLrGmfaDzBg0Eolli+7oAeEEssIgCy8VkzDnrO8pzlOQtsQbHEggIgHs/tOOiAd8A7s8AWFEssKADi8dyOgw54B7wzC2zBaVj7hat9LSVjKP/wNTytKmAICrUgbO2ScaxbUiG8KbFCKLchgBJLLCgA4s4ssYAAiNpZYgEBELWzxAICIGpniQUEQNTOAlgf/fBATBZ555AAAAAASUVORK5CYII="} ]; this.defaults = { settings: { closeOtherFolders: {value:false, description:"Close other Folders when opening a Folder."}, closeTheFolder: {value:false, description:"Close the Folder when selecting a Server."}, closeAllFolders: {value:false, description:"Close All Folders when selecting a Server."}, forceOpenFolder: {value:false, description:"Force a Folder to open when switching to a Server of that Folder."}, showCountBadge: {value:true, description:"Display Badge for Amount of Servers in a Folder."}, addSeparators: {value:true, description:"Adds separators between Servers of different Folders."} } }; } getSettingsPanel () { if (!global.BDFDB || typeof BDFDB != "object" || !BDFDB.loaded || !this.started) return; let settings = BDFDB.getAllData(this, "settings"); let settingshtml = `
${this.getName()}
`; for (let key in settings) { settingshtml += `

${this.defaults.settings[key].description}

`; } settingshtml += `

Reset all Folders.

`; settingshtml += `

Remove all custom Icons.

`; settingshtml += `
`; let settingspanel = BDFDB.htmlToElement(settingshtml); BDFDB.initElements(settingspanel, this); BDFDB.addEventListener(this, settingspanel, "click", ".reset-button", () => { BDFDB.openConfirmModal(this, "Are you sure you want to delete all folders?", () => { BDFDB.removeAllData(this, "folders"); this.resetAllElements(); }); }); BDFDB.addEventListener(this, settingspanel, "click", ".removecustom-button", () => { BDFDB.openConfirmModal(this, "Are you sure you want to remove all custom icons?", () => { BDFDB.removeAllData(this, "customicons"); }); }); return settingspanel; } //legacy load () {} start () { var libraryScript = document.querySelector('head script[src="https://mwittrien.github.io/BetterDiscordAddons/Plugins/BDFDB.js"]'); if (!libraryScript || performance.now() - libraryScript.getAttribute("date") > 600000) { if (libraryScript) libraryScript.remove(); libraryScript = document.createElement("script"); libraryScript.setAttribute("type", "text/javascript"); libraryScript.setAttribute("src", "https://mwittrien.github.io/BetterDiscordAddons/Plugins/BDFDB.js"); libraryScript.setAttribute("date", performance.now()); libraryScript.addEventListener("load", () => { BDFDB.loaded = true; this.initialize(); }); document.head.appendChild(libraryScript); } else if (global.BDFDB && typeof BDFDB === "object" && BDFDB.loaded) this.initialize(); this.startTimeout = setTimeout(() => {this.initialize();}, 30000); } initialize () { if (global.BDFDB && typeof BDFDB === "object" && BDFDB.loaded) { if (this.started) return; BDFDB.loadMessage(this); if (BDFDB.isPluginEnabled("HideUtils") && !BDFDB.loadData("hideutils", this, "warnings")) BDFDB.openConfirmModal(this, this.name + " is not compartible with the plugin HideUtils by Arashiryuu. You might expierence bugs like Servers that should be hidden due to being part of a Folder still being visible in the Guildlist. To avoid this disable the Plugin HideUtils. Press the " + BDFDB.getLibraryStrings().btn_ok_text + "-Button to not show this Message again.", "Warning", () => {BDFDB.saveData("hideutils", true, this, "warnings")}); this.GuildUtils = BDFDB.WebModules.findByProperties("getGuilds","getGuild"); this.DiscordConstants = BDFDB.WebModules.findByProperties("Permissions", "ActivityTypes", "StatusTypes"); this.Animations = BDFDB.WebModules.findByProperties("spring"); BDFDB.WebModules.forceAllUpdates(this, "Guilds"); } else { console.error(this.getName() + ": Fatal Error: Could not load BD functions!"); } } stop () { if (global.BDFDB && typeof BDFDB === "object" && BDFDB.loaded) { this.resetAllElements(); BDFDB.removeEles(this.foldercontent, BDFDB.dotCN.guildswrapper + ".foldercontent", ".serverfolder-contextmenu"); BDFDB.unloadMessage(this); } } onSwitch () { if (typeof BDFDB === "object" && BDFDB.getData("forceOpenFolder", this, "settings")) { let serverObj = BDFDB.getSelectedServer(); if (!serverObj) return; let folderdiv = this.getFolderOfServer(serverObj); if (!folderdiv || BDFDB.containsClass(folderdiv, "open")) return; this.openCloseFolder(folderdiv); } } // begin of own functions changeLanguageStrings () { this.serverContextEntryMarkup = this.serverContextEntryMarkup.replace("REPLACE_servercontext_serverfolders_text", this.labels.servercontext_serverfolders_text); this.serverContextSubMenuMarkup = this.serverContextSubMenuMarkup.replace("REPLACE_serversubmenu_createfolder_text", this.labels.serversubmenu_createfolder_text); this.serverContextSubMenuMarkup = this.serverContextSubMenuMarkup.replace("REPLACE_serversubmenu_removefromfolder_text", this.labels.serversubmenu_removefromfolder_text); this.folderContextMarkup = this.folderContextMarkup.replace("REPLACE_foldercontext_unreadfolder_text", this.labels.foldercontext_unreadfolder_text); this.folderContextMarkup = this.folderContextMarkup.replace("REPLACE_foldercontext_autounreadfolder_text", this.labels.foldercontext_autounreadfolder_text); this.folderContextMarkup = this.folderContextMarkup.replace("REPLACE_foldercontext_foldersettings_text", this.labels.foldercontext_foldersettings_text); this.folderContextMarkup = this.folderContextMarkup.replace("REPLACE_foldercontext_createfolder_text", this.labels.serversubmenu_createfolder_text); this.folderContextMarkup = this.folderContextMarkup.replace("REPLACE_foldercontext_removefolder_text", this.labels.foldercontext_removefolder_text); this.folderSettingsModalMarkup = this.folderSettingsModalMarkup.replace("REPLACE_modal_header_text", this.labels.modal_header_text); this.folderSettingsModalMarkup = this.folderSettingsModalMarkup.replace("REPLACE_modal_foldername_text", this.labels.modal_foldername_text); this.folderSettingsModalMarkup = this.folderSettingsModalMarkup.replace("REPLACE_modal_tabheader1_text", this.labels.modal_tabheader1_text); this.folderSettingsModalMarkup = this.folderSettingsModalMarkup.replace("REPLACE_modal_tabheader2_text", this.labels.modal_tabheader2_text); this.folderSettingsModalMarkup = this.folderSettingsModalMarkup.replace("REPLACE_modal_tabheader3_text", this.labels.modal_tabheader3_text); this.folderSettingsModalMarkup = this.folderSettingsModalMarkup.replace("REPLACE_modal_tabheader4_text", this.labels.modal_tabheader4_text); this.folderSettingsModalMarkup = this.folderSettingsModalMarkup.replace("REPLACE_modal_iconpicker_text", this.labels.modal_iconpicker_text); this.folderSettingsModalMarkup = this.folderSettingsModalMarkup.replace("REPLACE_modal_copytooltipcolor_text", this.labels.modal_copytooltipcolor_text); this.folderSettingsModalMarkup = this.folderSettingsModalMarkup.replace("REPLACE_modal_colorpicker1_text", this.labels.modal_colorpicker1_text); this.folderSettingsModalMarkup = this.folderSettingsModalMarkup.replace("REPLACE_modal_colorpicker2_text", this.labels.modal_colorpicker2_text); this.folderSettingsModalMarkup = this.folderSettingsModalMarkup.replace("REPLACE_modal_colorpicker3_text", this.labels.modal_colorpicker3_text); this.folderSettingsModalMarkup = this.folderSettingsModalMarkup.replace("REPLACE_modal_colorpicker4_text", this.labels.modal_colorpicker4_text); this.folderSettingsModalMarkup = this.folderSettingsModalMarkup.replace("REPLACE_modal_customopen_text", this.labels.modal_customopen_text); this.folderSettingsModalMarkup = this.folderSettingsModalMarkup.replace("REPLACE_modal_customclosed_text", this.labels.modal_customclosed_text); this.folderSettingsModalMarkup = this.folderSettingsModalMarkup.replace("REPLACE_modal_custompreview_text", this.labels.modal_custompreview_text); } onGuildContextMenu (instance, menu) { if (document.querySelector(".DevilBro-modal")) return; if (instance.props && instance.props.target && instance.props.guild && instance.props.type == "GUILD_ICON_BAR" && !menu.querySelector(".serverfolders-item")) { let serverContextEntry = BDFDB.htmlToElement(this.serverContextEntryMarkup); menu.appendChild(serverContextEntry); let folderitem = serverContextEntry.querySelector(".serverfolders-item"); folderitem.addEventListener("mouseenter", () => { let serverContextSubMenu = BDFDB.htmlToElement(this.serverContextSubMenuMarkup); let createitem = serverContextSubMenu.querySelector(".createfolder-item"); createitem.addEventListener("click", () => { instance._reactInternalFiber.return.memoizedProps.closeContextMenu(); this.createNewFolder(instance.props.target); }); let folderdiv = this.getFolderOfServer(instance.props.guild); if (folderdiv) { let removeitem = serverContextSubMenu.querySelector(".removefromfolder-item"); BDFDB.removeClass(removeitem, BDFDB.disCN.contextmenuitemdisabled); removeitem.addEventListener("click", () => { instance._reactInternalFiber.return.memoizedProps.closeContextMenu(); this.removeServerFromFolder(instance.props.guild, folderdiv); }); } BDFDB.appendSubMenu(folderitem, serverContextSubMenu); }); } } processGuilds (instance, wrapper) { setTimeout(() => { if (!wrapper.parentElement.querySelector(BDFDB.dotCN.guildswrapper + ".foldercontent")) { this.foldercontent = BDFDB.htmlToElement(this.folderContentMarkup); wrapper.parentElement.insertBefore(this.foldercontent, wrapper.nextElementSibling); this.foldercontentguilds = this.foldercontent.querySelector(BDFDB.dotCN.guilds); } let folders = BDFDB.loadAllData(this, "folders"), sortedFolders = []; for (let id in folders) sortedFolders[folders[id].position] = folders[id]; for (let data of sortedFolders) if (data && !wrapper.querySelector(BDFDB.dotCN.guild + ".folder#" + data.folderID)) { let folderdiv = this.createFolderDiv(data); this.readIncludedServerList(folderdiv).forEach(guilddiv => {this.hideServer(guilddiv, folderdiv);}); } BDFDB.WebModules.forceAllUpdates(this, "Guild"); },5000); } processGuild (instance, wrapper, methodnames) { if (instance.props && instance.props.guild) { if (methodnames.includes("componentDidMount")) { let folderdiv = this.getFolderOfServer(instance.props.guild); if (folderdiv && !wrapper.getAttribute("folder")) { this.hideServer(wrapper, folderdiv); this.updateCopyInFolderContent(wrapper, folderdiv); this.updateFolderNotifications(folderdiv); } BDFDB.addEventListener(this, wrapper, "click", () => { if (BDFDB.getData("closeAllFolders", this, "settings")) document.querySelectorAll(".folder.open").forEach(openFolder => {this.openCloseFolder(openFolder);}); }); BDFDB.addEventListener(this, wrapper, "mousedown", e => { if (BDFDB.pressedKeys.includes(17)) { e.originalEvent.stopPropagation(); e.originalEvent.preventDefault(); let dragpreview = this.createDragPreview(wrapper, e); let updatePreview = e2 => { this.updateDragPreview(dragpreview, e2); }; let droppedPreview = e2 => { let dropfolderdiv = BDFDB.getParentEle(BDFDB.dotCN.guild + ".folder", e2.target); if (dropfolderdiv) this.addServerToFolder(instance.props.guild, dropfolderdiv); document.removeEventListener("mousemove", updatePreview); document.removeEventListener("mouseup", droppedPreview); BDFDB.removeEles(dragpreview); }; document.addEventListener("mousemove", updatePreview); document.addEventListener("mouseup", droppedPreview); } }); } if (methodnames.includes("componentWillUnmount")) { let folderdiv = this.getFolderOfServer(instance.props.guild); if (folderdiv) { BDFDB.removeEles(this.foldercontent.querySelectorAll(`[guild="${instance.props.guild.id}"]`)); this.updateFolderNotifications(folderdiv); } } } } showFolderSettings (folderdiv) { if (!folderdiv) return; let {folderID,folderName,position,iconID,icons,copyTooltipColor,color1,color2,color3,color4,servers} = BDFDB.loadData(folderdiv.id, this, "folders") || {}; if (!folderID) return; let folderSettingsModal = BDFDB.htmlToElement(this.folderSettingsModalMarkup); let foldernameinput = folderSettingsModal.querySelector("#input-foldername"); let copytooltipcolorinput = folderSettingsModal.querySelector("#input-copytooltipcolor"); folderSettingsModal.querySelector(BDFDB.dotCN.modalguildname).innerText = folderName || ""; foldernameinput.value = folderName || ""; foldernameinput.setAttribute("placeholder", folderName || ""); copytooltipcolorinput.checked = copyTooltipColor; this.setIcons(folderSettingsModal, iconID); BDFDB.setColorSwatches(folderSettingsModal, color1); BDFDB.setColorSwatches(folderSettingsModal, color2); BDFDB.setColorSwatches(folderSettingsModal, color3); BDFDB.setColorSwatches(folderSettingsModal, color4); BDFDB.appendModal(folderSettingsModal); BDFDB.addChildEventListener(folderSettingsModal, "change", "input[type='file'][option]", e => { let file = e.currentTarget.files[0]; if (file) this.fetchCustomIcon(folderSettingsModal, e.currentTarget.getAttribute("option")); }); BDFDB.addChildEventListener(folderSettingsModal, "keyup", "input[type='text'][option]", e => { if (e.which == 13) this.fetchCustomIcon(folderSettingsModal, e.currentTarget.getAttribute("option")); }); BDFDB.addChildEventListener(folderSettingsModal, "click", ".btn-addcustom", () => { this.saveCustomIcon(folderSettingsModal); }); BDFDB.addChildEventListener(folderSettingsModal, "click", ".btn-save", e => { e.preventDefault(); folderName = foldernameinput.value.trim(); folderName = folderName ? folderName : null; var oldIconID = iconID; var selectedIcon = folderSettingsModal.querySelector(".ui-icon-picker-icon.selected"); iconID = selectedIcon.getAttribute("value"); copyTooltipColor = copytooltipcolorinput.checked; var oldColor1 = color1; var oldColor2 = color2; color1 = BDFDB.getSwatchColor(folderSettingsModal, 1); color2 = BDFDB.getSwatchColor(folderSettingsModal, 2); color3 = BDFDB.getSwatchColor(folderSettingsModal, 3); color4 = BDFDB.getSwatchColor(folderSettingsModal, 4); if (iconID != oldIconID || !BDFDB.equals(color1, oldColor1) || !BDFDB.equals(color2, oldColor2)) { let folderIcons = this.loadAllIcons(); let isOpen = BDFDB.containsClass(folderdiv, "open"); if (!BDFDB.containsClass(selectedIcon, "custom")) { this.changeImgColor(color1, color2, folderIcons[iconID].openicon, (openicon) => { icons.openicon = openicon; this.changeImgColor(color1, color2, folderIcons[iconID].closedicon, (closedicon) => { icons.closedicon = closedicon; folderdiv.querySelector(BDFDB.dotCN.avataricon).style.setProperty("background-image", `url(${isOpen ? icons.openicon : icons.closedicon})`); BDFDB.saveData(folderID, {folderID,folderName,position,iconID,icons,copyTooltipColor,color1,color2,color3,color4,servers}, this, "folders"); }); }); } else { icons.openicon = folderIcons[iconID].openicon; icons.closedicon = folderIcons[iconID].closedicon; folderdiv.querySelector(BDFDB.dotCN.avataricon).style.setProperty("background-image", `url(${isOpen ? icons.openicon : icons.closedicon})`); BDFDB.saveData(folderID, {folderID,folderName,position,iconID,icons,copyTooltipColor,color1,color2,color3,color4,servers}, this, "folders"); } } else BDFDB.saveData(folderID, {folderID,folderName,position,iconID,icons,copyTooltipColor,color1,color2,color3,color4,servers}, this, "folders"); }); foldernameinput.focus(); } changeImgColor (color1, color2, icon, callback) { color1 = BDFDB.colorCONVERT(color1, "RGBCOMP"); color2 = BDFDB.colorCONVERT(color2, "RGBCOMP"); if (!color1 || !color2 || !icon) return; let img = new Image(); img.src = icon; img.onload = () => { if (icon.indexOf("data:image") == 0 && img.width < 200 && img.height < 200) { let can = document.createElement("canvas"); can.width = img.width; can.height = img.height; let ctx = can.getContext("2d"); ctx.drawImage(img, 0, 0); let imageData = ctx.getImageData(0, 0, img.width, img.height); let data = imageData.data; for (let i = 0; i < data.length; i += 4) { if (data[i] == 0 && data[i + 1] == 0 && data[i + 2] == 0) { data[i] = color1[0]; data[i + 1] = color1[1]; data[i + 2] = color1[2]; } else if (data[i] == 255 && data[i + 1] == 255 && data[i + 2] == 255) { data[i] = color2[0]; data[i + 1] = color2[1]; data[i + 2] = color2[2]; } ctx.putImageData(imageData, 0, 0); } callback(can.toDataURL("image/png")); } else { callback(img.src); } }; } setIcons (modal, selection) { let wrapper = modal.querySelector(".icons"); if (!wrapper) return; BDFDB.removeEles(wrapper.childNodes); let folderIcons = this.loadAllIcons(); wrapper.appendChild(BDFDB.htmlToElement(`
${Object.getOwnPropertyNames(folderIcons).map(id => `
${folderIcons[id].customID ? '
' : ''}
`).join("")}
`)); setIcon(wrapper.querySelector(`.ui-icon-picker-icon[value="${folderIcons[selection] ? selection : 0}"]`), false, true); BDFDB.addChildEventListener(wrapper, "click", ".ui-icon-picker-icon", e => { if (BDFDB.containsClass(e.target, BDFDB.disCN.hovercardbutton)) return; setIcon(wrapper.querySelector(".ui-icon-picker-icon.selected"), false, false); setIcon(e.currentTarget, true, true); }); BDFDB.addChildEventListener(wrapper, "click", BDFDB.dotCN.hovercardbutton, e => { if (BDFDB.containsClass(e.currentTarget.parentElement, "selected")) return; BDFDB.removeData(e.currentTarget.getAttribute("value"), this, "customicons"); e.currentTarget.parentElement.remove(); BDFDB.showToast(`Custom Icon was deleted.`, {type:"success"}); }); BDFDB.addChildEventListener(wrapper, "mouseenter", ".ui-icon-picker-icon", e => { setIcon(e.currentTarget, true); }); BDFDB.addChildEventListener(wrapper, "mouseleave", ".ui-icon-picker-icon", e => { setIcon(e.currentTarget, false); }); function setIcon (icon, hover, enable) { if (!icon) return; if (enable != undefined) BDFDB.toggleClass(icon, "selected", enable); if (hover) { icon.querySelector(".ui-picker-inner").style.setProperty("background-image", `url(${folderIcons[icon.getAttribute("value")].openicon})`); if (BDFDB.containsClass(icon, "selected")) icon.style.setProperty("background-color", "rgb(255,255,255,0.2)"); else icon.style.setProperty("background-color", "rgb(255,255,255,0.1)"); } else { icon.querySelector(".ui-picker-inner").style.setProperty("background-image", `url(${folderIcons[icon.getAttribute("value")].closedicon})`); if (BDFDB.containsClass(icon, "selected")) icon.style.setProperty("background-color", "rgb(255,255,255,0.2)"); else icon.style.removeProperty("background-color"); } } } loadAllIcons () { let icons = {}; this.folderIcons.forEach((array,i) => {icons[i] = {"openicon":array.openicon,"closedicon":array.closedicon,"customID":null};}); Object.assign(icons, BDFDB.loadAllData(this, "customicons")); return icons; } fetchCustomIcon (modal, type) { let successFetchIcon; let url = modal.querySelector("input[type='text'][option='" + type + "']").value; if (url.indexOf("http") == 0) { let request = require("request"); request(url, (error, response, result) => { if (response) { let type = response.headers["content-type"]; if (type && type.indexOf("image") > -1) { successFetchIcon(); return; } } BDFDB.showToast("Use a valid direct link to an image source. They usually end on something like .png, .jpg or .gif.", {type:"danger"}); }); } else { let fs = require("fs") if (fs.existsSync(url)) { fs.readFile(url, (error, response) => { if (!error) { url = `data:image/png;base64,${response.toString("base64")}`; successFetchIcon(); } }); } else { BDFDB.showToast("Could not fetch file. Please make sure the file exists.", {type:"danger"}); } } successFetchIcon = () => { let iconpreview = modal.querySelector(".ui-icon-picker-icon.preview." + type); let iconpreviewinner = iconpreview.querySelector(".ui-picker-inner"); BDFDB.removeClass(iconpreview, "nopic"); iconpreview.url = url; iconpreviewinner.style.setProperty("background-image", `url(${url})`); let iconpreviewopen = modal.querySelector(".ui-icon-picker-icon.preview.open"); let iconpreviewclosed = modal.querySelector(".ui-icon-picker-icon.preview.closed"); if (!BDFDB.containsClass(iconpreviewopen, "nopic") && !BDFDB.containsClass(iconpreviewclosed, "nopic")) { let iconpreviewswitching = modal.querySelector(".ui-icon-picker-icon.preview.switching"); let iconpreviewopenimage = iconpreviewopen.querySelector(".ui-picker-inner").style.getPropertyValue("background-image"); let iconpreviewclosedimage = iconpreviewclosed.querySelector(".ui-picker-inner").style.getPropertyValue("background-image"); let iconpreviewswitchinginner = iconpreviewswitching.querySelector(".ui-picker-inner"); BDFDB.removeClass(iconpreviewswitching, "nopic"); iconpreviewswitchinginner.style.setProperty("background-image", iconpreviewopenimage); let switching = true; iconpreviewswitching.switchInterval = setInterval(() => { switching = !switching; iconpreviewswitchinginner.style.setProperty("background-image", switching ? iconpreviewopenimage : iconpreviewclosedimage); },1000); } }; } saveCustomIcon (modal) { let iconpreviewopen = modal.querySelector(".ui-icon-picker-icon.preview.open"); let iconpreviewclosed = modal.querySelector(".ui-icon-picker-icon.preview.closed"); let iconpreviewswitching = modal.querySelector(".ui-icon-picker-icon.preview.switching"); if (!BDFDB.containsClass(iconpreviewopen, "nopic") && !BDFDB.containsClass(iconpreviewclosed, "nopic") && !BDFDB.containsClass(iconpreviewswitching, "nopic")) { let customID = this.generateID("customicon"); BDFDB.saveData(customID, {"openicon":iconpreviewopen.url,"closedicon":iconpreviewclosed.url,customID}, this, "customicons"); modal.querySelectorAll("input[type='text'][option]").forEach((input) => {input.value = "";}); let iconpreviewopeninner = iconpreviewopen.querySelector(".ui-picker-inner"); let iconpreviewclosedinner = iconpreviewclosed.querySelector(".ui-picker-inner"); let iconpreviewswitchinginner = iconpreviewswitching.querySelector(".ui-picker-inner"); BDFDB.addClass(iconpreviewopen, "nopic"); iconpreviewopeninner.style.removeProperty("background-image"); BDFDB.addClass(iconpreviewclosed, "nopic"); iconpreviewclosedinner.style.removeProperty("background-image"); BDFDB.addClass(iconpreviewswitching, "nopic"); iconpreviewswitchinginner.style.removeProperty("background-image"); clearInterval(iconpreviewswitching.switchInterval); BDFDB.showToast(`Custom Icon was added to selection.`, {type:"success"}); this.setIcons(modal, modal.querySelector(".ui-icon-picker-icon.selected").getAttribute("value")); } else { BDFDB.showToast(`Add an image for the open and the closed icon.`, {type:"danger"}); } } resetAllElements () { this.toggleFolderContent(false); BDFDB.removeEles(BDFDB.dotCN.guild + ".folder", ".serverfolders-dragpreview"); BDFDB.readServerList().forEach(info => {this.unhideServer(info.div);}); } createNewFolder (ankerdiv) { if (!Node.prototype.isPrototypeOf(ankerdiv)) return; let guilddiv = BDFDB.getParentEle(BDFDB.dotCN.guild, ankerdiv); if (!guilddiv) return; let folderID = this.generateID("folder"); let folderName = ""; let position = Array.from(document.querySelectorAll(`div${BDFDB.dotCN.guildseparator}:not(.folderseparator) ~ div${BDFDB.dotCN.guild}`)).indexOf(guilddiv); let iconID = 0; let icons = Object.assign({},this.folderIcons[0]); let autounread = false; let color1 = ["0","0","0"]; let color2 = ["255","255","255"]; let color3 = null; let color4 = null; let servers = []; this.showFolderSettings(this.createFolderDiv({folderID,folderName,position,iconID,icons,autounread,color1,color2,color3,color4,servers})); this.updateFolderPositions(); } createFolderDiv (data) { let folderdiv = BDFDB.htmlToElement(this.folderIconMarkup); let serversandfolders = document.querySelectorAll(`div${BDFDB.dotCN.guildseparator}:not(.folderseparator) ~ div${BDFDB.dotCN.guild}`); let insertnode = serversandfolders[data.position > serversandfolders.length - 1 ? serversandfolders.length - 1 : data.position]; insertnode.parentElement.insertBefore(folderdiv, insertnode); folderdiv.id = data.folderID; BDFDB.addClass(folderdiv, "closed"); folderdiv.querySelector(BDFDB.dotCN.avataricon).style.setProperty("background-image", `url(${data.icons.closedicon})`); folderdiv.addEventListener("click", () => { if (BDFDB.getData("closeOtherFolders", this, "settings")) { document.querySelectorAll(".folder.open").forEach(folder => { if (folder != folderdiv) this.openCloseFolder(folder); }); } this.openCloseFolder(folderdiv); }); folderdiv.addEventListener("mouseenter", () => { let newdata = BDFDB.loadData(folderdiv.id, this, "folders"); if (!newdata || !newdata.folderName) return; let bgColor = BDFDB.colorCONVERT(newdata.color3, "RGB"); let fontColor = BDFDB.colorCONVERT(newdata.color4, "RGB"); BDFDB.createTooltip(newdata.folderName, folderdiv, {type:"right",selector:"guild-folder-tooltip",style:`color: ${fontColor} !important; background-color: ${bgColor} !important; border-color: ${bgColor} !important;`}); }); folderdiv.addEventListener("contextmenu", e => { let newdata = BDFDB.loadData(folderdiv.id, this, "folders"); if (!newdata) return; let folderContext = BDFDB.htmlToElement(this.folderContextMarkup); let autounreadinput = folderContext.querySelector(".autounreadfolder-item input"); autounreadinput.checked = newdata.autounread; folderContext.querySelector(".autounreadfolder-item").addEventListener("click", () => { autounreadinput.checked = !autounreadinput.checked; newdata.autounread = autounreadinput.checked; BDFDB.saveData(newdata.folderID, newdata, this, "folders"); }); folderContext.querySelector(".foldersettings-item").addEventListener("click", () => { folderContext.remove(); this.showFolderSettings(folderdiv); }); folderContext.querySelector(".createfolder-item").addEventListener("click", () => { folderContext.remove(); this.createNewFolder(folderdiv); }); folderContext.querySelector(".removefolder-item").addEventListener("click", () => { folderContext.remove(); this.removeFolder(folderdiv); }); let unreadServers = BDFDB.readUnreadServerList(this.readIncludedServerList(folderdiv)); if (unreadServers.length > 0) { let unreaditem = folderContext.querySelector(".unreadfolder-item"); BDFDB.removeClass(unreaditem, BDFDB.disCN.contextmenuitemdisabled); unreaditem.addEventListener("click", () => { folderContext.remove(); BDFDB.clearReadNotifications(unreadServers); }); } BDFDB.appendContextMenu(folderContext, e); }); folderdiv.addEventListener("mousedown", e => { let x = e.pageX, y = e.pageY; let mousemove = e2 => { if (Math.sqrt((x - e2.pageX)**2) > 20 || Math.sqrt((y - e2.pageY)**2) > 20) { document.removeEventListener("mousemove", mousemove); document.removeEventListener("mouseup", mouseup); let guildswrap = document.querySelector(`${BDFDB.dotCN.guildswrapper}:not(.foldercontent) ${BDFDB.dotCN.guilds}`); if (!guildswrap) return; let hovele = null; let placeholder = BDFDB.htmlToElement(`
`); let dragpreview = this.createDragPreview(folderdiv, e); let dragging = e3 => { BDFDB.removeEles(placeholder); BDFDB.toggleEles(folderdiv, false); this.updateDragPreview(dragpreview, e3); hovele = BDFDB.getParentEle(BDFDB.dotCN.guild + ".folder", e3.target); if (hovele) guildswrap.insertBefore(placeholder, hovele.nextSibling); else { hovele = BDFDB.getParentEle(BDFDB.dotCN.guild, e3.target); if (hovele && BDFDB.getReactValue(hovele, "return.memoizedProps.guild") && guildswrap.contains(hovele)) { guildswrap.insertBefore(placeholder, hovele.nextSibling); } } }; let releasing = e3 => { document.removeEventListener("mousemove", dragging); document.removeEventListener("mouseup", releasing); BDFDB.removeEles(placeholder, dragpreview); BDFDB.toggleEles(folderdiv, true); if (hovele) { guildswrap.insertBefore(folderdiv, hovele.nextSibling); this.updateFolderPositions(folderdiv); } }; document.addEventListener("mousemove", dragging); document.addEventListener("mouseup", releasing); } }; let mouseup = () => { document.removeEventListener("mousemove", mousemove); document.removeEventListener("mouseup", mouseup); }; document.addEventListener("mousemove", mousemove); document.addEventListener("mouseup", mouseup); }); this.addHoverBehaviour(folderdiv); BDFDB.saveData(data.folderID, data, this, "folders"); this.updateFolderNotifications(folderdiv); return folderdiv; } generateID (prefix) { let data = BDFDB.loadAllData(this, prefix + "s"); let id = prefix + "_" + Math.round(Math.random()*10000000000000000); return data[id] ? this.generateID(prefix) : id; } addServerToFolder (info, folderdiv) { if (!info || !folderdiv) return; let guilddiv = BDFDB.getServerDiv(info); let data = BDFDB.loadData(folderdiv.id, this, "folders"); if (!guilddiv || !data || data.servers.includes(info.id)) return; data.servers.push(info.id); BDFDB.saveData(folderdiv.id, data, this, "folders"); this.hideServer(guilddiv, folderdiv); this.updateCopyInFolderContent(guilddiv, folderdiv); this.updateFolderNotifications(folderdiv); BDFDB.showToast(this.labels.toast_addserver_text.replace("${servername}", info.name).replace("${foldername}", data.folderName ? " " + data.folderName : ""), {type:"success"}); } removeServerFromFolder (info, folderdiv) { if (!info || !folderdiv) return; let data = BDFDB.loadData(folderdiv.id, this, "folders"); if (!data) return; BDFDB.removeFromArray(data.servers, info.id); BDFDB.saveData(folderdiv.id, data, this, "folders"); BDFDB.removeEles(this.foldercontent.querySelectorAll(`[guild="${info.id}"]`)); this.unhideServer(BDFDB.getServerDiv(info)); this.updateFolderNotifications(folderdiv); BDFDB.showToast(this.labels.toast_removeserver_text.replace("${servername}", info.name).replace("${foldername}", data.folderName ? " " + data.folderName : ""), {type:"danger"}); } removeFolder (folderdiv) { if (!folderdiv) return; this.readIncludedServerList(folderdiv).forEach(guilddiv => {this.unhideServer(guilddiv);}); BDFDB.removeData(folderdiv.id, this, "folders"); this.closeFolderContent(folderdiv); folderdiv.remove(); this.updateFolderPositions(); } getFolderOfServer (idOrInfoOrEle) { if (!idOrInfoOrEle) return; let id = Node.prototype.isPrototypeOf(idOrInfoOrEle) ? BDFDB.getServerID(idOrInfoOrEle) : (typeof idOrInfoOrEle == "object" ? idOrInfoOrEle.id : idOrInfoOrEle); if (!id) return; let folders = BDFDB.loadAllData(this, "folders"); for (let folderid in folders) for (let serverid of folders[folderid].servers) if (serverid == id) return document.querySelector("#" + folderid); return null; } hideServer (guilddiv, folderdiv) { if (!Node.prototype.isPrototypeOf(guilddiv) || !folderdiv) return; guilddiv.setAttribute("folder", folderdiv.id); BDFDB.toggleEles(guilddiv, false); if (guilddiv.ServerFoldersChangeObserver && typeof guilddiv.ServerFoldersChangeObserver.disconnect == "function") guilddiv.ServerFoldersChangeObserver.disconnect(); guilddiv.ServerFoldersChangeObserver = new MutationObserver((changes, _) => { changes.forEach( (change, i) => { let updatefolder = false; if (change.type == "attributes" && change.attributeName == "class" && BDFDB.containsClass(change.target, BDFDB.disCN.guild)) updatefolder = true; if (change.type == "characterData" && change.target.parentElement && BDFDB.containsClass(change.target.parentElement, BDFDB.disCN.badge)) updatefolder = true; else if (change.addedNodes.length) change.addedNodes.forEach(node => {if (node.tagName && BDFDB.containsClass(node, BDFDB.disCN.badge)) updatefolder = true;}); else if (change.removedNodes.length) change.removedNodes.forEach(node => {if (node.tagName && BDFDB.containsClass(node, BDFDB.disCN.badge)) updatefolder = true;}); this.updateCopyInFolderContent(guilddiv, folderdiv); if (updatefolder) this.updateFolderNotifications(folderdiv); } ); }); guilddiv.ServerFoldersChangeObserver.observe(guilddiv, {attributes:true, childList:true, characterData: true, subtree:true}); } unhideServer (guilddiv) { if (!Node.prototype.isPrototypeOf(guilddiv)) return; guilddiv.removeAttribute("folder"); BDFDB.toggleEles(guilddiv, true); if (guilddiv.ServerFoldersChangeObserver && typeof guilddiv.ServerFoldersChangeObserver.disconnect == "function") guilddiv.ServerFoldersChangeObserver.disconnect(); delete guilddiv.ServerFoldersChangeObserver; } toggleFolderContent (forceOpenClose) { if (!this.foldercontent) return; forceOpenClose = forceOpenClose === undefined ? BDFDB.containsClass(this.foldercontent, "foldercontentclosed") : forceOpenClose; BDFDB.toggleClass(this.foldercontent, "foldercontentopen", forceOpenClose); BDFDB.toggleClass(this.foldercontent, "foldercontentclosed", !forceOpenClose); } openCloseFolder (folderdiv) { if (!folderdiv) return; let data = BDFDB.loadData(folderdiv.id, this, "folders"); if (!data) return; let isClosed = !BDFDB.containsClass(folderdiv, "open"); if (isClosed) { let includedServers = this.readIncludedServerList(folderdiv); if (includedServers.length == 0) return; BDFDB.addClass(folderdiv, "open"); BDFDB.removeClass(folderdiv, "closed"); this.toggleFolderContent(true); let containsguilds = this.foldercontent.querySelectorAll(BDFDB.dotCN.guild).length; let settings = BDFDB.getAllData(this, "settings"); setTimeout(() => { if (settings.addSeparators && containsguilds) this.foldercontentguilds.appendChild(BDFDB.htmlToElement(`
`)); includedServers.forEach(guilddiv => {this.updateCopyInFolderContent(guilddiv, folderdiv);}); }, settings.closeOtherFolders && containsguilds ? 300 : 0); } else this.closeFolderContent(folderdiv); folderdiv.querySelector(BDFDB.dotCN.avataricon).style.setProperty("background-image", `url(${isClosed ? data.icons.openicon : data.icons.closedicon})`); } closeFolderContent (folderdiv) { if (!folderdiv) return; BDFDB.removeClass(folderdiv, "open"); BDFDB.addClass(folderdiv, "closed"); let includedCopies = this.foldercontent.querySelectorAll(`[folder="${folderdiv.id}"]`); for (let copy of includedCopies) copy.removeAttribute("folder"); if (!this.foldercontent.querySelector("[folder]")) { this.toggleFolderContent(false); setTimeout(() => { let settings = BDFDB.getAllData(this, "settings"); if (settings.closeOtherFolders) BDFDB.removeEles(includedCopies); else if (!settings.closeOtherFolders && !document.querySelector(".folder.open")) BDFDB.removeEles(includedCopies); }, 300); } else BDFDB.removeEles(includedCopies); let firstchild = this.foldercontentguilds.firstElementChild; if (BDFDB.containsClass(firstchild, "folderseparator")) BDFDB.removeEles(firstchild); } updateCopyInFolderContent (guilddiv, folderdiv) { if (!guilddiv || !folderdiv) return; if (BDFDB.containsClass(folderdiv, "open")) { let info = this.GuildUtils.getGuild(BDFDB.getServerID(guilddiv)); if (!info) return; let oldCopy = this.foldercontent.querySelector(`[guild="${info.id}"]`); if (oldCopy) { this.foldercontentguilds.insertBefore(this.createCopyOfServer(guilddiv, folderdiv), oldCopy); BDFDB.removeEles(oldCopy); } else { let sameFolderCopies = this.foldercontent.querySelectorAll(`[folder="${folderdiv.id}"]`); let insertNode = sameFolderCopies.length > 0 ? sameFolderCopies[sameFolderCopies.length-1].nextSibling : null; this.foldercontentguilds.insertBefore(this.createCopyOfServer(guilddiv, folderdiv), insertNode); } } } createCopyOfServer (guilddiv, folderdiv) { if (!guilddiv || !folderdiv) return; let info = this.GuildUtils.getGuild(BDFDB.getServerID(guilddiv)); if (!info) return; let guildcopy = guilddiv.cloneNode(true); guildcopy.setAttribute("guild", info.id); BDFDB.addClass(guildcopy, "copy"); BDFDB.toggleEles(guildcopy, true); guildcopy.addEventListener("mouseenter", () => { let folderData = BDFDB.loadData(folderdiv.id, this, "folders") || {}; let EditServersData = BDFDB.isPluginEnabled("EditServers") ? (BDFDB.loadData(info.id, "EditServers", "servers") || {}) : {}; let bgColor = BDFDB.colorCONVERT(EditServersData.color3 || (folderData.copyTooltipColor ? folderData.color3 : null), "RGB"); let fontColor = BDFDB.colorCONVERT(EditServersData.color4 || (folderData.copyTooltipColor ? folderData.color4 : null), "RGB"); BDFDB.createTooltip(EditServersData.name || info.name, guildcopy, {type:"right",selector:(!BDFDB.isObjectEmpty(EditServersData) ? "EditUsers-tooltip" : ""),style:`color: ${fontColor} !important; background-color: ${bgColor} !important; border-color: ${bgColor} !important;`}); }); guildcopy.addEventListener("click", e => { e.preventDefault(); if (BDFDB.pressedKeys.includes(46)) this.removeServerFromFolder(info, folderdiv); else { let settings = BDFDB.getAllData(this, "settings"); if (settings.closeAllFolders) document.querySelectorAll(".folder.open").forEach(openFolder => {this.openCloseFolder(openFolder);}); else if (settings.closeTheFolder) this.openCloseFolder(folderdiv); guilddiv.querySelector("a").click(); } }); guildcopy.addEventListener("contextmenu", e => { BDFDB.openGuildContextMenu(guilddiv, e); }); guildcopy.addEventListener("mousedown", e => { let x = e.pageX, y = e.pageY; let mousemove = e2 => { if (Math.sqrt((x - e2.pageX)**2) > 20 || Math.sqrt((y - e2.pageY)**2) > 20) { document.removeEventListener("mousemove", mousemove); document.removeEventListener("mouseup", mouseup); let hovcopy = null; let placeholder = BDFDB.htmlToElement(`
`); let dragpreview = this.createDragPreview(guilddiv, e); let dragging = e3 => { BDFDB.removeEles(placeholder); BDFDB.toggleEles(guildcopy, false); this.updateDragPreview(dragpreview, e3); if (this.foldercontent.contains(e3.target)) { hovcopy = BDFDB.containsClass(e3.target, "folderseparator") ? e3.target : BDFDB.getParentEle(BDFDB.dotCN.guild + ".copy", e3.target); if (hovcopy && hovcopy.getAttribute("folder") == folderdiv.id) this.foldercontentguilds.insertBefore(placeholder, hovcopy.nextSibling); else hovcopy = null; } }; let releasing = e3 => { document.removeEventListener("mousemove", dragging); document.removeEventListener("mouseup", releasing); BDFDB.removeEles(placeholder, dragpreview); BDFDB.toggleEles(guildcopy, true); let dropfolderdiv = BDFDB.getParentEle(BDFDB.dotCN.guild + ".folder", e3.target); if (dropfolderdiv && dropfolderdiv != folderdiv) { this.removeServerFromFolder(info, folderdiv); this.addServerToFolder(info, dropfolderdiv); } else if (hovcopy) { this.foldercontentguilds.insertBefore(guildcopy, hovcopy.nextSibling); this.updateServerPositions(folderdiv); } }; document.addEventListener("mousemove", dragging); document.addEventListener("mouseup", releasing); } }; let mouseup = () => { document.removeEventListener("mousemove", mousemove); document.removeEventListener("mouseup", mouseup); }; document.addEventListener("mousemove", mousemove); document.addEventListener("mouseup", mouseup); }); let copyinner = guildcopy.querySelector(BDFDB.dotCN.guildinner); let isselected = BDFDB.containsClass(guildcopy, BDFDB.disCN.guildselected); let hasicon = !BDFDB.containsClass(guildcopy.querySelector(BDFDB.dotCN.guildicon), BDFDB.disCN.avatarnoicon); guildcopy.querySelector("a").setAttribute("draggable", false); copyinner.style.setProperty("border-radius", isselected ? "15px" : "25px"); copyinner.style.setProperty("background-color", hasicon ? null : BDFDB.colorCONVERT(this.DiscordConstants.Colors[isselected ? "BRAND_PURPLE" : "CHANNELS_GREY"], "RGB")); this.addHoverBehaviour(guildcopy); return guildcopy; } createDragPreview (div, e) { if (!Node.prototype.isPrototypeOf(div)) return; let dragpreview = div.cloneNode(true); BDFDB.addClass(dragpreview, "serverfolders-dragpreview"); BDFDB.toggleEles(dragpreview, false); dragpreview.style.setProperty("pointer-events", "none", "important"); dragpreview.style.setProperty("left", e.clientX - 25 + "px", "important"); dragpreview.style.setProperty("top", e.clientY - 25 + "px", "important"); document.querySelector(BDFDB.dotCN.appmount).appendChild(dragpreview); return dragpreview; } updateDragPreview (dragpreview, e) { if (!Node.prototype.isPrototypeOf(dragpreview)) return; BDFDB.toggleEles(dragpreview, true); dragpreview.style.setProperty("left", e.clientX - 25 + "px", "important"); dragpreview.style.setProperty("top", e.clientY - 25 + "px", "important"); } updateFolderPositions () { let serverAndFolders = document.querySelectorAll(`div${BDFDB.dotCN.guildseparator}:not(.folderseparator) ~ div${BDFDB.dotCN.guild}`); for (let i = 0; i < serverAndFolders.length; i++) { let folderdiv = BDFDB.getParentEle(BDFDB.dotCN.guild + ".folder", serverAndFolders[i]); if (folderdiv) { let data = BDFDB.loadData(folderdiv.id, this, "folders"); if (data) { data.position = i; BDFDB.saveData(folderdiv.id, data, this, "folders"); } } } } updateServerPositions (folderdiv) { let data = BDFDB.loadData(folderdiv.id, this, "folders"); if (data) { let servers = Array.from(this.foldercontent.querySelectorAll(`${BDFDB.dotCN.guild}.copy[folder="${folderdiv.id}"]`)).map(div => {return div.getAttribute("guild");}); for (let serverid of servers) BDFDB.removeFromArray(data.servers, serverid); data.servers = BDFDB.removeCopiesFromArray(servers.concat(data.servers)); BDFDB.saveData(folderdiv.id, data, this, "folders"); } } updateFolderNotifications (folderdiv) { let data = BDFDB.loadData(folderdiv.id, this, "folders"); var a = performance.now(); if (!data) return; let includedServers = this.readIncludedServerList(folderdiv); let unreadServers = BDFDB.readUnreadServerList(includedServers); if (unreadServers.length > 0 && data.autounread) BDFDB.clearReadNotifications(unreadServers); else { let badgeAmount = 0; let audioEnabled = false; let videoEnabled = false; includedServers.forEach(div => { let badge = div.querySelector(BDFDB.dotCN.badge); if (badge) badgeAmount += parseInt(badge.innerText); if (BDFDB.containsClass(div, BDFDB.disCN.guildaudio)) audioEnabled = true; if (BDFDB.containsClass(div, BDFDB.disCN.guildvideo)) videoEnabled = true; }); BDFDB.toggleClass(folderdiv, BDFDB.disCN.guildunread, unreadServers.length > 0); BDFDB.toggleClass(folderdiv, BDFDB.disCN.guildaudio, audioEnabled); BDFDB.toggleClass(folderdiv, BDFDB.disCN.guildvideo, videoEnabled); let notifications = folderdiv.querySelector(".folder" + BDFDB.dotCN.badge + ".notifications"); notifications.innerText = badgeAmount; BDFDB.toggleEles(notifications, badgeAmount > 0); let amount = folderdiv.querySelector(".folder" + BDFDB.dotCN.badge + ".count"); amount.innerText = includedServers.length; BDFDB.toggleEles(amount, includedServers.length > 0 && BDFDB.getData("showCountBadge", this, "settings")); if (BDFDB.containsClass(folderdiv, "open") && !document.querySelector(".foldercontent [folder='" + folderdiv.id + "']")) this.openCloseFolder(folderdiv); } } readIncludedServerList (folderdiv) { let data = BDFDB.loadData(folderdiv.id, this, "folders"); let includedServers = []; if (data) for (let id of data.servers) { let div = BDFDB.getServerDiv(id); if (div && includedServers.indexOf(div) == -1) includedServers.push(div); } return includedServers; } addHoverBehaviour (div) { /* based on stuff from Zerebos */ let divinner = div.querySelector(BDFDB.dotCN.guildinner); let divicon = div.querySelector(BDFDB.dotCN.guildicon); let backgroundColor = new this.Animations.Value(0); backgroundColor .interpolate({ inputRange: [0, 1], outputRange: [this.DiscordConstants.Colors.CHANNELS_GREY, this.DiscordConstants.Colors.BRAND_PURPLE] }) .addListener((value) => { if (BDFDB.containsClass(divicon, BDFDB.disCN.avatarnoicon)) { let comp = BDFDB.colorCONVERT(value.value, "RGBCOMP"); if (comp) divinner.style.setProperty("background-color", `rgb(${comp[0]}, ${comp[1]}, ${comp[2]})`); } }); let borderRadius = new this.Animations.Value(0); borderRadius .interpolate({ inputRange: [0, 1], outputRange: [25, 15] }) .addListener((value) => { divinner.style.setProperty("border-radius", `${value.value}px`); }); let animate = (v) => { this.Animations.parallel([ this.Animations.timing(backgroundColor, {toValue: v, duration: 200}), this.Animations.spring(borderRadius, {toValue: v, friction: 3}) ]).start(); }; div.addEventListener("mouseenter", () => {animate(1);}) div.addEventListener("mouseleave", () => {if (!BDFDB.containsClass(div, BDFDB.disCN.guildselected)) animate(0);}); } setLabelsByLanguage () { switch (BDFDB.getDiscordLanguage().id) { case "hr": //croatian return { toast_addserver_text: "${servername} je dodan u mapu${foldername}.", toast_removeserver_text: "${servername} je uklonjena iz mape${foldername}.", servercontext_serverfolders_text: "Poslužitelj mapu", serversubmenu_createfolder_text: "Izradi mapu", serversubmenu_removefromfolder_text: "Ukloni poslužitelj iz mape", foldercontext_unreadfolder_text: "Označi sve kao pročitano", foldercontext_autounreadfolder_text: "Auto: Označite kao pročitano", foldercontext_foldersettings_text: "Postavke map", foldercontext_removefolder_text: "Izbriši mapu", modal_header_text: "Postavke mapa", modal_foldername_text: "Naziv mape", modal_tabheader1_text: "Mape", modal_tabheader2_text: "Boja mape", modal_tabheader3_text: "Boja tooltip", modal_tabheader4_text: "Prilagođeni ikona", modal_iconpicker_text: "Odabir mape", modal_copytooltipcolor_text: "Koristite iste boje za poslužitelj u mapi", modal_colorpicker1_text: "Boja primarne mape", modal_colorpicker2_text: "Boja sekundarne mape", modal_colorpicker3_text: "Boja tooltip", modal_colorpicker4_text: "Boja fonta", modal_customopen_text: "Otvori ikona", modal_customclosed_text: "Zatvorena ikona", modal_custompreview_text: "Pregled ikona" }; case "da": //danish return { toast_addserver_text: "${servername} er blevet tilføjet til mappe${foldername}.", toast_removeserver_text: "${servername} er blevet fjernet fra mappen${foldername}.", servercontext_serverfolders_text: "Servermapper", serversubmenu_createfolder_text: "Opret mappe", serversubmenu_removefromfolder_text: "Fjern server fra mappe", foldercontext_unreadfolder_text: "Markér alle som læst", foldercontext_autounreadfolder_text: "Auto: Markér som læst", foldercontext_foldersettings_text: "Mappeindstillinger", foldercontext_removefolder_text: "Slet mappe", modal_header_text: "Mappindstillinger", modal_foldername_text: "Mappenavn", modal_tabheader1_text: "Mappe", modal_tabheader2_text: "Mappefarve", modal_tabheader3_text: "Tooltipfarve", modal_tabheader4_text: "Brugerdefinerede ikoner", modal_iconpicker_text: "Mappevalg", modal_copytooltipcolor_text: "Brug de samme farver til server på mappen", modal_colorpicker1_text: "Primær mappefarve", modal_colorpicker2_text: "Sekundær mappefarve", modal_colorpicker3_text: "Tooltipfarve", modal_colorpicker4_text: "Skriftfarve", modal_customopen_text: "Åbn ikon", modal_customclosed_text: "Lukket ikon", modal_custompreview_text: "Ikon forhåndsvisning" }; case "de": //german return { toast_addserver_text: "${servername} wurde dem Ordner${foldername} hinzugefügt.", toast_removeserver_text: "${servername} wurde aus dem Ordner${foldername} entfernt.", servercontext_serverfolders_text: "Serverordner", serversubmenu_createfolder_text: "Ordner erzeugen", serversubmenu_removefromfolder_text: "Server aus Ordner entfernen", foldercontext_unreadfolder_text: "Alle als gelesen markieren", foldercontext_autounreadfolder_text: "Auto: Als gelesen markieren", foldercontext_foldersettings_text: "Ordnereinstellungen", foldercontext_removefolder_text: "Ordner löschen", modal_header_text: "Ordnereinstellungen", modal_foldername_text: "Ordnername", modal_tabheader1_text: "Ordner", modal_tabheader2_text: "Ordnerfarbe", modal_tabheader3_text: "Tooltipfarbe", modal_tabheader4_text: "Eigene Icons", modal_iconpicker_text: "Ordnerauswahl", modal_copytooltipcolor_text: "Benutze dieselben Farben für alle Server des Ordners", modal_colorpicker1_text: "Primäre Ordnerfarbe", modal_colorpicker2_text: "Sekundäre Ordnerfarbe", modal_colorpicker3_text: "Tooltipfarbe", modal_colorpicker4_text: "Schriftfarbe", modal_customopen_text: "Geöffnetes Icon", modal_customclosed_text: "Geschlossenes Icon", modal_custompreview_text: "Iconvorschau" }; case "es": //spanish return { toast_addserver_text: "${servername} ha sido agregado a la carpeta${foldername}.", toast_removeserver_text: "${servername} ha sido eliminado de la carpeta${foldername}.", servercontext_serverfolders_text: "Carpetas de servidor", serversubmenu_createfolder_text: "Crear carpeta", serversubmenu_removefromfolder_text: "Eliminar servidor de la carpeta", foldercontext_unreadfolder_text: "Marcar todo como leido", foldercontext_autounreadfolder_text: "Auto: Marcar como leído", foldercontext_foldersettings_text: "Ajustes de carpeta", foldercontext_removefolder_text: "Eliminar carpeta", modal_header_text: "Ajustes de carpeta", modal_foldername_text: "Nombre de la carpeta", modal_tabheader1_text: "Carpeta", modal_tabheader2_text: "Color de carpeta", modal_tabheader3_text: "Color de tooltip", modal_tabheader4_text: "Iconos personalizados", modal_iconpicker_text: "Selección de carpeta", modal_copytooltipcolor_text: "Usa los mismos colores para el servidor de la carpeta", modal_colorpicker1_text: "Color primaria de carpeta", modal_colorpicker2_text: "Color secundario de la carpeta", modal_colorpicker3_text: "Color de tooltip", modal_colorpicker4_text: "Color de fuente", modal_customopen_text: "Ícono abierto", modal_customclosed_text: "Icono cerrado", modal_custompreview_text: "Vista previa del icono" }; case "fr": //french return { toast_addserver_text: "${servername} a été ajouté au dossier${foldername}.", toast_removeserver_text: "${servername} a été supprimé du dossier${foldername}.", servercontext_serverfolders_text: "Dossiers du serveur", serversubmenu_createfolder_text: "Créer le dossier", serversubmenu_removefromfolder_text: "Supprimer le serveur du dossier", foldercontext_unreadfolder_text: "Tout marquer comme lu", foldercontext_autounreadfolder_text: "Auto: Marquer comme lu", foldercontext_foldersettings_text: "Paramètres du dossier", foldercontext_removefolder_text: "Supprimer le dossier", modal_header_text: "Paramètres du dossier", modal_foldername_text: "Nom de dossier", modal_tabheader1_text: "Dossier", modal_tabheader2_text: "Couleur du dossier", modal_tabheader3_text: "Couleur de tooltip", modal_tabheader4_text: "Icônes personnalisées", modal_iconpicker_text: "Choix du dossier", modal_copytooltipcolor_text: "Utilisez les mêmes couleurs pour le serveur du dossier", modal_colorpicker1_text: "Couleur primaire du dossier", modal_colorpicker2_text: "Couleur secondaire du dossier", modal_colorpicker3_text: "Couleur de tooltip", modal_colorpicker4_text: "Couleur de la police", modal_customopen_text: "Icône ouverte", modal_customclosed_text: "Icône fermée", modal_custompreview_text: "Aperçu de l'icône" }; case "it": //italian return { toast_addserver_text: "${servername} è stato aggiunto alla cartella${foldername}.", toast_removeserver_text: "${servername} è stato rimosso dalla cartella${foldername}.", servercontext_serverfolders_text: "Cartelle del server", serversubmenu_createfolder_text: "Creare una cartella", serversubmenu_removefromfolder_text: "Rimuovere il server dalla cartella", foldercontext_unreadfolder_text: "Segna tutti come letti", foldercontext_autounreadfolder_text: "Auto: Contrassegna come letto", foldercontext_foldersettings_text: "Impostazioni cartella", foldercontext_removefolder_text: "Elimina cartella", modal_header_text: "Impostazioni cartella", modal_foldername_text: "Nome della cartella", modal_tabheader1_text: "Cartella", modal_tabheader2_text: "Colore della cartella", modal_tabheader3_text: "Colore della tooltip", modal_tabheader4_text: "Icone personalizzate", modal_iconpicker_text: "Selezione della cartella", modal_copytooltipcolor_text: "Usa gli stessi colori per il server della cartella", modal_colorpicker1_text: "Colore primaria della cartella", modal_colorpicker2_text: "Colore secondaria della cartella", modal_colorpicker3_text: "Colore della tooltip", modal_colorpicker4_text: "Colore del carattere", modal_customopen_text: "Icona aperta", modal_customclosed_text: "Icona chiusa", modal_custompreview_text: "Icona anteprima" }; case "nl": //dutch return { toast_addserver_text: "${servername} is toegevoegd aan de map${foldername}.", toast_removeserver_text: "${servername} is verwijderd uit de map${foldername}.", servercontext_serverfolders_text: "Servermappen", serversubmenu_createfolder_text: "Map aanmaken", serversubmenu_removefromfolder_text: "Server uit map verwijderen", foldercontext_unreadfolder_text: "Alles als gelezen markeren", foldercontext_autounreadfolder_text: "Auto: Markeren als gelezen", foldercontext_foldersettings_text: "Mapinstellingen", foldercontext_removefolder_text: "Verwijder map", modal_header_text: "Mapinstellingen", modal_foldername_text: "Mapnaam", modal_tabheader1_text: "Map", modal_tabheader2_text: "Mapkleur", modal_tabheader3_text: "Tooltipkleur", modal_tabheader4_text: "Aangepaste keuze", modal_iconpicker_text: "Map keuze", modal_copytooltipcolor_text: "Gebruik dezelfde kleuren voor de server van de map", modal_colorpicker1_text: "Primaire mapkleur", modal_colorpicker2_text: "Tweede mapkleur", modal_colorpicker3_text: "Tooltipkleur", modal_colorpicker4_text: "Doopvontkleur", modal_customopen_text: "Geopende keuze", modal_customclosed_text: "Gesloten keuze", modal_custompreview_text: "Voorbeeld van keuze" }; case "no": //norwegian return { toast_addserver_text: "${servername} er lagt til i mappe${foldername}.", toast_removeserver_text: "${servername} er fjernet fra mappen${foldername}.", servercontext_serverfolders_text: "Servermapper", serversubmenu_createfolder_text: "Lag mappe", serversubmenu_removefromfolder_text: "Fjern server fra mappe", foldercontext_unreadfolder_text: "Marker alle som lest", foldercontext_autounreadfolder_text: "Auto: Merk som les", foldercontext_foldersettings_text: "Mappinnstillinger", foldercontext_removefolder_text: "Slett mappe", modal_header_text: "Mappinnstillinger", modal_foldername_text: "Mappenavn", modal_tabheader1_text: "Mappe", modal_tabheader2_text: "Mappefarge", modal_tabheader3_text: "Tooltipfarge", modal_tabheader4_text: "Tilpassede ikoner", modal_iconpicker_text: "Mappevalg", modal_copytooltipcolor_text: "Bruk de samme fargene til serveren til mappen", modal_colorpicker1_text: "Primær mappefarge", modal_colorpicker2_text: "Sekundær mappefarge", modal_colorpicker3_text: "Tooltipfarge", modal_colorpicker4_text: "Skriftfarge", modal_customopen_text: "Åpnet ikon", modal_customclosed_text: "Lukket ikon", modal_custompreview_text: "Ikon forhåndsvisning" }; case "pl": //polish return { toast_addserver_text: "${servername} został dodany do folderu${foldername}.", toast_removeserver_text: "${servername} został usunięty z folderu${foldername}.", servercontext_serverfolders_text: "Foldery serwera", serversubmenu_createfolder_text: "Utwórz folder", serversubmenu_removefromfolder_text: "Usuń serwer z folderu", foldercontext_unreadfolder_text: "Oznacz wszystkie jako przeczytane", foldercontext_autounreadfolder_text: "Auto: Oznacz jako przeczytane", foldercontext_foldersettings_text: "Ustawienia folderu", foldercontext_removefolder_text: "Usuń folder", modal_header_text: "Ustawienia folderu", modal_foldername_text: "Nazwa folderu", modal_tabheader1_text: "Folder", modal_tabheader2_text: "Kolor folderu", modal_tabheader3_text: "Kolor podpowiedzi", modal_tabheader4_text: "Niestandardowe ikony", modal_iconpicker_text: "Wybór folderu", modal_copytooltipcolor_text: "Użyj tych samych kolorów dla serwera folderu", modal_colorpicker1_text: "Podstawowy kolor folderu", modal_colorpicker2_text: "Drugorzędny kolor folderu", modal_colorpicker3_text: "Kolor podpowiedzi", modal_colorpicker4_text: "Kolor czcionki", modal_customopen_text: "Otwarta ikona", modal_customclosed_text: "Zamknięta ikona", modal_custompreview_text: "Podgląd ikony" }; case "pt-BR": //portuguese (brazil) return { toast_addserver_text: "${servername} foi adicionado à pasta${foldername}.", toast_removeserver_text: "${servername} foi removido da pasta${foldername}.", servercontext_serverfolders_text: "Pastas de servidores", serversubmenu_createfolder_text: "Criar pasta", serversubmenu_removefromfolder_text: "Remover servidor da pasta", foldercontext_unreadfolder_text: "Marcar tudo como lido", foldercontext_autounreadfolder_text: "Auto: Marcar como lido", foldercontext_foldersettings_text: "Configurações da pasta", foldercontext_removefolder_text: "Excluir pasta", modal_header_text: "Configurações da pasta", modal_foldername_text: "Nome da pasta", modal_tabheader1_text: "Pasta", modal_tabheader2_text: "Cor da pasta", modal_tabheader3_text: "Cor da tooltip", modal_tabheader4_text: "Ícones personalizados", modal_iconpicker_text: "Escolha da pasta", modal_copytooltipcolor_text: "Use as mesmas cores para o servidor da pasta", modal_colorpicker1_text: "Cor primária da pasta", modal_colorpicker2_text: "Cor secundária da pasta", modal_colorpicker3_text: "Cor da tooltip", modal_colorpicker4_text: "Cor da fonte", modal_customopen_text: "Ícone aberto", modal_customclosed_text: "Ícone fechado", modal_custompreview_text: "Pré-visualização de ícones" }; case "fi": //finnish return { toast_addserver_text: "${servername} on lisätty kansioon${foldername}.", toast_removeserver_text: "${servername} on poistettu kansioon${foldername}.", servercontext_serverfolders_text: "Palvelinkansiot", serversubmenu_createfolder_text: "Luo kansio", serversubmenu_removefromfolder_text: "Poista palvelin kansioista", foldercontext_unreadfolder_text: "Merkitse kaikki luetuksi", foldercontext_autounreadfolder_text: "Auto: merkitse luettavaksi", foldercontext_foldersettings_text: "Kansion kansio", foldercontext_removefolder_text: "Poista kansio", modal_header_text: "Kansion kansio", modal_foldername_text: "Kansion nimi", modal_tabheader1_text: "Kansio", modal_tabheader2_text: "Kansionväri", modal_tabheader3_text: "Tooltipväri", modal_tabheader4_text: "Mukautetut kuvakkeet", modal_iconpicker_text: "Kansion valinta", modal_copytooltipcolor_text: "Käytä samoja värejä kansion palvelimelle", modal_colorpicker1_text: "Ensisijainen kansionväri", modal_colorpicker2_text: "Toissijainen kansionväri", modal_colorpicker3_text: "Tooltipväri", modal_colorpicker4_text: "Fontinväri", modal_customopen_text: "Avattu kuvake", modal_customclosed_text: "Suljettu kuvake", modal_custompreview_text: "Kuvakkeen esikatselu" }; case "sv": //swedish return { toast_addserver_text: "${servername} har lagts till i mapp${foldername}.", toast_removeserver_text: "${servername} har tagits bort från mappen${foldername}.", servercontext_serverfolders_text: "Servermappar", serversubmenu_createfolder_text: "Skapa mapp", serversubmenu_removefromfolder_text: "Ta bort servern från mappen", foldercontext_unreadfolder_text: "Markera allt som läst", foldercontext_autounreadfolder_text: "Auto: Markera som Läs", foldercontext_foldersettings_text: "Mappinställningar", foldercontext_removefolder_text: "Ta bort mapp", modal_header_text: "Mappinställningar", modal_foldername_text: "Mappnamn", modal_tabheader1_text: "Mapp", modal_tabheader2_text: "Mappfärg", modal_tabheader3_text: "Tooltipfärg", modal_tabheader4_text: "Anpassade ikoner", modal_iconpicker_text: "Mappval", modal_copytooltipcolor_text: "Använd samma färger för mappen på mappen", modal_colorpicker1_text: "Primär mappfärg", modal_colorpicker2_text: "Sekundär mappfärg", modal_colorpicker3_text: "Tooltipfärg", modal_colorpicker4_text: "Fontfärg", modal_customopen_text: "Öppnad ikon", modal_customclosed_text: "Closed Icon", modal_custompreview_text: "Ikon förhandsvisning" }; case "tr": //turkish return { toast_addserver_text: "${servername} klasörü${foldername} eklendi.", toast_removeserver_text: "${servername} klasörü${foldername} kaldırıldı", servercontext_serverfolders_text: "Sunucu klasörleri", serversubmenu_createfolder_text: "Klasör oluşturun", serversubmenu_removefromfolder_text: "Sunucuyu klasörden kaldır", foldercontext_unreadfolder_text: "Tümünü Oku olarak işaretle", foldercontext_autounreadfolder_text: "Oto: Okundu Olarak İşaretle", foldercontext_foldersettings_text: "Klasör Ayarları", foldercontext_removefolder_text: "Klasörü sil", modal_header_text: "Klasör Ayarları", modal_foldername_text: "Klasör adı", modal_tabheader1_text: "Klasör", modal_tabheader2_text: "Klasör rengi", modal_tabheader3_text: "Tooltip rengi", modal_tabheader4_text: "Özel simgeler", modal_iconpicker_text: "Klasör seçimi", modal_copytooltipcolor_text: "Klasörün sunucusu için aynı renkleri kullanın", modal_colorpicker1_text: "Birincil klasör rengi", modal_colorpicker2_text: "İkincil klasör rengi", modal_colorpicker3_text: "Tooltip rengi", modal_colorpicker4_text: "Yazı rengi", modal_customopen_text: "Açılmış simge", modal_customclosed_text: "Kapalı simge", modal_custompreview_text: "Simge önizleme" }; case "cs": //czech return { toast_addserver_text: "${servername} byl přidán do složky${foldername}.", toast_removeserver_text: "${servername} byl odstraněn ze složky${foldername}.", servercontext_serverfolders_text: "Složky serveru", serversubmenu_createfolder_text: "Vytvořit složky", serversubmenu_removefromfolder_text: "Odstranit server ze složky", foldercontext_unreadfolder_text: "Označit vše jako přečtené", foldercontext_autounreadfolder_text: "Auto: Označit jako přečtené", foldercontext_foldersettings_text: "Nastavení složky", foldercontext_removefolder_text: "Smazat složky", modal_header_text: "Nastavení složky", modal_foldername_text: "Název složky", modal_tabheader1_text: "Složky", modal_tabheader2_text: "Barva složky", modal_tabheader3_text: "Barva tooltip", modal_tabheader4_text: "Vlastní ikony", modal_iconpicker_text: "Volba složky", modal_copytooltipcolor_text: "Použijte stejné barvy pro server složky", modal_colorpicker1_text: "Primární barva složky", modal_colorpicker2_text: "Sekundární barva složky", modal_colorpicker3_text: "Barva tooltip", modal_colorpicker4_text: "Barva fontu", modal_customopen_text: "Otevřená ikona", modal_customclosed_text: "Uzavřená ikona", modal_custompreview_text: "Náhled ikony" }; case "bg": //bulgarian return { toast_addserver_text: "${servername} е добавен към папката${foldername}.", toast_removeserver_text: "${servername} е премахнат от папката${foldername}.", servercontext_serverfolders_text: "Сървърни папки", serversubmenu_createfolder_text: "Създай папка", serversubmenu_removefromfolder_text: "Премахване на сървър от папка", foldercontext_unreadfolder_text: "Маркирай всички като прочетени", foldercontext_autounreadfolder_text: "Авто: Маркиране като четене", foldercontext_foldersettings_text: "Настройки папка", foldercontext_removefolder_text: "Изтриване на папка", modal_header_text: "Настройки папка", modal_foldername_text: "Име на папка", modal_tabheader1_text: "Папка", modal_tabheader2_text: "Цвят на папка", modal_tabheader3_text: "Цвят на подсказка", modal_tabheader4_text: "Персонализирани икони", modal_iconpicker_text: "Избор на папки", modal_copytooltipcolor_text: "Използвайте същите цветове за сървъра на папката", modal_colorpicker1_text: "Цвят основнен на папка", modal_colorpicker2_text: "цвят вторичен на папка", modal_colorpicker3_text: "Цвят на подсказка", modal_colorpicker4_text: "Цвят на шрифта", modal_customopen_text: "Отворена икона", modal_customclosed_text: "Затворена икона", modal_custompreview_text: "Икона Преглед" }; case "ru": //russian return { toast_addserver_text: "${servername} добавлен в папку${foldername}.", toast_removeserver_text: "${servername} был удален из папки${foldername}.", servercontext_serverfolders_text: "Папки сервера", serversubmenu_createfolder_text: "Создать папки", serversubmenu_removefromfolder_text: "Удаление сервера из папки", foldercontext_unreadfolder_text: "Отметить все как прочитанное", foldercontext_autounreadfolder_text: "Авто: Отметить как прочитанное", foldercontext_foldersettings_text: "Настройки папки", foldercontext_removefolder_text: "Удалить папки", modal_header_text: "Настройки папки", modal_foldername_text: "Имя папки", modal_tabheader1_text: "Папка", modal_tabheader2_text: "Цвет папки", modal_tabheader3_text: "Цвет подсказка", modal_tabheader4_text: "Пользовательские значки", modal_iconpicker_text: "Выбор папки", modal_copytooltipcolor_text: "Используйте те же цвета для сервера папки", modal_colorpicker1_text: "Цвет основной папки", modal_colorpicker2_text: "Цвет вторичной папки", modal_colorpicker3_text: "Цвет подсказка", modal_colorpicker4_text: "Цвет шрифта", modal_customopen_text: "Открытая иконка", modal_customclosed_text: "Закрытая иконка", modal_custompreview_text: "Иконка Просмотр" }; case "uk": //ukrainian return { toast_addserver_text: "${servername} було додано до папки${foldername}.", toast_removeserver_text: "${servername} був вилучений з папки${foldername}.", servercontext_serverfolders_text: "Папки сервера", serversubmenu_createfolder_text: "Створити папки", serversubmenu_removefromfolder_text: "Видалити сервер із папки", foldercontext_unreadfolder_text: "Позначити як прочитане", foldercontext_autounreadfolder_text: "Авто: Позначити як прочитане", foldercontext_foldersettings_text: "Параметри папки", foldercontext_removefolder_text: "Видалити папки", modal_header_text: "Параметри папки", modal_foldername_text: "Ім'я папки", modal_tabheader1_text: "Папки", modal_tabheader2_text: "Колір папки", modal_tabheader3_text: "Колір підказка", modal_tabheader4_text: "Користувальницькі іконки", modal_iconpicker_text: "Вибір папки", modal_copytooltipcolor_text: "Використовуйте ті ж кольори для сервера папки", modal_colorpicker1_text: "Колір основної папки", modal_colorpicker2_text: "Колір вторинного папки", modal_colorpicker3_text: "Колір підказка", modal_colorpicker4_text: "Колір шрифту", modal_customopen_text: "Відкрита ікона", modal_customclosed_text: "Закрита ікона", modal_custompreview_text: "Піктограма попереднього перегляду" }; case "ja": //japanese return { toast_addserver_text: "${servername} がフォルダ${foldername} に追加されました。", toast_removeserver_text: "${servername} がフォルダ${foldername} から削除されました。", servercontext_serverfolders_text: "サーバーフォルダ", serversubmenu_createfolder_text: "フォルダーを作る", serversubmenu_removefromfolder_text: "フォルダからサーバーを削除する", foldercontext_unreadfolder_text: "すべてを読むようにマークする", foldercontext_autounreadfolder_text: "自動: 読み取りとしてマークする", foldercontext_foldersettings_text: "フォルダ設定", foldercontext_removefolder_text: "フォルダを削除する", modal_header_text: "フォルダ設定", modal_foldername_text: "フォルダ名", modal_tabheader1_text: "フォルダ", modal_tabheader2_text: "フォルダの色", modal_tabheader3_text: "ツールチップの色", modal_tabheader4_text: "カスタムアイコン", modal_iconpicker_text: "フォルダの選択", modal_copytooltipcolor_text: "フォルダのサーバーに同じ色を使う", modal_colorpicker1_text: "プライマリフォルダの色", modal_colorpicker2_text: "セカンダリフォルダの色", modal_colorpicker3_text: "ツールチップの色", modal_colorpicker4_text: "フォントの色", modal_customopen_text: "開いたアイコン", modal_customclosed_text: "クローズドアイコン", modal_custompreview_text: "アイコンのプレビュー" }; case "zh-TW": //chinese (traditional) return { toast_addserver_text: "${servername} 已被添加到文件夾${foldername}.", toast_removeserver_text: "${servername} 已從文件夾${foldername} 中刪除.", servercontext_serverfolders_text: "服務器文件夾", serversubmenu_createfolder_text: "創建文件夾", serversubmenu_removefromfolder_text: "從服務器中刪除服務器", foldercontext_unreadfolder_text: "標記為已讀", foldercontext_autounreadfolder_text: "自動: 標記為已讀", foldercontext_foldersettings_text: "文件夾設置", foldercontext_removefolder_text: "刪除文件夾", modal_header_text: "文件夾設置", modal_foldername_text: "文件夾名稱", modal_tabheader1_text: "夾", modal_tabheader2_text: "文件夾顏色", modal_tabheader3_text: "工具提示顏色", modal_tabheader4_text: "自定義圖標", modal_iconpicker_text: "文件夾選擇", modal_copytooltipcolor_text: "對文件夾的服務器使用相同的顏色", modal_colorpicker1_text: "主文件夾顏色", modal_colorpicker2_text: "輔助文件夾顏色", modal_colorpicker3_text: "工具提示顏色", modal_colorpicker4_text: "字體顏色", modal_customopen_text: "打開的圖標", modal_customclosed_text: "封閉的圖標", modal_custompreview_text: "圖標預覽" }; case "ko": //korean return { toast_addserver_text: "${servername} 가 폴더${foldername} 에 추가되었습니다.", toast_removeserver_text: "${servername} 가 폴더${foldername} 에서 제거되었습니다.", servercontext_serverfolders_text: "서버 폴더", serversubmenu_createfolder_text: "폴더 만들기", serversubmenu_removefromfolder_text: "폴더에서 서버 제거", foldercontext_unreadfolder_text: "모두 읽은 상태로 표시", foldercontext_autounreadfolder_text: "자동: 읽은 상태로 표시", foldercontext_foldersettings_text: "폴더 설정", foldercontext_removefolder_text: "폴더 삭제", modal_header_text: "폴더 설정", modal_foldername_text: "폴더 이름", modal_tabheader1_text: "폴더", modal_tabheader2_text: "폴더 색", modal_tabheader3_text: "툴팁 색깔", modal_tabheader4_text: "사용자 정의 아이콘", modal_iconpicker_text: "폴더 선택", modal_copytooltipcolor_text: "폴더의 서버에 대해 동일한 색상을 사용하십시오.", modal_colorpicker1_text: "기본 폴더 색", modal_colorpicker2_text: "보조 폴더 색", modal_colorpicker3_text: "툴팁 색깔", modal_colorpicker4_text: "글꼴 색깔", modal_customopen_text: "열린 아이콘", modal_customclosed_text: "닫힌 아이콘", modal_custompreview_text: "아이콘 미리보기" }; default: //default: english return { toast_addserver_text: "${servername} has been added to the folder${foldername}.", toast_removeserver_text: "${servername} has been removed from the folder${foldername}.", servercontext_serverfolders_text: "Serverfolders", serversubmenu_createfolder_text: "Create Folder", serversubmenu_removefromfolder_text: "Remove Server From Folder", foldercontext_unreadfolder_text: "Mark All As Read", foldercontext_autounreadfolder_text: "Auto: Mark As Read", foldercontext_foldersettings_text: "Foldersettings", foldercontext_removefolder_text: "Delete Folder", modal_header_text: "Foldersettings", modal_foldername_text: "Foldername", modal_tabheader1_text: "Folder", modal_tabheader2_text: "Foldercolor", modal_tabheader3_text: "Tooltipcolor", modal_tabheader4_text: "Custom Icons", modal_iconpicker_text: "Folderchoice", modal_copytooltipcolor_text: "Use same Colors for Servers of the Folder", modal_colorpicker1_text: "Primary Foldercolor", modal_colorpicker2_text: "Secondary Foldercolor", modal_colorpicker3_text: "Tooltipcolor", modal_colorpicker4_text: "Fontcolor", modal_customopen_text: "Open Icon", modal_customclosed_text: "Closed Icon", modal_custompreview_text: "Iconpreview" }; } } }