forked from Demon/demoncord
Compare commits
13 Commits
Author | SHA1 | Date |
---|---|---|
Drake | 17c6bfd336 | 2 years ago |
Drake | a694bb1f60 | 2 years ago |
Drake | 67612a8f1d | 2 years ago |
Drake | 428886645f | 2 years ago |
Drake | d50b3ef708 | 2 years ago |
Drake | 72606d3813 | 2 years ago |
Drake | 8dbed1dd82 | 2 years ago |
Drake | 1108ca097e | 2 years ago |
Drake | 017120d8d3 | 2 years ago |
Drake | 50741a3569 | 2 years ago |
Drake | 1cd06e2aab | 2 years ago |
Drake | a507bb52a1 | 2 years ago |
Drake | 2a4389a61b | 2 years ago |
@ -0,0 +1,3 @@
|
||||
{
|
||||
"presets": ["@babel/preset-flow", "@babel/preset-react"]
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
import esbuild from "esbuild";
|
||||
import babel from "esbuild-plugin-babel";
|
||||
|
||||
(async () => {
|
||||
try {
|
||||
await esbuild.build({
|
||||
entryPoints: ["src/index.js"],
|
||||
bundle: true,
|
||||
minify: true,
|
||||
format: "iife",
|
||||
target: "es2021",
|
||||
outfile: "dist/build.js",
|
||||
plugins: [babel()]
|
||||
});
|
||||
console.log("Build succeeded!");
|
||||
process.exit(0);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
console.log("Build failed!");
|
||||
process.exit(1);
|
||||
}
|
||||
})(); //IIFE to shutup lsp
|
File diff suppressed because it is too large
Load Diff
@ -1,14 +0,0 @@
|
||||
import flow from "rollup-plugin-flow";
|
||||
import { minify } from "rollup-plugin-esbuild";
|
||||
import { nodeResolve } from "@rollup/plugin-node-resolve";
|
||||
import commonjs from "@rollup/plugin-commonjs";
|
||||
import { defineConfig } from "rollup";
|
||||
|
||||
export default defineConfig({
|
||||
input: "src/index.js",
|
||||
plugins: [flow(), commonjs(), nodeResolve(), minify()],
|
||||
output: {
|
||||
file: "dist/build.js",
|
||||
format: "iife",
|
||||
},
|
||||
});
|
@ -0,0 +1,3 @@
|
||||
import { React } from "../src/api/common.js";
|
||||
|
||||
export { React };
|
@ -0,0 +1,56 @@
|
||||
// @flow
|
||||
//TODO: proper typing
|
||||
//TODO: use webpack to find
|
||||
|
||||
//TODO: funny sink code
|
||||
//(() => {
|
||||
// const raw = findAll(
|
||||
// (m) =>
|
||||
// typeof m === "object" &&
|
||||
// Object.values(m).length > 0 &&
|
||||
// Object.values(m).every((v) => typeof v === "string")
|
||||
// );
|
||||
// const map = new Map();
|
||||
// for (const m of raw)
|
||||
// for (const [k, v] of Object.entries(m))
|
||||
// if (map.has(k)) map.get(k).push(v);
|
||||
// else map.set(k, [v]);
|
||||
// return map;
|
||||
//})();
|
||||
function getAllClasses() {
|
||||
return document.styleSheets[0].rules || document.styleSheets[0].cssRules;
|
||||
}
|
||||
|
||||
function getClassListByName(className) {
|
||||
const classes = getAllClasses();
|
||||
return classes;
|
||||
}
|
||||
|
||||
//how to define getters and setters on an object:
|
||||
//
|
||||
//Object.defineProperty(hello, "place", {
|
||||
// set: (x) => {
|
||||
// this.oldPlace = this.place;
|
||||
// this.place = x;
|
||||
// },
|
||||
// get: (x) => {
|
||||
// console.log(
|
||||
// "Current place: " + this.place + "\nPlace before this: " + this.oldPlace
|
||||
// );
|
||||
// return this.place;
|
||||
// },
|
||||
//});
|
||||
|
||||
function getProxyObj(classes) {}
|
||||
|
||||
function init(obj: Object) {
|
||||
obj.demon.css = {
|
||||
classes: {
|
||||
get: (className) => {}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export default {
|
||||
init
|
||||
};
|
@ -0,0 +1,83 @@
|
||||
// @flow
|
||||
/*import { make, join } from '@modules/styles';
|
||||
import SettingsAPI from '@modules/apis/Settings';
|
||||
import Manager, { modules } from '@modules/manager';
|
||||
|
||||
const styles = make('pluginCard');
|
||||
const Settings = SettingsAPI.create('modules');
|
||||
|
||||
const { Filters } = Webpack;
|
||||
|
||||
const [
|
||||
SwitchItem,
|
||||
{ Heading },
|
||||
SettingsIcon,
|
||||
] = Webpack.bulk(
|
||||
Filters.byDisplayName('SwitchItem'),
|
||||
Filters.byProps('Heading'),
|
||||
Filters.byDisplayName('Gear'),
|
||||
);*/
|
||||
|
||||
import common from "../../../common";
|
||||
import webpack from "../../../webpack";
|
||||
const React = common.React;
|
||||
|
||||
const SwitchItem = webpack.findByDisplayName("SwitchItem");
|
||||
const { Heading } = webpack.findByProps("Heading");
|
||||
const SettingsIcon = webpack.findByDisplayName("Gear");
|
||||
|
||||
function useDidUpdateEffect(effect, deps?) {
|
||||
const didMountRef = React.useRef(false);
|
||||
|
||||
React.useEffect(() => {
|
||||
if (didMountRef.current) return effect();
|
||||
|
||||
// else set didMount to true
|
||||
didMountRef.current = true;
|
||||
}, deps);
|
||||
}
|
||||
|
||||
export default (module: {
|
||||
file: string,
|
||||
name: string,
|
||||
version: string,
|
||||
description: string,
|
||||
setPage: React.Dispatch<React.SetStateAction<string>>
|
||||
}) => {
|
||||
return (
|
||||
<div className={styles.container}>
|
||||
<div className={styles.headerContainer}>
|
||||
<div className={styles.textContainer}>
|
||||
<Heading
|
||||
level={2}
|
||||
lineClamp={1}
|
||||
className={styles.text}
|
||||
variant="heading-lg/medium"
|
||||
>
|
||||
{module.name}
|
||||
</Heading>
|
||||
<div className={styles.version}>{module.version}</div>
|
||||
</div>
|
||||
<SwitchItem
|
||||
hideBorder
|
||||
value={enabled}
|
||||
onChange={setEnabled}
|
||||
className={styles.switch}
|
||||
/>
|
||||
<div
|
||||
className={join(
|
||||
styles.settings,
|
||||
!enabled || !settings ? styles.settingsDisabled : false
|
||||
)}
|
||||
>
|
||||
<SettingsIcon
|
||||
onClick={() =>
|
||||
enabled && settings && setPage(module.file)
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className={styles.description}>{module.description}</div>
|
||||
</div>
|
||||
);
|
||||
};
|
@ -0,0 +1,16 @@
|
||||
// @flow
|
||||
import webpack from "../../webpack.js";
|
||||
import common from "../../common.js";
|
||||
const React = common.React;
|
||||
|
||||
const FormTitle = webpack.findByDisplayName("FormTitle");
|
||||
const FormDivider = webpack.findByDisplayName("FormDivider");
|
||||
const FormSection = webpack.findByDisplayName("FormSection");
|
||||
|
||||
export default function (): any {
|
||||
return (
|
||||
<FormSection>
|
||||
<FormTitle tag="h1">Demoncord Settings</FormTitle>
|
||||
</FormSection>
|
||||
);
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
// @flow
|
||||
import tmp from "./settingsInj.js";
|
||||
const registerSettingsEntry = tmp.registerSettingsEntry;
|
||||
import common from "../common.js";
|
||||
const React = common.React;
|
||||
|
||||
import Settings from "./components/settings.jsx";
|
||||
|
||||
function init() {
|
||||
console.log(Settings);
|
||||
console.log(Settings());
|
||||
registerSettingsEntry("General Settings", undefined, Settings);
|
||||
}
|
||||
|
||||
export default {
|
||||
init
|
||||
};
|
@ -1,7 +1,34 @@
|
||||
import init from "./init.js"
|
||||
// @flow
|
||||
import init from "./init.js";
|
||||
import settingsInj from "./api/settings/settingsInj";
|
||||
import commands from "./api/commands";
|
||||
|
||||
if (window.demon) {
|
||||
delete window.demon; // this is a very good idea
|
||||
const obj = {};
|
||||
|
||||
init(obj);
|
||||
|
||||
window.demon = {};
|
||||
|
||||
function isAllowed(mod: String): boolean {
|
||||
//TODO: permissions checking
|
||||
return true;
|
||||
}
|
||||
|
||||
window.demon.require = (mod: String): Object => {
|
||||
if (!isAllowed(mod)) {
|
||||
throw new Error("Not allowed!"); //TODO: make this not irrepairably error out
|
||||
}
|
||||
const mods = mod.split("/");
|
||||
let res = obj.demon;
|
||||
mods.forEach((m) => {
|
||||
if (m in res) {
|
||||
res = res[m];
|
||||
} else {
|
||||
throw new Error("Module does not exist!");
|
||||
}
|
||||
});
|
||||
return res;
|
||||
};
|
||||
|
||||
init(window)
|
||||
settingsInj.init();
|
||||
commands.init(obj);
|
||||
|
Loading…
Reference in new issue