BetterDiscordAddons/Plugins/PersonalPins/PersonalPins.plugin.js

893 lines
43 KiB
JavaScript
Raw Normal View History

2019-09-20 22:32:52 +02:00
//META{"name":"PersonalPins","website":"https://github.com/mwittrien/BetterDiscordAddons/tree/master/Plugins/PersonalPins","source":"https://raw.githubusercontent.com/mwittrien/BetterDiscordAddons/master/Plugins/PersonalPins/PersonalPins.plugin.js"}*//
2018-12-28 14:28:50 +01:00
class PersonalPins {
2019-01-17 23:48:29 +01:00
getName () {return "PersonalPins";}
getDescription () {return "Similar to normal pins. Lets you save messages as notes for yourself.";}
2019-11-13 14:03:46 +01:00
getVersion () {return "1.8.6";}
2019-01-17 23:48:29 +01:00
getAuthor () {return "DevilBro";}
2019-01-26 22:45:19 +01:00
2019-09-04 12:34:02 +02:00
constructor () {
2019-02-03 19:02:15 +01:00
this.changelog = {
2019-11-13 14:04:07 +01:00
"fixed":[["Embed Crash","Fixed issue where opening the pins could crash Discord because of old embed data"]],
2019-11-09 12:53:04 +01:00
"improved":[["New Library Structure & React","Restructured my Library and switched to React rendering instead of DOM manipulation"]]
2019-02-03 19:02:15 +01:00
};
2019-09-04 12:34:02 +02:00
2019-11-14 17:56:26 +01:00
this.patchedModules = {
after: {
HeaderBarContainer: "render"
}
2018-12-28 14:28:50 +01:00
};
2019-09-04 12:34:02 +02:00
}
2019-01-26 22:45:19 +01:00
2018-12-28 14:28:50 +01:00
getSettingsPanel () {
2019-01-22 11:28:32 +01:00
if (!global.BDFDB || typeof BDFDB != "object" || !BDFDB.loaded || !this.started) return;
2019-11-09 12:53:04 +01:00
let settingsitems = [];
settingsitems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsItem, {
type: "Button",
className: BDFDB.disCN.marginbottom8,
color: BDFDB.LibraryComponents.Button.Colors.RED,
label: "Delete all Notes",
onClick: _ => {
BDFDB.ModalUtils.confirm(this, "Are you sure you want to delete all pinned notes?", () => {
BDFDB.DataUtils.remove(this, "notes");
});
},
children: BDFDB.LanguageUtils.LanguageStrings.DELETE
}));
return BDFDB.PluginUtils.createSettingsPanel(this, settingsitems);
2018-12-28 14:28:50 +01:00
}
//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-12-28 14:28:50 +01:00
if (libraryScript) libraryScript.remove();
libraryScript = document.createElement("script");
2019-05-26 13:55:26 +02:00
libraryScript.setAttribute("id", "BDFDBLibraryScript");
2018-12-28 14:28:50 +01: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-12-28 14:28:50 +01:00
document.head.appendChild(libraryScript);
}
2019-01-17 23:48:29 +01: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-12-28 14:28:50 +01: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-11-09 12:53:04 +01:00
2019-11-09 12:53:27 +01:00
// REMOVE
2019-11-09 12:53:04 +01:00
let pins = BDFDB.DataUtils.load(this, "pins"), notes = {}, olddata = 0, resolveddata = 0, loading = true, i = 0;
for (let guild_id in pins) {
notes[guild_id] = {};
for (let channel_id in pins[guild_id]) {
notes[guild_id][channel_id] = {};
for (let message_idPOS in pins[guild_id][channel_id]) olddata++;
}
}
if (olddata > 0) BDFDB.ModalUtils.confirm(this, `${this.name} found ${olddata} instances of old saved notes. Press the "Okay" button to refetch the messages and update your old config. This will take around ${(olddata + 1) * 5} seconds.`, _ => {
BDFDB.TimeUtils.timeout(_ => {
BDFDB.DataUtils.remove(this, "pins");
BDFDB.DataUtils.save(notes, this, "notes");
loading = false;
BDFDB.ModalUtils.confirm(this, `${resolveddata} of ${olddata} pins could be transfered to the new format.${olddata - resolveddata > 0 ? " " + (olddata - resolveddata) + " could not be transfered because the message could no longer be found in discords data." : ""}`, _ => {});
}, (olddata + 1) * 5000);
for (let guild_id in pins) for (let channel_id in pins[guild_id]) for (let message_idPOS in pins[guild_id][channel_id]) {
BDFDB.TimeUtils.timeout(_ => {if (loading) BDFDB.LibraryModules.APIUtils.get(BDFDB.DiscordConstants.Endpoints.MESSAGES(pins[guild_id][channel_id][message_idPOS].channel_id) + "?limit=1&around=" + pins[guild_id][channel_id][message_idPOS].id).then(result => {if (result && result.body && result.body[0] && result.body[0].id == pins[guild_id][channel_id][message_idPOS].id) {
let note = {};
note.addedat = pins[guild_id][channel_id][message_idPOS].addedat;
note.channel = JSON.stringify(BDFDB.LibraryModules.ChannelStore.getChannel(channel_id));
note.id = pins[guild_id][channel_id][message_idPOS].id;
note.message = JSON.stringify(result.body[0]);
note.pos = pins[guild_id][channel_id][message_idPOS].pos;
note.timestamp = pins[guild_id][channel_id][message_idPOS].timestamp;
notes[guild_id][channel_id][message_idPOS] = note;
resolveddata++;
}})}, i * 5000);
i++;
}
});
2019-01-26 22:45:19 +01:00
2019-10-22 18:55:25 +02:00
BDFDB.ModuleUtils.forceAllUpdates(this);
2018-12-28 14:28:50 +01: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-12-28 14:28:50 +01: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-11-09 12:53:04 +01:00
BDFDB.ModuleUtils.forceAllUpdates(this);
2019-10-22 18:55:25 +02:00
BDFDB.PluginUtils.clear(this);
2018-12-28 14:28:50 +01:00
}
}
2019-01-26 22:45:19 +01:00
2018-12-28 14:28:50 +01:00
// begin of own functions
2019-01-26 22:45:19 +01:00
2019-11-09 12:53:04 +01:00
onMessageContextMenu (e) {
2019-11-11 10:48:30 +01:00
if (e.instance.props.message && e.instance.props.channel && e.instance.props.target) {
2019-11-09 12:53:04 +01:00
let {messagediv, pos} = this.getMessageAndPos(e.instance.props.target);
2019-09-03 12:37:14 +02:00
if (!messagediv || pos == -1) return;
2019-11-09 12:53:04 +01:00
let note = this.getNoteData(e.instance.props.message, e.instance.props.target, e.instance.props.channel);
let [children, index] = BDFDB.ReactUtils.findChildren(e.returnvalue, {name:"MessagePinItem"});
2019-12-05 09:10:14 +01:00
const pinUnpinItem = BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ContextMenuItems.Item, {
2019-09-11 12:14:43 +02:00
label: this.labels[note ? "context_unpinoption_text" : "context_pinoption_text"],
2019-10-23 11:10:01 +02:00
hint: BDFDB.BDUtils.isPluginEnabled("MessageUtilities") ? BDFDB.BDUtils.getPlugin("MessageUtilities").getActiveShortcutString("__Note_Message") : null,
2019-11-09 12:53:04 +01:00
action: _ => {
BDFDB.ContextMenuUtils.close(e.instance);
this.addMessageToNotes(e.instance.props.message, e.instance.props.target, e.instance.props.channel);
2019-09-11 12:14:43 +02:00
}
});
2019-09-11 12:14:43 +02:00
if (index > -1) children.splice(index, 0, pinUnpinItem);
else children.push(pinUnpinItem);
2019-11-09 12:53:04 +01:00
if (this.isNoteOutdated(note, e.instance.props.message)) {
2019-12-05 09:10:14 +01:00
const updateItem = BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ContextMenuItems.Item, {
2019-11-09 12:53:04 +01:00
label: this.labels.context_updateoption_text,
action: _ => {
BDFDB.ContextMenuUtils.close(e.instance);
this.updateNoteData(note, e.instance.props.message);
}
});
if (index > -1) children.splice(index, 0, updateItem);
else children.push(updateItem);
2019-09-03 12:37:14 +02:00
}
2019-09-11 12:14:43 +02:00
}
}
2019-11-09 12:53:04 +01:00
onMessageOptionPopout (e) {
if (e.instance.props.message && e.instance.props.channel && e.instance.props.target) {
let {messagediv, pos} = this.getMessageAndPos(e.instance.props.target);
2019-09-11 12:14:43 +02:00
if (!messagediv || pos == -1) return;
2019-11-09 12:53:04 +01:00
let note = this.getNoteData(e.instance.props.message, e.instance.props.target, e.instance.props.channel);
let [children, index] = BDFDB.ReactUtils.findChildren(e.returnvalue, {props:[["label", [BDFDB.LanguageUtils.LanguageStrings.PIN, BDFDB.LanguageUtils.LanguageStrings.UNPIN]]]});
2019-12-05 09:10:14 +01:00
children.splice(index + 1, 0, BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ContextMenuItems.Item, {
2019-09-11 12:14:43 +02:00
label: this.labels[note ? "context_unpinoption_text" : "popout_pinoption_text"],
2019-11-07 22:33:27 +01:00
className: BDFDB.disCN.optionpopoutitem,
2019-11-09 12:53:04 +01:00
action: _ => {
this.addMessageToNotes(e.instance.props.message, e.instance.props.target, e.instance.props.channel);
e.instance.props.onClose();
}
}));
2019-12-05 09:10:14 +01:00
if (this.isNoteOutdated(note, e.instance.props.message)) children.splice(index + 1, 0, BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ContextMenuItems.Item, {
2019-11-09 12:53:04 +01:00
label: this.labels.context_updateoption_text,
className: BDFDB.disCN.optionpopoutitem,
action: _ => {
this.updateNoteData(note, e.instance.props.message);
e.instance.props.onClose();
2019-09-11 12:14:43 +02:00
}
2019-11-07 22:33:27 +01:00
}));
2018-12-28 14:28:50 +01:00
}
}
2019-09-04 12:34:02 +02:00
2019-11-09 12:53:04 +01:00
processHeaderBarContainer (e) {
let [children, index] = BDFDB.ReactUtils.findChildren(BDFDB.ReactUtils.getValue(e.returnvalue, "props.toolbar"), {name: "FluxContainer(Search)"});
if (index > -1) children.splice(index, 0, BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.PopoutContainer, {
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TooltipContainer, {
text: this.labels.popout_note_text,
tooltipConfig: {type: "bottom"},
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Clickable, {
className: BDFDB.disCNS.channelheadericonwrapper + BDFDB.disCN.channelheadericonclickable,
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SvgIcon, {
className: BDFDB.disCNS.channelheadericon,
iconSVG: `<svg name="Note" width="24" height="24" viewBox="-1 -1 23 23"><path fill="currentColor" d="M 4.618, 0 c -0.316, 0 -0.573, 0.256 -0.573, 0.573 v 1.145 c 0, 0.316, 0.256, 0.573, 0.573, 0.573 s 0.573 -0.256, 0.573 -0.573 V 0.573 C 5.191, 0.256, 4.935, 0, 4.618, 0 z"/><path fill="currentColor" d="M 8.053, 0 c -0.316, 0 -0.573, 0.256 -0.573, 0.573 v 1.145 c 0, 0.316, 0.256, 0.573, 0.573, 0.573 s 0.573 -0.256, 0.573 -0.573 V 0.573 C 8.626, 0.256, 8.37, 0, 8.053, 0 z"/><path fill="currentColor" d="M 11.489, 0 c -0.316, 0 -0.573, 0.256 -0.573, 0.573 v 1.145 c 0, 0.316, 0.256, 0.573, 0.573, 0.573 c 0.316, 0, 0.573 -0.256, 0.573 -0.573 V 0.573 C 12.061, 0.256, 11.805, 0, 11.489, 0 z "/><path fill="currentColor" d="M 14.924, 0 c -0.316, 0 -0.573, 0.256 -0.573, 0.573 v 1.145 c 0, 0.316, 0.256, 0.573, 0.573, 0.573 c 0.316, 0, 0.573 -0.256, 0.573 -0.573 V 0.573 C 15.496, 0.256, 15.24, 0, 14.924, 0 z"/><path fill="currentColor" d="M 16.641, 1.25 V 1.718 c 0, 0.947 -0.77, 1.718 -1.718, 1.718 c -0.947, 0 -1.718 -0.77 -1.718 -1.718 c 0, 0.947 -0.77, 1.718 -1.718, 1.718 c -0.947, 0 -1.718 -0.77 -1.718 -1.718 c 0, 0.947 -0.77, 1.718 -1.718, 1.718 c -0.947, 0 -1.718 -0.77 -1.718 -1.718 c 0, 0.947 -0.77, 1.718 -1.718, 1.718 c -0.947, 0 -1.718 -0.77 -1.718 -1.718 V 1.25 C 2.236, 1.488, 1.756, 2.117, 1.756, 2.863 v 14.962 c 0, 0.947, 0.77, 1.718, 1.718, 1.718 h 12.595 c 0.947, 0, 1.718 -0.77, 1.718 -1.718 V 2.863 C 17.786, 2.117, 17.306, 1.488, 16.641, 1.25 z M 14.924, 16.679 H 4.618 c -0.316, 0 -0.573 -0.256 -0.573 -0.573 c 0 -0.316, 0.256 -0.573, 0.573 -0.573 h 10.305 c 0.316, 0, 0.573, 0.256, 0.573, 0.573 C 15.496, 16.423, 15.24, 16.679, 14.924, 16.679 z M 14.924, 13.244 H 4.618 c -0.316, 0 -0.573 -0.256 -0.573 -0.573 c 0 -0.316, 0.256 -0.573, 0.573 -0.573 h 10.305 c 0.316, 0, 0.573, 0.256, 0.573, 0.573 C 15.496, 12.988, 15.24, 13.244, 14.924, 13.244 z M 14.924, 9.733 H 4.618 c -0.316, 0 -0.573 -0.256 -0.573 -0.573 s 0.256 -0.573, 0.573 -0.573 h 10.305 c 0.316, 0, 0.573, 0.256, 0.573, 0.573 S 15.24, 9.733, 14.924, 9.733 z M 14.924, 6.298 H 4.618 c -0.316, 0 -0.573 -0.256 -0.573 -0.573 s 0.256 -0.573, 0.573 -0.573 h 10.305 c 0.316, 0, 0.573, 0.256, 0.573, 0.573 S 15.24, 6.298, 14.924, 6.298 z"/></svg>`
})
})
}),
popoutClassName: BDFDB.disCN.messagespopoutwrap,
animation: BDFDB.LibraryComponents.PopoutContainer.Animation.SCALE,
position: BDFDB.LibraryComponents.PopoutContainer.Positions.BOTTOM,
align: BDFDB.LibraryComponents.PopoutContainer.Align.RIGHT,
width: 500,
maxHeight: "calc(100vh - 100px)",
onClose: instance => {
BDFDB.DOMUtils.removeClass(instance.domElementRef.current, BDFDB.disCN.channelheadericonselected);
},
renderPopout: instance => {
BDFDB.DOMUtils.addClass(instance.domElementRef.current, BDFDB.disCN.channelheadericonselected);
return this.createNotesPopout(instance);
}
}));
2019-04-23 14:03:21 +02:00
}
2019-11-09 12:53:04 +01:00
createNotesPopout (buttoninstance) {
let tabkeys = ["channel", "server", "all"], sortkeys = ["notetime", "messagetime"];
buttoninstance.props.selectedFilter = buttoninstance.props.selectedFilter || this.getValue(tabkeys[0], "filter");
buttoninstance.props.selectedSort = buttoninstance.props.selectedSort || this.getValue(sortkeys[0], "sort");
buttoninstance.props.searchKey = buttoninstance.props.searchKey || "";
return [
BDFDB.ReactUtils.createElement("div", {
className: BDFDB.disCNS.popoutheader + BDFDB.disCN.messagespopoutheader,
style: {
paddingBottom: 0
},
children: [
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
children: [
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
className: BDFDB.disCNS.popouttitle + BDFDB.disCN.messagespopouttitle,
children: this.labels.popout_note_text
}),
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SearchBar, {
query: buttoninstance.props.searchKey,
onChange: value => {
BDFDB.TimeUtils.clear(this.searchTimeout);
this.searchTimeout = BDFDB.TimeUtils.timeout(_ => {
buttoninstance.props.searchKey = value;
BDFDB.ReactUtils.forceUpdate(buttoninstance.popout._owner.stateNode);
}, 1000);
},
onClear: _ => {
buttoninstance.props.searchKey = "";
BDFDB.ReactUtils.forceUpdate(buttoninstance.popout._owner.stateNode);
}
})
]
}),
BDFDB.ReactUtils.createElement("div", {
className: BDFDB.disCN.tabbarheadercontainer,
children: [
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TabBar, {
className: BDFDB.disCN.tabbarheader,
itemClassName: BDFDB.disCN.tabbarheaderitem,
type: BDFDB.LibraryComponents.TabBar.Types.TOP,
selectedItem: buttoninstance.props.selectedFilter.value,
items: tabkeys.map(key => this.getValue(key, "filter")),
onItemSelect: key => {
buttoninstance.props.selectedFilter = this.getValue(key, "filter");
BDFDB.ReactUtils.forceUpdate(buttoninstance.popout._owner.stateNode);
}
}),
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.QuickSelect, {
spacing: -25,
label: this.labels.popout_sort_text + ":",
value: buttoninstance.props.selectedSort,
options: sortkeys.map(key => this.getValue(key, "sort")),
onChange: key => {
buttoninstance.props.selectedSort = this.getValue(key, "sort");
BDFDB.ReactUtils.forceUpdate(buttoninstance.popout._owner.stateNode);
}
})
]
})
]
}),
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ScrollerVertical, {
className: BDFDB.disCN.messagespopout,
children: this.filterMessages(buttoninstance, buttoninstance.props.selectedFilter.value, buttoninstance.props.selectedSort.value, buttoninstance.props.searchKey.toUpperCase())
})
];
2018-12-28 14:28:50 +01:00
}
2019-11-09 12:53:04 +01:00
getValue (key, type) {
return {
label: this.labels[`popout_${type}_${key}_text`],
value: key
}
}
filterMessages (buttoninstance, filter, sort, searchkey) {
let lighttheme = BDFDB.DiscordUtils.getTheme() == BDFDB.disCN.themelight;
let messages = [], notes = BDFDB.DataUtils.load(this, "notes"), updatedata = false;
for (let guild_id in notes) for (let channel_id in notes[guild_id]) for (let message_idPOS in notes[guild_id][channel_id]) {
let message = JSON.parse(notes[guild_id][channel_id][message_idPOS].message);
message.author = new BDFDB.DiscordObjects.User(message.author);
message.timestamp = new BDFDB.DiscordObjects.Timestamp(message.timestamp);
message.editedTimestamp = message.editedTimestamp && new BDFDB.DiscordObjects.Timestamp(message.editedTimestamp);
2019-11-13 14:03:46 +01:00
for (let embed of message.embeds) {
embed.color = typeof embed.color != "string" ? null : embed.color;
embed.timestamp = embed.timestamp && new BDFDB.DiscordObjects.Timestamp(embed.timestamp);
}
2019-11-09 12:53:04 +01:00
message = new BDFDB.DiscordObjects.Message(message);
let channel = notes[guild_id][channel_id][message_idPOS].channel && new BDFDB.DiscordObjects.Channel(JSON.parse(notes[guild_id][channel_id][message_idPOS].channel));
if (!channel) {
channel = BDFDB.LibraryModules.ChannelStore.getChannel(message.channel_id);
if (channel) {
updatedata = true;
notes[guild_id][channel_id][message_idPOS].channel = JSON.stringify(channel);
}
2018-12-28 14:28:50 +01:00
}
2019-11-09 12:53:04 +01:00
messages.push({
note: notes[guild_id][channel_id][message_idPOS],
channel_id,
guild_id,
message,
channel,
messagetime: notes[guild_id][channel_id][message_idPOS].timestamp,
notetime: notes[guild_id][channel_id][message_idPOS].addedat
});
2018-12-28 14:28:50 +01:00
}
2019-11-09 12:53:04 +01:00
if (updatedata) BDFDB.DataUtils.save(notes, this, "notes");
let currentchannel = BDFDB.LibraryModules.ChannelStore.getChannel(BDFDB.LibraryModules.LastChannelStore.getChannelId()) || {};
switch (filter) {
case "channel":
messages = messages.filter(messagedata => messagedata.channel_id == currentchannel.id);
break;
case "server":
messages = messages.filter(messagedata => messagedata.guild_id == (currentchannel.guild_id || "@me"));
break;
case "allservers":
messages = messages;
break;
}
if (searchkey) {
let searchvalues = ["content", "author.username", "rawDescription", "author.name"];
messages = messages.filter(messagedata => searchvalues.some(key => this.containsSearchkey(messagedata.message, key, searchkey) || messagedata.message.embeds.some(embed => this.containsSearchkey(embed, key, searchkey))));
}
BDFDB.ArrayUtils.keySort(messages, sort);
messages.reverse();
return Object.keys(messages).length ?
2019-11-22 14:26:12 +01:00
messages.map(messagedata => this.renderMessage(buttoninstance, messagedata.note, messagedata.message, messagedata.channel, filter)).flat(10).filter(n => n) :
2019-11-09 12:53:04 +01:00
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.MessagesPopoutComponents.EmptyStateCenter, {
msg: BDFDB.LanguageUtils.LanguageStrings.AUTOCOMPLETE_NO_RESULTS_HEADER,
image: lighttheme ? "/assets/03c7541028afafafd1a9f6a81cb7f149.svg" : "/assets/6793e022dc1b065b21f12d6df02f91bd.svg"
});
}
containsSearchkey (data, key, searchkey) {
let value = BDFDB.ReactUtils.getValue(data, key);
return value && value.toUpperCase().indexOf(searchkey) > -1
}
renderMessage (buttoninstance, note, message, channel, filter) {
if (!message || !channel) return null;
let channelname = channel.name;
let guild = channel.guild_id && BDFDB.LibraryModules.GuildStore.getGuild(channel.guild_id);
let role = guild && BDFDB.LibraryModules.PermissionRoleUtils.getHighestRole(guild, message.author.id);
if (role) message.colorString = role.colorString;
if (filter != "channel" && !channelname && channel.recipients.length > 0) {
for (let dmuser_id of channel.recipients) {
channelname = channelname ? channelname + ", @" : channelname;
channelname = channelname + BDFDB.LibraryModules.UserStore.getUser(dmuser_id).username;
2018-12-28 14:28:50 +01:00
}
2019-11-09 12:53:04 +01:00
}
let separator = filter == "channel" ? null : BDFDB.ReactUtils.createElement("div", {
className: BDFDB.disCN.messagespopoutchannelseparator,
children: [
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Clickable, {
tag: "span",
className: BDFDB.disCN.messagespopoutchannelname,
onClick: _ => {
BDFDB.LibraryModules.SelectChannelUtils.selectChannel(channel.guild_id, channel.id);
},
children: channelname ? ((channel.guild_id ? "#" : "@") + channelname) : "???"
}),
filter == "all" ? BDFDB.ReactUtils.createElement("span", {
className: BDFDB.disCN.messagespopoutguildname,
children: channel.guild_id ? (BDFDB.LibraryModules.GuildStore.getGuild(channel.guild_id) || {}).name || BDFDB.LanguageUtils.LanguageStrings.GUILD_UNAVAILABLE_HEADER : BDFDB.LanguageUtils.LanguageStrings.DIRECT_MESSAGES
}) : null
]
});
2019-01-26 22:45:19 +01:00
2019-11-09 12:53:04 +01:00
return [separator, BDFDB.ReactUtils.createElement("div", {
className: BDFDB.disCN.messagegroupwrapper,
key: message.id,
children: BDFDB.ReactUtils.createElement("div", {
className: BDFDB.disCN.messagegroupwrapperoffsetcorrection,
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.MessageGroup, {
cozyClassName: BDFDB.disCN.messagespopoutmessagegroupcozy,
messages: [message],
channel: channel,
inlineAttachmentMedia: true,
inlineEmbedMedia: true,
renderEmbeds: true,
renderEmbedsSmall: true,
compact: false,
developerMode: false,
hasDivider: false,
popoutPosition: BDFDB.LibraryComponents.PopoutContainer.Positions.LEFT,
groupOption: _ => {
return BDFDB.ReactUtils.createElement("div", {
className: BDFDB.disCN.messagespopoutactionbuttons,
children: [
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Clickable, {
className: BDFDB.disCN.messagespopoutjumpbutton,
onClick: _ => {
BDFDB.LibraryModules.SelectChannelUtils.selectChannel(channel.guild_id, channel.id, message.id);
},
children: BDFDB.ReactUtils.createElement("div", {
className: BDFDB.disCN.messagespopouttext,
children: BDFDB.LanguageUtils.LanguageStrings.JUMP
})
}),
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Clickable, {
className: BDFDB.disCN.messagespopoutjumpbutton,
onClick: _ => {
if (message.content || message.attachments.length > 1) {
let text = message.content || "";
for (let attachment of message.attachments) if (attachment.url) text += ((text ? "\n" : "") + attachment.url);
BDFDB.LibraryRequires.electron.clipboard.write({text});
}
else if (message.attachments.length == 1 && message.attachments[0].url) {
BDFDB.LibraryRequires.request({url: message.attachments[0].url, encoding: null}, (error, response, buffer) => {
if (buffer) {
if (BDFDB.LibraryRequires.process.platform === "win32" || BDFDB.LibraryRequires.process.platform === "darwin") {
BDFDB.LibraryRequires.electron.clipboard.write({image: BDFDB.LibraryRequires.electron.nativeImage.createFromBuffer(buffer)});
}
else {
let file = BDFDB.LibraryRequires.path.join(BDFDB.LibraryRequires.process.env["HOME"], "personalpinstemp.png");
BDFDB.LibraryRequires.fs.writeFileSync(file, buffer, {encoding: null});
BDFDB.LibraryRequires.electron.clipboard.write({image: file});
BDFDB.LibraryRequires.fs.unlinkSync(file);
}
}
});
}
},
children: BDFDB.ReactUtils.createElement("div", {
className: BDFDB.disCN.messagespopouttext,
children: BDFDB.LanguageUtils.LanguageStrings.COPY
})
}),
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Button, {
look: BDFDB.LibraryComponents.Button.Looks.BLANK,
size: BDFDB.LibraryComponents.Button.Sizes.NONE,
onClick: (e, instance) => {
this.removeNoteData(note);
BDFDB.ReactUtils.forceUpdate(buttoninstance.popout._owner.stateNode);
},
children: BDFDB.ReactUtils.createElement("div", {
className: BDFDB.disCN.messagespopoutclosebutton
})
})
]
});
},
messageOption: false,
canEdit: false,
accessoriesClassName: BDFDB.disCN.messagespopoutaccessories
})
})
})];
2018-12-28 14:28:50 +01:00
}
2019-01-26 22:45:19 +01:00
addMessageToNotes (message, target, channel) {
if (!message || !target) return;
let {messagediv, pos} = this.getMessageAndPos(target);
if (!messagediv || pos == -1) return;
2019-11-09 12:53:04 +01:00
let notes = BDFDB.DataUtils.load(this, "notes");
channel = channel || BDFDB.LibraryModules.ChannelStore.getChannel(message.channel_id);
let guild_id = channel.guild_id || "@me";
notes[guild_id] = notes[guild_id] || {};
notes[guild_id][channel.id] = notes[guild_id][channel.id] || {}
if (!notes[guild_id][channel.id][message.id + "_" + pos]) {
notes[guild_id][channel.id][message.id + "_" + pos] = {
addedat: new Date().getTime(),
channel: JSON.stringify(channel),
id: message.id,
message: JSON.stringify(message),
pos: pos,
timestamp: message.timestamp._i.getTime()
};
BDFDB.DataUtils.save(notes, this, "notes");
BDFDB.NotificationUtils.toast(this.labels.toast_noteadd_text, {type: "success"});
2018-12-28 14:28:50 +01:00
}
2019-11-09 12:53:04 +01:00
else this.removeNoteData(notes[guild_id][channel.id][message.id + "_" + pos]);
2018-12-28 14:28:50 +01:00
}
2019-11-09 12:53:04 +01:00
isNoteOutdated (note, message) {
let notemessage = note && JSON.parse(note.message), keys = ["content", "embeds", "attachment"];
return notemessage && !BDFDB.equals(BDFDB.ObjectUtils.extract(notemessage, keys), BDFDB.ObjectUtils.extract(message, keys));
2019-09-03 12:37:14 +02:00
}
2019-01-26 22:45:19 +01:00
getNoteData (message, target, channel) {
if (!message || !target) return;
let {messagediv, pos} = this.getMessageAndPos(target);
if (!messagediv || pos == -1) return;
2019-11-09 12:53:04 +01:00
channel = channel || BDFDB.LibraryModules.ChannelStore.getChannel(message.channel_id);
let guild_id = channel.guild_id || "@me";
let notes = BDFDB.DataUtils.load(this, "notes");
return notes[guild_id] && notes[guild_id][channel.id] && notes[guild_id][channel.id][message.id + "_" + pos];
}
updateNoteData (note, newmessage) {
let message = JSON.parse(note.message);
let channel = JSON.parse(note.channel);
if (!message || !channel) return;
let guild_id = channel.guild_id || "@me";
let notes = BDFDB.DataUtils.load(this, "notes");
notes[guild_id][channel.id][note.id + "_" + note.pos].message = JSON.stringify(newmessage);
BDFDB.DataUtils.save(notes, this, "notes");
BDFDB.NotificationUtils.toast(this.labels.toast_noteupdate_text, {type: "info"});
}
2019-01-26 22:45:19 +01:00
2019-11-09 12:53:04 +01:00
removeNoteData (note) {
let message = JSON.parse(note.message);
let channel = JSON.parse(note.channel);
if (!message || !channel) return;
let guild_id = channel.guild_id || "@me";
let notes = BDFDB.DataUtils.load(this, "notes");
delete notes[guild_id][channel.id][note.id + "_" + note.pos];
if (BDFDB.ObjectUtils.isEmpty(notes[guild_id][channel.id])) {
delete notes[guild_id][channel.id];
if (BDFDB.ObjectUtils.isEmpty(notes[guild_id])) delete notes[guild_id];
2018-12-28 14:28:50 +01:00
}
2019-11-09 12:53:04 +01:00
BDFDB.DataUtils.save(notes, this, "notes");
BDFDB.NotificationUtils.toast(this.labels.toast_noteremove_text, {type: "danger"});
2018-12-28 14:28:50 +01:00
}
2019-09-11 12:14:43 +02:00
getMessageAndPos (target) {
2019-11-08 14:36:57 +01:00
let messagediv = BDFDB.DOMUtils.getParent(BDFDB.dotCN.messagegroup + "> [aria-disabled]," + BDFDB.dotCN.messagegroup + "> * > [aria-disabled]", target);
2019-09-11 12:14:43 +02:00
let pos = messagediv ? Array.from(messagediv.parentElement.childNodes).filter(n => n.nodeType != Node.TEXT_NODE).indexOf(messagediv) : -1;
return {messagediv, pos};
}
2019-01-26 22:45:19 +01:00
2018-12-28 14:28:50 +01:00
setLabelsByLanguage () {
2019-10-24 11:47:57 +02:00
switch (BDFDB.LanguageUtils.getLanguage().id) {
2018-12-28 14:28:50 +01:00
case "hr": //croatian
return {
popout_note_text: "Bilješke",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "Kanal",
popout_filter_server_text: "Poslužavnik",
popout_filter_all_text: "Svi poslužitelji",
2018-12-28 14:28:50 +01:00
popout_sort_text: "Poredaj po",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "Vijesti-Datum",
popout_sort_notetime_text: "Bilješka-Datum",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "Napominjemo poruku",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "Ažuriraj bilješku",
2018-12-28 14:28:50 +01:00
context_unpinoption_text: "Uklonite bilješku",
popout_pinoption_text: "Bilješka",
toast_noteadd_text: "Poruka dodana u bilježnicu.",
2019-09-03 12:37:14 +02:00
toast_noteupdate_text: "Poruka je ažurirana u bilježnici.",
2018-12-28 14:28:50 +01:00
toast_noteremove_text: "Poruka uklonjena iz bilježnice."
};
case "da": //danish
return {
popout_note_text: "Noter",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "Kanal",
popout_filter_server_text: "Server",
popout_filter_all_text: "Alle servere",
2018-12-28 14:28:50 +01:00
popout_sort_text: "Sorter efter",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "Meddelelse-Dato",
popout_sort_notetime_text: "Note-Dato",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "Noter besked",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "Opdater note",
context_unpinoption_text: "Fjern note",
2018-12-28 14:28:50 +01:00
popout_pinoption_text: "Noter",
toast_noteadd_text: "Meddelelse tilføjet til notesbog.",
2019-09-03 12:37:14 +02:00
toast_noteupdate_text: "Meddelelse opdateret i den notesbog.",
2018-12-28 14:28:50 +01:00
toast_noteremove_text: "Meddelelse fjernet fra notesbog."
};
case "de": //german
return {
popout_note_text: "Notizen",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "Kanal",
popout_filter_server_text: "Server",
popout_filter_all_text: "Alle Server",
2018-12-28 14:28:50 +01:00
popout_sort_text: "Sortieren nach",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "Nachrichten-Datum",
popout_sort_notetime_text: "Notiz-Datum",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "Nachricht notieren",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "Notiz aktualisieren",
2018-12-28 14:28:50 +01:00
context_unpinoption_text: "Notiz entfernen",
popout_pinoption_text: "Notieren",
toast_noteadd_text: "Nachricht zum Notizbuch hinzugefügt.",
2019-09-03 12:37:14 +02:00
toast_noteupdate_text: "Nachricht im Notizbuch aktualisiert.",
2018-12-28 14:28:50 +01:00
toast_noteremove_text: "Nachricht aus dem Notizbuch entfernt."
};
case "es": //spanish
return {
popout_note_text: "Notas",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "Canal",
popout_filter_server_text: "Servidor",
popout_filter_all_text: "Todos los servidores",
2018-12-28 14:28:50 +01:00
popout_sort_text: "Ordenar por",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "Mensaje-Fecha",
popout_sort_notetime_text: "Nota-Fecha",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "Anotar mensaje",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "Actualiza la nota",
context_unpinoption_text: "Eliminar la nota",
2018-12-28 14:28:50 +01:00
popout_pinoption_text: "Anotar",
toast_noteadd_text: "Mensaje agregado al cuaderno.",
2019-09-03 12:37:14 +02:00
toast_noteupdate_text: "Mensaje actualizado en el cuaderno.",
2018-12-28 14:28:50 +01:00
toast_noteremove_text: "Mensaje eliminado del cuaderno."
};
case "fr": //french
return {
popout_note_text: "Notes",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "Canal",
popout_filter_server_text: "Serveur",
popout_filter_all_text: "Tous les serveurs",
2018-12-28 14:28:50 +01:00
popout_sort_text: "Trier par",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "Message-Date",
popout_sort_notetime_text: "Note-Date",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "Noter le message",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "Mettre à jour la note",
2018-12-28 14:28:50 +01:00
context_unpinoption_text: "Enlevez la note",
popout_pinoption_text: "Noter",
2019-09-03 12:37:14 +02:00
toast_noteadd_text: "Message ajouté au cahier.",
toast_noteupdate_text: "Message mis à jour dans le cahier.",
toast_noteremove_text: "Message supprimé du cahier."
2018-12-28 14:28:50 +01:00
};
case "it": //italian
return {
popout_note_text: "Note",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "Canale",
popout_filter_server_text: "Server",
popout_filter_all_text: "Tutti i server",
2018-12-28 14:28:50 +01:00
popout_sort_text: "Ordina per",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "Messaggio-Data",
popout_sort_notetime_text: "Nota-Data",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "Annotare il messaggio",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "Aggiorna la nota",
2018-12-28 14:28:50 +01:00
context_unpinoption_text: "Rimuovi la nota",
popout_pinoption_text: "Annotare",
toast_noteadd_text: "Messaggio aggiunto al blocco note.",
2019-09-03 12:37:14 +02:00
toast_noteupdate_text: "Messaggio aggiornato nel blocco note.",
2018-12-28 14:28:50 +01:00
toast_noteremove_text: "Messaggio rimosso dal blocco note."
};
case "nl": //dutch
return {
popout_note_text: "Notities",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "Kanaal",
popout_filter_server_text: "Server",
popout_filter_all_text: "Alle servers",
2018-12-28 14:28:50 +01:00
popout_sort_text: "Sorteer op",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "Bericht-Datum",
popout_sort_notetime_text: "Notitie-Datum",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "Noteer bericht",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "Update de notitie",
2018-12-28 14:28:50 +01:00
context_unpinoption_text: "Verwijder de notitie",
popout_pinoption_text: "Noteer",
toast_noteadd_text: "Bericht toegevoegd aan notitieblok.",
2019-09-03 12:37:14 +02:00
toast_noteupdate_text: "Bericht bijgewerkt in het notitieblok.",
2018-12-28 14:28:50 +01:00
toast_noteremove_text: "Bericht verwijderd van notitieblok."
};
case "no": //norwegian
return {
popout_note_text: "Notatene",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "Kanal",
popout_filter_server_text: "Server",
popout_filter_all_text: "Alle servere",
2018-12-28 14:28:50 +01:00
popout_sort_text: "Sorter etter",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "Melding-Dato",
popout_sort_notetime_text: "Merknad-Dato",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "Notat ned meldingen",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "Oppdater notatet",
2018-12-28 14:28:50 +01:00
context_unpinoption_text: "Fjern notatet",
popout_pinoption_text: "Notere",
toast_noteadd_text: "Melding lagt til i notisboken.",
2019-09-03 12:37:14 +02:00
toast_noteupdate_text: "Melding oppdatert i notisbok.",
2018-12-28 14:28:50 +01:00
toast_noteremove_text: "Melding fjernet fra notatboken."
};
case "pl": //polish
return {
popout_note_text: "Notatki",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "Kanał",
popout_filter_server_text: "Serwer",
popout_filter_all_text: "Wszystkie serwery",
2018-12-28 14:28:50 +01:00
popout_sort_text: "Sortuj według",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "Wiadomość-Data",
popout_sort_notetime_text: "Notatka-Data",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "Notuj wiadomość",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "Zaktualizuj notatkę",
2018-12-28 14:28:50 +01:00
context_unpinoption_text: "Usuń notatkę",
popout_pinoption_text: "Notuj",
toast_noteadd_text: "Wiadomość została dodana do notatnika.",
2019-09-03 12:37:14 +02:00
toast_noteupdate_text: "Wiadomość zaktualizowana w notatniku.",
2018-12-28 14:28:50 +01:00
toast_noteremove_text: "Wiadomość została usunięta z notatnika."
};
case "pt-BR": //portuguese (brazil)
return {
popout_note_text: "Notas",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "Canal",
popout_filter_server_text: "Servidor",
popout_filter_all_text: "Todos os servidores",
2018-12-28 14:28:50 +01:00
popout_sort_text: "Ordenar por",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "Mensagem-Data",
popout_sort_notetime_text: "Nota-Data",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "Anote a mensagem",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "Atualize a nota",
2018-12-28 14:28:50 +01:00
context_unpinoption_text: "Remova a nota",
popout_pinoption_text: "Anotar",
toast_noteadd_text: "Mensagem adicionada ao caderno.",
2019-09-03 12:37:14 +02:00
toast_noteupdate_text: "Mensagem atualizada no caderno.",
2018-12-28 14:28:50 +01:00
toast_noteremove_text: "Mensagem removida do caderno."
};
case "fi": //finnish
return {
popout_note_text: "Muistiinpanot",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "Kanava",
popout_filter_server_text: "Palvelin",
popout_filter_all_text: "Kaikki palvelimet",
2018-12-28 14:28:50 +01:00
popout_sort_text: "Järjestä",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "Viesti-Päivämäärä",
popout_sort_notetime_text: "Huomaa-Päivämäärä",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "Huomaa viesti",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "Päivitä muistiinpano",
2018-12-28 14:28:50 +01:00
context_unpinoption_text: "Poista muistiinpano",
popout_pinoption_text: "Huomaa",
toast_noteadd_text: "Viesti lisätty muistikirjaan.",
2019-09-03 12:37:14 +02:00
toast_noteupdate_text: "Viesti päivitetty muistikirjaan.",
2018-12-28 14:28:50 +01:00
toast_noteremove_text: "Viesti poistettiin muistikirjaan."
};
case "sv": //swedish
return {
popout_note_text: "Anteckningarna",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "Kanal",
popout_filter_server_text: "Server",
popout_filter_all_text: "Alla servrar",
2018-12-28 14:28:50 +01:00
popout_sort_text: "Sortera efter",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "Meddelande-Datum",
popout_sort_notetime_text: "Anteckningen-Datum",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "Anteckna meddelande",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "Uppdatera noten",
2018-12-28 14:28:50 +01:00
context_unpinoption_text: "Ta bort noten",
popout_pinoption_text: "Anteckna",
toast_noteadd_text: "Meddelandet läggs till i anteckningsboken.",
2019-09-03 12:37:14 +02:00
toast_noteupdate_text: "Meddelandet uppdateras i anteckningsboken.",
2018-12-28 14:28:50 +01:00
toast_noteremove_text: "Meddelande borttaget från anteckningsboken."
};
case "tr": //turkish
return {
popout_note_text: "Notlar",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "Kanal",
popout_filter_server_text: "Sunucu",
popout_filter_all_text: "Tüm Sunucular",
2018-12-28 14:28:50 +01:00
popout_sort_text: "Göre sırala",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "Mesaj-Tarih",
popout_sort_notetime_text: "Not-Tarih",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "Mesajı not alın",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "Notu güncelle",
2018-12-28 14:28:50 +01:00
context_unpinoption_text: "Notu kaldırmak",
popout_pinoption_text: "Not almak",
toast_noteadd_text: "Mesaj not defteri'ya eklendi.",
2019-09-03 12:37:14 +02:00
toast_noteupdate_text: "Mesaj defterde güncellendi.",
2018-12-28 14:28:50 +01:00
toast_noteremove_text: "Mesaj not defteri'dan kaldırıldı."
};
case "cs": //czech
return {
popout_note_text: "Poznámky",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "Kanál",
popout_filter_server_text: "Server",
popout_filter_all_text: "Všechny servery",
2018-12-28 14:28:50 +01:00
popout_sort_text: "Seřazeno podle",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "Zpráva-datum",
popout_sort_notetime_text: "Poznámka-datum",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "Poznámka dolů zprávu",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "Aktualizujte poznámku",
2018-12-28 14:28:50 +01:00
context_unpinoption_text: "Odstraňte poznámku",
popout_pinoption_text: "Poznámka dolů",
toast_noteadd_text: "Zpráva byla přidána do notebooku.",
2019-09-03 12:37:14 +02:00
toast_noteupdate_text: "Zpráva byla v notebooku aktualizována.",
2018-12-28 14:28:50 +01:00
toast_noteremove_text: "Zpráva byla odebrána z notebooku."
};
case "bg": //bulgarian
return {
popout_note_text: "бележките",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "Канал",
popout_filter_server_text: "Сървър",
popout_filter_all_text: "Всички сървъри",
2018-12-28 14:28:50 +01:00
popout_sort_text: "Сортиране по",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "Съобщение-Дата",
popout_sort_notetime_text: "Забележка-Дата",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "Oтбележете съобщението",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "Актуализирайте бележката",
2018-12-28 14:28:50 +01:00
context_unpinoption_text: "Премахнете бележката",
popout_pinoption_text: "Oтбележете",
toast_noteadd_text: "Съобщението бе добавено към бележника.",
2019-09-03 12:37:14 +02:00
toast_noteupdate_text: "Съобщението е актуализирано в бележника.",
toast_noteremove_text: "Съобщението е премахнато от преносимия бележника."
2018-12-28 14:28:50 +01:00
};
case "ru": //russian
return {
popout_note_text: "Заметки",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "Канал",
popout_filter_server_text: "Cервер",
popout_filter_all_text: "Все серверы",
2018-12-28 14:28:50 +01:00
popout_sort_text: "Сортировать по",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "Сообщение-дата",
popout_sort_notetime_text: "Заметки-Дата",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "Записывать вниз",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "Обновить заметку",
2018-12-28 14:28:50 +01:00
context_unpinoption_text: "Удалить заметку",
popout_pinoption_text: "Записывать",
toast_noteadd_text: "Сообщение добавлено в блокнот.",
2019-09-03 12:37:14 +02:00
toast_noteupdate_text: "Сообщение обновлено в записной блокнот.",
toast_noteremove_text: "Сообщение удалено из записной блокнот."
2018-12-28 14:28:50 +01:00
};
case "uk": //ukrainian
return {
popout_note_text: "Замітки",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "Канал",
popout_filter_server_text: "Сервер",
popout_filter_all_text: "Всі сервери",
2018-12-28 14:28:50 +01:00
popout_sort_text: "Сортувати за",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "Повідомлення-дата",
popout_sort_notetime_text: "Примітка-дата",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "Зверніть увагу на повідомлення",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "Оновіть нотатку",
2018-12-28 14:28:50 +01:00
context_unpinoption_text: "Видаліть нотатку",
popout_pinoption_text: "Занотуйте",
toast_noteadd_text: "Повідомлення додається до ноутбука.",
2019-09-03 12:37:14 +02:00
toast_noteupdate_text: "Повідомлення оновлено в ноутбука.",
2018-12-28 14:28:50 +01:00
toast_noteremove_text: "Повідомлення видалено з ноутбука."
};
case "ja": //japanese
return {
popout_note_text: "ノート",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "チャネル",
popout_filter_server_text: "サーバ",
popout_filter_all_text: "すべてのサーバー",
2018-12-28 14:28:50 +01:00
popout_sort_text: "並び替え",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "メッセージ-日付",
popout_sort_notetime_text: "注-日付",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "ノートダウンメッセージ",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "メモを更新する",
2018-12-28 14:28:50 +01:00
context_unpinoption_text: "メモを削除",
popout_pinoption_text: "書き留める",
toast_noteadd_text: "ノートブックにメッセージが追加されました.",
2019-09-03 12:37:14 +02:00
toast_noteupdate_text: "ノートブックで更新されたメッセージ.",
2018-12-28 14:28:50 +01:00
toast_noteremove_text: "ノートブックからメッセージが削除されました."
};
case "zh-TW": //chinese (traditional)
return {
popout_note_text: "筆記",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "渠道",
popout_filter_server_text: "服務器",
popout_filter_all_text: "所有服務器",
2018-12-28 14:28:50 +01:00
popout_sort_text: "排序方式",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "消息-日期",
popout_sort_notetime_text: "注-日期",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "記下下來的消息",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "更新說明",
2018-12-28 14:28:50 +01:00
context_unpinoption_text: "刪除備註",
popout_pinoption_text: "記下",
toast_noteadd_text: "消息添加到筆記本.",
2019-09-03 12:37:14 +02:00
toast_noteupdate_text: "消息在筆記本中更新.",
2018-12-28 14:28:50 +01:00
toast_noteremove_text: "消息從筆記本中刪除."
};
case "ko": //korean
return {
popout_note_text: "노트",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "채널",
popout_filter_server_text: "섬기는 사람",
popout_filter_all_text: "모든 서버",
2018-12-28 14:28:50 +01:00
popout_sort_text: "정렬 기준",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "메시지-날짜",
popout_sort_notetime_text: "주-날짜",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "메모 다운 메시지",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "메모 업데이트",
2018-12-28 14:28:50 +01:00
context_unpinoption_text: "메모 삭제",
popout_pinoption_text: "메모하다",
toast_noteadd_text: "노트북에 메시지 추가됨.",
2019-09-03 12:37:14 +02:00
toast_noteupdate_text: "노트북에서 메시지가 업데이트되었습니다.",
2018-12-28 14:28:50 +01:00
toast_noteremove_text: "노트에서 메시지 삭제됨."
};
default: //default: english
return {
popout_note_text: "Notes",
2019-11-09 12:53:04 +01:00
popout_filter_channel_text: "Channel",
popout_filter_server_text: "Server",
popout_filter_all_text: "All Servers",
2018-12-28 14:28:50 +01:00
popout_sort_text: "Sort by",
2019-11-09 12:53:04 +01:00
popout_sort_messagetime_text: "Message-Date",
popout_sort_notetime_text: "Note-Date",
2018-12-28 14:28:50 +01:00
context_pinoption_text: "Note Message",
2019-09-03 12:37:14 +02:00
context_updateoption_text: "Update Note",
2018-12-28 14:28:50 +01:00
context_unpinoption_text: "Remove Note",
popout_pinoption_text: "Note",
toast_noteadd_text: "Message added to notebook.",
2019-09-03 12:37:14 +02:00
toast_noteupdate_text: "Message updated in the notebook.",
2018-12-28 14:28:50 +01:00
toast_noteremove_text: "Message removed from notebook."
};
}
}
}