minor fixes

This commit is contained in:
Zack Rauen 2020-03-29 15:43:42 -04:00
parent ded3f96b07
commit 097c2687fb
11 changed files with 112 additions and 141 deletions

File diff suppressed because one or more lines are too long

2
js/main.min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -4,9 +4,18 @@ localStorageFix();
loadingIcon(); loadingIcon();
const deprecateGlobal = (key, value) => { const deprecateGlobal = (key, value) => {
// value = typeof(value) !== "object" ? value : new Proxy(value, {
// get: function(obj, mod) {
// if (!obj.hasOwnProperty(mod)) return undefined;
// return obj[mod];
// },
// set: function(obj, mod) {
// if (obj.hasOwnProperty(mod)) return Utils.err("Deprecated Global", "Trying to overwrite deprecated BD globals");
// }
// });
Object.defineProperty(window, key, { Object.defineProperty(window, key, {
get() { get() {
Utils.warn("Deprecation Notice", `"${key}" will be removed in future versions. Please only use BdApi.`); Utils.warn("Deprecated Global", `"${key}" will be removed in future versions. Please only use BdApi.`);
return value; return value;
} }
}); });

View File

@ -185,36 +185,38 @@ Core.prototype.patchSocial = function() {
if (this.socialPatch) return; if (this.socialPatch) return;
const TabBar = WebpackModules.find(m => m.displayName == "TabBar"); const TabBar = WebpackModules.find(m => m.displayName == "TabBar");
const Anchor = WebpackModules.find(m => m.displayName == "Anchor"); const Anchor = WebpackModules.find(m => m.displayName == "Anchor");
if (!TabBar || !Anchor) return; if (!TabBar) return;
this.socialPatch = Utils.monkeyPatch(TabBar.prototype, "render", {after: (data) => { this.socialPatch = Utils.monkeyPatch(TabBar.prototype, "render", {after: (data) => {
const children = data.returnValue.props.children; const children = data.returnValue.props.children;
if (!children || !children.length || children.length < 3) return; if (!children || !children.length || children.length < 3) return;
if (children[children.length - 3].type.displayName !== "Separator") return; if (children[children.length - 3].type.displayName !== "Separator") return;
if (!children[children.length - 2].type.toString().includes("socialLinks")) return; if (!children[children.length - 2].type.toString().includes("socialLinks")) return;
const original = children[children.length - 2].type; if (Anchor) {
const newOne = function() { const original = children[children.length - 2].type;
const returnVal = original(...arguments); const newOne = function() {
returnVal.props.children.push( const returnVal = original(...arguments);
BDV2.React.createElement(TooltipWrap, {color: "black", side: "top", text: "BandagedBD"}, returnVal.props.children.push(
BDV2.React.createElement(Anchor, {className: "bd-social-link", href: "https://github.com/rauenzi/BetterDiscordApp", title: "BandagedBD", target: "_blank"}, BDV2.React.createElement(TooltipWrap, {color: "black", side: "top", text: "BandagedBD"},
BDV2.React.createElement(BDLogo, {size: "16px", className: "bd-social-logo"}) BDV2.React.createElement(Anchor, {className: "bd-social-link", href: "https://github.com/rauenzi/BetterDiscordApp", title: "BandagedBD", target: "_blank"},
BDV2.React.createElement(BDLogo, {size: "16px", className: "bd-social-logo"})
)
) )
) );
); return returnVal;
return returnVal; };
}; children[children.length - 2].type = newOne;
children[children.length - 2].type = newOne; }
const BBDLink = BDV2.React.createElement(Anchor, {className: "bd-social-link", href: "https://twitter.com/BandagedBD", title: "BandagedBD", target: "_blank"}, "BandagedBD"); const injector = BDV2.react.createElement("div", {className: "colorMuted-HdFt4q size12-3cLvbJ"}, `Injector ${bdConfig.version}`);
const AuthorLink = BDV2.React.createElement(Anchor, {className: "bd-social-link", href: "https://twitter.com/ZackRauen", title: "Zerebos", target: "_blank"}, "Zerebos"); const versionHash = `(${bdConfig.hash ? bdConfig.hash.substring(0, 7) : bdConfig.branch})`;
const additional = BDV2.react.createElement("div", {className: "colorMuted-HdFt4q size12-3cLvbJ"}, [BBDLink, ` ${bbdVersion} by `, AuthorLink]); const additional = BDV2.react.createElement("div", {className: "colorMuted-HdFt4q size12-3cLvbJ"}, `BBD ${bbdVersion} `, BDV2.react.createElement("span", {className: "versionHash-2gXjIB da-versionHash"}, versionHash));
const injector = BDV2.react.createElement("div", {className: "colorMuted-HdFt4q size12-3cLvbJ"}, ["BBD Injector", ` ${bdConfig.version} by `, AuthorLink]);
const originalVersions = children[children.length - 1].type; const originalVersions = children[children.length - 1].type;
children[children.length - 1].type = function() { children[children.length - 1].type = function() {
const returnVal = originalVersions(...arguments); const returnVal = originalVersions(...arguments);
returnVal.props.children.push(injector); returnVal.props.children.splice(returnVal.props.children.length - 1, 0, injector);
returnVal.props.children.push(additional); returnVal.props.children.splice(1, 0, additional);
return returnVal; return returnVal;
}; };
}}); }});

View File

@ -22,7 +22,14 @@ PluginModule.prototype.loadPlugins = function () {
plugin = bdplugins[plugins[i]].plugin; plugin = bdplugins[plugins[i]].plugin;
name = plugin.getName(); name = plugin.getName();
if (plugin.load && typeof(plugin.load) == "function") plugin.load(); if (plugin.load && typeof(plugin.load) == "function") plugin.load();
const meta = bdplugins[plugins[i]]; let meta = bdplugins[plugins[i]];
// Because DiscordCrypt is freezing bd globals they shouldn't be accessing.
if (Object.isFrozen(meta)) {
meta = Object.assign({}, meta);
delete bdplugins[plugins[i]];
bdplugins[plugins[i]] = meta;
}
meta.name = this.getString(plugin.getName()); meta.name = this.getString(plugin.getName());
meta.author = this.getString(plugin.getAuthor()); meta.author = this.getString(plugin.getAuthor());
meta.description = this.getString(plugin.getDescription()); meta.description = this.getString(plugin.getDescription());

View File

@ -31,8 +31,8 @@ export default new class V2_SettingsPanel {
this.onChange = this.onChange.bind(this); this.onChange = this.onChange.bind(this);
this.updateSettings = this.updateSettings.bind(this); this.updateSettings = this.updateSettings.bind(this);
this.sidebar = new V2_SettingsPanel_Sidebar(this.sideBarOnClick); this.sidebar = new V2_SettingsPanel_Sidebar(this.sideBarOnClick);
this.buildPluginProps = this.buildPluginProps.bind(this); // this.buildPluginProps = this.buildPluginProps.bind(this);
this.buildThemeProps = this.buildThemeProps.bind(this); // this.buildThemeProps = this.buildThemeProps.bind(this);
this.showOriginal = this.showOriginal.bind(this); this.showOriginal = this.showOriginal.bind(this);
} }
@ -93,10 +93,8 @@ export default new class V2_SettingsPanel {
this.renderCustomCssEditor(); this.renderCustomCssEditor();
break; break;
case "plugins": case "plugins":
this.renderPluginPane();
break;
case "themes": case "themes":
this.renderThemePane(); this.renderAddonPane(id);
break; break;
} }
} }
@ -164,11 +162,6 @@ export default new class V2_SettingsPanel {
else Utils.setWindowPreference("backgroundColor", "#2f3136"); else Utils.setWindowPreference("backgroundColor", "#2f3136");
} }
/*if (_c["fork-wp-2"]) {
const current = BdApi.getWindowPreference("frame");
if (current != _c["fork-wp-2"]) BdApi.setWindowPreference("frame", _c["fork-wp-2"]);
}*/
if (id == "bda-gs-8") { if (id == "bda-gs-8") {
if (enabled) dMode.startDebugListener(); if (enabled) dMode.startDebugListener();
@ -258,110 +251,62 @@ export default new class V2_SettingsPanel {
); );
} }
contentComponent(type) {
const componentElement = this.getAddonList(type);
const prefix = type.replace("s", "");
const settingsList = this;
class ContentList extends BDV2.react.Component {
constructor(props) {
super(props);
this.onChange = this.onChange.bind(this);
}
componentDidMount() {
BDEvents.on(`${prefix}-reloaded`, this.onChange);
BDEvents.on(`${prefix}-loaded`, this.onChange);
BDEvents.on(`${prefix}-unloaded`, this.onChange);
}
componentWillUnmount() {
BDEvents.off(`${prefix}-reloaded`, this.onChange);
BDEvents.off(`${prefix}-loaded`, this.onChange);
BDEvents.off(`${prefix}-unloaded`, this.onChange);
}
onChange() {
settingsList.sideBarOnClick(type);
}
render() {return componentElement;}
}
return BDV2.react.createElement(ContentList);
}
getString(value) {
if (!value) return "???";
return typeof value == "string" ? value : value.toString();
}
buildPluginProps(meta) {
const plugin = meta.plugin;
return Object.assign({}, meta, {
name: this.getString(plugin.getName()),
author: this.getString(plugin.getAuthor()),
description: this.getString(plugin.getDescription()),
version: this.getString(plugin.getVersion()),
getSettingsPanel: plugin.getSettingsPanel && plugin.getSettingsPanel.bind(plugin)
});
}
buildThemeProps(meta) {
return Object.assign({}, meta, {
name: this.getString(meta.name),
author: this.getString(meta.author),
description: this.getString(meta.description),
version: this.getString(meta.version)
});
}
getAddonList(type) {
const isPlugins = type === "plugins";
const list = isPlugins ? Object.values(bdplugins) : Object.values(bdthemes);
return BDV2.react.createElement(CardList, {type, list});
}
renderCoreSettings() { renderCoreSettings() {
const root = this.root; const root = this.root;
if (!root) { if (!root) return Utils.err("SettingsPanel", "FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i");
console.log("FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i");
return;
}
BDV2.reactDom.render(this.coreComponent, root); BDV2.reactDom.render(this.coreComponent, root);
} }
renderEmoteSettings() { renderEmoteSettings() {
const root = this.root; const root = this.root;
if (!root) { if (!root) return Utils.err("SettingsPanel", "FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i");
console.log("FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i");
return;
}
BDV2.reactDom.render(this.emoteComponent, root); BDV2.reactDom.render(this.emoteComponent, root);
} }
renderCustomCssEditor() { renderCustomCssEditor() {
const root = this.root; const root = this.root;
if (!root) { if (!root) return Utils.err("SettingsPanel", "FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i");
console.log("FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i");
return;
}
BDV2.reactDom.render(this.customCssComponent, root); BDV2.reactDom.render(this.customCssComponent, root);
} }
renderPluginPane() { // renderAddonPane(type) {
const root = this.root; // const root = this.root;
if (!root) { // if (!root) return Utils.err("SettingsPanel", "FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i");
console.log("FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i"); // BDV2.reactDom.render(this.contentComponent(type), root);
return; // }
}
BDV2.reactDom.render(this.contentComponent("plugins"), root);
}
renderThemePane() { renderAddonPane(type) {
const root = this.root; if (!this.root) return Utils.err("SettingsPanel", "FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i");
if (!root) { // I know this shouldn't be here, but when it isn't,
console.log("FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i"); // React refuses to change the button when going
return; // between plugins and themes page... something
// to debug later.
class ContentList extends BDV2.react.Component {
constructor(props) {
super(props);
this.prefix = this.props.type.replace("s", "");
this.onChange = this.onChange.bind(this);
}
componentDidMount() {
BDEvents.on(`${this.prefix}-reloaded`, this.onChange);
BDEvents.on(`${this.prefix}-loaded`, this.onChange);
BDEvents.on(`${this.prefix}-unloaded`, this.onChange);
}
componentWillUnmount() {
BDEvents.off(`${this.prefix}-reloaded`, this.onChange);
BDEvents.off(`${this.prefix}-loaded`, this.onChange);
BDEvents.off(`${this.prefix}-unloaded`, this.onChange);
}
onChange() {
this.props.onChange(this.props.type);
}
render() {return this.props.children;}
} }
BDV2.reactDom.render(this.contentComponent("themes"), root); const list = type === "plugins" ? Object.values(bdplugins) : Object.values(bdthemes);
return BDV2.reactDom.render(BDV2.react.createElement(ContentList, {type, onChange: this.sideBarOnClick}, BDV2.react.createElement(CardList, {type, list})), this.root);
} }
}; };

