Update message panel selectors to work with the recent Discord update

Closes #41
This commit is contained in:
chylex 2018-08-05 11:34:59 +02:00
parent c9b6e8a947
commit add5163820
2 changed files with 16 additions and 23 deletions

View File

@ -1,8 +1,6 @@
var DISCORD = (function(){ var DISCORD = (function(){
var regexMessageRequest = /\/channels\/(\d+)\/messages[^a-z]/;
var getTopMessageViewElement = function(){ var getTopMessageViewElement = function(){
let view = DOM.fcls("messages"); let view = DOM.queryReactClass("messages");
return view && view.children.length && view.children[0]; return view && view.children.length && view.children[0];
}; };
@ -19,8 +17,8 @@ var DISCORD = (function(){
if (!topEle){ if (!topEle){
restartTimer(500); restartTimer(500);
} }
else if (!topEle.classList.contains("loading-more")){ else if (!topEle.getAttribute("class").includes("loadingMore-")){
let messages = DOM.fcls("messages").children.length; let messages = DOM.queryReactClass("messages").children.length;
if (messages < 100){ if (messages < 100){
waitingForCleanup = 0; waitingForCleanup = 0;
@ -35,12 +33,12 @@ var DISCORD = (function(){
waitingForCleanup = 6; waitingForCleanup = 6;
DOM.setTimer(() => { DOM.setTimer(() => {
let view = DOM.fcls("messages"); let view = DOM.queryReactClass("messages");
view.scrollTop = view.scrollHeight/2; view.scrollTop = view.scrollHeight/2;
}, 1); }, 1);
} }
callback(topEle.classList.contains("has-more")); callback(topEle.getAttribute("class").includes("hasMore-"));
restartTimer(200); restartTimer(200);
} }
} }
@ -95,7 +93,7 @@ var DISCORD = (function(){
"server": name, "server": name,
"channel": name, "channel": name,
"id": linkSplit[linkSplit.length-1], "id": linkSplit[linkSplit.length-1],
"type": DOM.cls("status", channel).length ? "DM" : "GROUP" "type": !!DOM.fcls("status", channel) ? "DM" : "GROUP"
}; };
} }
else{ else{
@ -132,7 +130,7 @@ var DISCORD = (function(){
* Returns an array containing currently loaded messages. * Returns an array containing currently loaded messages.
*/ */
getMessages: function(){ getMessages: function(){
var props = DISCORD.getReactProps(DOM.fcls("messages")); var props = DISCORD.getReactProps(DOM.queryReactClass("messages"));
var array = props && props.children.find(ele => ele && ele.length); var array = props && props.children.find(ele => ele && ele.length);
var messages = []; var messages = [];
@ -150,21 +148,21 @@ var DISCORD = (function(){
/* /*
* Returns true if the message view is visible. * Returns true if the message view is visible.
*/ */
isInMessageView: () => DOM.cls("messages").length > 0, isInMessageView: () => !!DOM.queryReactClass("messages"),
/* /*
* Returns true if there are more messages available or if they're still loading. * Returns true if there are more messages available or if they're still loading.
*/ */
hasMoreMessages: function(){ hasMoreMessages: function(){
let classes = getTopMessageViewElement().classList; let classes = getTopMessageViewElement().getAttribute("class");
return classes.contains("has-more") || classes.contains("loading-more"); return classes.includes("hasMore-") || classes.includes("loadingMore-");
}, },
/* /*
* Forces the message view to load older messages by scrolling all the way up. * Forces the message view to load older messages by scrolling all the way up.
*/ */
loadOlderMessages: function(){ loadOlderMessages: function(){
let view = DOM.fcls("messages"); let view = DOM.queryReactClass("messages");
view.scrollTop = view.scrollHeight/2; view.scrollTop = view.scrollHeight/2;
view.scrollTop = 0; view.scrollTop = 0;
}, },

View File

@ -11,16 +11,6 @@ var DOM = (function(){
*/ */
id: (id, parent) => (parent || document).getElementById(id), id: (id, parent) => (parent || document).getElementById(id),
/*
* Returns an array of all child elements containing the specified class. Parent defaults to the entire document.
*/
cls: (cls, parent) => Array.prototype.slice.call((parent || document).getElementsByClassName(cls)),
/*
* Returns an array of all child elements that have the specified tag. Parent defaults to the entire document.
*/
tag: (tag, parent) => Array.prototype.slice.call((parent || document).getElementsByTagName(tag)),
/* /*
* Returns the first child element containing the specified class. Parent defaults to the entire document. * Returns the first child element containing the specified class. Parent defaults to the entire document.
*/ */
@ -31,6 +21,11 @@ var DOM = (function(){
*/ */
ftag: (tag, parent) => (parent || document).getElementsByTagName(tag)[0], ftag: (tag, parent) => (parent || document).getElementsByTagName(tag)[0],
/*
* Returns the first child element containing the specified obfuscated class. Parent defaults to the entire document.
*/
queryReactClass: (cls, parent) => (parent || document).querySelector(`[class*="${cls}-"]`),
/* /*
* Creates an element, adds it to the DOM, and returns it. * Creates an element, adds it to the DOM, and returns it.
*/ */