BetterDiscordAddons/Plugins/ServerFolders/ServerFolders.plugin.js

1706 lines
110 KiB
JavaScript
Raw Normal View History

2019-09-20 22:32:52 +02:00
//META{"name":"ServerFolders","website":"https://github.com/mwittrien/BetterDiscordAddons/tree/master/Plugins/ServerFolders","source":"https://raw.githubusercontent.com/mwittrien/BetterDiscordAddons/master/Plugins/ServerFolders/ServerFolders.plugin.js"}*//
2018-10-11 10:21:26 +02:00
class ServerFolders {
getName () {return "ServerFolders";}
2019-10-27 08:26:08 +01:00
getVersion () {return "6.6.0";}
getAuthor () {return "DevilBro";}
2019-10-08 19:12:48 +02:00
getDescription () {return "Patches Discords native Folders in a way to open Servers within a Folder in a new bar to the right. Also adds a bunch of new features to more easily organize, customize and manage your Folders.";}
2019-01-26 22:45:19 +01:00
2019-09-04 12:34:02 +02:00
constructor () {
2019-02-24 19:52:22 +01:00
this.changelog = {
2019-10-27 08:26:08 +01:00
"fixed":[["Dark Sidebar","Now properly colored with dark sidebar"]]
2019-02-24 19:52:22 +01:00
};
2019-10-08 19:12:48 +02:00
2019-11-14 17:56:26 +01:00
this.patchedModules = {
after: {
"Guilds":["componentDidMount","componentDidUpdate","componentWillUnmount"],
"GuildFolder":["componentDidMount","componentDidUpdate"],
"Guild":["componentDidMount","componentDidUpdate"],
"GuildFolderSettingsModal":"componentDidMount",
"StandardSidebarView":"componentWillUnmount"
}
};
2019-09-04 12:34:02 +02:00
}
initConstructor () {
2019-10-08 19:12:48 +02:00
this.folderStates = {};
this.folderReads = {};
this.guildStates = {};
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
this.css = `
2019-01-24 13:37:08 +01:00
.${this.name}-modal .ui-icon-picker-icon {
2018-10-11 10:21:26 +02:00
position: relative;
2019-10-08 19:12:48 +02:00
margin: 3px 3px;
padding: 3px 3px;
width: 55px;
height: 55px;
2018-10-11 10:21:26 +02:00
border-radius: 12px;
}
2019-01-24 13:37:08 +01:00
.${this.name}-modal .ui-icon-picker-icon .ui-picker-inner {
2019-10-08 19:12:48 +02:00
width: 100%;
height: 100%;
2018-10-11 10:21:26 +02:00
border-radius: 12px;
2019-10-08 19:12:48 +02:00
background-position: center;
background-size: cover;
background-repeat: no-repeat;
2018-10-11 10:21:26 +02:00
}
2019-01-24 13:37:08 +01:00
.${this.name}-modal .ui-icon-picker-icon.selected ${BDFDB.dotCN.hovercardbutton} {
2018-10-11 10:21:26 +02:00
display: none !important;
}
2019-01-24 13:37:08 +01:00
.${this.name}-modal .ui-icon-picker-icon ${BDFDB.dotCN.hovercardbutton} {
2018-10-11 10:21:26 +02:00
position: absolute;
top: -10px;
right: -10px;
}
2019-01-24 13:37:08 +01:00
.${this.name}-modal .ui-icon-picker-icon.preview.nopic .ui-picker-inner {
2019-10-08 19:12:48 +02:00
background: url('data:image/svg+xml; utf8, <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" version="1.1" width="400" height="400"><path d="M40.400 17.178 C 39.850 17.366,38.793 17.538,38.050 17.560 C 33.351 17.699,23.397 24.788,21.381 29.432 C 21.087 30.109,20.566 30.896,20.223 31.181 C 19.880 31.465,19.600 31.866,19.600 32.071 C 19.600 32.276,19.236 33.242,18.792 34.218 C 16.345 39.589,16.345 49.611,18.792 54.982 C 19.236 55.958,19.600 56.918,19.600 57.116 C 19.600 57.314,19.960 57.802,20.400 58.200 C 20.840 58.598,21.200 59.131,21.200 59.385 C 21.200 60.391,25.680 64.942,91.505 130.800 C 128.995 168.310,159.849 199.326,160.068 199.724 C 160.409 200.344,150.950 209.964,93.989 266.924 C 18.798 342.113,19.600 341.292,19.600 343.126 C 19.600 343.283,19.250 344.065,18.822 344.864 C 15.429 351.195,15.958 362.918,19.932 369.440 C 22.094 372.990,27.474 378.800,28.598 378.800 C 28.861 378.800,29.402 379.160,29.800 379.600 C 30.198 380.040,30.703 380.400,30.922 380.400 C 31.141 380.400,32.238 380.831,33.360 381.358 C 34.482 381.886,36.480 382.533,37.800 382.797 C 43.786 383.994,44.323 384.027,47.299 383.386 C 48.895 383.042,51.010 382.619,52.000 382.446 C 52.990 382.274,54.517 381.743,55.394 381.266 C 56.271 380.790,57.188 380.400,57.432 380.400 C 57.676 380.400,58.202 380.040,58.600 379.600 C 58.998 379.160,59.598 378.800,59.932 378.800 C 60.267 378.800,91.725 347.615,129.839 309.500 C 169.057 270.281,199.496 240.145,199.964 240.073 C 200.602 239.975,216.001 255.193,267.495 306.814 C 327.046 366.511,339.531 378.800,340.627 378.800 C 340.798 378.800,341.265 379.097,341.667 379.461 C 345.728 383.136,361.013 384.409,365.685 381.461 C 366.188 381.143,367.024 380.757,367.541 380.602 C 370.583 379.691,376.623 374.200,379.382 369.836 C 385.105 360.785,384.039 346.409,377.039 338.228 C 376.084 337.113,344.846 305.743,307.621 268.517 C 255.329 216.224,239.969 200.647,240.070 200.009 C 240.143 199.545,270.062 169.288,308.216 131.091 C 345.625 93.641,376.723 62.370,377.324 61.600 C 384.286 52.678,385.036 40.621,379.277 30.171 C 376.136 24.469,367.906 18.537,361.668 17.477 C 354.656 16.286,345.095 17.665,341.883 20.331 C 341.567 20.594,340.549 21.318,339.622 21.941 C 338.695 22.563,307.031 53.972,269.259 91.737 C 231.486 129.501,200.330 160.400,200.022 160.400 C 199.714 160.400,168.938 129.869,131.631 92.554 C 56.225 17.131,60.288 21.047,55.200 18.887 C 51.591 17.354,42.836 16.343,40.400 17.178z" fill="rgb(220,43,67)"></path></svg>') center/cover no-repeat;
2018-10-11 10:21:26 +02:00
}
2019-10-09 08:40:29 +02:00
${BDFDB.dotCN.guildfolder}[style*="background-image"] {
background-color: transparent !important;
background-position: center !important;
background-size: cover !important;
background-repeat: no-repeat !important;
transiton: unset !important;
}
${BDFDB.dotCN.guildfolder}[style*="background-image"] ${BDFDB.dotCN.guildfoldericonwrapper},
${BDFDB.dotCN.guildfolderexpandendbackground},
${BDFDB.dotCN.guildfolderexpandedguilds} {
display: none !important;
2018-10-11 10:21:26 +02:00
}
2019-04-25 21:58:21 +02:00
${BDFDB.dotCN.guildupperbadge}.count {
left: 0px;
2018-12-07 19:43:19 +01:00
right: unset;
2018-10-11 10:21:26 +02:00
}
2019-04-25 21:58:21 +02:00
${BDFDB.dotCN.guildouter}.serverfolders-dragpreview {
pointer-events: none !important;
position: absolute !important;
opacity: 0.5 !important;
z-index: 10000 !important;
2018-10-11 10:21:26 +02:00
}
2019-04-25 21:58:21 +02:00
${BDFDB.dotCN.guildouter}.serverfolders-dragpreview,
${BDFDB.dotCN.guildouter}.serverfolders-dragpreview ${BDFDB.dotCN.guildinner},
${BDFDB.dotCN.guildouter}.serverfolders-dragpreview ${BDFDB.dotCNS.guildinner + BDFDB.dotCN.guildiconwrapper},
${BDFDB.dotCN.guildouter}.serverfolders-dragpreview ${BDFDB.dotCNS.guildinner + BDFDB.dotCNS.guildiconwrapper + BDFDB.dotCN.guildicon} {
border-radius: 50% !important;
2019-04-26 22:39:14 +02:00
width: 48px !important;
height: 48px !important;
2018-10-11 10:21:26 +02:00
}
2019-10-14 09:20:36 +02:00
${BDFDB.dotCN.guildouter}.serverfolders-dragpreview ${BDFDB.dotCN.guildpillwrapper} {
display: none !important;
}
2019-04-25 21:58:21 +02:00
${BDFDB.dotCN.guildouter}.serverfolders-dragpreview ${BDFDB.dotCN.guildiconacronym} {
2019-04-26 22:42:15 +02:00
color: white !important;
2019-04-26 22:45:03 +02:00
background-color: #444 !important;
2019-04-26 22:42:15 +02:00
border-radius: 50% !important;
overflow: hidden !important;
2018-10-11 10:21:26 +02:00
}
2018-12-06 20:23:32 +01:00
${BDFDB.dotCN.guildswrapper}.foldercontent {
transition: width .3s linear !important;
2019-09-11 12:14:43 +02:00
left: 72px;
2018-10-11 10:21:26 +02:00
}
2019-04-25 21:58:21 +02:00
${BDFDB.dotCN.guildswrapper}.foldercontent .folderseparatorouter {
2018-10-11 10:21:26 +02:00
margin-top: 10px;
}
${BDFDB.dotCN.guildswrapper}.foldercontent.foldercontentclosed {
width: 0px !important;
2019-09-11 12:14:43 +02:00
}
${BDFDB.dotCN.appcontainer} {
display: flex !important;
}
${BDFDB.dotCN.guildswrapper} {
position: static !important;
contain: unset !important;
}
${BDFDB.dotCN.chatbase} {
position: static !important;
contain: unset !important;
width: 100% !important;
2018-10-11 10:21:26 +02:00
}`;
this.folderContentMarkup =
2019-09-11 12:14:43 +02:00
`<div class="${BDFDB.disCNS.guildswrapper + BDFDB.disCN.guilds} foldercontent foldercontentclosed">
2019-10-20 21:15:32 +02:00
<div class="${BDFDB.disCNS.scrollerwrap + BDFDB.disCNS.guildsscrollerwrap + BDFDB.disCNS.scrollerthemed + BDFDB.disCN.scrollerthemeghosthairline}">
2019-09-11 12:14:43 +02:00
<div class="${BDFDB.disCNS.guildsscroller + BDFDB.disCN.scroller}"></div>
2018-10-11 10:21:26 +02:00
</div>
</div>`;
2019-01-26 22:45:19 +01:00
2019-04-25 21:58:21 +02:00
this.dragPlaceholderMarkup =
2019-06-05 11:13:12 +02:00
`<div class="${BDFDB.disCNS.guildouter + BDFDB.disCN._bdguild} foldercopyplaceholder">
2019-04-25 21:58:21 +02:00
<div class="${BDFDB.disCNS.guildpillwrapper + BDFDB.disCN.guildpill}">
<span class="${BDFDB.disCN.guildpillitem}"></span>
</div>
<div tabindex="0" class="${BDFDB.disCNS.guildcontainer + BDFDB.disCN.guildinner}" role="button">
2019-07-17 13:50:04 +02:00
<svg width="48" height="48" viewBox="0 0 48 48" class="${BDFDB.disCN.guildplaceholdermask}">
<foreignObject mask="url(#svg-mask-squircle)" x="0" y="0" width="48" height="48">
2019-04-25 21:58:21 +02:00
<div class="${BDFDB.disCN.guildplaceholder}"></div>
</foreignObject>
</svg>
</div>
2018-10-11 10:21:26 +02:00
</div>`;
this.folderIcons = [
2019-08-19 11:17:57 +02:00
{openicon:`<path d="M 200,390 H 955 L 795,770 H 200 Z" fill="REPLACE_FILL2"/><path d="M 176.6,811 C 163.9,811 155.1,802.6 155,784.7 V 212.9 C 157.9,190.5 169,179.8 195.9,176 h 246 c 20.3,3.2 34.5,18.7 41,28.6 C 494.9,228.3 492.9,240.4 494,266 l 313.6,1.3 c 17.6,0.4 23.3,3.7 23.3,3.7 8.6,4.2 14.8,10.7 19,19.5 C 856.3,319.5 854,360 854,360 h 108.9 c 4.4,2.4 13.7,1.2 11.8,23.5 L 815.8,789.4 c -2.1,5.2 -12.5,13.6 -18.7,16.1 -6.8,2.7 -18.5,5.5 -23.9,5.5 z M 767,759 897,430 H 360 L 230,759 Z" fill="REPLACE_FILL1"/>`,
2019-10-29 23:12:52 +01:00
closedicon:`<path d="M 175,320 V 790 H 820 V 320 Z" fill="REPLACE_FILL2"/><path d="M 183,811 c -12.2,-0.6 -17.9,-4.8 -21.5,-8.2 C 159.5,801 154.8,792.6 155,779.7 V 215.6 c 3.3,-14.1 9.3,-21.4 15.1,-26.4 7.4,-6.3 16,-11.6 36.7,-13.2 h 237.3 c 23.3,6 32.2,18.7 38.7,28.6 7.6,11.7 9.4,18.6 10.3,41.4 L 494,266 h 313.4 c 16.9,0.1 23.5,5.1 23.5,5.1 8.6,4.2 14.5,10.9 19,19.5 0,0 3.7,7.5 3.1,19.8 V 777.2 c -1.1,9 -4.1,13.7 -4.1,13.7 -4.2,8.6 -10.7,14.8 -19.5,19 L 823.3,811 Z m 602.8,-55 c 2.8,-1.7 6.9,-4.5 8.9,-7.4 2.4,-3.6 5,-10.8 5.4,-24.7 V 362 c -0.2,-10.9 -4.2,-16.3 -4.2,-16.3 -2,-3 -5.9,-6.8 -8.7,-8.6 0,0 -5.8,-3 -12.7,-3.2 h -548.1 c -7.8,0 -13.9,3.6 -13.9,3.6 -3,2 -7.3,6.7 -8.4,17.3 v 386.4 c 2.8,10.4 7.5,16 13.6,17.7 h 544.9 c 11,-0.2 18.4,-1.9 23.3,-3 z" fill="REPLACE_FILL1"/>`},
{openicon:`<path d="M 167,200 h 200 l 50,50 H 829.8 L 830,330 H 970 L 825,779 H 167 Z" fill="REPLACE_FILL2"/><path d="M 184,799 c -10.5,0 -22.3,-5.3 -27,-10 -4.7,-4.7 -9,-15.1 -9,-34 V 212 c 0,-13.3 5,-22 11,-28 4.4,-4.4 15.4,-10 30,-10 h 170.3 l 53.3,53 H 820 c 13.1,0 18.2,4.2 25,10 6.4,5.5 7,14.4 7,31 v 52 h 122.3 c 11.6,0 17.1,3.3 17.1,3.3 2.9,2.9 3.3,4.4 3.3,14.2 0,8.4 -0.9,13.5 -3.8,22.4 L 849,799 Z M 933,360 H 335 l -130,398.1 603.2,1.3 z M 289.7,334.6 c 3,-8.2 8,-14.8 17,-14.8 0,0 506.6,0.2 506.3,0.2 0,-39.8 -12.2,-53 -53,-53 L 403.3,266.7 350,213 H 240 c -37.6,0 -53,10.1 -53,53 v 382.7 z" fill="REPLACE_FILL1"/>`,
2019-08-19 11:17:57 +02:00
closedicon:`<path d="M 173,190 V 771 H 825 V 250 H 420 l -70,-60 z" fill="REPLACE_FILL2"/><path d="M 184.2,799 C 170.3,799 164.3,795.8 157.4,788.9 151.7,783.3 148,774.6 148,754.9 V 211.2 c 0.7,-18.6 6,-21.7 11.9,-27.6 6.8,-6.8 15.5,-9.4 29.3,-9.6 h 170.1 l 53.3,53 h 407.7 c 14.1,0 18.6,2.8 25.3,9.4 6.4,6.4 7.1,13.4 7.1,30.8 v 246.1 247.4 c 0.2,11.8 -1.9,22.1 -7.4,27.6 C 839.7,793.9 831,799 819.4,799 Z M 813,707 V 415 c 0,-36.9 -13.9,-53 -53,-53 H 240 c -38.1,0 -53,11.7 -53,53 v 292 c 0,38.8 11.5,53 53,53 h 520 c 37.8,0 53,-12.1 53,-53 z M 760,267 c 0,0 -228.6,-0.3 -356.7,-0.3 L 350,213 H 240 c -41.6,2.7 -52.2,14.3 -53,53 v 54 h 626 c -0.6,-37.5 -12,-53 -53,-53 z" fill="REPLACE_FILL1"/>`},
{openicon:`<path d="M 307,330 H 970 L 825,779 H 167 Z" fill="REPLACE_FILL2"/><path d="M 189 174 C 174.4 174 163.4 179.6 159 184 C 153 190 148 198.7 148 212 L 148 755 C 148 773.9 152.3 784.3 157 789 C 161.7 793.7 173.5 799 184 799 L 849 799 L 990.8 359.8 C 993.8 350.9 994.7 345.9 994.7 337.4 C 994.7 327.6 994.3 326.2 991.4 323.3 C 991.4 323.3 985.9 320 974.3 320 L 852 320 L 852 268 C 852 251.4 851.4 242.5 845 237 C 838.2 231.2 833.1 227 820 227 L 412.6 227 L 359.3 174 L 189 174 z M 335 360 L 933 360 L 808.2 759.3 L 205 758.1 L 335 360 z" fill="REPLACE_FILL1"/>`,
closedicon:`<path d="M 173,345 V 771 H 825 V 345 Z" fill="REPLACE_FILL2"/><path d="M 189.2 174 C 175.4 174.2 166.7 176.8 159.9 183.6 C 154 189.5 148.7 192.7 148 211.2 L 148 754.9 C 148 774.6 151.7 783.3 157.4 788.9 C 164.3 795.8 170.3 799 184.2 799 L 819.4 799 C 831 799 839.7 793.9 845.2 788.4 C 850.8 782.8 852.9 772.5 852.7 760.8 L 852.7 513.3 L 852.7 267.2 C 852.7 249.8 852 242.8 845.6 236.4 C 838.9 229.7 834.4 227 820.3 227 L 412.6 227 L 359.3 174 L 189.2 174 z M 240 362 L 760 362 C 799.1 362 813 378.1 813 415 L 813 707 C 813 747.9 797.8 760 760 760 L 240 760 C 198.5 760 187 745.8 187 707 L 187 415 C 187 373.7 201.9 362 240 362 z" fill="REPLACE_FILL1"/>`},
2019-10-29 23:12:52 +01:00
{openicon:`<path d="M 167,200 h 200 l 50,50 H 829.8 L 830,330 H 314 L 167,779 Z" fill="REPLACE_FILL2"/><path d="M 189 174 C 174.4 174 163.4 179.6 159 184 C 153 190 148 198.7 148 212 L 148 755 C 148 773.9 152.3 784.3 157 789 C 161.7 793.7 173.5 799 184 799 L 849 799 L 990.8 359.8 C 993.8 350.9 994.7 345.9 994.7 337.4 C 994.7 327.6 994.3 326.2 991.4 323.3 C 991.4 323.3 985.9 320 974.3 320 L 852 320 L 852 268 C 852 251.4 851.4 242.5 845 237 C 838.2 231.2 833.1 227 820 227 L 412.6 227 L 359.3 174 L 189 174 z M 240 213 L 350 213 L 403.3 266.7 L 760 267 C 800.8 267 813 280.2 813 320 C 813.3 320 306.7 319.8 306.7 319.8 C 297.7 319.8 292.7 326.4 289.7 334.6 L 187 648.7 L 187 266 C 187 223.1 202.4 213 240 213 z" fill="REPLACE_FILL1"/>`,
2019-08-19 11:17:57 +02:00
closedicon:`<path d="M 173,190 V 350 H 825 V 250 H 420 l -70,-60 z" fill="REPLACE_FILL2"/><path d="M 189.2 174 C 175.4 174.2 166.7 176.8 159.9 183.6 C 154 189.5 148.7 192.7 148 211.2 L 148 754.9 C 148 774.6 151.7 783.3 157.4 788.9 C 164.3 795.8 170.3 799 184.2 799 L 819.4 799 C 831 799 839.7 793.9 845.2 788.4 C 850.8 782.8 852.9 772.5 852.7 760.8 L 852.7 513.3 L 852.7 267.2 C 852.7 249.8 852 242.8 845.6 236.4 C 838.9 229.7 834.4 227 820.3 227 L 412.6 227 L 359.3 174 L 189.2 174 z M 240 213 L 350 213 L 403.3 266.7 C 531.4 266.7 760 267 760 267 C 801 267 812.4 282.5 813 320 L 187 320 L 187 266 C 187.8 227.3 198.4 215.7 240 213 z" fill="REPLACE_FILL1"/>`},
2019-10-29 23:12:52 +01:00
{openicon:`<path d="M 132,305 H 880 V 750 H 132 Z" fill="REPLACE_FILL2"/><path d="M 135,188 c -5.6,0 -13.9,2.9 -19.8,8.9 C 109.4,203 107,206.8 107,216 c 0,189.7 0,379.3 0,569 0,11.1 1.7,14.8 7,20.2 C 120.5,811.6 125.4,813 135,813 h 717 c 16.7,0 16.7,-1.6 18.6,-6.6 L 981.3,423.4 c 0,-5.8 -1,-6.2 -2.8,-8.1 -1.9,-1.9 -4.3,-2 -11.9,-2 l -691.9,2.1 c -16.4,0 -21.3,11.5 -23.4,17.2 l -80.9,263 -0.2,0 C 159.1,714.4 147,704.3 147,677.2 V 334 h 733 v -26 c 0,-7.7 -1.6,-14.7 -7.6,-19.8 C 866.3,283.1 860.4,280 852,280 H 440 l -20,-82 c -1.2,-2.5 -3.1,-6.8 -5.8,-7.7 0,0 -3,-2.3 -10.2,-2.3 z" fill="REPLACE_FILL1"/>`,
closedicon:`<path d="M 132,305 H 880 V 750 H 132 Z" fill="REPLACE_FILL2"/><path d="M 135,813 c -10.3,0 -14.5,-1.4 -21,-7.8 C 108.7,799.8 107,796.1 107,785 c 0,-189.7 0,-379.3 0,-569 0,-9.2 2.4,-13 8.2,-19.1 C 121.1,190.9 129.4,188 135,188 h 269 c 7.2,0 10.2,2.3 10.2,2.3 2.7,0.9 4.6,5.2 5.8,7.7 l 20,82 h 412 c 8.4,0 14.3,3.1 20.4,8.2 C 878.4,293.3 880,300.3 880,308 v 26 H 147 v 343.2 c 0,27.1 18.1,25.2 21.7,5.4 l 32.7,-277.7 c 0.7,-2.8 2.7,-7.5 5.8,-10.6 C 210.4,391.1 214.5,388 222.7,388 H 852 c 7.9,0 15.9,2.9 20.5,7.5 C 878.3,401.3 880,408.6 880,416 v 369 c 0,6.9 -1.8,14.7 -7.4,19.3 C 866.2,809.6 858.9,813 852,813 Z" fill="REPLACE_FILL1"/>`},
{openicon:`<path d="M 186.3,187 c -20,0 -35.7,7.4 -47.4,19.3 -11.7,11.9 -17.6,25 -17.6,45.7 v 80 l -0.3,416 c 0,10.9 4.6,32.6 16.7,45.1 C 149.8,805.6 168,813 186.3,813 365.7,749.3 880.3,734.5 880.3,734.5 c 0,0 0,-255.4 0,-402.5 0,-16.9 -4.7,-35 -17.2,-47.4 -12.5,-12.4 -30.1,-17.6 -47.8,-17.6 h -310 l -79,-80 z" fill="REPLACE_FILL1"/><path d="m 175.1,810.3 79.1,-393 c 8.3,-23.6 21.8,-42.9 53.1,-43 H 920.6 c 17.7,0 35.9,19.5 33.7,29.3 l -73.7,365.7 c -9,24.8 -11.1,41.3 -51.8,44 H 185.6 c -3.6,0 -6.4,-0.1 -11.1,-0.9 z" fill="REPLACE_FILL2"/>`,
closedicon:`<path d="M 121,252 c 0,-20.7 5.9,-33.8 17.6,-45.7 C 150.3,194.4 166,187 186,187 h 240 l 79,80 -384,113 z" fill="REPLACE_FILL1"/><path d="M 186,813 c -18.4,0 -36.5,-7.4 -48.6,-19.9 C 125.3,780.6 120.7,758.9 120.7,748 L 121,332 c 0,-16.9 7.2,-31.7 18.6,-43.5 C 151,276.7 170.1,267 186,267 h 629 c 17.6,0 35.2,5.3 47.8,17.6 C 875.3,297 880,315.1 880,332 v 416 c 0,14.8 -3.4,36.6 -17,47.9 C 849.5,807.2 830.9,813 815,813 Z" fill="REPLACE_FILL2"/>`},
{openicon:`<path d="M 160,253 h 614 c 14.8,0 29.7,8.6 36.9,15.8 C 819.4,277.3 826,289.4 826,305 v 95 H 160 Z" fill="REPLACE_FILL2"/><path d="M 199,200 c -26.2,0 -33.9,6.5 -41.5,15.6 C 149.8,224.8 147,231.8 147,252 V 386.7 387 c -20.9,0.5 -56.5,-3.5 -70.3,6.9 -2.5,1.9 -5.4,3.2 -8.3,9.8 -6.8,25.6 -0.3,54.8 1.1,70.3 9.1,59.2 69.1,294.7 74.9,310 3.7,9.8 4.6,13.6 10,15 h 689.6 c 6.3,-1.4 11.6,-15 11.6,-15 L 931.8,474 c 2.7,-20 8.3,-54 -0.2,-70.3 -2,-3.5 -6.5,-8.1 -9.3,-9.8 C 902.5,385.1 881.9,387 853,387 852.6,369.4 855,346.8 846.6,333 842.4,326.2 830.5,321.3 826,321.3 V 387 L 173.2,386.7 173,387 v -82 c 0,-14.6 2.8,-25.9 12.4,-35.5 C 195.9,259 207.7,253 225,253 h 201 l -54,-53 z" fill="REPLACE_FILL1"/>`,
closedicon:`<path d="M 160,400 V 253 h 440 v 147 z" fill="REPLACE_FILL2"/><path d="M 186,799 c -24.2,0 -34,-8 -39.7,-13.6 C 140.8,779.9 134,769.1 134,747 V 372 c 0,-21.5 13,-32 13,-32 V 252 c 0,-20.2 2.8,-27.2 10.5,-36.4 C 165.1,206.5 172.8,200 199,200 h 173 l 54,53 H 225 c -17.3,0 -29.1,6 -39.6,16.5 C 175.8,279.1 173,290.4 173,305 l -0.4,19 c 0,0 9.6,-4 20.9,-4 H 494 L 614,200 h 186 c 17.7,0 26.6,7.1 36,14.2 C 846.5,222 852,233.6 852,252 v 495 c 0,16.1 -7.5,30.2 -14.1,36.7 C 831.4,790.2 815.9,799 800,799 Z" fill="REPLACE_FILL1"/>`}
2018-10-11 10:21:26 +02:00
];
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
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."}
}
};
}
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
getSettingsPanel () {
2019-01-22 11:28:32 +01:00
if (!global.BDFDB || typeof BDFDB != "object" || !BDFDB.loaded || !this.started) return;
2019-10-22 19:49:57 +02:00
let settings = BDFDB.DataUtils.get(this, "settings");
2019-10-09 14:18:28 +02:00
let settingshtml = `<div class="${this.name}-settings BDFDB-settings"><div class="${BDFDB.disCNS.titledefault + BDFDB.disCNS.titlesize18 + BDFDB.disCNS.height24 + BDFDB.disCNS.weightnormal + BDFDB.disCN.marginbottom8}">${this.name}</div><div class="BDFDB-settings-inner">`;
2018-10-11 10:21:26 +02:00
for (let key in settings) {
2019-10-09 14:18:28 +02:00
settingshtml += `<div class="${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.directionrow + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCNS.nowrap + BDFDB.disCN.marginbottom8}" style="flex: 1 1 auto;"><h3 class="${BDFDB.disCNS.titledefault + BDFDB.disCNS.marginreset + BDFDB.disCNS.weightmedium + BDFDB.disCNS.titlesize16 + BDFDB.disCNS.height24 + BDFDB.disCN.flexchild}" style="flex: 1 1 auto;">${this.defaults.settings[key].description}</h3><div class="${BDFDB.disCNS.flexchild + BDFDB.disCNS.switchenabled + BDFDB.disCNS.switch + BDFDB.disCNS.switchvalue + BDFDB.disCNS.switchsizedefault + BDFDB.disCNS.switchsize + BDFDB.disCN.switchthemedefault}" style="flex: 0 0 auto;"><input type="checkbox" value="settings ${key}" class="${BDFDB.disCNS.switchinnerenabled + BDFDB.disCN.switchinner} settings-switch"${settings[key] ? " checked" : ""}></div></div>`;
2018-10-11 10:21:26 +02:00
}
2019-10-09 14:18:28 +02:00
settingshtml += `<div class="${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.directionrow + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCNS.nowrap + BDFDB.disCN.marginbottom8}" style="flex: 0 0 auto;"><h3 class="${BDFDB.disCNS.titledefault + BDFDB.disCNS.marginreset + BDFDB.disCNS.weightmedium + BDFDB.disCNS.titlesize16 + BDFDB.disCNS.height24 + BDFDB.disCN.flexchild}" style="flex: 1 1 auto;">Remove all custom Icons.</h3><button type="button" class="${BDFDB.disCNS.flexchild + BDFDB.disCNS.button + BDFDB.disCNS.buttonlookfilled + BDFDB.disCNS.buttoncolorred + BDFDB.disCNS.buttonsizemedium + BDFDB.disCN.buttongrow} removecustom-button" style="flex: 0 0 auto;"><div class="${BDFDB.disCN.buttoncontents}">Remove</div></button></div>`;
2018-10-11 10:21:26 +02:00
settingshtml += `</div></div>`;
2019-01-26 22:45:19 +01:00
2019-10-23 11:10:01 +02:00
let settingspanel = BDFDB.DOMUtils.create(settingshtml);
2018-10-11 10:21:26 +02:00
BDFDB.initElements(settingspanel, this);
2019-10-08 19:12:48 +02:00
2019-10-22 18:55:25 +02:00
BDFDB.ListenerUtils.add(this, settingspanel, "click", ".removecustom-button", () => {
2019-10-30 13:27:14 +01:00
BDFDB.ModalUtils.confirm(this, "Are you sure you want to remove all custom icons?", () => {
2019-10-22 19:49:57 +02:00
BDFDB.DataUtils.remove(this, "customicons");
});
});
2018-10-11 10:21:26 +02:00
return settingspanel;
}
//legacy
load () {}
start () {
2019-02-04 09:13:15 +01:00
if (!global.BDFDB) global.BDFDB = {myPlugins:{}};
if (global.BDFDB && global.BDFDB.myPlugins && typeof global.BDFDB.myPlugins == "object") global.BDFDB.myPlugins[this.getName()] = this;
2019-05-26 13:55:26 +02:00
var libraryScript = document.querySelector('head script#BDFDBLibraryScript');
if (!libraryScript || (performance.now() - libraryScript.getAttribute("date")) > 600000) {
2018-10-11 10:21:26 +02:00
if (libraryScript) libraryScript.remove();
libraryScript = document.createElement("script");
2019-05-26 13:55:26 +02:00
libraryScript.setAttribute("id", "BDFDBLibraryScript");
2018-10-11 10:21:26 +02:00
libraryScript.setAttribute("type", "text/javascript");
2019-10-18 10:56:41 +02:00
libraryScript.setAttribute("src", "https://mwittrien.github.io/BetterDiscordAddons/Plugins/BDFDB.min.js");
2019-01-17 23:48:29 +01:00
libraryScript.setAttribute("date", performance.now());
2019-05-26 13:55:26 +02:00
libraryScript.addEventListener("load", () => {this.initialize();});
2018-10-11 10:21:26 +02:00
document.head.appendChild(libraryScript);
2019-05-26 13:55:26 +02:00
}
else if (global.BDFDB && typeof BDFDB === "object" && BDFDB.loaded) this.initialize();
2019-11-01 10:27:07 +01:00
this.startTimeout = setTimeout(() => {
try {return this.initialize();}
catch (err) {console.error(`%c[${this.getName()}]%c`, "color: #3a71c1; font-weight: 700;", "", "Fatal Error: Could not initiate plugin! " + err);}
}, 30000);
2018-10-11 10:21:26 +02:00
}
initialize () {
2019-01-17 23:48:29 +01:00
if (global.BDFDB && typeof BDFDB === "object" && BDFDB.loaded) {
2019-01-22 11:05:54 +01:00
if (this.started) return;
2019-10-22 18:55:25 +02:00
BDFDB.PluginUtils.init(this);
2019-10-08 19:12:48 +02:00
// REMOVE 08.10.2019
2019-10-22 19:49:57 +02:00
let foldersdata = BDFDB.ObjectUtils.sort(BDFDB.DataUtils.load(this, "folders"), "position");
2019-10-29 23:12:52 +01:00
let newfolders = Object.keys(foldersdata).filter(n => n.indexOf("folder") == -1);
let cleaned = false;
if (newfolders.length) for (let id of newfolders) if (foldersdata[id].icons) {
cleaned = true;
delete foldersdata[id].icons;
}
if (cleaned) {
BDFDB.DataUtils.save(foldersdata, this, "folders");
foldersdata = BDFDB.ObjectUtils.sort(BDFDB.DataUtils.load(this, "folders"), "position");
}
let oldfolders = Object.keys(foldersdata).filter(n => n.indexOf("folder") == 0);
2019-10-30 13:27:14 +01:00
if (oldfolders.length) BDFDB.ModalUtils.confirm(this, `Old ServerFolders data detected!\nFound ${oldfolders.length} old custom folders in the ServerFolders.config.json.\nPress the '${BDFDB.LanguageUtils.LanguageStrings.OKAY}' button to automatically create a native folder for each old folder and to automatically put the servers in them.`, "Convert?", () => {
2019-10-08 19:12:48 +02:00
let oldGuildFolders = Object.assign({}, BDFDB.LibraryModules.FolderStore.guildFolders);
let guildsInFolders = [];
let guildFolders = [];
let guildPositions = [];
let newfoldersdata = {};
for (let folderid in foldersdata) {
2019-10-08 21:09:14 +02:00
let newid = this.generateID("folder");
2019-10-08 19:12:48 +02:00
let olddata = foldersdata[folderid];
2019-10-23 10:03:33 +02:00
let color1 = BDFDB.ColorUtils.convert(olddata.color1, "INT");
2019-10-08 19:12:48 +02:00
guildFolders.push({
guildIds: olddata.servers,
folderId: newid,
folderName: olddata.folderName,
2019-10-14 09:20:36 +02:00
folderColor: color1 != null && color1 != undefined ? color1 : 7506394
2019-10-08 19:12:48 +02:00
});
guildsInFolders = guildsInFolders.concat(olddata.servers);
newfoldersdata[newid] = Object.assign({}, olddata);
delete newfoldersdata[newid].position;
delete newfoldersdata[newid].folderName;
delete newfoldersdata[newid].folderId;
delete newfoldersdata[newid].servers;
delete newfoldersdata[newid].isOpen;
newfoldersdata[newid].autoRead = newfoldersdata[newid].autounread;
delete newfoldersdata[newid].autounread;
newfoldersdata[newid].useCloseIcon = true;
newfoldersdata[newid].muteFolder = false;
}
for (let i in oldGuildFolders) if (oldGuildFolders[i].folderId || !guildsInFolders.includes(oldGuildFolders[i].guildIds[0])) guildFolders.push(Object.assign({}, oldGuildFolders[i]));
for (let i in guildFolders) for (let guildid of guildFolders[i].guildIds) guildPositions.push(guildid);
BDFDB.LibraryModules.SettingsUtils.updateRemoteSettings({guildPositions, guildFolders});
2019-10-22 19:49:57 +02:00
BDFDB.DataUtils.save(newfoldersdata, this, "folders");
2019-10-08 19:12:48 +02:00
});
2019-10-22 18:55:25 +02:00
BDFDB.ModuleUtils.forceAllUpdates(this);
2018-10-11 10:21:26 +02:00
}
2019-11-01 10:14:50 +01:00
else console.error(`%c[${this.getName()}]%c`, "color: #3a71c1; font-weight: 700;", "", "Fatal Error: Could not load BD functions!");
2018-10-11 10:21:26 +02:00
}
stop () {
2019-01-17 23:48:29 +01:00
if (global.BDFDB && typeof BDFDB === "object" && BDFDB.loaded) {
2019-10-22 11:37:23 +02:00
this.stopping = true;
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.remove(this.foldercontent, BDFDB.dotCN.guildswrapper + ".foldercontent");
2019-10-08 19:12:48 +02:00
let modal = document.querySelector(`.${this.name}-modal`);
if (modal) {
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.removeClass(modal, `${this.name}-modal`);
2019-10-08 19:12:48 +02:00
let modalclose = modal.querySelector(BDFDB.dotCN.modalclose);
if (modalclose) modalclose.click();
}
for (let folderinner of document.querySelectorAll(`${BDFDB.dotCNS.guildfolderwrapper + BDFDB.dotCN.guildfolderexpandendbackground} ~ ${BDFDB.dotCNS.guildouter + BDFDB.dotCN.guildinner}`)) {
folderinner.removeEventListener("mouseenter", folderinner.ServerFoldersTooltipListener);
folderinner.removeEventListener("mousedown", folderinner.ServerFoldersClickListener);
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.remove(folderinner.querySelectorAll(`${BDFDB.dotCN.guildupperbadge}.count`));
2019-10-08 19:12:48 +02:00
}
for (let foldericon of document.querySelectorAll(BDFDB.dotCN.guildfolder)) {
foldericon.style.removeProperty("background-image");
foldericon.parentElement.parentElement.style.removeProperty("-webkit-mask");
}
2019-10-22 18:55:25 +02:00
BDFDB.PluginUtils.clear(this);
2018-10-11 10:21:26 +02:00
}
}
onSwitch () {
2019-10-22 20:16:05 +02:00
if (typeof BDFDB === "object" && BDFDB.DataUtils.get(this, "settings", "forceOpenFolder")) {
2019-10-08 19:12:48 +02:00
let folder = this.getFolderOfGuildId(BDFDB.LibraryModules.LastGuildStore.getGuildId());
if (folder && !BDFDB.LibraryModules.FolderUtils.isFolderExpanded(folder.folderId)) BDFDB.LibraryModules.GuildUtils.toggleGuildFolderExpand(folder.folderId);
2018-10-11 10:21:26 +02:00
}
}
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
// begin of own functions
2019-09-11 12:14:43 +02:00
onGuildContextMenu (instance, menu, returnvalue) {
2019-04-18 09:28:20 +02:00
if (document.querySelector(".BDFDB-modal")) return;
2019-11-11 11:11:33 +01:00
if (instance.props.target && instance.props.folderId && instance.props.type == "GUILD_ICON_FOLDER") {
2019-10-08 19:12:48 +02:00
let folderid = instance.props.folderId;
let folder = BDFDB.LibraryModules.FolderStore.getGuildFolderById(folderid);
let data = this.getFolderConfig(folderid);
let muted = data.muteFolder && folder.guildIds.every(guildid => BDFDB.LibraryModules.MutedUtils.isGuildOrCategoryOrChannelMuted(guildid));
if (data.muteFolder != muted) {
data.muteFolder = muted;
2019-10-22 20:16:05 +02:00
BDFDB.DataUtils.save(data, this, "folders", folderid);
2019-10-08 19:12:48 +02:00
}
2019-10-22 19:38:25 +02:00
let [children, index] = BDFDB.ReactUtils.findChildren(returnvalue, {name:"GuildFolderMarkReadItem"});
2019-10-22 18:55:25 +02:00
const autoreaditem = BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ContextMenuToggleItem, {
2019-10-08 19:12:48 +02:00
label: this.labels.foldercontext_autoreadfolder_text,
active: data.autoRead,
action: state => {
data.autoRead = state;
2019-10-22 20:16:05 +02:00
BDFDB.DataUtils.save(data, this, "folders", folderid);
2019-10-08 19:12:48 +02:00
}
});
if (index > -1) children.splice(index + 1, 0, autoreaditem);
else children.push(autoreaditem);
2019-10-22 18:55:25 +02:00
const muteGroup = BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ContextMenuItemGroup, {
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ContextMenuToggleItem, {
2019-10-08 19:12:48 +02:00
label: this.labels.foldercontext_mutefolder_text,
active: muted,
action: state => {
data.muteFolder = state;
2019-10-22 20:16:05 +02:00
BDFDB.DataUtils.save(data, this, "folders", folderid);
2019-10-08 19:12:48 +02:00
for (let guildid of folder.guildIds) if (BDFDB.LibraryModules.MutedUtils.isGuildOrCategoryOrChannelMuted(guildid) != state) BDFDB.LibraryModules.GuildSettingsUtils.updateNotificationSettings(guildid, {muted:state, suppress_everyone:state});
}
})
});
returnvalue.props.children.splice(returnvalue.props.children.length - 1, 0, muteGroup);
2019-10-22 18:55:25 +02:00
const deleteGroup = BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ContextMenuItemGroup, {
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ContextMenuItem, {
2019-10-08 19:12:48 +02:00
label: this.labels.foldercontext_removefolder_text,
danger: true,
2019-11-21 11:38:04 +01:00
action: _ => {
BDFDB.ContextMenuUtils.close(instance);
2019-10-30 13:27:14 +01:00
BDFDB.ModalUtils.confirm(this, `Are you sure you want to remove the folder${folder.folderName ? (" '" + folder.folderName + '"') : ""}?`, () => {this.removeFolder(folderid);});
2019-10-08 19:12:48 +02:00
}
})
});
returnvalue.props.children.push(deleteGroup);
}
2019-11-11 11:11:33 +01:00
else if (instance.props.target && instance.props.guild && instance.props.type == "GUILD_ICON_BAR") {
2019-10-08 19:12:48 +02:00
let guildid = instance.props.guild.id;
let folders = this.getFolders();
let folder = this.getFolderOfGuildId(guildid);
2019-10-09 09:40:15 +02:00
let addtofolderitems = [], openguilds = BDFDB.LibraryModules.FolderStore.getSortedGuilds().filter(n => !n.folderId).map(n => n.guilds[0]);
2019-10-22 18:55:25 +02:00
for (let i = 0; i < folders.length; i++) addtofolderitems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ContextMenuItem, {
2019-10-08 19:12:48 +02:00
label: folders[i].folderName || (this.labels.modal_tabheader1_text + " #" + parseInt(i+1)),
2019-11-21 11:38:04 +01:00
action: _ => {
2019-11-01 10:14:50 +01:00
BDFDB.ContextMenuUtils.close(menu);
2019-10-08 19:12:48 +02:00
this.addGuildToFolder(folders[i].folderId, guildid);
}
2019-09-11 12:14:43 +02:00
}));
2019-10-22 19:38:25 +02:00
let [children, index] = BDFDB.ReactUtils.findChildren(returnvalue, {name:["FluxContainer(MessageDeveloperModeGroup)", "DeveloperModeGroup"]});
2019-10-09 09:40:15 +02:00
const addType = !addtofolderitems.length ? "contextMenuItem" : "contextMenuSubItem";
2019-10-22 18:55:25 +02:00
const itemgroup = BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ContextMenuItemGroup, {
2019-09-11 12:14:43 +02:00
children: [
2019-10-22 18:55:25 +02:00
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ContextMenuSubItem, {
2019-09-11 12:14:43 +02:00
label: this.labels.servercontext_serverfolders_text,
2019-10-08 21:09:14 +02:00
render: folder ? [
2019-10-22 18:55:25 +02:00
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ContextMenuItem, {
2019-09-11 12:14:43 +02:00
label: this.labels.serversubmenu_removefromfolder_text,
danger: true,
2019-11-21 11:38:04 +01:00
action: _ => {
2019-11-01 10:14:50 +01:00
BDFDB.ContextMenuUtils.close(menu);
2019-10-08 20:25:51 +02:00
this.removeGuildFromFolder(folder.folderId, guildid);
2019-09-11 12:14:43 +02:00
}
2019-10-08 21:09:14 +02:00
})
] : [
2019-10-22 18:55:25 +02:00
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ContextMenuItem, {
2019-10-08 21:09:14 +02:00
label: this.labels.serversubmenu_createfolder_text,
2019-10-09 09:40:15 +02:00
disabled: !openguilds.length,
2019-11-21 11:38:04 +01:00
action: _ => {
2019-11-01 10:14:50 +01:00
BDFDB.ContextMenuUtils.close(menu);
2019-10-09 09:40:15 +02:00
this.openFolderCreationMenu(openguilds, guildid);
2019-10-08 21:09:14 +02:00
}
}),
2019-10-22 18:55:25 +02:00
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents[addType.charAt(0).toUpperCase() + addType.slice(1)], {
2019-09-11 12:14:43 +02:00
label: this.labels.serversubmenu_addtofolder_text,
2019-10-09 09:40:15 +02:00
className: `BDFDB-${addType} ${this.name}-${addType} ${this.name}-addtofolder-${addType}`,
2019-09-11 12:14:43 +02:00
disabled: !addtofolderitems.length,
render: addtofolderitems
})
]
})
]
});
2019-09-11 12:14:43 +02:00
if (index > -1) children.splice(index, 0, itemgroup);
else children.push(itemgroup);
2018-10-11 10:21:26 +02:00
}
}
2019-01-26 22:45:19 +01:00
2019-09-11 12:14:43 +02:00
processGuilds (instance, wrapper, returnvalue, methodnames) {
2019-02-16 11:48:39 +01:00
if (methodnames.includes("componentWillUnmount")) {
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.remove(this.foldercontent, BDFDB.dotCN.guildswrapper + ".foldercontent");
2019-10-08 19:12:48 +02:00
delete this.foldercontent;
delete this.foldercontentguilds;
2019-02-16 11:48:39 +01:00
}
if (methodnames.includes("componentDidMount")) {
let process = () => {
if (!wrapper.parentElement.querySelector(BDFDB.dotCN.guildswrapper + ".foldercontent")) {
2019-10-23 11:10:01 +02:00
this.foldercontent = BDFDB.DOMUtils.create(this.folderContentMarkup);
2019-10-27 08:26:08 +01:00
this.updateFolderContentColor(wrapper);
2019-02-16 11:48:39 +01:00
wrapper.parentElement.insertBefore(this.foldercontent, wrapper.nextElementSibling);
2019-09-11 12:14:43 +02:00
this.foldercontentguilds = this.foldercontent.querySelector(BDFDB.dotCN.guildsscroller);
2019-10-08 19:12:48 +02:00
this.toggleFolderContent();
2019-02-16 11:48:39 +01:00
}
};
2019-10-08 19:12:48 +02:00
if (document.querySelector(BDFDB.dotCNS.guildswrapper + BDFDB.dotCN.guildouter + ":not(.copy) " + BDFDB.dotCN.guildiconwrapper)) process();
2019-11-01 11:09:32 +01:00
else BDFDB.TimeUtils.timeout(process, 5000);
2019-02-16 11:48:39 +01:00
}
2019-10-08 19:12:48 +02:00
}
processGuildFolder (instance, wrapper, returnvalue, methodnames) {
if (!this.foldercontentguilds) return;
let state = this.getState(instance);
let data = this.getFolderConfig(state.folderId);
if (methodnames.includes("componentDidMount")) {
if (data.muteFolder) for (let guildid of instance.props.guildIds) if (!BDFDB.LibraryModules.MutedUtils.isGuildOrCategoryOrChannelMuted(guildid)) BDFDB.LibraryModules.GuildSettingsUtils.updateNotificationSettings(guildid, {muted:true, suppress_everyone:true});
}
if (!BDFDB.equals(state, this.folderStates[instance.props.folderId])) {
if (data.autoRead && (state.unread || state.badge > 0)) {
2019-11-01 11:09:32 +01:00
BDFDB.TimeUtils.clear(this.folderReads[state.folderId]);
this.folderReads[state.folderId] = BDFDB.TimeUtils.timeout(() => {
2019-10-22 18:55:25 +02:00
BDFDB.GuildUtils.markAsRead(instance.props.guildIds);
2019-10-08 19:12:48 +02:00
}, 10000);
2019-05-03 17:49:54 +02:00
}
2019-11-01 11:09:32 +01:00
if (state.expanded) BDFDB.TimeUtils.timeout(() => {
2019-10-08 19:12:48 +02:00
for (let guildid of instance.props.guildIds) this.updateGuildInFolderContent(state.folderId, guildid);
2019-10-22 20:23:43 +02:00
if (this.clickedFolder == state.folderId && BDFDB.DataUtils.get(this, "settings", "closeOtherFolders")) for (let openFolderId of BDFDB.LibraryModules.FolderUtils.getExpandedFolders()) if (openFolderId != state.folderId) {
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.remove(this.foldercontent.querySelectorAll(`${BDFDB.dotCN.guildouter}[folderid="${openFolderId}"]`));
2019-10-08 19:12:48 +02:00
BDFDB.LibraryModules.GuildUtils.toggleGuildFolderExpand(openFolderId);
}
this.addSeparator(state.folderId);
2019-10-12 14:45:12 +02:00
this.toggleFolderContent();
2019-10-08 19:12:48 +02:00
});
2019-11-01 11:09:32 +01:00
else BDFDB.TimeUtils.timeout(() => {
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.remove(this.foldercontent.querySelectorAll(`${BDFDB.dotCN.guildouter}[folderid="${state.folderId}"]`));
if (BDFDB.DOMUtils.containsClass(this.foldercontentguilds.firstElementChild, "folderseparatorouter")) BDFDB.DOMUtils.remove(this.foldercontentguilds.firstElementChild);
2019-10-12 14:45:12 +02:00
this.toggleFolderContent();
2019-10-08 19:12:48 +02:00
}, BDFDB.LibraryModules.FolderUtils.getExpandedFolders().size > 0 ? 0 : 300);
this.changeFolder(state.folderId, wrapper);
2019-05-03 17:49:54 +02:00
}
2019-10-08 19:12:48 +02:00
this.folderStates[state.folderId] = state;
}
2019-01-26 22:45:19 +01:00
2019-10-09 10:07:11 +02:00
processGuild (instance, wrapper, returnvalue, methodnames) {
2019-10-08 19:12:48 +02:00
if (!this.foldercontentguilds) return;
2019-11-11 11:11:33 +01:00
if (instance.props.guild) {
2019-10-09 10:07:11 +02:00
if (methodnames.includes("componentDidMount")) {
2019-11-01 11:09:32 +01:00
BDFDB.ListenerUtils.add(this, wrapper, "click", () => {BDFDB.TimeUtils.timeout(() => {
2019-10-12 14:45:12 +02:00
let folder = this.getFolderOfGuildId(instance.props.guild.id);
let folderid = folder ? folder.folderId : null;
2019-10-22 19:49:57 +02:00
let settings = BDFDB.DataUtils.get(this, "settings");
2019-10-12 14:45:12 +02:00
if (settings.closeAllFolders) for (let openFolderId of BDFDB.LibraryModules.FolderUtils.getExpandedFolders()) if (!folderid || openFolderId != folderid || !settings.forceOpenFolder) BDFDB.LibraryModules.GuildUtils.toggleGuildFolderExpand(openFolderId);
else if (folderid && settings.closeTheFolder && !settings.forceOpenFolder && BDFDB.LibraryModules.FolderUtils.isFolderExpanded(folderid)) BDFDB.LibraryModules.GuildUtils.toggleGuildFolderExpand(folderid);
2019-10-09 10:07:11 +02:00
if (settings.closeAllFolders) for (let openFolderId of BDFDB.LibraryModules.FolderUtils.getExpandedFolders()) BDFDB.LibraryModules.GuildUtils.toggleGuildFolderExpand(openFolderId);
else if (settings.closeTheFolder) {
let folder = this.getFolderOfGuildId(instance.props.guild.id);
if (folder && BDFDB.LibraryModules.FolderUtils.isFolderExpanded(folder.folderId)) BDFDB.LibraryModules.GuildUtils.toggleGuildFolderExpand(folder.folderId);
}
})});
}
if (methodnames.includes("componentDidUpdate")) {
let folder = this.getFolderOfGuildId(instance.props.guild.id);
if (folder) {
let state = this.getState(instance);
if (!BDFDB.equals(state, this.guildStates[instance.props.guild.id])) this.updateGuildInFolderContent(folder.folderId, instance.props.guild.id);
}
}
2019-10-08 19:12:48 +02:00
}
}
processGuildFolderSettingsModal (instance, wrapper, returnvalue) {
2019-11-11 11:11:33 +01:00
if (instance.props.folderId) {
2019-10-08 19:12:48 +02:00
let folderid = instance.props.folderId;
let data = this.getFolderConfig(folderid);
wrapper = wrapper.parentElement;
let root = wrapper.querySelector(BDFDB.dotCN.layermodal);
let header = wrapper.querySelector(BDFDB.dotCN.modalheader);
let form = wrapper.querySelector(BDFDB.dotCN.modalsubinner + " form");
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.addClass(root, "BDFDB-modal", `${this.name}-modal`, BDFDB.disCN.layermodalmedium);
BDFDB.DOMUtils.removeClass(root, BDFDB.disCN.layermodalsmall);
2019-10-08 19:12:48 +02:00
if (header) {
2019-11-01 11:09:32 +01:00
BDFDB.TimeUtils.clear(this.settingsModalWait);
2019-10-23 11:10:01 +02:00
header.parentElement.insertBefore(BDFDB.DOMUtils.create(`<div class="${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCNS.nowrap + BDFDB.disCNS.marginbottom8 + BDFDB.disCN.tabbarcontainer}" style="flex: 0 0 auto; padding-right: 12px;"><div class="${BDFDB.disCNS.tabbar + BDFDB.disCN.tabbartop}"><div tab="folder" class="${BDFDB.disCNS.settingsitem + BDFDB.disCN.tabbaritem}">${this.labels.modal_tabheader1_text}</div><div tab="icon" class="${BDFDB.disCNS.settingsitem + BDFDB.disCN.tabbaritem}">${this.labels.modal_tabheader2_text}</div><div tab="tooltip" class="${BDFDB.disCNS.settingsitem + BDFDB.disCN.tabbaritem}">${this.labels.modal_tabheader3_text}</div><div tab="custom" class="${BDFDB.disCNS.settingsitem + BDFDB.disCN.tabbaritem}">${this.labels.modal_tabheader4_text}</div></div></div>`), header.nextElementSibling);
2019-07-03 23:35:52 +02:00
}
2019-10-08 19:12:48 +02:00
if (root && form) {
form.setAttribute("tab", "folder");
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.addClass(form, "tab-content", BDFDB.disCN.marginbottom8);
for (let child of form.childNodes) if (form.firstElementChild != child) BDFDB.DOMUtils.hide(child);
form.appendChild(BDFDB.DOMUtils.create(`<div class="${BDFDB.disCN.marginbottom20}"><h5 class="${BDFDB.disCNS.h5 + BDFDB.disCN.h5defaultmargin}">${this.labels.modal_iconpicker_text}</h5><div class="${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCN.nowrap} icons" style="flex: 1 1 auto;"></div></div>`));
form.appendChild(BDFDB.DOMUtils.create(`<div class="${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCNS.nowrap + BDFDB.disCN.marginbottom8}" style="width: calc(100% - 10px);"><h3 class="${BDFDB.disCNS.titledefault + BDFDB.disCNS.marginreset + BDFDB.disCNS.weightmedium + BDFDB.disCNS.titlesize16 + BDFDB.disCNS.height24 + BDFDB.disCN.flexchild}" style="flex: 1 1 auto;">${this.labels.modal_usecloseicon_text}</h3><div class="${BDFDB.disCNS.flexchild + BDFDB.disCNS.switchenabled + BDFDB.disCNS.switch + BDFDB.disCNS.switchvalue + BDFDB.disCNS.switchsizedefault + BDFDB.disCNS.switchsize + BDFDB.disCN.switchthemedefault}" style="flex: 0 0 auto;"><input type="checkbox" class="${BDFDB.disCNS.switchinnerenabled + BDFDB.disCN.switchinner}" id="input-usecloseicon"></div></div>`));
form.parentElement.appendChild(BDFDB.DOMUtils.create(`<div tab="icon" class="${BDFDB.disCNS.flex + BDFDB.disCNS.vertical + BDFDB.disCNS.justifystart + BDFDB.disCNS.alignstretch + BDFDB.disCNS.nowrap + BDFDB.disCN.marginbottom8} tab-content" style="flex: 1 1 auto;"><div class="${BDFDB.disCN.marginbottom20}"><h5 class="${BDFDB.disCNS.h5 + BDFDB.disCN.h5defaultmargin}">${this.labels.modal_colorpicker1_text}</h5><div class="${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCN.nowrap} swatches" style="flex: 1 1 auto;"></div></div><div class="${BDFDB.disCN.marginbottom20}"><h5 class="${BDFDB.disCNS.h5 + BDFDB.disCN.h5defaultmargin}">${this.labels.modal_colorpicker2_text}</h5><div class="${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCN.nowrap} swatches" style="flex: 1 1 auto;"></div></div></div>`));
form.parentElement.appendChild(BDFDB.DOMUtils.create(`<div tab="tooltip" class="${BDFDB.disCNS.flex + BDFDB.disCNS.vertical + BDFDB.disCNS.justifystart + BDFDB.disCNS.alignstretch + BDFDB.disCNS.nowrap + BDFDB.disCN.marginbottom8} tab-content" style="flex: 1 1 auto;"><div class="${BDFDB.disCNS.flex + BDFDB.disCNS.vertical + BDFDB.disCNS.justifystart + BDFDB.disCNS.alignstart + BDFDB.disCN.nowrap}" style="flex: 1 1 auto;"><div class="${BDFDB.disCN.marginbottom20}"><h5 class="${BDFDB.disCNS.h5 + BDFDB.disCN.h5defaultmargin}">${this.labels.modal_colorpicker3_text}</h5><div class="${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCN.nowrap} swatches" style="flex: 1 1 auto;"></div></div><div class="${BDFDB.disCN.marginbottom20}"><h5 class="${BDFDB.disCNS.h5 + BDFDB.disCN.h5defaultmargin}">${this.labels.modal_colorpicker4_text}</h5><div class="${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCN.nowrap} swatches" style="flex: 1 1 auto;"></div></div><div class="${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCNS.nowrap + BDFDB.disCN.marginbottom8}" style="width: calc(100% - 10px);"><h3 class="${BDFDB.disCNS.titledefault + BDFDB.disCNS.marginreset + BDFDB.disCNS.weightmedium + BDFDB.disCNS.titlesize16 + BDFDB.disCNS.height24 + BDFDB.disCN.flexchild}" style="flex: 1 1 auto;">${this.labels.modal_copytooltipcolor_text}</h3><div class="${BDFDB.disCNS.flexchild + BDFDB.disCNS.switchenabled + BDFDB.disCNS.switch + BDFDB.disCNS.switchvalue + BDFDB.disCNS.switchsizedefault + BDFDB.disCNS.switchsize + BDFDB.disCN.switchthemedefault}" style="flex: 0 0 auto;"><input type="checkbox" class="${BDFDB.disCNS.switchinnerenabled + BDFDB.disCN.switchinner}" id="input-copytooltipcolor"></div></div></div>`));
form.parentElement.appendChild(BDFDB.DOMUtils.create(`<div tab="custom" class="${BDFDB.disCNS.flex + BDFDB.disCNS.vertical + BDFDB.disCNS.justifystart + BDFDB.disCNS.alignstretch + BDFDB.disCNS.nowrap + BDFDB.disCN.marginbottom8} tab-content" style="flex: 1 1 auto;"><div class="${BDFDB.disCN.marginbottom20}"><h5 class="${BDFDB.disCNS.h5 + BDFDB.disCN.h5defaultmargin}">${this.labels.modal_customopen_text}</h5><div class="${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCN.nowrap}" style="flex: 1 1 auto;"><div class="${BDFDB.disCNS.inputwrapper + BDFDB.disCNS.vertical + BDFDB.disCNS.flex2 + BDFDB.disCN.flexchild}" style="flex: 1 1 auto;"><input type="text" option="open" class="${BDFDB.disCNS.inputdefault + BDFDB.disCNS.input + BDFDB.disCN.titlesize16}" placeholder="Url or Filepath"></div><button type="button" class="${BDFDB.disCNS.flexchild + BDFDB.disCNS.button + BDFDB.disCNS.buttonlookfilled + BDFDB.disCNS.buttoncolorbrand + BDFDB.disCNS.buttonsizemedium + BDFDB.disCN.buttongrow} file-navigator" style="flex: 0 0 auto;"><div class="${BDFDB.disCN.buttoncontents}"></div><input type="file" option="open" accept="image/*" style="display:none!important;"></button></div></div><div class="${BDFDB.disCN.marginbottom20}"><h5 class="${BDFDB.disCNS.h5 + BDFDB.disCN.h5defaultmargin}">${this.labels.modal_customclosed_text}</h5><div class="${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCN.nowrap}" style="flex: 1 1 auto;"><div class="${BDFDB.disCNS.inputwrapper + BDFDB.disCNS.vertical + BDFDB.disCNS.flex2 + BDFDB.disCN.flexchild}" style="flex: 1 1 auto;"><input type="text" option="closed" class="${BDFDB.disCNS.inputdefault + BDFDB.disCNS.input + BDFDB.disCN.titlesize16}" placeholder="Url or Filepath"></div><button type="button" class="${BDFDB.disCNS.flexchild + BDFDB.disCNS.button + BDFDB.disCNS.buttonlookfilled + BDFDB.disCNS.buttoncolorbrand + BDFDB.disCNS.buttonsizemedium + BDFDB.disCN.buttongrow} file-navigator" style="flex: 0 0 auto;"><div class="${BDFDB.disCN.buttoncontents}"></div><input type="file" option="closed" accept="image/*" style="display:none!important;"></button></div></div><div class="${BDFDB.disCNS.flex + BDFDB.disCNS.vertical + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCN.nowrap}" style="flex: 1 1 auto;"><h5 class="${BDFDB.disCNS.h5 + BDFDB.disCN.h5defaultmargin}">${this.labels.modal_custompreview_text}</h5></div><div class="${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCNS.nowrap + BDFDB.disCN.marginbottom8}" style="flex: 1 1 auto;"><div class="${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.justifycenter + BDFDB.disCNS.aligncenter + BDFDB.disCN.nowrap}" style="flex: 1 1 auto;"><div class="ui-icon-picker-icon preview nopic open"><div class="ui-picker-inner"></div></div><div class="ui-icon-picker-icon preview nopic closed" style="margin-left: 25px; margin-right: 25px;"><div class="ui-picker-inner"></div></div><div class="ui-icon-picker-icon preview nopic switching"><div class="ui-picker-inner"></div></div></div><button type="button" class="${BDFDB.disCNS.flexchild + BDFDB.disCNS.button + BDFDB.disCNS.buttonlookfilled + BDFDB.disCNS.buttoncolorbrand + BDFDB.disCNS.buttonsizemedium + BDFDB.disCN.buttongrow} btn-add btn-addcustom" style="flex: 0 0 auto;"><div class="${BDFDB.disCN.buttoncontents}"></div></button></div></div>`));
2019-10-08 19:12:48 +02:00
let usecloseiconinput = root.querySelector("#input-usecloseicon");
let copytooltipcolorinput = root.querySelector("#input-copytooltipcolor");
usecloseiconinput.checked = data.useCloseIcon;
copytooltipcolorinput.checked = data.copyTooltipColor;
this.setIcons(form, data.iconID);
BDFDB.setColorSwatches(root, data.color1);
BDFDB.setColorSwatches(root, data.color2);
BDFDB.setColorSwatches(root, data.color3);
BDFDB.setColorSwatches(root, data.color4);
2019-10-22 18:55:25 +02:00
BDFDB.ListenerUtils.addToChildren(root, "change", "input[type='file'][option]", e => {
2019-10-08 19:12:48 +02:00
let input = e.currentTarget, file = input.files[0];
2019-11-01 11:09:32 +01:00
if (file) BDFDB.TimeUtils.timeout(() => {this.fetchCustomIcon(root, input.getAttribute("option"))});
2019-10-08 19:12:48 +02:00
});
2019-10-22 18:55:25 +02:00
BDFDB.ListenerUtils.addToChildren(root, "keyup", "input[type='text'][option]", e => {
2019-10-08 19:12:48 +02:00
if (e.which == 13) this.fetchCustomIcon(root, e.currentTarget.getAttribute("option"));
});
2019-10-22 18:55:25 +02:00
BDFDB.ListenerUtils.addToChildren(root, "click", ".btn-addcustom", () => {
2019-10-08 19:12:48 +02:00
this.saveCustomIcon(root);
});
2019-10-22 18:55:25 +02:00
BDFDB.ListenerUtils.addToChildren(root, "click", BDFDB.dotCNS.modalfooter + BDFDB.dotCN.button, e => {
2019-10-08 19:12:48 +02:00
var olddata = Object.assign({}, data);
var selectedIcon = root.querySelector(".ui-icon-picker-icon.selected");
data.iconID = selectedIcon.getAttribute("value");
data.useCloseIcon = usecloseiconinput.checked;
data.copyTooltipColor = copytooltipcolorinput.checked;
2019-10-23 11:10:01 +02:00
data.color1 = BDFDB.ColorUtils.getSwatchColor(root, 1);
data.color2 = BDFDB.ColorUtils.getSwatchColor(root, 2);
data.color3 = BDFDB.ColorUtils.getSwatchColor(root, 3);
data.color4 = BDFDB.ColorUtils.getSwatchColor(root, 4);
2019-10-08 19:12:48 +02:00
if (!BDFDB.equals(olddata, data)) {
2019-10-22 20:16:05 +02:00
BDFDB.DataUtils.save(data, this, "folders", folderid);
2019-10-29 23:12:52 +01:00
instance.handleColorChange(data.color1 ? BDFDB.ColorUtils.convert(data.color1 && BDFDB.ObjectUtils.is(data.color1) ? data.color1[Object.keys(data.color1)[0]] : data.color1, "INT") : null);
2019-10-08 19:12:48 +02:00
this.changeFolder(folderid);
2019-06-24 17:42:31 +02:00
}
2019-10-08 19:12:48 +02:00
});
}
2019-10-08 19:12:48 +02:00
BDFDB.initElements(wrapper);
2018-10-11 10:21:26 +02:00
}
}
2019-01-26 22:45:19 +01:00
2019-09-11 12:14:43 +02:00
processStandardSidebarView (instance, wrapper, returnvalue) {
2019-10-27 08:26:08 +01:00
if (!this.foldercontent) return;
if (this.SettingsUpdated && this.foldercontent) {this.SettingsUpdated;
2019-10-08 19:12:48 +02:00
this.folderStates = {};
2019-10-22 18:55:25 +02:00
BDFDB.ModuleUtils.forceAllUpdates(this, "GuildFolder");
}
2019-10-27 08:26:08 +01:00
this.updateFolderContentColor();
}
updateFolderContentColor (nativecontent = document.querySelector(BDFDB.dotCN.guildswrapper)) {
if (!nativecontent || !this.foldercontent) return;
BDFDB.toggleClass(this.foldercontent, BDFDB.disCN.themedark, BDFDB.DiscordUtils.getTheme() == BDFDB.disCN.themelight && BDFDB.containsClass(nativecontent, BDFDB.disCN.themedark));
2018-10-11 10:21:26 +02:00
}
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
loadAllIcons () {
let icons = {};
this.folderIcons.forEach((array,i) => {icons[i] = {"openicon":array.openicon,"closedicon":array.closedicon,"customID":null};});
2019-10-22 19:49:57 +02:00
Object.assign(icons, BDFDB.DataUtils.load(this, "customicons"));
2018-10-11 10:21:26 +02:00
return icons;
}
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
fetchCustomIcon (modal, type) {
let successFetchIcon;
let url = modal.querySelector("input[type='text'][option='" + type + "']").value;
2018-10-11 10:21:26 +02:00
if (url.indexOf("http") == 0) {
2019-09-11 12:14:43 +02:00
BDFDB.LibraryRequires.request(url, (error, response, result) => {
2018-10-11 10:21:26 +02:00
if (response) {
let type = response.headers["content-type"];
2018-10-11 10:21:26 +02:00
if (type && type.indexOf("image") > -1) {
successFetchIcon();
return;
}
}
2019-10-22 18:55:25 +02:00
BDFDB.NotificationUtils.toast("Use a valid direct link to an image source. They usually end on something like .png, .jpg or .gif.", {type:"danger"});
2018-10-11 10:21:26 +02:00
});
}
else {
2019-09-11 12:14:43 +02:00
if (BDFDB.LibraryRequires.fs.existsSync(url)) {
BDFDB.LibraryRequires.fs.readFile(url, (error, response) => {
2018-10-11 10:21:26 +02:00
if (!error) {
url = `data:image/png;base64,${response.toString("base64")}`;
successFetchIcon();
}
});
}
else {
2019-10-22 18:55:25 +02:00
BDFDB.NotificationUtils.toast("Could not fetch file. Please make sure the file exists.", {type:"danger"});
2018-10-11 10:21:26 +02:00
}
}
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
successFetchIcon = () => {
let iconpreview = modal.querySelector(".ui-icon-picker-icon.preview." + type);
let iconpreviewinner = iconpreview.querySelector(".ui-picker-inner");
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.removeClass(iconpreview, "nopic");
2018-10-11 10:21:26 +02:00
iconpreview.url = url;
iconpreviewinner.style.setProperty("background-image", `url(${url})`);
2019-01-26 22:45:19 +01:00
let iconpreviewopen = modal.querySelector(".ui-icon-picker-icon.preview.open");
let iconpreviewclosed = modal.querySelector(".ui-icon-picker-icon.preview.closed");
2019-10-23 11:10:01 +02:00
if (!BDFDB.DOMUtils.containsClass(iconpreviewopen, "nopic") && !BDFDB.DOMUtils.containsClass(iconpreviewclosed, "nopic")) {
let iconpreviewswitching = modal.querySelector(".ui-icon-picker-icon.preview.switching");
2019-01-26 22:45:19 +01:00
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");
2019-01-26 22:45:19 +01:00
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.removeClass(iconpreviewswitching, "nopic");
iconpreviewswitchinginner.style.setProperty("background-image", iconpreviewopenimage);
let switching = true;
2019-11-01 11:09:32 +01:00
iconpreviewswitching.switchInterval = BDFDB.TimeUtils.interval(() => {
2019-09-04 12:34:02 +02:00
switching = !switching;
iconpreviewswitchinginner.style.setProperty("background-image", switching ? iconpreviewopenimage : iconpreviewclosedimage);
2018-10-11 10:21:26 +02:00
},1000);
}
};
}
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
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");
2019-10-23 11:10:01 +02:00
if (!BDFDB.DOMUtils.containsClass(iconpreviewopen, "nopic") && !BDFDB.DOMUtils.containsClass(iconpreviewclosed, "nopic") && !BDFDB.DOMUtils.containsClass(iconpreviewswitching, "nopic")) {
let customID = this.generateID("customicon");
2019-10-22 20:16:05 +02:00
BDFDB.DataUtils.save({"openicon":iconpreviewopen.url,"closedicon":iconpreviewclosed.url,customID}, this, "customicons", customID);
modal.querySelectorAll("input[type='text'][option]").forEach((input) => {input.value = "";});
2019-01-26 22:45:19 +01:00
let iconpreviewopeninner = iconpreviewopen.querySelector(".ui-picker-inner");
let iconpreviewclosedinner = iconpreviewclosed.querySelector(".ui-picker-inner");
let iconpreviewswitchinginner = iconpreviewswitching.querySelector(".ui-picker-inner");
2019-01-26 22:45:19 +01:00
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.addClass(iconpreviewopen, "nopic");
iconpreviewopeninner.style.removeProperty("background-image");
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.addClass(iconpreviewclosed, "nopic");
iconpreviewclosedinner.style.removeProperty("background-image");
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.addClass(iconpreviewswitching, "nopic");
iconpreviewswitchinginner.style.removeProperty("background-image");
2019-11-01 11:09:32 +01:00
BDFDB.TimeUtils.clear(iconpreviewswitching.switchInterval);
2019-10-22 18:55:25 +02:00
BDFDB.NotificationUtils.toast(`Custom Icon was added to selection.`, {type:"success"});
2018-12-13 16:48:35 +01:00
this.setIcons(modal, modal.querySelector(".ui-icon-picker-icon.selected").getAttribute("value"));
2018-10-11 10:21:26 +02:00
}
2019-10-22 18:55:25 +02:00
else BDFDB.NotificationUtils.toast(`Add an image for the open and the closed icon.`, {type:"danger"});
2019-01-14 09:38:45 +01:00
}
2019-01-26 22:45:19 +01:00
2019-10-08 19:12:48 +02:00
generateID (prefix) {
2019-10-08 21:09:14 +02:00
if (prefix == "folder") {
let id = Math.floor(Math.random() * 4294967296);
return BDFDB.LibraryModules.FolderStore.guildFolders.every(n => !n.folderId || n.folderId != id) ? id : this.generateID(prefix);
}
else {
2019-10-22 19:49:57 +02:00
let data = BDFDB.DataUtils.load(this, prefix + "s");
2019-10-08 21:09:14 +02:00
let id = prefix + "_" + Math.round(Math.random()*10000000000000000);
return data[id] ? this.generateID(prefix) : id;
}
2019-01-14 09:38:45 +01:00
}
2019-01-26 22:45:19 +01:00
2019-10-08 19:12:48 +02:00
setIcons (modal, selection) {
let wrapper = modal.querySelector(".icons");
if (!wrapper) return;
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.remove(wrapper.childNodes);
2019-01-26 22:45:19 +01:00
2019-10-08 19:12:48 +02:00
let folderIcons = this.loadAllIcons();
for (let id in folderIcons) if (!folderIcons[id].customID) {
folderIcons[id].openicon = this.createBase64SVG(folderIcons[id].openicon);
folderIcons[id].closedicon = this.createBase64SVG(folderIcons[id].closedicon);
}
2019-01-26 22:45:19 +01:00
2019-10-23 11:10:01 +02:00
wrapper.appendChild(BDFDB.DOMUtils.create(`<div class="${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.justifystart + BDFDB.disCNS.alignstretch + BDFDB.disCNS.nowrap + BDFDB.disCN.margintop4}" style="flex: 1 1 auto;"><div class="${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.justifycenter + BDFDB.disCNS.alignstretch + BDFDB.disCN.wrap} ui-icon-picker-row" style="flex: 1 1 auto; display: flex; flex-wrap: wrap; overflow: visible !important;"><div class="ui-icon-picker-icon" value="-1"><div class="ui-picker-inner"><svg aria-hidden="false" width="50" height="50" viewBox="-2 -1 25 25" style="color: black;"><path fill="currentColor" d="M20 7H12L10.553 5.106C10.214 4.428 9.521 4 8.764 4H3C2.447 4 2 4.447 2 5V19C2 20.104 2.895 21 4 21H20C21.104 21 22 20.104 22 19V9C22 7.896 21.104 7 20 7Z"></path></svg></div></div>${Object.getOwnPropertyNames(folderIcons).map(id => `<div class="ui-icon-picker-icon${folderIcons[id].customID ? ' custom' : ''}" value="${id}"><div class="ui-picker-inner" style="background: url(${folderIcons[id].closedicon}) center/cover no-repeat;"></div>${folderIcons[id].customID ? '<div value="' + id + '" class="' + BDFDB.disCN.hovercardbutton + '"></div>' : ''}</div>`).join("")}</div></div>`));
2019-10-08 19:12:48 +02:00
setIcon(wrapper.querySelector(`.ui-icon-picker-icon[value="${folderIcons[selection] ? selection : -1}"]`), false, true);
2019-10-22 18:55:25 +02:00
BDFDB.ListenerUtils.addToChildren(wrapper, "click", ".ui-icon-picker-icon", e => {
2019-10-23 11:10:01 +02:00
if (BDFDB.DOMUtils.containsClass(e.target, BDFDB.disCN.hovercardbutton)) return;
2019-10-08 19:12:48 +02:00
setIcon(wrapper.querySelector(".ui-icon-picker-icon.selected"), false, false);
setIcon(e.currentTarget, true, true);
});
2019-10-22 18:55:25 +02:00
BDFDB.ListenerUtils.addToChildren(wrapper, "click", BDFDB.dotCN.hovercardbutton, e => {
2019-10-23 11:10:01 +02:00
if (BDFDB.DOMUtils.containsClass(e.currentTarget.parentElement, "selected")) return;
2019-10-22 20:16:05 +02:00
BDFDB.DataUtils.remove(this, "customicons", e.currentTarget.getAttribute("value"));
2019-10-08 19:12:48 +02:00
e.currentTarget.parentElement.remove();
2019-10-22 18:55:25 +02:00
BDFDB.NotificationUtils.toast(`Custom Icon was deleted.`, {type:"success"});
2019-01-14 09:38:45 +01:00
});
2019-10-22 18:55:25 +02:00
BDFDB.ListenerUtils.addToChildren(wrapper, "mouseenter", ".ui-icon-picker-icon", e => {
2019-10-08 19:12:48 +02:00
setIcon(e.currentTarget, true);
2019-10-22 18:55:25 +02:00
if (e.currentTarget.getAttribute("value") == -1) BDFDB.TooltipUtils.create(e.currentTarget, BDFDB.LanguageUtils.LanguageStrings.DEFAULT, {type:"top"});
});
2019-10-22 18:55:25 +02:00
BDFDB.ListenerUtils.addToChildren(wrapper, "mouseleave", ".ui-icon-picker-icon", e => {
2019-10-08 19:12:48 +02:00
setIcon(e.currentTarget, false);
});
2019-01-26 22:45:19 +01:00
2019-10-08 19:12:48 +02:00
function setIcon (icon, hover, enable) {
if (!icon) return;
let id = icon.getAttribute("value");
2019-10-23 11:10:01 +02:00
if (enable != undefined) BDFDB.DOMUtils.toggleClass(icon, "selected", enable);
2019-10-08 19:12:48 +02:00
if (hover) {
if (folderIcons[id]) icon.querySelector(".ui-picker-inner").style.setProperty("background-image", `url(${folderIcons[id].openicon})`);
2019-10-23 11:10:01 +02:00
if (BDFDB.DOMUtils.containsClass(icon, "selected")) icon.style.setProperty("background-color", "rgb(255,255,255,0.2)");
2019-10-08 19:12:48 +02:00
else icon.style.setProperty("background-color", "rgb(255,255,255,0.1)");
}
else {
if (folderIcons[id]) icon.querySelector(".ui-picker-inner").style.setProperty("background-image", `url(${folderIcons[id].closedicon})`);
2019-10-23 11:10:01 +02:00
if (BDFDB.DOMUtils.containsClass(icon, "selected")) icon.style.setProperty("background-color", "rgb(255,255,255,0.2)");
2019-10-08 19:12:48 +02:00
else icon.style.removeProperty("background-color");
}
2019-05-03 17:49:54 +02:00
}
}
2019-01-26 22:45:19 +01:00
2019-10-08 19:12:48 +02:00
getState (instance) {
let state = {};
for (let key in instance.props) {
if (typeof instance.props[key] != "object" && typeof instance.props[key] != "function") state[key] = instance.props[key];
else if (Array.isArray(instance.props[key])) state[key] = instance.props[key].length;
2019-04-25 21:58:21 +02:00
}
2019-10-08 19:12:48 +02:00
return state;
2019-04-25 21:58:21 +02:00
}
2019-10-08 19:12:48 +02:00
getFolders () {
let found = [], folders = Object.assign({}, BDFDB.LibraryModules.FolderStore.guildFolders);
for (let pos in folders) if (folders[pos].folderId) found.push(Object.assign({}, folders[pos]));
return found;
}
2019-10-08 19:12:48 +02:00
getFolderOfGuildId (guildid) {
if (!guildid) return null;
for (let folder of BDFDB.LibraryModules.FolderStore.guildFolders) if (folder.folderId && folder.guildIds.includes(guildid)) return folder;
}
2019-10-08 19:12:48 +02:00
getFolderConfig (folderid) {
let folder = BDFDB.LibraryModules.FolderStore.getGuildFolderById(folderid) || {};
2019-10-29 23:12:52 +01:00
let data = BDFDB.DataUtils.load(this, "folders", folderid) || {
2019-10-08 19:12:48 +02:00
iconID: "-1",
muteFolder: false,
autoRead: false,
copyTooltipColor: false,
useCloseIcon: true,
color1: null,
color2: ["255","255","255"],
color3: null,
color4: null
};
2019-10-29 23:12:52 +01:00
if (!data.color1) data.color1 = BDFDB.ColorUtils.convert(folder.folderColor, "RGBCOMP") || ["0","0","0"];
else if (folder.folderColor && !BDFDB.ColorUtils.compare(folder.folderColor, BDFDB.ColorUtils.convert(BDFDB.ObjectUtils.is(data.color1) ? data.color1[Object.keys(data.color1)[0]] : data.color1, "INT"))) {
data.color1 = BDFDB.ColorUtils.convert(folder.folderColor, "RGBCOMP");
BDFDB.DataUtils.save(data, this, "folders", folderid);
}
return data;
}
2019-01-26 22:45:19 +01:00
toggleFolderContent (forceOpenClose) {
2019-10-08 19:12:48 +02:00
if (!this.foldercontentguilds) return;
forceOpenClose = forceOpenClose === undefined ? BDFDB.LibraryModules.FolderUtils.getExpandedFolders().size > 0 : forceOpenClose;
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.toggleClass(this.foldercontent, "foldercontentopen", forceOpenClose);
BDFDB.DOMUtils.toggleClass(this.foldercontent, "foldercontentclosed", !forceOpenClose);
BDFDB.DOMUtils.toggleClass(document.body, "foldercontentopened", forceOpenClose);
}
2019-10-08 19:12:48 +02:00
changeFolder (folderid, wrapper) {
2019-10-22 18:55:25 +02:00
wrapper = wrapper || BDFDB.FolderUtils.getDiv(folderid);
2019-10-08 19:12:48 +02:00
if (wrapper) {
let folderinner = wrapper.querySelector(`${BDFDB.dotCN.guildfolderexpandendbackground} ~ ${BDFDB.dotCNS.guildouter + BDFDB.dotCN.guildinner}`);
let foldericon = wrapper.querySelector(BDFDB.dotCN.guildfolder);
if (folderinner && foldericon) {
let folder = BDFDB.LibraryModules.FolderStore.getGuildFolderById(folderid);
let data = this.getFolderConfig(folderid);
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.remove(folderinner.querySelectorAll(`${BDFDB.dotCN.guildupperbadge}.count`));
2019-10-08 19:12:48 +02:00
foldericon.parentElement.parentElement.style.removeProperty("-webkit-mask");
2019-10-22 20:16:05 +02:00
if (BDFDB.DataUtils.get(this, "settings", "showCountBadge")) {
2019-10-23 11:10:01 +02:00
folderinner.appendChild(BDFDB.DOMUtils.create(`<div class="${BDFDB.disCN.guildupperbadge} count" style="opacity: 1; transform: translate(0px, 0px);"><div class="${BDFDB.disCN.guildbadgenumberbadge}" style="background-color: rgb(114, 137, 218); width: ${folder.guildIds.length > 99 ? 28 : (folder.guildIds.length > 9 ? 22 : 16)}px; padding-right: ${folder.guildIds.length > 99 ? 0 : (folder.guildIds.length > 9 ? 0 : 1)}px;">${folder.guildIds.length}</div></div>`));
2019-10-08 19:12:48 +02:00
let width = folder.guildIds.length > 99 ? 36 : (folder.guildIds.length > 9 ? 30 : 24);
2019-10-22 18:55:25 +02:00
foldericon.parentElement.parentElement.style.setProperty("-webkit-mask", `url(data:image/svg+xml;base64,${btoa(`<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" fill="black" x="0" y="0" width="48" height="48"><path d="M ${width-7} 0 C ${width-5} 2 ${width-4} 5 ${width-4} 8 C ${width-4} ${width/1.8+3} 15 20 8 20 C 5 20 2 19 0 17 L 0 50 L 50 50 L 50 0 L 17 0 z"></path></svg>`)}) center/cover no-repeat`);
2019-02-27 18:35:06 +01:00
}
2019-10-08 19:12:48 +02:00
let icontype = BDFDB.LibraryModules.FolderUtils.isFolderExpanded(folderid) ? "openicon" : "closedicon";
2019-10-29 23:12:52 +01:00
let folderIcons = this.loadAllIcons();
let icon = folderIcons[data.iconID] ? (!folderIcons[data.iconID].customID ? this.createBase64SVG(folderIcons[data.iconID][icontype], data.color1, data.color2) : folderIcons[data.iconID][icontype]) : null;
2019-10-08 19:12:48 +02:00
if (icon) foldericon.style.setProperty("background-image", `url(${icon})`, "important");
else foldericon.style.removeProperty("background-image");
folderinner.removeEventListener("mouseenter", folderinner.ServerFoldersTooltipListener);
folderinner.removeEventListener("mousedown", folderinner.ServerFoldersClickListener);
if (data.color3 || data.color4) {
2019-10-22 18:55:25 +02:00
var isgradient3 = data.color3 && BDFDB.ObjectUtils.is(data.color3);
var isgradient4 = data.color4 && BDFDB.ObjectUtils.is(data.color4);
2019-10-23 10:03:33 +02:00
var bgColor = data.color3 ? (!isgradient3 ? BDFDB.ColorUtils.convert(data.color3, "RGBA") : BDFDB.ColorUtils.createGradient(data.color3)) : "";
var fontColor = data.color4 ? (!isgradient4 ? BDFDB.ColorUtils.convert(data.color4, "RGBA") : BDFDB.ColorUtils.createGradient(data.color4)) : "";
2019-10-22 18:55:25 +02:00
var folderName = folder.folderName || BDFDB.ReactUtils.getValue(wrapper, "return.stateNode.props.defaultFolderName");
2019-10-08 19:12:48 +02:00
folderinner.ServerFoldersTooltipListener = () => {
2019-10-23 11:10:01 +02:00
BDFDB.TooltipUtils.create(folderinner, isgradient4 ? `<span style="pointer-events: none; -webkit-background-clip: text !important; color: transparent !important; background-image: ${fontColor} !important;">${BDFDB.StringUtils.htmlEscape(folderName)}</span>` : folderName, {type:"right", selector:"ServerFolders-tooltip", style:`${isgradient4 ? '' : `color: ${fontColor} !important; `}background: ${bgColor} !important; border-color: ${isgradient3 ? BDFDB.ColorUtils.convert(data.color3[0], "RGBA") : bgColor} !important;`, html:isgradient3, hide:true});
2019-10-08 19:12:48 +02:00
};
folderinner.addEventListener("mouseenter", folderinner.ServerFoldersTooltipListener);
}
folderinner.ServerFoldersClickListener = () => {
2019-11-01 11:09:32 +01:00
BDFDB.TimeUtils.clear(this.clickedFolderTimeout);
2019-10-08 19:12:48 +02:00
this.clickedFolder = folderid;
2019-11-01 11:09:32 +01:00
this.clickedFolderTimeout = BDFDB.TimeUtils.timeout(() => {
2019-10-08 19:12:48 +02:00
delete this.clickedFolderTimeout;
}, 3000);
};
folderinner.addEventListener("mousedown", folderinner.ServerFoldersClickListener);
2019-03-29 19:50:03 +01:00
}
2018-10-11 10:21:26 +02:00
}
}
2019-01-26 22:45:19 +01:00
2019-10-08 19:12:48 +02:00
updateGuildInFolderContent (folderid, guildid) {
if (!this.foldercontentguilds || !folderid || !guildid) return;
let guild = BDFDB.LibraryModules.GuildStore.getGuild(guildid);
2019-10-24 09:09:48 +02:00
let oldCopy = this.foldercontentguilds.querySelector(`.copy[guildid="${guildid}"]`);
2019-10-08 19:12:48 +02:00
if (guild) {
let newCopy = this.createCopyOfServer(folderid, guildid);
2019-10-24 09:09:48 +02:00
if (newCopy) {
if (oldCopy) this.foldercontentguilds.insertBefore(newCopy, oldCopy);
else {
let folder = BDFDB.LibraryModules.FolderStore.getGuildFolderById(folderid);
let position = folder.guildIds.indexOf(guildid);
let siblingId = position > -1 ? folder.guildIds[folder.guildIds.indexOf(guildid) + 1] : null;
let insertNode = siblingId ? this.foldercontentguilds.querySelector(`[guildid="${siblingId}"][folderid="${folderid}"]`) : null;
if (!insertNode) {
let sameFolderEles = this.foldercontentguilds.querySelectorAll(`[folderid="${folderid}"]`);
insertNode = sameFolderEles.length > 0 ? sameFolderEles[sameFolderEles.length - 1].nextSibling : null;
}
this.foldercontentguilds.insertBefore(newCopy, insertNode);
2019-10-08 19:12:48 +02:00
}
2019-10-24 09:09:48 +02:00
if (BDFDB.DOMUtils.containsClass(this.foldercontentguilds.firstElementChild, "folderseparatorouter")) BDFDB.DOMUtils.remove(this.foldercontentguilds.firstElementChild);
2018-10-11 10:21:26 +02:00
}
2019-10-08 19:12:48 +02:00
}
2019-10-24 09:09:48 +02:00
BDFDB.DOMUtils.remove(oldCopy);
2019-10-08 19:12:48 +02:00
}
addSeparator (folderid) {
if (!this.foldercontentguilds) return;
2019-10-23 11:10:01 +02:00
if (!this.foldercontent.querySelector(`.folderseparatorouter[folderid="${folderid}"]`) && BDFDB.DataUtils.get(this, "settings", "addSeparators")) this.foldercontentguilds.insertBefore(BDFDB.DOMUtils.create(`<div class="${BDFDB.disCNS.guildouter + BDFDB.disCN._bdguildseparator} folderseparatorouter" folderid="${folderid}"><div class="${BDFDB.disCN.guildseparator} folderseparator"></div></div>`), this.foldercontentguilds.querySelectorAll(`[folderid="${folderid}"]`)[0]);
if (BDFDB.DOMUtils.containsClass(this.foldercontentguilds.firstElementChild, "folderseparatorouter")) BDFDB.DOMUtils.remove(this.foldercontentguilds.firstElementChild);
2019-10-08 19:12:48 +02:00
}
createBase64SVG (paths, color1 = "#000000", color2 = "#FFFFFF") {
if (paths.indexOf("<path ") != 0) return paths;
2019-10-22 18:55:25 +02:00
let isgradient1 = color1 && BDFDB.ObjectUtils.is(color1);
let isgradient2 = color1 && BDFDB.ObjectUtils.is(color2);
2019-10-08 19:12:48 +02:00
let svg = `<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000" viewBox="-60 -50 1100 1100">`;
if (isgradient1) {
svg += `<linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%">`;
for (let pos of Object.keys(color1).sort()) svg += `<stop offset="${pos * 100}%" style="stop-color: ${color1[pos]};"></stop>`;
svg += `</linearGradient>`;
2018-10-11 10:21:26 +02:00
}
2019-10-08 19:12:48 +02:00
if (isgradient2) {
svg += `<linearGradient id="grad2" x1="0%" y1="0%" x2="100%" y2="0%">`;
for (let pos of Object.keys(color2).sort()) svg += `<stop offset="${pos * 100}%" style="stop-color: ${color2[pos]};"></stop>`;
svg += `</linearGradient>`;
}
2019-10-23 10:03:33 +02:00
svg += `${paths.replace("REPLACE_FILL1", isgradient1 ? "url(#grad1)" : BDFDB.ColorUtils.convert(color1, "RGBA")).replace("REPLACE_FILL2", isgradient2 ? "url(#grad2)" : BDFDB.ColorUtils.convert(color2, "RGBA"))}</svg>`;
2019-10-08 19:12:48 +02:00
return `data:image/svg+xml;base64,${btoa(svg)}`;
2018-10-11 10:21:26 +02:00
}
2019-01-26 22:45:19 +01:00
2019-10-08 19:12:48 +02:00
createCopyOfServer (folderid, guildid) {
if (!folderid || !guildid) return;
let guild = BDFDB.LibraryModules.GuildStore.getGuild(guildid);
2019-10-22 18:55:25 +02:00
let guilddiv = BDFDB.GuildUtils.getDiv(guildid);
let props = BDFDB.ReactUtils.getValue(guilddiv, "return.stateNode.props");
2019-10-08 19:12:48 +02:00
if (!guild || !guilddiv || !props) return;
let guildcopy = guilddiv.cloneNode(true);
2019-04-25 21:58:21 +02:00
let guildcopyinner = guildcopy.querySelector(BDFDB.dotCN.guildcontainer);
2019-04-26 22:39:14 +02:00
let guildiconwrapper = guildcopy.querySelector(BDFDB.dotCN.guildiconwrapper);
2019-06-01 09:59:49 +02:00
let guildicon = guildcopy.querySelector(BDFDB.dotCN.guildicon);
2019-04-26 22:39:14 +02:00
let guildpillitem = guildcopy.querySelector(BDFDB.dotCN.guildpillitem);
2019-09-19 12:37:33 +02:00
if (!guildpillitem) {
2019-10-23 11:10:01 +02:00
guildpillitem = BDFDB.DOMUtils.create(`<div class="${BDFDB.disCNS.guildpillwrapper + BDFDB.disCN.guildpill}"><span class="${BDFDB.disCN.guildpillitem}" style="opacity: 0; height: 8px; transform: translate3d(0px, 0px, 0px);"></span></div>`);
2019-09-19 12:37:33 +02:00
guildcopy.insertBefore(guildpillitem, guildcopy.firstElementChild);
guildpillitem = guildpillitem.firstElementChild;
}
2019-10-08 19:12:48 +02:00
guildcopy.setAttribute("guildid", guildid);
guildcopy.setAttribute("folderid", folderid);
2019-04-26 22:39:14 +02:00
guildiconwrapper.style.setProperty("border-radius", props.selected ? "30%" : "50%");
guildiconwrapper.style.setProperty("overflow", "hidden");
2019-10-08 19:12:48 +02:00
2019-04-26 22:39:14 +02:00
guildpillitem.style.setProperty("opacity", props.selected ? 1 : (props.unread ? 0.7 : 0));
guildpillitem.style.setProperty("height", props.selected ? "40px" : "8px");
guildpillitem.style.setProperty("transform", "translate3d(0px, 0px, 0px)");
2019-10-08 19:12:48 +02:00
guildcopy.querySelector("mask").setAttribute("id", "SERVERFOLDERSCOPY" + guildid);
2019-04-26 22:39:14 +02:00
guildcopy.querySelector("mask path").setAttribute("d", "M0 0 l50 0l0 50l-50 0l0 -50Z");
2019-10-08 19:12:48 +02:00
guildcopy.querySelector("foreignObject").setAttribute("mask", "url(#SERVERFOLDERSCOPY" + guildid + ")");
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.addClass(guildcopy, "copy");
BDFDB.DOMUtils.show(guildcopy);
2019-10-08 19:12:48 +02:00
let pillvisible = guildpillitem && guildpillitem.style.getPropertyValue("opacity") != 0;
let borderRadius = new BDFDB.LibraryModules.AnimationUtils.Value(0);
borderRadius
.interpolate({
inputRange: [0, 1],
outputRange: [50, 30]
})
.addListener((value) => {
guildiconwrapper.style.setProperty("border-radius", `${value.value}%`);
});
let pillHeight = new BDFDB.LibraryModules.AnimationUtils.Value(0);
pillHeight
.interpolate({
inputRange: [0, 1],
outputRange: [8, 20]
})
.addListener((value) => {
if (guildpillitem) guildpillitem.style.setProperty("height", `${value.value}px`);
});
let pillOpacity = new BDFDB.LibraryModules.AnimationUtils.Value(0);
pillOpacity
.interpolate({
inputRange: [0, 1],
outputRange: [0, 0.7]
})
.addListener((value) => {
if (guildpillitem) guildpillitem.style.setProperty("opacity", `${value.value}`);
});
let animate = (v) => {
BDFDB.LibraryModules.AnimationUtils.parallel([
BDFDB.LibraryModules.AnimationUtils.timing(borderRadius, {toValue: v, duration: 200}),
BDFDB.LibraryModules.AnimationUtils.spring(pillHeight, {toValue: v, friction: 5})
]).start();
};
let animate2 = (v) => {
BDFDB.LibraryModules.AnimationUtils.parallel([
BDFDB.LibraryModules.AnimationUtils.timing(pillOpacity, {toValue: v, duration: 200}),
]).start();
};
2019-04-25 21:58:21 +02:00
guildcopyinner.addEventListener("mouseenter", () => {
2019-10-24 09:09:48 +02:00
if (!BDFDB.LibraryModules.GuildStore.getGuild(guildid)) return BDFDB.DOMUtils.remove(guildcopy);
2019-10-23 11:10:01 +02:00
let EditServers = BDFDB.BDUtils.getPlugin("EditServers");
2019-10-08 19:12:48 +02:00
let ESdata = EditServers ? EditServers.getGuildData(guildid, guildcopyinner) : null;
if (ESdata && (ESdata.name || ESdata.color3 || ESdata.color4)) EditServers.changeTooltip(guild, guildcopyinner, "right");
2019-02-13 19:57:35 +01:00
else {
2019-10-22 20:16:05 +02:00
let folderData = BDFDB.DataUtils.load(this, "folders", folderid) || {};
2019-08-19 11:17:57 +02:00
let color3 = folderData.copyTooltipColor ? folderData.color3 : null;
let color4 = folderData.copyTooltipColor ? folderData.color4 : null;
2019-10-22 18:55:25 +02:00
let isgradient3 = color3 && BDFDB.ObjectUtils.is(color3);
let isgradient4 = color4 && BDFDB.ObjectUtils.is(color4);
2019-10-23 10:03:33 +02:00
let bgColor = color3 ? (!isgradient3 ? BDFDB.ColorUtils.convert(color3, "RGBA") : BDFDB.ColorUtils.createGradient(color3)) : "";
let fontColor = color4 ? (!isgradient4 ? BDFDB.ColorUtils.convert(color4, "RGBA") : BDFDB.ColorUtils.createGradient(color4)) : "";
2019-10-23 11:10:01 +02:00
BDFDB.TooltipUtils.create(guildcopyinner, isgradient4 ? `<span style="pointer-events: none; -webkit-background-clip: text !important; color: transparent !important; background-image: ${fontColor} !important;">${BDFDB.StringUtils.htmlEscape(guild.name)}</span>` : guild.name, {type:"right", selector:"guild-folder-tooltip", style:`${isgradient4 ? '' : 'color: ' + fontColor + ' !important; '}background: ${bgColor} !important; border-color: ${isgradient3 ? BDFDB.ColorUtils.convert(color3[0], "RGBA") : bgColor} !important;`, html:isgradient3, hide:true});
2019-02-13 19:57:35 +01:00
}
2019-10-08 19:12:48 +02:00
if (guildicon && guildicon.src && guild.icon && guild.icon.startsWith("a_") && guild.features.has("ANIMATED_ICON") && guildicon.src.includes("discordapp.com/icons/")) {
2019-06-09 15:38:22 +02:00
guildicon.src = guildicon.src.replace(".webp", ".gif");
}
2019-10-08 19:12:48 +02:00
pillvisible = guildpillitem && guildpillitem.style.getPropertyValue("opacity") != 0;
if (BDFDB.LibraryModules.LastGuildStore.getGuildId() != guildid) {
animate(1);
if (!pillvisible) animate2(1);
}
2019-06-01 09:59:49 +02:00
});
guildcopyinner.addEventListener("mouseleave", () => {
2019-10-23 11:10:01 +02:00
if (guildicon && guildicon.src && guild.icon && guild.icon.startsWith("a_") && guild.features.has("ANIMATED_ICON") && guildicon.src.includes("discordapp.com/icons/") && !BDFDB.ReactUtils.getValue(BDFDB.BDUtils.getPlugin("AutoPlayGifs", true), "settings.guildList")) {
2019-06-09 15:38:22 +02:00
guildicon.src = guildicon.src.replace(".gif", ".webp");
}
2019-10-08 19:12:48 +02:00
if (BDFDB.LibraryModules.LastGuildStore.getGuildId() != guildid) {
animate(0);
if (!pillvisible) animate2(0);
}
});
guildcopy.addEventListener("click", e => {
2019-10-22 18:55:25 +02:00
BDFDB.ListenerUtils.stopEvent(e);
2019-11-15 12:06:12 +01:00
if (BDFDB.InternalData.pressedKeys.includes(46)) this.removeGuildFromFolder(folderid, guildid);
else {
2019-10-08 19:12:48 +02:00
BDFDB.LibraryModules.GuildUtils.transitionToGuildSync(guild.id);
2019-10-22 19:49:57 +02:00
let settings = BDFDB.DataUtils.get(this, "settings");
2019-10-12 14:45:12 +02:00
if (settings.closeAllFolders) for (let openFolderId of BDFDB.LibraryModules.FolderUtils.getExpandedFolders()) if (openFolderId != folderid || !settings.forceOpenFolder) BDFDB.LibraryModules.GuildUtils.toggleGuildFolderExpand(openFolderId);
else if (settings.closeTheFolder && !settings.forceOpenFolder && BDFDB.LibraryModules.FolderUtils.isFolderExpanded(folderid)) BDFDB.LibraryModules.GuildUtils.toggleGuildFolderExpand(folderid);
}
});
guildcopy.addEventListener("contextmenu", e => {
2019-10-22 18:55:25 +02:00
BDFDB.GuildUtils.openMenu(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;
2019-10-23 11:10:01 +02:00
let placeholder = BDFDB.DOMUtils.create(this.dragPlaceholderMarkup);
let dragpreview = this.createDragPreview(guilddiv, e);
2019-01-26 22:45:19 +01:00
let dragging = e3 => {
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.remove(placeholder);
BDFDB.DOMUtils.hide(guildcopy);
this.updateDragPreview(dragpreview, e3);
if (this.foldercontent.contains(e3.target)) {
2019-10-23 11:10:01 +02:00
hovcopy = BDFDB.DOMUtils.getParent(BDFDB.dotCN.guildouter, e3.target);
2019-10-08 19:12:48 +02:00
if (hovcopy && hovcopy.getAttribute("folderid") == folderid) this.foldercontentguilds.insertBefore(placeholder, hovcopy.nextSibling);
else hovcopy = null;
}
};
let releasing = e3 => {
document.removeEventListener("mousemove", dragging);
document.removeEventListener("mouseup", releasing);
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.remove(placeholder, dragpreview);
BDFDB.DOMUtils.show(guildcopy);
let dropfolderdiv = BDFDB.DOMUtils.getParent(BDFDB.dotCN.guildfolderwrapper, e3.target);
2019-10-22 18:55:25 +02:00
let newfolderid = dropfolderdiv ? BDFDB.FolderUtils.getId(dropfolderdiv) : null;
2019-10-08 19:12:48 +02:00
if (newfolderid) {
2019-10-08 19:32:05 +02:00
if (newfolderid != folderid) {
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.remove(guildcopy);
2019-10-08 19:32:05 +02:00
this.addGuildToFolder(newfolderid, guildid);
}
}
else if (hovcopy) {
this.foldercontentguilds.insertBefore(guildcopy, hovcopy.nextSibling);
2019-10-08 19:12:48 +02:00
this.updateGuildPositions(folderid);
}
};
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);
});
2019-01-26 22:45:19 +01:00
guildcopy.querySelector("a").setAttribute("draggable", false);
2019-01-26 22:45:19 +01:00
return guildcopy;
}
2019-10-08 19:12:48 +02:00
updateGuildPositions (folderid) {
let oldGuildFolders = Object.assign({}, BDFDB.LibraryModules.FolderStore.guildFolders);
let guildFolders = [], guildPositions = [];
for (let i in oldGuildFolders) {
if (oldGuildFolders[i].folderId) {
let newFolder = Object.assign({}, oldGuildFolders[i]);
if (oldGuildFolders[i].folderId == folderid) {
let sameFolderGuilds = this.foldercontentguilds.querySelectorAll(`[guildid][folderid="${folderid}"]`);
if (sameFolderGuilds.length > 0) {
newFolder.guildIds = [];
for (let guilddiv of sameFolderGuilds) newFolder.guildIds.push(guilddiv.getAttribute("guildid"));
}
}
guildFolders.push(newFolder);
}
else guildFolders.push(oldGuildFolders[i]);
}
for (let i in guildFolders) for (let guildid of guildFolders[i].guildIds) guildPositions.push(guildid);
BDFDB.LibraryModules.SettingsUtils.updateRemoteSettings({guildPositions, guildFolders});
}
2019-10-09 09:40:15 +02:00
openFolderCreationMenu (guilds, initguildid) {
2019-10-23 11:10:01 +02:00
let modal = BDFDB.DOMUtils.create(`<span class="${this.name}-modal BDFDB-modal"><div class="${BDFDB.disCN.backdrop}"></div><div class="${BDFDB.disCN.modal}"><div class="${BDFDB.disCN.modalinner}"><div class="${BDFDB.disCNS.modalsub + BDFDB.disCN.modalsizemedium}"><div class="${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCNS.nowrap + BDFDB.disCN.modalheader}" style="flex: 0 0 auto;"><div class="${BDFDB.disCN.flexchild}" style="flex: 1 1 auto;"><h4 class="${BDFDB.disCNS.h4 + BDFDB.disCNS.defaultcolor + BDFDB.disCN.h4defaultmargin}">${this.labels.serversubmenu_createfolder_text}</h4><div class="${BDFDB.disCNS.modalguildname + BDFDB.disCNS.small + BDFDB.disCNS.titlesize12 + BDFDB.disCNS.height16 + BDFDB.disCN.primary}"></div></div><button type="button" class="${BDFDB.disCNS.modalclose + BDFDB.disCNS.flexchild + BDFDB.disCNS.button + BDFDB.disCNS.buttonlookblank + BDFDB.disCNS.buttoncolorbrand + BDFDB.disCN.buttongrow}"><div class="${BDFDB.disCN.buttoncontents}"><svg name="Close" width="18" height="18" viewBox="0 0 12 12" style="flex: 0 1 auto;"><g fill="none" fill-rule="evenodd"><path d="M0 0h12v12H0"></path><path class="fill" fill="currentColor" d="M9.5 3.205L8.795 2.5 6 5.295 3.205 2.5l-.705.705L5.295 6 2.5 8.795l.705.705L6 6.705 8.795 9.5l.705-.705L6.705 6"></path></g></svg></div></button></div><div class="${BDFDB.disCNS.scrollerwrap + BDFDB.disCNS.modalcontent + BDFDB.disCNS.scrollerthemed + BDFDB.disCN.scrollerthemeghosthairline}"><div class="${BDFDB.disCNS.scroller + BDFDB.disCN.modalsubinner} entries"></div></div><div class="${BDFDB.disCNS.flex + BDFDB.disCNS.horizontalreverse + BDFDB.disCNS.horizontalreverse2 + BDFDB.disCNS.directionrowreverse + BDFDB.disCNS.justifystart + BDFDB.disCNS.alignstretch + BDFDB.disCNS.nowrap + BDFDB.disCN.modalfooter}"><button type="button" class="btn-done ${BDFDB.disCNS.button + BDFDB.disCNS.buttonlookfilled + BDFDB.disCNS.buttoncolorbrand + BDFDB.disCNS.buttonsizemedium + BDFDB.disCN.buttongrow}"><div class="${BDFDB.disCN.buttoncontents}"></div></button><button type="button" class="btn-cancel ${BDFDB.disCNS.button + BDFDB.disCNS.buttonlooklink + BDFDB.disCNS.buttoncolortransparent + BDFDB.disCNS.buttonsizemedium + BDFDB.disCN.buttongrow}"><div class="${BDFDB.disCN.buttoncontents}"></div></button></div></div></div></div></span>`);
2019-10-09 09:40:15 +02:00
let targetedguildsids = {};
let container = modal.querySelector(".entries");
2019-10-22 18:55:25 +02:00
BDFDB.ListenerUtils.addToChildren(modal, "click", ".btn-done", () => {
2019-10-09 09:40:15 +02:00
let ids = [];
for (let id in targetedguildsids) if (targetedguildsids[id]) ids.push(id);
this.createFolder(ids);
});
for (let guild of guilds) {
2019-10-23 11:10:01 +02:00
if (container.firstElementChild) container.appendChild(BDFDB.DOMUtils.create(`<div class="${BDFDB.disCN.divider}"></div>`));
let entry = BDFDB.DOMUtils.create(`<div class="${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCNS.nowrap + BDFDB.disCNS.margintop4 + BDFDB.disCN.marginbottom4} entry" style="flex: 1 1 auto;">${BDFDB.GuildUtils.createCopy(guild.id, {size: 48}).outerHTML}<h3 class="${BDFDB.disCNS.titledefault + BDFDB.disCNS.marginreset + BDFDB.disCNS.weightmedium + BDFDB.disCNS.titlesize16 + BDFDB.disCNS.height24 + BDFDB.disCNS.flexchild + BDFDB.disCN.overflowellipsis}" style="flex: 1 1 auto; white-space: nowrap;">${BDFDB.StringUtils.htmlEscape(guild.name)}</h3><div class="${BDFDB.disCNS.flexchild + BDFDB.disCNS.switchenabled + BDFDB.disCNS.switch + BDFDB.disCNS.switchvalue + BDFDB.disCNS.switchsizedefault + BDFDB.disCNS.switchsize + BDFDB.disCN.switchthemedefault}" style="flex: 0 0 auto;"><input type="checkbox" class="${BDFDB.disCNS.switchinnerenabled + BDFDB.disCN.switchinner}"></div></div>`);
2019-10-09 09:40:15 +02:00
container.appendChild(entry);
let switchinput = entry.querySelector(BDFDB.dotCN.switchinner);
switchinput.checked = guild.id == initguildid;
targetedguildsids[guild.id] = guild.id == initguildid;
switchinput.addEventListener("click", e => {
targetedguildsids[guild.id] = !targetedguildsids[guild.id];
});
}
BDFDB.appendModal(modal);
}
createFolder (guildids) {
if (!guildids) return;
guildids = Array.isArray(guildids) ? guildids : Array.from(guildids);
if (!guildids.length) return;
2019-10-08 21:09:14 +02:00
let oldGuildFolders = Object.assign({}, BDFDB.LibraryModules.FolderStore.guildFolders);
2019-10-09 09:40:15 +02:00
let guildFolders = [], guildPositions = [], added = false;
2019-10-08 21:09:14 +02:00
for (let i in oldGuildFolders) {
2019-10-09 09:40:15 +02:00
if (!oldGuildFolders[i].folderId && guildids.includes(oldGuildFolders[i].guildIds[0])) {
if (!added) {
added = true;
guildFolders.push({
guildIds: guildids,
folderId: this.generateID("folder")
});
}
}
2019-10-08 21:09:14 +02:00
else guildFolders.push(oldGuildFolders[i]);
}
for (let i in guildFolders) for (let guildid of guildFolders[i].guildIds) guildPositions.push(guildid);
BDFDB.LibraryModules.SettingsUtils.updateRemoteSettings({guildPositions, guildFolders});
}
2019-10-08 19:12:48 +02:00
removeFolder (folderid) {
2019-10-22 20:16:05 +02:00
BDFDB.DataUtils.remove(this, "folders", folderid);
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.remove(this.foldercontentguilds.querySelector(`${BDFDB.dotCN.guildouter}[folderid="${folderid}"]`));
2019-10-08 19:12:48 +02:00
let oldGuildFolders = Object.assign({}, BDFDB.LibraryModules.FolderStore.guildFolders);
let guildFolders = [], guildPositions = [];
for (let i in oldGuildFolders) {
if (oldGuildFolders[i].folderId == folderid) {
for (let guildid of oldGuildFolders[i].guildIds) guildFolders.push({guildIds:[guildid]});
}
else guildFolders.push(oldGuildFolders[i]);
}
for (let i in guildFolders) for (let guildid of guildFolders[i].guildIds) guildPositions.push(guildid);
BDFDB.LibraryModules.SettingsUtils.updateRemoteSettings({guildPositions, guildFolders});
this.toggleFolderContent();
}
addGuildToFolder (folderid, guildid) {
let oldGuildFolders = Object.assign({}, BDFDB.LibraryModules.FolderStore.guildFolders);
let guildFolders = [], guildPositions = [];
for (let i in oldGuildFolders) {
if (oldGuildFolders[i].folderId) {
let newFolder = Object.assign({}, oldGuildFolders[i]);
if (oldGuildFolders[i].folderId == folderid) newFolder.guildIds.push(guildid);
2019-10-22 18:55:25 +02:00
else BDFDB.ArrayUtils.remove(newFolder.guildIds, guildid);
2019-10-08 19:12:48 +02:00
guildFolders.push(newFolder);
}
else if (oldGuildFolders[i].guildIds[0] != guildid) guildFolders.push(oldGuildFolders[i]);
}
for (let i in guildFolders) for (let guildid of guildFolders[i].guildIds) guildPositions.push(guildid);
BDFDB.LibraryModules.SettingsUtils.updateRemoteSettings({guildPositions, guildFolders});
}
removeGuildFromFolder (folderid, guildid) {
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.remove(this.foldercontentguilds.querySelector(`${BDFDB.dotCN.guildouter}[folderid="${folderid}"][guildid="${guildid}"]`));
2019-10-08 19:12:48 +02:00
let sameFolderEles = this.foldercontentguilds.querySelectorAll(`[folderid="${folderid}"]`);
2019-10-23 11:10:01 +02:00
if (sameFolderEles.length == 1 && BDFDB.DOMUtils.containsClass(sameFolderEles[0], "folderseparatorouter")) BDFDB.DOMUtils.remove(sameFolderEles[0]);
2019-10-08 19:12:48 +02:00
let oldGuildFolders = Object.assign({}, BDFDB.LibraryModules.FolderStore.guildFolders);
let guildFolders = [], guildPositions = [];
for (let i in oldGuildFolders) {
if (oldGuildFolders[i].folderId == folderid) {
let newFolder = Object.assign({}, oldGuildFolders[i]);
2019-10-22 18:55:25 +02:00
BDFDB.ArrayUtils.remove(newFolder.guildIds, guildid);
2019-10-08 19:12:48 +02:00
guildFolders.push(newFolder);
guildFolders.push({guildIds:[guildid]});
}
else guildFolders.push(oldGuildFolders[i]);
}
for (let i in guildFolders) for (let guildid of guildFolders[i].guildIds) guildPositions.push(guildid);
BDFDB.LibraryModules.SettingsUtils.updateRemoteSettings({guildPositions, guildFolders});
this.toggleFolderContent();
}
2019-09-04 12:34:02 +02:00
createDragPreview (div, e) {
if (!Node.prototype.isPrototypeOf(div)) return;
let dragpreview = div.cloneNode(true);
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.addClass(dragpreview, "serverfolders-dragpreview");
BDFDB.DOMUtils.hide(dragpreview);
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;
}
2019-01-26 22:45:19 +01:00
updateDragPreview (dragpreview, e) {
if (!Node.prototype.isPrototypeOf(dragpreview)) return;
2019-10-23 11:10:01 +02:00
BDFDB.DOMUtils.show(dragpreview);
dragpreview.style.setProperty("left", e.clientX - 25 + "px", "important");
dragpreview.style.setProperty("top", e.clientY - 25 + "px", "important");
}
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
setLabelsByLanguage () {
2019-10-22 18:55:25 +02:00
switch (BDFDB.LanguageUtils.getLanguage().id) {
2018-10-11 10:21:26 +02:00
case "hr": //croatian
return {
servercontext_serverfolders_text: "Poslužitelj mapu",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "Izradi mapu",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "Dodaj poslužitelj u mapu",
serversubmenu_removefromfolder_text: "Ukloni poslužitelj iz mapu",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "Auto: Označite kao pročitano",
foldercontext_mutefolder_text: "Isključite mapu",
2018-10-11 10:21:26 +02:00
foldercontext_removefolder_text: "Izbriši mapu",
modal_tabheader1_text: "Mape",
modal_tabheader2_text: "Boja mape",
modal_tabheader3_text: "Boja tooltip",
2019-01-14 13:58:48 +01:00
modal_tabheader4_text: "Prilagođeni ikona",
2018-10-11 10:21:26 +02:00
modal_iconpicker_text: "Odabir mape",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "Koristite zatvorenu ikonu umjesto minisevera",
modal_copytooltipcolor_text: "Koristite iste boje za poslužitelj u mapi",
2018-10-11 10:21:26 +02:00
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"
2018-10-11 10:21:26 +02:00
};
case "da": //danish
return {
servercontext_serverfolders_text: "Servermapper",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "Opret mappe",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "Tilføj server til mappe",
2018-10-11 10:21:26 +02:00
serversubmenu_removefromfolder_text: "Fjern server fra mappe",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "Auto: Markér som læst",
foldercontext_mutefolder_text: "Dæmp mappe",
2018-10-11 10:21:26 +02:00
foldercontext_removefolder_text: "Slet mappe",
modal_tabheader1_text: "Mappe",
modal_tabheader2_text: "Mappefarve",
modal_tabheader3_text: "Tooltipfarve",
modal_tabheader4_text: "Brugerdefinerede ikoner",
modal_iconpicker_text: "Mappevalg",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "Brug et lukket ikon i stedet for miniserverne",
modal_copytooltipcolor_text: "Brug de samme farver til server på mappen",
2018-10-11 10:21:26 +02:00
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"
2018-10-11 10:21:26 +02:00
};
case "de": //german
return {
servercontext_serverfolders_text: "Serverordner",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "Ordner erzeugen",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "Server zum Ordner hinzufügen",
2018-10-11 10:21:26 +02:00
serversubmenu_removefromfolder_text: "Server aus Ordner entfernen",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "Auto: Als gelesen markieren",
foldercontext_mutefolder_text: "Ordner stummschalten",
2018-10-11 10:21:26 +02:00
foldercontext_removefolder_text: "Ordner löschen",
modal_tabheader1_text: "Ordner",
modal_tabheader2_text: "Ordnerfarbe",
modal_tabheader3_text: "Tooltipfarbe",
modal_tabheader4_text: "Eigene Icons",
modal_iconpicker_text: "Ordnerauswahl",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "Verwende anstelle der Miniserver ein geschlossenes Symbol",
modal_copytooltipcolor_text: "Verwende dieselbe Farbe für alle Server eines Ordners",
2018-10-11 10:21:26 +02:00
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"
2018-10-11 10:21:26 +02:00
};
case "es": //spanish
return {
servercontext_serverfolders_text: "Carpetas de servidor",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "Crear carpeta",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "Añadir servidor a la carpeta",
2018-10-11 10:21:26 +02:00
serversubmenu_removefromfolder_text: "Eliminar servidor de la carpeta",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "Auto: Marcar como leído",
foldercontext_mutefolder_text: "Silenciar carpeta",
2018-10-11 10:21:26 +02:00
foldercontext_removefolder_text: "Eliminar 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",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "Use un icono cerrado en lugar de los miniservidores",
modal_copytooltipcolor_text: "Usa los mismos colores para el servidor de la carpeta",
2018-10-11 10:21:26 +02:00
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"
2018-10-11 10:21:26 +02:00
};
case "fr": //french
return {
servercontext_serverfolders_text: "Dossiers du serveur",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "Créer le dossier",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "Ajouter le serveur à un dossier",
2018-10-11 10:21:26 +02:00
serversubmenu_removefromfolder_text: "Supprimer le serveur du dossier",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "Auto: Marquer comme lu",
2019-10-09 09:53:30 +02:00
foldercontext_mutefolder_text: "Rendre muet le dossier",
2018-10-11 10:21:26 +02:00
foldercontext_removefolder_text: "Supprimer le 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",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "Utilisez une icône fermée à la place des mini-serveurs",
modal_copytooltipcolor_text: "Utilisez les mêmes couleurs pour le serveur du dossier",
2018-10-11 10:21:26 +02:00
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"
2018-10-11 10:21:26 +02:00
};
case "it": //italian
return {
servercontext_serverfolders_text: "Cartelle del server",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "Aggiungi il server alla cartella",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "Creare una cartella",
2019-02-20 21:31:00 +01:00
serversubmenu_removefromfolder_text: "Rimuovi il server dalla cartella",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "Auto: Contrassegna come letto",
foldercontext_mutefolder_text: "Disattiva cartella",
2018-10-11 10:21:26 +02:00
foldercontext_removefolder_text: "Elimina 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",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "Utilizzare un'icona chiusa anziché i mini server",
modal_copytooltipcolor_text: "Usa gli stessi colori per il server della cartella",
2018-10-11 10:21:26 +02:00
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"
2018-10-11 10:21:26 +02:00
};
case "nl": //dutch
return {
servercontext_serverfolders_text: "Servermappen",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "Voeg server toe aan de map",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "Map aanmaken",
2019-02-20 21:31:00 +01:00
serversubmenu_removefromfolder_text: "Verwijder de server uit de map",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "Auto: Markeren als gelezen",
foldercontext_mutefolder_text: "Demp map",
2018-10-11 10:21:26 +02:00
foldercontext_removefolder_text: "Verwijder map",
modal_tabheader1_text: "Map",
modal_tabheader2_text: "Mapkleur",
modal_tabheader3_text: "Tooltipkleur",
modal_tabheader4_text: "Aangepaste keuze",
modal_iconpicker_text: "Map keuze",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "Gebruik een gesloten keuze in plaats van de miniservers",
modal_copytooltipcolor_text: "Gebruik dezelfde kleuren voor de server van de map",
2018-10-11 10:21:26 +02:00
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"
2018-10-11 10:21:26 +02:00
};
case "no": //norwegian
return {
servercontext_serverfolders_text: "Servermapper",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "Legg til server i mappe",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "Lag mappe",
2018-10-11 10:21:26 +02:00
serversubmenu_removefromfolder_text: "Fjern server fra mappe",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "Auto: Merk som les",
foldercontext_mutefolder_text: "Demp mappe",
2018-10-11 10:21:26 +02:00
foldercontext_removefolder_text: "Slett mappe",
modal_tabheader1_text: "Mappe",
modal_tabheader2_text: "Mappefarge",
modal_tabheader3_text: "Tooltipfarge",
modal_tabheader4_text: "Tilpassede ikoner",
modal_iconpicker_text: "Mappevalg",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "Bruk et lukket ikon i stedet for minitjenerne",
modal_copytooltipcolor_text: "Bruk de samme fargene til serveren til mappen",
2018-10-11 10:21:26 +02:00
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"
2018-10-11 10:21:26 +02:00
};
case "pl": //polish
return {
servercontext_serverfolders_text: "Foldery serwera",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "Dodaj serwer do folderu",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "Utwórz folder",
2019-01-14 13:58:48 +01:00
serversubmenu_removefromfolder_text: "Usuń serwer z folderu",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "Auto: Oznacz jako przeczytane",
foldercontext_mutefolder_text: "Wycisz folder",
2019-01-14 13:58:48 +01:00
foldercontext_removefolder_text: "Usuń folder",
2018-10-11 10:21:26 +02:00
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",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "Użyj zamkniętej ikony zamiast mini serwerów",
modal_copytooltipcolor_text: "Użyj tych samych kolorów dla serwera folderu",
2018-10-11 10:21:26 +02:00
modal_colorpicker1_text: "Podstawowy kolor folderu",
2019-01-14 13:58:48 +01:00
modal_colorpicker2_text: "Drugorzędny kolor folderu",
2018-10-11 10:21:26 +02:00
modal_colorpicker3_text: "Kolor podpowiedzi",
modal_colorpicker4_text: "Kolor czcionki",
modal_customopen_text: "Otwarta ikona",
2019-01-14 13:58:48 +01:00
modal_customclosed_text: "Zamknięta ikona",
modal_custompreview_text: "Podgląd ikony"
2018-10-11 10:21:26 +02:00
};
case "pt-BR": //portuguese (brazil)
return {
servercontext_serverfolders_text: "Pastas de servidores",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "Adicionar servidor à pasta",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "Criar pasta",
2018-10-11 10:21:26 +02:00
serversubmenu_removefromfolder_text: "Remover servidor da pasta",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "Auto: Marcar como lido",
foldercontext_mutefolder_text: "Silenciar pasta",
2018-10-11 10:21:26 +02:00
foldercontext_removefolder_text: "Excluir 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",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "Use um ícone fechado em vez dos mini servidores",
modal_copytooltipcolor_text: "Use as mesmas cores para o servidor da pasta",
2018-10-11 10:21:26 +02:00
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"
2018-10-11 10:21:26 +02:00
};
case "fi": //finnish
return {
servercontext_serverfolders_text: "Palvelinkansiot",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "Lisää palvelin kansioon",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "Luo kansio",
2019-02-20 21:31:00 +01:00
serversubmenu_removefromfolder_text: "Poista palvelin kansioon",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "Auto: merkitse luettavaksi",
foldercontext_mutefolder_text: "Mykistä kansio",
2018-10-11 10:21:26 +02:00
foldercontext_removefolder_text: "Poista kansio",
modal_tabheader1_text: "Kansio",
modal_tabheader2_text: "Kansionväri",
modal_tabheader3_text: "Tooltipväri",
modal_tabheader4_text: "Mukautetut kuvakkeet",
modal_iconpicker_text: "Kansion valinta",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "Käytä suljettua kuvaketta minipalvelimien sijasta",
modal_copytooltipcolor_text: "Käytä samoja värejä kansion palvelimelle",
2018-10-11 10:21:26 +02:00
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"
2018-10-11 10:21:26 +02:00
};
case "sv": //swedish
return {
servercontext_serverfolders_text: "Servermappar",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "Lägg till server i mapp",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "Skapa mapp",
2018-10-11 10:21:26 +02:00
serversubmenu_removefromfolder_text: "Ta bort servern från mappen",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "Auto: Markera som Läs",
foldercontext_mutefolder_text: "Stäng mapp",
2018-10-11 10:21:26 +02:00
foldercontext_removefolder_text: "Ta bort mapp",
modal_tabheader1_text: "Mapp",
modal_tabheader2_text: "Mappfärg",
modal_tabheader3_text: "Tooltipfärg",
modal_tabheader4_text: "Anpassade ikoner",
modal_iconpicker_text: "Mappval",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "Använd en stängd ikon istället för miniservrarna",
modal_copytooltipcolor_text: "Använd samma färger för mappen på mappen",
2018-10-11 10:21:26 +02:00
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"
2018-10-11 10:21:26 +02:00
};
case "tr": //turkish
return {
servercontext_serverfolders_text: "Sunucu klasörleri",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "Klasöre sunucu ekle",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "Klasör oluşturun",
2019-01-14 13:58:48 +01:00
serversubmenu_removefromfolder_text: "Sunucuyu klasörden kaldır",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "Oto: Okundu Olarak İşaretle",
foldercontext_mutefolder_text: "Klasörü kapat",
2018-10-11 10:21:26 +02:00
foldercontext_removefolder_text: "Klasörü sil",
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",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "Mini sunucular yerine kapalı bir simge kullanın",
modal_copytooltipcolor_text: "Klasörün sunucusu için aynı renkleri kullanın",
2018-10-11 10:21:26 +02:00
modal_colorpicker1_text: "Birincil klasör rengi",
2019-01-14 13:58:48 +01:00
modal_colorpicker2_text: "İkincil klasör rengi",
2018-10-11 10:21:26 +02:00
modal_colorpicker3_text: "Tooltip rengi",
2019-01-14 13:58:48 +01:00
modal_colorpicker4_text: "Yazı rengi",
modal_customopen_text: "Açılmış simge",
modal_customclosed_text: "Kapalı simge",
modal_custompreview_text: "Simge önizleme"
2018-10-11 10:21:26 +02:00
};
case "cs": //czech
return {
servercontext_serverfolders_text: "Složky serveru",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "Přidat server do složky",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "Vytvořit složky",
2019-02-20 21:31:00 +01:00
serversubmenu_removefromfolder_text: "Odebrat server ze složky",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "Auto: Označit jako přečtené",
foldercontext_mutefolder_text: "Ztlumte složky",
2018-10-11 10:21:26 +02:00
foldercontext_removefolder_text: "Smazat 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",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "Místo mini serverů použijte uzavřenou ikonu",
modal_copytooltipcolor_text: "Použijte stejné barvy pro server složky",
2018-10-11 10:21:26 +02:00
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",
2019-01-14 13:58:48 +01:00
modal_customopen_text: "Otevřená ikona",
modal_customclosed_text: "Uzavřená ikona",
modal_custompreview_text: "Náhled ikony"
2018-10-11 10:21:26 +02:00
};
case "bg": //bulgarian
return {
2019-01-14 13:58:48 +01:00
servercontext_serverfolders_text: "Сървърни папки",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "Добавяне на сървър в папка",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "Създай папка",
2019-01-14 13:58:48 +01:00
serversubmenu_removefromfolder_text: "Премахване на сървър от папка",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "Авто: Маркиране като четене",
foldercontext_mutefolder_text: "Заглушаване на папката",
2019-01-14 13:58:48 +01:00
foldercontext_removefolder_text: "Изтриване на папка",
modal_tabheader1_text: "Папка",
modal_tabheader2_text: "Цвят на папка",
modal_tabheader3_text: "Цвят на подсказка",
modal_tabheader4_text: "Персонализирани икони",
modal_iconpicker_text: "Избор на папки",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "Използвайте затворена икона вместо мини сървърите",
modal_copytooltipcolor_text: "Използвайте същите цветове за сървъра на папката",
2019-01-14 13:58:48 +01:00
modal_colorpicker1_text: "Цвят основнен на папка",
modal_colorpicker2_text: "цвят вторичен на папка",
modal_colorpicker3_text: "Цвят на подсказка",
modal_colorpicker4_text: "Цвят на шрифта",
modal_customopen_text: "Отворена икона",
modal_customclosed_text: "Затворена икона",
modal_custompreview_text: "Икона Преглед"
2018-10-11 10:21:26 +02:00
};
case "ru": //russian
return {
2019-01-14 13:58:48 +01:00
servercontext_serverfolders_text: "Папки сервера",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "Добавить сервер в папку",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "Создать папки",
2019-02-20 21:31:00 +01:00
serversubmenu_removefromfolder_text: "Удалить сервер из папки",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "Авто: Отметить как прочитанное",
foldercontext_mutefolder_text: "Отключить папки",
2019-01-14 13:58:48 +01:00
foldercontext_removefolder_text: "Удалить папки",
modal_tabheader1_text: "Папка",
modal_tabheader2_text: "Цвет папки",
modal_tabheader3_text: "Цвет подсказка",
modal_tabheader4_text: "Пользовательские значки",
modal_iconpicker_text: "Выбор папки",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "Используйте закрытую иконку вместо мини-серверов",
modal_copytooltipcolor_text: "Используйте те же цвета для сервера папки",
2019-01-14 13:58:48 +01:00
modal_colorpicker1_text: "Цвет основной папки",
modal_colorpicker2_text: "Цвет вторичной папки",
modal_colorpicker3_text: "Цвет подсказка",
modal_colorpicker4_text: "Цвет шрифта",
modal_customopen_text: "Открытая иконка",
modal_customclosed_text: "Закрытая иконка",
modal_custompreview_text: "Иконка Просмотр"
2018-10-11 10:21:26 +02:00
};
case "uk": //ukrainian
return {
2019-01-14 13:58:48 +01:00
servercontext_serverfolders_text: "Папки сервера",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "Додати сервер до папки",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "Створити папки",
2019-02-20 21:31:00 +01:00
serversubmenu_removefromfolder_text: "Видалити папку з папки",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "Авто: Позначити як прочитане",
foldercontext_mutefolder_text: "Відключення папки",
2019-01-14 13:58:48 +01:00
foldercontext_removefolder_text: "Видалити папки",
modal_tabheader1_text: "Папки",
modal_tabheader2_text: "Колір папки",
modal_tabheader3_text: "Колір підказка",
modal_tabheader4_text: "Користувальницькі іконки",
modal_iconpicker_text: "Вибір папки",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "Використовуйте закритий значок замість міні-серверів",
modal_copytooltipcolor_text: "Використовуйте ті ж кольори для сервера папки",
2019-01-14 13:58:48 +01:00
modal_colorpicker1_text: "Колір основної папки",
modal_colorpicker2_text: "Колір вторинного папки",
modal_colorpicker3_text: "Колір підказка",
modal_colorpicker4_text: "Колір шрифту",
modal_customopen_text: "Відкрита ікона",
modal_customclosed_text: "Закрита ікона",
modal_custompreview_text: "Піктограма попереднього перегляду"
2018-10-11 10:21:26 +02:00
};
case "ja": //japanese
return {
2019-01-14 13:58:48 +01:00
servercontext_serverfolders_text: "サーバーフォルダ",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "サーバーをフォルダに追加する",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "フォルダーを作る",
2019-02-20 21:31:00 +01:00
serversubmenu_removefromfolder_text: "サーバーをフォルダから削除する",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "自動: 読み取りとしてマークする",
foldercontext_mutefolder_text: "ミュートフォルダー",
2019-01-14 13:58:48 +01:00
foldercontext_removefolder_text: "フォルダを削除する",
modal_tabheader1_text: "フォルダ",
modal_tabheader2_text: "フォルダの色",
modal_tabheader3_text: "ツールチップの色",
modal_tabheader4_text: "カスタムアイコン",
modal_iconpicker_text: "フォルダの選択",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "ミニサーバーの代わりに閉じたアイコンを使用する",
modal_copytooltipcolor_text: "フォルダのサーバーに同じ色を使う",
2019-01-14 13:58:48 +01:00
modal_colorpicker1_text: "プライマリフォルダの色",
modal_colorpicker2_text: "セカンダリフォルダの色",
modal_colorpicker3_text: "ツールチップの色",
modal_colorpicker4_text: "フォントの色",
modal_customopen_text: "開いたアイコン",
modal_customclosed_text: "クローズドアイコン",
modal_custompreview_text: "アイコンのプレビュー"
2018-10-11 10:21:26 +02:00
};
case "zh-TW": //chinese (traditional)
return {
2019-01-14 13:58:48 +01:00
servercontext_serverfolders_text: "服務器文件夾",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "添加服務器到文件夾",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "創建文件夾",
2019-02-20 21:31:00 +01:00
serversubmenu_removefromfolder_text: "從文件夾中刪除服務器",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "自動: 標記為已讀",
foldercontext_mutefolder_text: "靜音文件夾",
2019-01-14 13:58:48 +01:00
foldercontext_removefolder_text: "刪除文件夾",
modal_tabheader1_text: "夾",
modal_tabheader2_text: "文件夾顏色",
modal_tabheader3_text: "工具提示顏色",
modal_tabheader4_text: "自定義圖標",
modal_iconpicker_text: "文件夾選擇",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "使用關閉的圖標代替迷你服務器",
modal_copytooltipcolor_text: "對文件夾的服務器使用相同的顏色",
2019-01-14 13:58:48 +01:00
modal_colorpicker1_text: "主文件夾顏色",
modal_colorpicker2_text: "輔助文件夾顏色",
modal_colorpicker3_text: "工具提示顏色",
modal_colorpicker4_text: "字體顏色",
modal_customopen_text: "打開的圖標",
modal_customclosed_text: "封閉的圖標",
modal_custompreview_text: "圖標預覽"
2018-10-11 10:21:26 +02:00
};
case "ko": //korean
return {
2019-01-14 13:58:48 +01:00
servercontext_serverfolders_text: "서버 폴더",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "폴더에 서버 추가",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "폴더 만들기",
2019-01-14 13:58:48 +01:00
serversubmenu_removefromfolder_text: "폴더에서 서버 제거",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "자동: 읽은 상태로 표시",
foldercontext_mutefolder_text: "폴더 음소거",
2019-01-14 13:58:48 +01:00
foldercontext_removefolder_text: "폴더 삭제",
modal_tabheader1_text: "폴더",
modal_tabheader2_text: "폴더 색",
modal_tabheader3_text: "툴팁 색깔",
modal_tabheader4_text: "사용자 정의 아이콘",
modal_iconpicker_text: "폴더 선택",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "미니 서버 대신 닫힌 아이콘을 사용하십시오",
modal_copytooltipcolor_text: "폴더의 서버에 대해 동일한 색상을 사용하십시오.",
2019-01-14 13:58:48 +01:00
modal_colorpicker1_text: "기본 폴더 색",
modal_colorpicker2_text: "보조 폴더 색",
modal_colorpicker3_text: "툴팁 색깔",
modal_colorpicker4_text: "글꼴 색깔",
modal_customopen_text: "열린 아이콘",
modal_customclosed_text: "닫힌 아이콘",
modal_custompreview_text: "아이콘 미리보기"
2018-10-11 10:21:26 +02:00
};
default: //default: english
return {
servercontext_serverfolders_text: "Serverfolders",
2019-02-20 21:31:00 +01:00
serversubmenu_addtofolder_text: "Add Server to Folder",
2019-10-08 21:09:14 +02:00
serversubmenu_createfolder_text: "Create Folder",
2019-02-20 21:31:00 +01:00
serversubmenu_removefromfolder_text: "Remove Server from Folder",
2019-10-08 19:12:48 +02:00
foldercontext_autoreadfolder_text: "Auto: Mark As Read",
foldercontext_mutefolder_text: "Mute Folder",
2018-10-11 10:21:26 +02:00
foldercontext_removefolder_text: "Delete Folder",
modal_tabheader1_text: "Folder",
modal_tabheader2_text: "Foldercolor",
modal_tabheader3_text: "Tooltipcolor",
modal_tabheader4_text: "Custom Icons",
modal_iconpicker_text: "Folderchoice",
2019-10-08 19:12:48 +02:00
modal_usecloseicon_text: "Use a closed Icon instead of the Mini-Servers",
modal_copytooltipcolor_text: "Use same Colors for Servers of the Folder",
2018-10-11 10:21:26 +02:00
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"
2018-10-11 10:21:26 +02:00
};
}
}
2018-10-26 12:33:17 +02:00
}