View File

@ -187,15 +187,20 @@ export default class Utils {
* @param {number} options.timeout Adjusts the time (in ms) the toast should be shown for before disappearing automatically. Default: 3000 * @param {number} options.timeout Adjusts the time (in ms) the toast should be shown for before disappearing automatically. Default: 3000
*/ */
static showToast(content, options = {}) { static showToast(content, options = {}) {
// if (!bdConfig.deferLoaded) return;
if (!document.querySelector(".bd-toasts")) { if (!document.querySelector(".bd-toasts")) {
const container = document.querySelector(".sidebar-2K8pFh + div") || null;
const memberlist = container ? container.querySelector(".membersWrap-2h-GB4") : null;
const form = container ? container.querySelector("form") : null;
const left = container ? container.getBoundingClientRect().left : 310;
const right = memberlist ? memberlist.getBoundingClientRect().left : 0;
const width = right ? right - container.getBoundingClientRect().left : Utils.screenWidth - left - 240;
const bottom = form ? form.offsetHeight : 80;
const toastWrapper = document.createElement("div"); const toastWrapper = document.createElement("div");
toastWrapper.classList.add("bd-toasts"); toastWrapper.classList.add("bd-toasts");
const boundingElement = document.querySelector(".chat-3bRxxu form, #friends, .noChannel-Z1DQK7, .activityFeed-28jde9"); toastWrapper.style.setProperty("left", left + "px");
toastWrapper.style.setProperty("left", boundingElement ? boundingElement.getBoundingClientRect().left + "px" : "0px"); toastWrapper.style.setProperty("width", width + "px");
toastWrapper.style.setProperty("width", boundingElement ? boundingElement.offsetWidth + "px" : "100%"); toastWrapper.style.setProperty("bottom", bottom + "px");
toastWrapper.style.setProperty("bottom", (document.querySelector(".chat-3bRxxu form") ? document.querySelector(".chat-3bRxxu form").offsetHeight : 80) + "px"); document.querySelector("#app-mount").appendChild(toastWrapper);
document.querySelector(".app, .app-2rEoOp").appendChild(toastWrapper);
} }
const {type = "", icon = true, timeout = 3000} = options; const {type = "", icon = true, timeout = 3000} = options;
const toastElem = document.createElement("div"); const toastElem = document.createElement("div");
@ -377,4 +382,6 @@ export default class Utils {
}, props)); }, props));
}); });
} }
} }
Utils.showToast = Utils.suppressErrors(Utils.showToast, "Could not show toast.");

