From 25a1873bdb54f8d1a1ed4248162e84a915942892 Mon Sep 17 00:00:00 2001 From: Ruthenic Date: Mon, 11 Jul 2022 10:43:07 -0400 Subject: [PATCH] toggle plugin ui, delete plugin ui --- dist/build.js | 2 +- rollup.config.js | 8 +++++++- src/api/common.js | 3 ++- src/api/plugin.js | 15 +++++++++++++++ src/api/ui/settings/plugincard.jsx | 28 +++++++++++++++++++++++++--- src/api/ui/settings/plugins.jsx | 8 ++++---- src/api/ui/settings/settings.js | 17 +++++++++++++++-- src/shim_react.js | 17 +++++++++++++++++ 8 files changed, 86 insertions(+), 12 deletions(-) create mode 100644 src/shim_react.js diff --git a/dist/build.js b/dist/build.js index 45cac64..546b913 100644 --- a/dist/build.js +++ b/dist/build.js @@ -1 +1 @@ -!function(){"use strict";function e(){let t={};return window.webpackChunkdiscord_app.push([[Math.random().toString(36)],{},e=>{t=e}]),t.c}let n={modules:e(),filter:function(e,t){let n=[];for(const o in t){var r=t[o].exports;r&&(r.default&&r.__esModule&&e(r.default)?n.push(r.default):e(r)&&n.push(r))}return n},find:e=>n.filter(e,n.modules)[0],findAll:e=>n.filter(e,n.modules),findByProps:(...e)=>n.find(t=>e.every(e=>void 0!==t[e])),findByPropsAll:(...e)=>n.findAll(t=>e.every(e=>void 0!==t[e])),findByDisplayName:t=>n.find(e=>function(e){let t=void 0,n=e[0],r=1;for(;rn.call(t,...e)),t=void 0)}return n}([e,"optionalAccess",e=>e.displayName])===t),findByStrings:(...e)=>n.find(t=>e.every(e=>t.toString().contains(e))),reloadModules:()=>{n.modules=e()}};function i(n){return new Promise((e,t)=>{n.oncomplete=n.onsuccess=()=>e(n.result),n.onabort=n.onerror=()=>t(n.error)})}function t(t,r){const e=(!navigator.userAgentData&&/Safari\//.test(navigator.userAgent)&&!/Chrom(e|ium)\//.test(navigator.userAgent)&&indexedDB.databases?new Promise(function(e){function t(){return indexedDB.databases().finally(e)}n=setInterval(t,100),t()}).finally(function(){return clearInterval(n)}):Promise.resolve()).then(()=>{const e=indexedDB.open(t);return e.onupgradeneeded=()=>e.result.createObjectStore(r),i(e)});var n;return(t,n)=>e.then(e=>n(e.transaction(r,t).objectStore(r)))}let r;function s(){return r=r||t("keyval-store","keyval")}function o(t,e=s()){return e("readonly",e=>i(e.get(t)))}function a(t,n,e=s()){return e("readwrite",e=>(e.put(n,t),i(e.transaction)))}function l(e,t){return e.openCursor().onsuccess=function(){this.result&&(t(this.result),this.result.continue())},i(e.transaction)}var c=Object.freeze({__proto__:null,clear:function(e=s()){return e("readwrite",e=>(e.clear(),i(e.transaction)))},createStore:t,del:function(t,e=s()){return e("readwrite",e=>(e.delete(t),i(e.transaction)))},delMany:function(e,t=s()){return t("readwrite",t=>(e.forEach(e=>t.delete(e)),i(t.transaction)))},entries:function(n=s()){return n("readonly",e=>{if(e.getAll&&e.getAllKeys)return Promise.all([i(e.getAllKeys()),i(e.getAll())]).then(([e,n])=>e.map((e,t)=>[e,n[t]]));const t=[];return n("readonly",e=>l(e,e=>t.push([e.key,e.value])).then(()=>t))})},get:o,getMany:function(e,t=s()){return t("readonly",t=>Promise.all(e.map(e=>i(t.get(e)))))},keys:function(e=s()){return e("readonly",e=>{if(e.getAllKeys)return i(e.getAllKeys());const t=[];return l(e,e=>t.push(e.key)).then(()=>t)})},promisifyRequest:i,set:a,setMany:function(e,t=s()){return t("readwrite",t=>(e.forEach(e=>t.put(e[1],e[0])),i(t.transaction)))},update:function(r,o,e=s()){return e("readwrite",n=>new Promise((e,t)=>{n.get(r).onsuccess=function(){try{n.put(o(this.result),r),e(i(n.transaction))}catch(e){t(e)}}}))},values:function(e=s()){return e("readonly",e=>{if(e.getAll)return i(e.getAll());const t=[];return l(e,e=>t.push(e.value)).then(()=>t)})}}),u=Object.freeze({GET:"GET",SET:"SET",DELETE:"DELETE",UPDATE:"UPDATE"});class d{constructor(){this.listeners=Object.values(u).reduce((e,t)=>(e[t]=new Set,e),{}),this.on=function(e,t){if(this.listeners[e].has(t))throw Error(`This listener on ${e} already exists.`);this.listeners[e].add(t)},this.once=function(e,n){const r=(e,t)=>{this.off(e,r),n(e,t)};this.on(e,r)},this.off=function(e,t){this.listeners[e].delete(t)},this.emit=function(e,t){for(const n of this.listeners[e])n(e,t)};for(const t of Object.values(u))this[t.toLowerCase()]=e=>{this.emit(t,e)}}}function f(e={},{nestArrays:a=!0}={}){const l=new d;return Object.assign({store:function o(e,i,s){return new Proxy(e,{get(e,t){var n=[...s,t],r=e[t];return null!=r?(l.get({path:n,value:r}),!a&&Array.isArray(r)||"object"!=typeof r?r:o(r,i,n)):o(e[t]={},i,n)},set(e,t,n){return e[t]=n,l.set({path:[...s,t],value:n}),!0},deleteProperty(e,t){return delete e[t]&&(l.delete({path:[...s,t]}),!0)},has(e,t){return("object"!=typeof e[t]||0!==Object.keys(e[t]).length)&&t in e}})}(e,e,[]),ghost:e},l)}var m=Object.freeze({__proto__:null,Events:u,make:f});const p=n["findByProps"],g=p("__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","createElement");c={React:g,ReactDOM:p("__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","hydrate"),dispatch:p("dirtyDispatch").__proto__,idb:c,nests:m};function y(i,s=!1){return function(e,...t){t=t.join(""),void 0===e&&(e=["Default"],y("warn")("Requested hierarchy has not been passed to logger function, defaulting to default string",["Logger"])),"string"==typeof e&&(t=e,e=["Default"]);let n=["Demoncord",...e,t],r=[],o="";s&&n.splice(0,1);for(let e=0;e{e=r.plugins[e];const t=(0,eval)(e.initialize);var n=t.onStart();h.store[e.meta.name].ctx=n,r.status[e.meta.name]={running:!0}}),e.store.pluginsList=r.plugins,await a("demon",r)},add:async function(e,t){const n=await o("demon");n.plugins[t.name]={initialize:e,meta:t},extNest.store.pluginsList=n.plugins,await a("demon",n)},del:async function(e){const t=await o("demon");var n;t.plugins[e]&&t.status[e].running&&(n=h.store[e].ctx,(0,eval)(t.plugins[e].initialize).onStop(n)),delete t.status[e],delete t.plugins[e],extNest.store.pluginsList=t.plugins,await a("demon",t)},toggle:async function(t){const e=await o("demon");var n;e.plugins[t]&&(!function(e){let t=void 0,n=e[0],r=1;for(;rn.call(t,...e)),t=void 0)}return n}([e,"access",e=>e.status,"access",e=>e[t],"optionalAccess",e=>e.running])?(n=(0,eval)(e.plugins[t].initialize).onStart(),h.store[t].ctx=n,e.status[t]={running:!0}):(console.log(e.status[t].ctx),n=h.store[t].ctx,(0,eval)(e.plugins[t].initialize).onStop(n),e.status[t].running=!1)),await a("demon",e)}};const _=["a","b","i"],w=new Map;var E;E="a";const b=(s,a,e,r=!1)=>{if("function"!=typeof a[s])throw new Error(s+" is not a function in "+a.constructor.name);w.has(a)||w.set(a,{});const t=w.get(a);if(!t[s]){const i=a[s],c=(t[s]={o:i,b:new Map,i:new Map,a:new Map},(e,t,n)=>{t=function(e,t,n,r,o){const i=w.get(t)?.[e];if(!i)return o?Reflect.construct(t[e],n,r):t[e].apply(r,n);for(const c of i.b.values()){var s=c.call(r,n);Array.isArray(s)&&(n=s)}let a=(...e)=>o?Reflect.construct(i.o,e,r):i.o.apply(r,e);for(const u of i.i.values()){const d=a;a=(...e)=>u.call(r,e,d)}let l=a(...n);for(const f of i.a.values())l=f.call(r,n,l)??l;return l}(s,a,t,e,n);return r&&o(),t});var n=new Proxy(i,{apply:(e,t,n)=>c(t,n,!1),construct:(e,t)=>c(i,t,!0),get:(e,t,n)=>"toString"==t?i.toString.bind(i):Reflect.get(e,t,n)});Reflect.defineProperty(a,s,{value:n,configurable:!0,writable:!0})||(a[s]=n)}const l=Symbol(),o=()=>{{var e=a,t=s,n=l,r=E;const o=w.get(e),i=o?.[t];return!!i?.[r].has(n)&&(i[r].delete(n),_.every(e=>0===i[e].size)&&(Reflect.defineProperty(e,t,{value:i.o,writable:!0,configurable:!0})||(e[t]=i.o),delete o[t]),0==Object.keys(o).length&&w.delete(e),!0)}};return t[s][E].set(l,e),o},x="/home/ruthenic/Coding/Javascript/demoncord/demoncord-rewrite/src/api/ui/settings/plugincard.jsx",N=n.findByProps("Sizes","Tags"),D=n.findByDisplayName("Card"),S=(n.findByDisplayName("Flex"),n.findByDisplayName("FormText"));n.findByProps("BorderColors","Colors"),n.findByDisplayName("FormDivider");var A=e=>(console.log(e),g.createElement(g.Fragment,null,g.createElement(D,{type:"cardPrimary",outline:!1,editable:!1,__self:void 0,__source:{fileName:x,lineNumber:14}},g.createElement(N,{className:"demon-settings-card-header",size:N.Sizes.SIZE_20,__self:void 0,__source:{fileName:x,lineNumber:15}},e.name),g.createElement("hr",{className:"demon-settings-card-divider",__self:void 0,__source:{fileName:x,lineNumber:18}}),g.createElement(S,{className:"demon-settings-card-desc",__self:void 0,__source:{fileName:x,lineNumber:19}},e.desc))));const P="/home/ruthenic/Coding/Javascript/demoncord/demoncord-rewrite/src/api/ui/settings/plugins.jsx",B=n.findByProps("Sizes","Tags"),C=(n.findByDisplayName("FormTitle"),n.findByDisplayName("FormSection"),n.findByDisplayName("FormDivider"));var M=()=>{const t=demon.require("internal/nest").ghost.pluginsList;return g.createElement(g.Fragment,null,g.createElement(B,{size:"demon-settings-header-size30",__self:void 0,__source:{fileName:P,lineNumber:14}},"Plugins"),g.createElement(C,{className:"demon-settings-divider",__self:void 0,__source:{fileName:P,lineNumber:15}}),Object.keys(t).map(e=>g.createElement(g.Fragment,null,g.createElement(A,{name:t[e].meta.name,desc:"temporary description because plugin metadata doesn't have it yet",__self:void 0,__source:{fileName:P,lineNumber:18}}))))};function O(e){const t=document.createElement("style");t.className="demon-element-css",t.innerHTML=e,document.head.appendChild(t)}var j={injectCSS:O,createClass:function(e,t){O(`.${e} {${Object.entries(t).map(([e,t])=>e+":"+t).join(";")}}`)}};const z=n.findByDisplayName("SettingsView");var T={init:function(){j.createClass("demon-settings-divider",{"margin-top":"10px","margin-bottom":"10px",height:"1px"}),j.createClass("demon-settings-card-divider",{"margin-top":"5px","margin-bottom":"5px","margin-left":"10px","margin-right":"10px",height:"1px",border:"thin solid var(--background-modifier-accent)"}),j.createClass("demon-settings-card-header",{"margin-left":"10px"}),j.createClass("demon-settings-card-desc",{color:"var(--header-secondary)",display:"inline-block","font-size":"15px","line-height":"15px","margin-left":"10px","margin-top":"5px","margin-bottom":"5px"}),j.createClass("demon-settings-header-size30",{"font-size":"30px","line-height":"34px"}),b("getPredicateSections",z.prototype,(e,t)=>(t.unshift({section:"HEADER",label:"Demoncord"},{section:"demoncord",label:"Plugins",element:M},{section:"DIVIDER"}),t))}};if(!window.DiscordNative)throw new Error("Sorry, Demoncord cannot be used on web!");const R={modules:{webpack:n,common:c},utils:m,plugins:v,internal:{nest:c.nests.make()},css:j};window.demon={require:function(e){const t=e.split("/");let n=R;return t.forEach(e=>{if(!(e in n))throw new Error("Module does not exist!");n=n[e]}),n}},v.init(),T.init()}(); +!function(){"use strict";function e(){let t={};return window.webpackChunkdiscord_app.push([[Math.random().toString(36)],{},e=>{t=e}]),t.c}let n={modules:e(),filter:function(e,t){let n=[];for(const r in t){var s=t[r].exports;s&&(s.default&&s.__esModule&&e(s.default)?n.push(s.default):e(s)&&n.push(s))}return n},find:e=>n.filter(e,n.modules)[0],findAll:e=>n.filter(e,n.modules),findByProps:(...e)=>n.find(t=>e.every(e=>void 0!==t[e])),findByPropsAll:(...e)=>n.findAll(t=>e.every(e=>void 0!==t[e])),findByDisplayName:t=>n.find(e=>function(e){let t=void 0,n=e[0],s=1;for(;sn.call(t,...e)),t=void 0)}return n}([e,"optionalAccess",e=>e.displayName])===t),findByStrings:(...e)=>n.find(t=>e.every(e=>t.toString().contains(e))),reloadModules:()=>{n.modules=e()}};function o(n){return new Promise((e,t)=>{n.oncomplete=n.onsuccess=()=>e(n.result),n.onabort=n.onerror=()=>t(n.error)})}function t(t,s){const e=(!navigator.userAgentData&&/Safari\//.test(navigator.userAgent)&&!/Chrom(e|ium)\//.test(navigator.userAgent)&&indexedDB.databases?new Promise(function(e){function t(){return indexedDB.databases().finally(e)}n=setInterval(t,100),t()}).finally(function(){return clearInterval(n)}):Promise.resolve()).then(()=>{const e=indexedDB.open(t);return e.onupgradeneeded=()=>e.result.createObjectStore(s),o(e)});var n;return(t,n)=>e.then(e=>n(e.transaction(s,t).objectStore(s)))}let s;function i(){return s=s||t("keyval-store","keyval")}function r(t,e=i()){return e("readonly",e=>o(e.get(t)))}function a(t,n,e=i()){return e("readwrite",e=>(e.put(n,t),o(e.transaction)))}function l(e,t){return e.openCursor().onsuccess=function(){this.result&&(t(this.result),this.result.continue())},o(e.transaction)}var c=Object.freeze({__proto__:null,clear:function(e=i()){return e("readwrite",e=>(e.clear(),o(e.transaction)))},createStore:t,del:function(t,e=i()){return e("readwrite",e=>(e.delete(t),o(e.transaction)))},delMany:function(e,t=i()){return t("readwrite",t=>(e.forEach(e=>t.delete(e)),o(t.transaction)))},entries:function(n=i()){return n("readonly",e=>{if(e.getAll&&e.getAllKeys)return Promise.all([o(e.getAllKeys()),o(e.getAll())]).then(([e,n])=>e.map((e,t)=>[e,n[t]]));const t=[];return n("readonly",e=>l(e,e=>t.push([e.key,e.value])).then(()=>t))})},get:r,getMany:function(e,t=i()){return t("readonly",t=>Promise.all(e.map(e=>o(t.get(e)))))},keys:function(e=i()){return e("readonly",e=>{if(e.getAllKeys)return o(e.getAllKeys());const t=[];return l(e,e=>t.push(e.key)).then(()=>t)})},promisifyRequest:o,set:a,setMany:function(e,t=i()){return t("readwrite",t=>(e.forEach(e=>t.put(e[1],e[0])),o(t.transaction)))},update:function(s,r,e=i()){return e("readwrite",n=>new Promise((e,t)=>{n.get(s).onsuccess=function(){try{n.put(r(this.result),s),e(o(n.transaction))}catch(e){t(e)}}}))},values:function(e=i()){return e("readonly",e=>{if(e.getAll)return o(e.getAll());const t=[];return l(e,e=>t.push(e.value)).then(()=>t)})}}),u=Object.freeze({GET:"GET",SET:"SET",DELETE:"DELETE",UPDATE:"UPDATE"});class d{constructor(){this.listeners=Object.values(u).reduce((e,t)=>(e[t]=new Set,e),{}),this.on=function(e,t){if(this.listeners[e].has(t))throw Error(`This listener on ${e} already exists.`);this.listeners[e].add(t)},this.once=function(e,n){const s=(e,t)=>{this.off(e,s),n(e,t)};this.on(e,s)},this.off=function(e,t){this.listeners[e].delete(t)},this.emit=function(e,t){for(const n of this.listeners[e])n(e,t)};for(const t of Object.values(u))this[t.toLowerCase()]=e=>{this.emit(t,e)}}}function m(e={},{nestArrays:a=!0}={}){const l=new d;return Object.assign({store:function r(e,o,i){return new Proxy(e,{get(e,t){var n=[...i,t],s=e[t];return null!=s?(l.get({path:n,value:s}),!a&&Array.isArray(s)||"object"!=typeof s?s:r(s,o,n)):r(e[t]={},o,n)},set(e,t,n){return e[t]=n,l.set({path:[...i,t],value:n}),!0},deleteProperty(e,t){return delete e[t]&&(l.delete({path:[...i,t]}),!0)},has(e,t){return("object"!=typeof e[t]||0!==Object.keys(e[t]).length)&&t in e}})}(e,e,[]),ghost:e},l)}var f=Object.freeze({__proto__:null,Events:u,make:m});const{useRef:p,useReducer:g,useEffect:h}=n.findByProps("__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","createElement");function y(t,n=!1,s=()=>!0){p(t.ghost);const[,r]=g(e=>~e,0);h(()=>{function e(e,t){s(e,t)&&r()}return t.on(u.UPDATE,e),n||(t.on(u.SET,e),t.on(u.DELETE,e)),()=>{t.off(u.UPDATE,e),n||(t.off(u.SET,e),t.off(u.DELETE,e))}},[]),t.ghost}const _=n["findByProps"],v=_("__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","createElement");c={React:v,ReactDOM:_("__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","hydrate"),dispatch:_("dirtyDispatch").__proto__,idb:c,nests:f};function E(o,i=!1){return function(e,...t){t=t.join(""),void 0===e&&(e=["Default"],E("warn")("Requested hierarchy has not been passed to logger function, defaulting to default string",["Logger"])),"string"==typeof e&&(t=e,e=["Default"]);let n=["Demoncord",...e,t],s=[],r="";i&&n.splice(0,1);for(let e=0;en.call(t,...e)),t=void 0)}return n}([n,"access",e=>e.status,"access",e=>e[t],"optionalAccess",e=>e.running])?(s=(0,eval)(n.plugins[t].initialize).onStart(),w.store[t].ctx=s,n.status[t]={running:!0}):(console.log(n.status[t].ctx),s=w.store[t].ctx,(0,eval)(n.plugins[t].initialize).onStop(s),n.status[t].running=!1)),e.store.pluginsList=n.plugins,e.store.pluginsStatus=n.status,await a("demon",n)}var N={init:async function(){const e=demon.require("internal/nest"),s=(window.__demon||(window.__demon={}),await r("demon")||await a("demon",{status:{},plugins:{}}),await r("demon"));s.status={},Object.keys(s.plugins).forEach(e=>{e=s.plugins[e];const t=(0,eval)(e.initialize);var n=t.onStart();w.store[e.meta.name].ctx=n,s.status[e.meta.name]={running:!0}}),e.store.pluginsList=s.plugins,e.store.pluginsStatus=s.status,await a("demon",s)},add:async function(e,t){const n=demon.require("internal/nest"),s=await r("demon");s.plugins[t.name]={initialize:e,meta:t},n.store.pluginsList=s.plugins,n.store.pluginsStatus=s.status,await a("demon",s)},del:b,toggle:x};const S=["a","b","i"],D=new Map;var A;A="a";const B=(i,a,e,s=!1)=>{if("function"!=typeof a[i])throw new Error(i+" is not a function in "+a.constructor.name);D.has(a)||D.set(a,{});const t=D.get(a);if(!t[i]){const o=a[i],c=(t[i]={o:o,b:new Map,i:new Map,a:new Map},(e,t,n)=>{t=function(e,t,n,s,r){const o=D.get(t)?.[e];if(!o)return r?Reflect.construct(t[e],n,s):t[e].apply(s,n);for(const c of o.b.values()){var i=c.call(s,n);Array.isArray(i)&&(n=i)}let a=(...e)=>r?Reflect.construct(o.o,e,s):o.o.apply(s,e);for(const u of o.i.values()){const d=a;a=(...e)=>u.call(s,e,d)}let l=a(...n);for(const m of o.a.values())l=m.call(s,n,l)??l;return l}(i,a,t,e,n);return s&&r(),t});var n=new Proxy(o,{apply:(e,t,n)=>c(t,n,!1),construct:(e,t)=>c(o,t,!0),get:(e,t,n)=>"toString"==t?o.toString.bind(o):Reflect.get(e,t,n)});Reflect.defineProperty(a,i,{value:n,configurable:!0,writable:!0})||(a[i]=n)}const l=Symbol(),r=()=>{{var e=a,t=i,n=l,s=A;const r=D.get(e),o=r?.[t];return!!o?.[s].has(n)&&(o[s].delete(n),S.every(e=>0===o[e].size)&&(Reflect.defineProperty(e,t,{value:o.o,writable:!0,configurable:!0})||(e[t]=o.o),delete r[t]),0==Object.keys(r).length&&D.delete(e),!0)}};return t[i][A].set(l,e),r},P="/home/ruthenic/Coding/Javascript/demoncord/demoncord-rewrite/src/api/ui/settings/plugincard.jsx",C=n.findByProps("Sizes","Tags"),T=n.findByDisplayName("Card"),L=(n.findByDisplayName("Flex"),n.findByDisplayName("FormText")),M=(n.findByProps("BorderColors","Colors"),n.findByDisplayName("FormDivider"),n.findByDisplayName("Switch"));var j=e=>(y(e.nest),e.nest.ghost.pluginsList[e.name]?v.createElement(v.Fragment,null,v.createElement(T,{type:"cardPrimary",outline:!1,editable:!1,__self:void 0,__source:{fileName:P,lineNumber:19}},v.createElement(C,{className:"demon-settings-card-header",size:C.Sizes.SIZE_20,__self:void 0,__source:{fileName:P,lineNumber:20}},e.name),v.createElement("hr",{className:"demon-settings-card-divider",__self:void 0,__source:{fileName:P,lineNumber:23}}),v.createElement(L,{className:"demon-settings-card-desc",__self:void 0,__source:{fileName:P,lineNumber:24}},e.nest.ghost.pluginsList[e.name].meta.desc),v.createElement("svg",{position:"top",onClick:async()=>{b(e.name)},className:"demon-settings-card-delete",viewBox:"0 0 24 24",__self:void 0,__source:{fileName:P,lineNumber:27}},v.createElement("path",{fill:"var(--text-muted)",d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zm2.46-7.12 1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z",__self:void 0,__source:{fileName:P,lineNumber:35}})),v.createElement(M,{className:"demon-settings-card-switch",checked:e.nest.ghost.pluginsStatus[e.name].running,onChange:async()=>{x(e.name)},__self:void 0,__source:{fileName:P,lineNumber:37}}))):null);const O="/home/ruthenic/Coding/Javascript/demoncord/demoncord-rewrite/src/api/ui/settings/plugins.jsx",k=n.findByProps("Sizes","Tags"),I=(n.findByDisplayName("FormTitle"),n.findByDisplayName("FormSection"),n.findByDisplayName("FormDivider"));var F=()=>{const t=demon.require("internal/nest");return y(t),v.createElement(v.Fragment,null,v.createElement(k,{size:"demon-settings-header-size30",__self:void 0,__source:{fileName:O,lineNumber:14}},"Plugins"),v.createElement(I,{className:"demon-settings-divider",__self:void 0,__source:{fileName:O,lineNumber:15}}),Object.keys(t.ghost.pluginsList).map(e=>v.createElement(v.Fragment,null,v.createElement(j,{name:e,nest:t,__self:void 0,__source:{fileName:O,lineNumber:18}}))))};function R(e){const t=document.createElement("style");t.className="demon-element-css",t.innerHTML=e,document.head.appendChild(t)}var z={injectCSS:R,createClass:function(e,t){R(`.${e} {${Object.entries(t).map(([e,t])=>e+":"+t).join(";")}}`)}};const U=n.findByDisplayName("SettingsView");var q={init:function(){z.createClass("demon-settings-divider",{"margin-top":"10px","margin-bottom":"10px",height:"1px"}),z.createClass("demon-settings-card-divider",{"margin-top":"5px","margin-bottom":"5px","margin-left":"10px","margin-right":"10px",height:"1px",border:"thin solid var(--background-modifier-accent)"}),z.createClass("demon-settings-card-header",{"margin-left":"10px","margin-top":"10px"}),z.createClass("demon-settings-card-desc",{color:"var(--header-secondary)",display:"inline-block","font-size":"15px","line-height":"15px","margin-left":"10px","margin-top":"5px","margin-bottom":"10px"}),z.createClass("demon-settings-card-switch",{"margin-right":"10px","margin-top":"0px","margin-bottom":"10px",float:"right"}),z.createClass("demon-settings-card-delete",{"margin-right":"5px",float:"right",width:"24px",cursor:"pointer"}),z.createClass("demon-settings-header-size30",{"font-size":"30px","line-height":"34px"}),B("getPredicateSections",U.prototype,(e,t)=>(t.unshift({section:"HEADER",label:"Demoncord"},{section:"demoncord",label:"Plugins",element:F},{section:"DIVIDER"}),t))}};if(!window.DiscordNative)throw new Error("Sorry, Demoncord cannot be used on web!");const H={modules:{webpack:n,common:c},utils:f,plugins:N,internal:{nest:c.nests.make()},css:z};window.demon={require:function(e){const t=e.split("/");let n=H;return t.forEach(e=>{if(!(e in n))throw new Error("Module does not exist!");n=n[e]}),n}},N.init(),q.init()}(); diff --git a/rollup.config.js b/rollup.config.js index 54d3d7e..43a612b 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -4,17 +4,23 @@ import { uglify } from "rollup-plugin-uglify"; import { nodeResolve } from "@rollup/plugin-node-resolve"; import sucrase from "@rollup/plugin-sucrase"; import alias from "@rollup/plugin-alias"; +import { resolve as resolvePath } from "path"; +const projectRootDir = resolvePath(__dirname); export default defineConfig({ input: pkjs.main, output: { file: "dist/build.js", format: "iife", + globals: { + } }, + external: ["React"], plugins: [ alias({ entries: [ - { find: "nests", replacement: "../../node_modules/nests/esm/index.js" }, + { find: "nests", replacement: resolvePath(projectRootDir, "node_modules/nests/esm/") }, + { find: "react", replacement: resolvePath(projectRootDir, "src/shim_react.js") } ], }), nodeResolve(), diff --git a/src/api/common.js b/src/api/common.js index 687ac05..d2dd3d6 100644 --- a/src/api/common.js +++ b/src/api/common.js @@ -1,6 +1,7 @@ import webpack from "./webpack" import * as idb from "idb-keyval" import * as nests from "nests" +import * as nestsReact from "nests/react" const { findByProps } = webpack @@ -20,4 +21,4 @@ export default { nests } -export { idb, nests, React } \ No newline at end of file +export { idb, nests, nestsReact, React } \ No newline at end of file diff --git a/src/api/plugin.js b/src/api/plugin.js index 4bfe1e6..36c8f44 100644 --- a/src/api/plugin.js +++ b/src/api/plugin.js @@ -29,20 +29,24 @@ async function init() { } }) extNest.store.pluginsList = currdemon.plugins + extNest.store.pluginsStatus = currdemon.status await idb.set("demon", currdemon) } async function add(iife, meta) { + const extNest = demon.require("internal/nest") const currdemon = await idb.get("demon") currdemon.plugins[meta.name] = { initialize: iife, meta: meta } extNest.store.pluginsList = currdemon.plugins + extNest.store.pluginsStatus = currdemon.status await idb.set("demon", currdemon) } async function del(name) { + const extNest = demon.require("internal/nest") const currdemon = await idb.get("demon") if (!!currdemon.plugins[name]) if (currdemon.status[name].running) { @@ -52,10 +56,12 @@ async function del(name) { delete currdemon.status[name] delete currdemon.plugins[name] extNest.store.pluginsList = currdemon.plugins + extNest.store.pluginsStatus = currdemon.status await idb.set("demon", currdemon) } async function toggle(name) { + const extNest = demon.require("internal/nest") const currdemon = await idb.get("demon") if (!!currdemon.plugins[name]) { if (currdemon.status[name]?.running) { @@ -72,9 +78,18 @@ async function toggle(name) { } } } + extNest.store.pluginsList = currdemon.plugins + extNest.store.pluginsStatus = currdemon.status await idb.set("demon", currdemon) } +export { + init, + add, + del, + toggle +} + export default { init, add, diff --git a/src/api/ui/settings/plugincard.jsx b/src/api/ui/settings/plugincard.jsx index 1c1e756..8d44506 100644 --- a/src/api/ui/settings/plugincard.jsx +++ b/src/api/ui/settings/plugincard.jsx @@ -1,5 +1,6 @@ -import { React } from "../../common" +import { React, nestsReact } from "../../common" import webpack from "../../webpack" +import { toggle, del } from "../../plugin" const Header = webpack.findByProps("Sizes", "Tags") const Card = webpack.findByDisplayName("Card"); @@ -7,9 +8,13 @@ const Flex = webpack.findByDisplayName("Flex"); const FormText = webpack.findByDisplayName("FormText"); const Button = webpack.findByProps("BorderColors", "Colors"); const FormDivider = webpack.findByDisplayName("FormDivider"); +const Switch = webpack.findByDisplayName("Switch") export default (props) => { - console.log(props) + nestsReact.useNest(props.nest) + if (!props.nest.ghost.pluginsList[props.name]) { + return null //you wouldn't think i'd have to do this but + } return (<>
@@ -17,8 +22,25 @@ export default (props) => {

- {props.desc} + {props.nest.ghost.pluginsList[props.name].meta.desc} + { + del(props.name) + }} + className="demon-settings-card-delete" + viewBox="0 0 24 24" + > + + + { + toggle(props.name) + }} + />
) } \ No newline at end of file diff --git a/src/api/ui/settings/plugins.jsx b/src/api/ui/settings/plugins.jsx index 41e0b5c..40213b4 100644 --- a/src/api/ui/settings/plugins.jsx +++ b/src/api/ui/settings/plugins.jsx @@ -1,4 +1,4 @@ -import { React, nests } from "../../common" +import { React, nests, nestsReact } from "../../common" import webpack from "../../webpack" import PlugCard from "./plugincard.jsx" @@ -9,13 +9,13 @@ const FormDivider = webpack.findByDisplayName("FormDivider"); export default () => { const extNest = demon.require("internal/nest") - const pluginList = extNest.ghost.pluginsList + nestsReact.useNest(extNest) return (<>
Plugins
- {Object.keys(pluginList).map((k) => { + {Object.keys(extNest.ghost.pluginsList).map((k) => { return (<> - + ) })} ) diff --git a/src/api/ui/settings/settings.js b/src/api/ui/settings/settings.js index e0566a4..a86cae9 100644 --- a/src/api/ui/settings/settings.js +++ b/src/api/ui/settings/settings.js @@ -20,7 +20,8 @@ function init() { "border": "thin solid var(--background-modifier-accent)" }) css.createClass("demon-settings-card-header", { - "margin-left": "10px" + "margin-left": "10px", + "margin-top": "10px" }) css.createClass("demon-settings-card-desc", { "color": "var(--header-secondary)", @@ -29,7 +30,19 @@ function init() { "line-height": "15px", "margin-left": "10px", "margin-top": "5px", - "margin-bottom": "5px" + "margin-bottom": "10px" + }) + css.createClass("demon-settings-card-switch", { + "margin-right": "10px", + "margin-top": "0px", + "margin-bottom": "10px", + "float": "right" + }) + css.createClass("demon-settings-card-delete", { + "margin-right": "5px", + "float": "right", + "width": "24px", + "cursor": "pointer" }) css.createClass("demon-settings-header-size30", { "font-size": "30px", diff --git a/src/shim_react.js b/src/shim_react.js new file mode 100644 index 0000000..04b46d7 --- /dev/null +++ b/src/shim_react.js @@ -0,0 +1,17 @@ +//super omega jank to make nests/react work + +import webpack from "./api/webpack" + +const React = webpack.findByProps( + "__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED", + "createElement" +) + +const { useRef, useReducer, useEffect } = React + +export default React +export { + useRef, + useReducer, + useEffect +} \ No newline at end of file