Added FolderMention Badges and Read All Notifications for Folders Option

This commit is contained in:
Mirco Wittrien 2017-09-03 11:15:48 +02:00 committed by GitHub
parent ed04138589
commit 1289665afc
1 changed files with 115 additions and 11 deletions

View File

@ -10,6 +10,7 @@ class ServerFolders {
this.serverContextObserver;
this.serverListObserver;
this.serverListContextHandler;
this.folderContextEventHandler;
this.css = `
<style class='serverfolders'>
@ -181,6 +182,10 @@ class ServerFolders {
this.folderContextMarkup =
`<div class="context-menu">
<div class="item-group">
<div class="item unreadfolder-item">
<span>REPLACE_foldercontext_unreadfolder_text</span>
<div class="hint"></div>
</div>
<div class="item foldersettings-item">
<span>REPLACE_foldercontext_foldersettings_text</span>
<div class="hint"></div>
@ -232,7 +237,7 @@ class ServerFolders {
</div>
<div class="form-actions">
<button type="button" class="btn btn-cancel">REPLACE_btn_cancel_text</button>
<button type="button" class="btn btn-save">REPLACE_btn_save_text</button>
<button type="submit" class="btn btn-save">REPLACE_btn_save_text</button>
</div>
</form>
</div>
@ -255,7 +260,7 @@ class ServerFolders {
getDescription () {return "Add pseudofolders to your serverlist to organize your servers.";}
getVersion () {return "2.2.0";}
getVersion () {return "3.0.0";}
getAuthor () {return "DevilBro";}
@ -344,6 +349,7 @@ class ServerFolders {
this.serverListObserver.disconnect();
this.badgeObserver.disconnect();
$(".guilds.scroller").unbind('mouseleave', this.serverListContextHandler);
$(document).unbind('mousedown', this.folderContextEventHandler);
$(".serverfolders").remove();
$(".guild.folder").remove();
@ -362,6 +368,7 @@ class ServerFolders {
changeLanguageStrings () {
this.serverContextEntryMarkup = this.serverContextEntryMarkup.replace("REPLACE_servercontext_createfolder_text", this.labels.servercontext_createfolder_text);
this.folderContextMarkup = this.folderContextMarkup.replace("REPLACE_foldercontext_unreadfolder_text", this.labels.foldercontext_unreadfolder_text);
this.folderContextMarkup = this.folderContextMarkup.replace("REPLACE_foldercontext_foldersettings_text", this.labels.foldercontext_foldersettings_text);
this.folderContextMarkup = this.folderContextMarkup.replace("REPLACE_foldercontext_removefolder_text", this.labels.foldercontext_removefolder_text);
@ -417,6 +424,8 @@ class ServerFolders {
var color2 = ["255","255","255"];
this.saveSettings(serverID, {serverID,folderPlaced,folderName,isOpen,openIcon,closedIcon,color1,color2});
this.updateFolderBadge(folderDiv);
}
}
@ -481,12 +490,17 @@ class ServerFolders {
.off("click", ".foldersettings-item")
.off("click", ".removefolder-item")
.on("click", ".foldersettings-item", this.showFolderSettings.bind(this))
.on("click", ".removefolder-item", this.removeSelectedFolder.bind(this))
.on("click", ".removefolder-item,.foldersettings-item", function() {
$(document).unbind('mousedown', folderContextEventHandler);
folderContext[0].remove();
});
.on("click", ".removefolder-item", this.removeSelectedFolder.bind(this));
if (this.readUnreadServerList(this.selectedFolder).length > 0) {
$(folderContext)
.off("click", ".unreadfolder-item")
.on("click", ".unreadfolder-item", this.clearAllReadNotifications.bind(this));
}
else {
$(folderContext).find(".unreadfolder-item").addClass("disabled");
}
var theme = this.themeIsLightTheme() ? "" : "theme-dark";
$(folderContext)
@ -494,18 +508,21 @@ class ServerFolders {
.css("left", e.pageX + "px")
.css("top", e.pageY + "px");
var folderContextEventHandler = function(e) {
this.folderContextEventHandler = function(e) {
if (!folderContext[0].contains(e.target)) {
$(document).unbind('mousedown', folderContextEventHandler);
$(document).unbind('mousedown', this.folderContextEventHandler);
$(folderContext).remove();
this.selectedFolder = null;
}
};
$(document).bind('mousedown', folderContextEventHandler);
$(document).bind('mousedown', this.folderContextEventHandler);
}
}
showFolderSettings (e) {
$(".context-menu").hide();
$(document).unbind('mousedown', this.folderContextEventHandler);
var id = this.getIdOfServer($(this.selectedFolder).next()[0]);
if (id) {
var serverID, folderPlaced, folderName, isOpen, openIcon, closedIcon, color1, color2;
@ -624,6 +641,9 @@ class ServerFolders {
}
removeSelectedFolder (e) {
$(".context-menu").hide();
$(document).unbind('mousedown', this.folderContextEventHandler);
var folderDiv = this.selectedFolder;
var includedServers = this.getIncludedServers(folderDiv);
this.hideAllServers(false, includedServers);
@ -721,7 +741,54 @@ class ServerFolders {
for (var i = 0; folders.length > i; i++) {
this.updateFolderBadge(folders[i]);
}
}
clearAllReadNotifications () {
$(".context-menu").hide();
$(document).unbind('mousedown', this.folderContextEventHandler);
var unreadServers = this.readUnreadServerList($(this.selectedFolder));
unreadServers.forEach(
(folder,i) => {
var that = this;
setTimeout(function() {
var div = folder.firstElementChild;
var divInst = that.getReactInstance(div);
if (divInst &&
divInst._renderedChildren &&
divInst._renderedChildren[".0"] &&
divInst._renderedChildren[".0"]._instance &&
divInst._renderedChildren[".0"]._instance.handleContextMenu) {
var data = {
preventDefault: a=>a,
stopPropagation: a=>a,
pageX: -1000 + Math.round(Math.random()*500),
};
divInst._renderedChildren[".0"]._instance.handleContextMenu(data);
var context = document.getElementsByClassName("context-menu")[0];
$(".context-menu .item-group").each (
(i,ele) => {
var inst = that.getReactInstance(ele);
if (inst) {
var childIndex = -1;
var curEle = inst._currentElement;
if (curEle && curEle.props && curEle.props.children) {
var children = Array.isArray(curEle.props.children) ? curEle.props.children : [curEle.props.children];
children.forEach((child,i) => {
if (child.type && child.type.displayName && child.type.displayName == "GuildMarkReadItem") {
ele.children[i].click();
}
});
}
}
}
);
}
},i*100);
}
);
}
checkIfServerDivChangedTellIfDeleted (folderDiv) {
@ -824,6 +891,23 @@ class ServerFolders {
return foundServers;
}
readUnreadServerList (folderDiv) {
var foundServers = [];
var servers = this.getIncludedServers(folderDiv);
for (var i = 0; i < servers.length; i++) {
var serverInst = this.getReactInstance(servers[i]);
if (serverInst && serverInst._currentElement && serverInst._currentElement._owner && serverInst._currentElement._owner._instance) {
var serverObj = serverInst._currentElement._owner._instance;
if (serverObj && serverObj.props && serverObj.props.guild) {
if (servers[i].classList.contains("unread") || servers[i].children[servers[i].childElementCount-1].className == "badge") {
foundServers.push(servers[i]);
}
}
}
}
return foundServers;
}
getIdOfServer (server) {
var inst = this.getReactInstance(server);
if (!inst) return null;
@ -920,6 +1004,7 @@ class ServerFolders {
case "da": //danish
return {
servercontext_createfolder_text: "Opret mappe",
foldercontext_unreadfolder_text: "Markér alle som læst",
foldercontext_foldersettings_text: "Mappeindstillinger",
foldercontext_removefolder_text: "Slet mappe",
modal_header_text: "Mappindstillinger",
@ -932,6 +1017,7 @@ class ServerFolders {
case "de": //german
return {
servercontext_createfolder_text: "Erzeuge Ordner",
foldercontext_unreadfolder_text: "Alle als gelesen markieren",
foldercontext_foldersettings_text: "Ordnereinstellungen",
foldercontext_removefolder_text: "Lösche Ordner",
modal_header_text: "Ordnereinstellungen",
@ -944,6 +1030,7 @@ class ServerFolders {
case "es": //spanish
return {
servercontext_createfolder_text: "Crear carpeta",
foldercontext_unreadfolder_text: "Marcar todo como leido",
foldercontext_foldersettings_text: "Ajustes de carpeta",
foldercontext_removefolder_text: "Eliminar carpeta",
modal_header_text: "Ajustes de carpeta",
@ -956,6 +1043,7 @@ class ServerFolders {
case "fr": //french
return {
servercontext_createfolder_text: "Créer le dossier",
foldercontext_unreadfolder_text: "Tout marquer comme lu",
foldercontext_foldersettings_text: "Paramètres du dossier",
foldercontext_removefolder_text: "Supprimer le dossier",
modal_header_text: "Paramètres du dossier",
@ -968,6 +1056,7 @@ class ServerFolders {
case "it": //italian
return {
servercontext_createfolder_text: "Creare una cartella",
foldercontext_unreadfolder_text: "Segna tutti come letti",
foldercontext_foldersettings_text: "Impostazioni cartella",
foldercontext_removefolder_text: "Elimina cartella",
modal_header_text: "Impostazioni cartella",
@ -980,6 +1069,7 @@ class ServerFolders {
case "nl": //dutch
return {
servercontext_createfolder_text: "Map aanmaken",
foldercontext_unreadfolder_text: "Alles als gelezen markeren",
foldercontext_foldersettings_text: "Mapinstellingen",
foldercontext_removefolder_text: "Verwijder map",
modal_header_text: "Mapinstellingen",
@ -992,6 +1082,7 @@ class ServerFolders {
case "no": //norwegian
return {
servercontext_createfolder_text: "Lag mappe",
foldercontext_unreadfolder_text: "Marker alle som lest",
foldercontext_foldersettings_text: "Mappinnstillinger",
foldercontext_removefolder_text: "Slett mappe",
modal_header_text: "Mappinnstillinger",
@ -1004,6 +1095,7 @@ class ServerFolders {
case "pl": //polish
return {
servercontext_createfolder_text: "Utwórz folder",
foldercontext_unreadfolder_text: "Oznacz wszystkie jako przeczytane",
foldercontext_foldersettings_text: "Ustawienia folderu",
foldercontext_removefolder_text: "Usuń folder",
modal_header_text: "Ustawienia folderu",
@ -1016,6 +1108,7 @@ class ServerFolders {
case "pt": //portuguese (brazil)
return {
servercontext_createfolder_text: "Criar pasta",
foldercontext_unreadfolder_text: "Marcar tudo como lido",
foldercontext_foldersettings_text: "Configurações da pasta",
foldercontext_removefolder_text: "Excluir pasta",
modal_header_text: "Configurações da pasta",
@ -1028,6 +1121,7 @@ class ServerFolders {
case "fi": //finnish
return {
servercontext_createfolder_text: "Luo kansio",
foldercontext_unreadfolder_text: "Merkitse kaikki luetuksi",
foldercontext_foldersettings_text: "Kansion kansio",
foldercontext_removefolder_text: "Poista kansio",
modal_header_text: "Kansion kansio",
@ -1040,6 +1134,7 @@ class ServerFolders {
case "sv": //swedish
return {
servercontext_createfolder_text: "Skapa mapp",
foldercontext_unreadfolder_text: "Markera allt som läst",
foldercontext_foldersettings_text: "Mappinställningar",
foldercontext_removefolder_text: "Ta bort mapp",
modal_header_text: "Mappinställningar",
@ -1052,6 +1147,7 @@ class ServerFolders {
case "tr": //turkish
return {
servercontext_createfolder_text: "Klasör oluşturun",
foldercontext_unreadfolder_text: "Tümünü Oku olarak işaretle",
foldercontext_foldersettings_text: "Klasör Ayarları",
foldercontext_removefolder_text: "Klasörü sil",
modal_header_text: "Klasör Ayarları",
@ -1064,6 +1160,7 @@ class ServerFolders {
case "cs": //czech
return {
servercontext_createfolder_text: "Vytvořit složky",
foldercontext_unreadfolder_text: "Označit vše jako přečtené",
foldercontext_foldersettings_text: "Nastavení složky",
foldercontext_removefolder_text: "Smazat složky",
modal_header_text: "Nastavení složky",
@ -1076,6 +1173,7 @@ class ServerFolders {
case "bg": //bulgarian
return {
servercontext_createfolder_text: "Създай папка",
foldercontext_unreadfolder_text: "Маркирай всички като прочетени",
foldercontext_foldersettings_text: "Настройки папка",
foldercontext_removefolder_text: "Изтриване на папка",
modal_header_text: "Настройки папка",
@ -1088,6 +1186,7 @@ class ServerFolders {
case "ru": //russian
return {
servercontext_createfolder_text: "Создать папки",
foldercontext_unreadfolder_text: "Отметить все как прочитанное",
foldercontext_foldersettings_text: "Настройки папки",
foldercontext_removefolder_text: "Удалить папки",
modal_header_text: "Настройки папки",
@ -1100,6 +1199,7 @@ class ServerFolders {
case "uk": //ukranian
return {
servercontext_createfolder_text: "Створити папки",
foldercontext_unreadfolder_text: "Позначити як прочитане",
foldercontext_foldersettings_text: "Параметри папки",
foldercontext_removefolder_text: "Видалити папки",
modal_header_text: "Параметри папки",
@ -1112,6 +1212,7 @@ class ServerFolders {
case "ja": //japanese
return {
servercontext_createfolder_text: "フォルダーを作る",
foldercontext_unreadfolder_text: "すべてを読むようにマークする",
foldercontext_foldersettings_text: "フォルダ設定",
foldercontext_removefolder_text: "フォルダを削除する",
modal_header_text: "フォルダ設定",
@ -1124,6 +1225,7 @@ class ServerFolders {
case "zh": //chinese (traditional)
return {
servercontext_createfolder_text: "創建文件夾",
foldercontext_unreadfolder_text: "標記為已讀",
foldercontext_foldersettings_text: "文件夾設置",
foldercontext_removefolder_text: "刪除文件夾",
modal_header_text: "文件夾設置",
@ -1136,6 +1238,7 @@ class ServerFolders {
case "ko": //korean
return {
servercontext_createfolder_text: "폴더 만들기",
foldercontext_unreadfolder_text: "모두 읽은 상태로 표시",
foldercontext_foldersettings_text: "폴더 설정",
foldercontext_removefolder_text: "폴더 삭제",
modal_header_text: "폴더 설정",
@ -1148,6 +1251,7 @@ class ServerFolders {
default: //default: english
return {
servercontext_createfolder_text: "Create Folder",
foldercontext_unreadfolder_text: "Mark All As Read",
foldercontext_foldersettings_text: "Foldersettings",
foldercontext_removefolder_text: "Delete Folder",
modal_header_text: "Foldersettings",