View File

@ -11,6 +11,7 @@ import Switch from "./components/switch";
import TooltipWrap from "./tooltipWrap"; import TooltipWrap from "./tooltipWrap";
const React = BDV2.React; const React = BDV2.React;
const anchorClasses = BDV2.anchorClasses;
export default class V2C_PluginCard extends BDV2.reactComponent { export default class V2C_PluginCard extends BDV2.reactComponent {
@ -112,7 +113,7 @@ export default class V2C_PluginCard extends BDV2.reactComponent {
if (nameIndex) { if (nameIndex) {
const props = {className: "author bda-author"}; const props = {className: "author bda-author"};
if (author.link || author.id) { if (author.link || author.id) {
props.className += ` ${BDV2.anchorClasses.anchor} ${BDV2.anchorClasses.anchorUnderlineOnHover}`; props.className += ` ${anchorClasses.anchor} ${anchorClasses.anchorUnderlineOnHover}`;
props.target = "_blank"; props.target = "_blank";
if (author.link) props.href = author.link; if (author.link) props.href = author.link;

View File

@ -93,7 +93,7 @@ export default class CardList extends BDV2.reactComponent {
key: addon.name, key: addon.name,
enabled: this.cookie[addon.name], enabled: this.cookie[addon.name],
toggle: this.manager.toggle.bind(this.manager), toggle: this.manager.toggle.bind(this.manager),
edit: this.edit.bind(this), //edit: this.edit.bind(this),
remove: this.delete.bind(this), remove: this.delete.bind(this),
addon: addon addon: addon
}; };

View File

@ -63,8 +63,8 @@ export default class EmulatedTooltip {
if (!classExists(this.side)) return Utils.err("EmulatedTooltip", `Side ${this.side} does not exist.`); if (!classExists(this.side)) return Utils.err("EmulatedTooltip", `Side ${this.side} does not exist.`);
if (!classExists(this.style)) return Utils.err("EmulatedTooltip", `Style ${this.style} does not exist.`); if (!classExists(this.style)) return Utils.err("EmulatedTooltip", `Style ${this.style} does not exist.`);
this.element = DOM.createElement(`<div class="${TooltipLayers.layer}">`); this.element = DOM.createElement(`<div class="${TooltipLayers.layer}"><div class="${TooltipClasses.tooltip} ${getClass(this.style)}"><div class="${TooltipClasses.tooltipPointer}"></div>${this.label}</div></div>`);
this.tooltipElement = DOM.createElement(`<div class="${TooltipClasses.tooltip} ${getClass(this.style)}"><div class="${TooltipClasses.tooltipPointer}"></div>${this.label}</div>`); this.tooltipElement = this.element.childNodes[0];
this.labelElement = this.tooltipElement.childNodes[1]; this.labelElement = this.tooltipElement.childNodes[1];
this.element.append(this.tooltipElement); this.element.append(this.tooltipElement);

View File

@ -8,7 +8,7 @@ export default class extends BDV2.reactComponent {
this.onMouseLeave = this.onMouseLeave.bind(this); this.onMouseLeave = this.onMouseLeave.bind(this);
} }
componentDidMount() { async componentDidMount() {
const {style = "black", side = "top", text = ""} = this.props; const {style = "black", side = "top", text = ""} = this.props;
this.node = BDV2.reactDom.findDOMNode(this); this.node = BDV2.reactDom.findDOMNode(this);
// this.node.addEventListener("mouseenter", this.onMouseEnter); // this.node.addEventListener("mouseenter", this.onMouseEnter);