-
Remove the existing extension to avoid conflict. If you plan to be editing DesModder, I suggest opening a separate Chrome profile so that you still have the stable extension in your main profile when you need it.
-
Make sure you have
git
andnpm
installed.- Ensure
node --version
is at leastv18.0.0
. If it isn't,nvm use 18
should typically fix this. - Check that
npm --version
is at least7.0.0
to avoid issues with overwriting the lockfile.
- Ensure
-
Run
git clone https://github.com/DesModder/DesModder
to download the latest commit -
Navigate to the directory, then run
npm run init
to setup hooks and install dependencies -
Run
npm run build
to build. -
Load the unpacked extension in the
dist/
folder through the directions at https://developer.chrome.com/docs/extensions/mv2/getstarted/#manifest (see "load unpacked")
First follow the instructions above in "Setup Environment".
- You will want the Prettier and Typescript packages installed for your editor.
- VS Code comes bundled with Typescript support. Its Prettier extension is called "Prettier - Code Formatter," and I suggest the settings
(or else you'll have to run
"editor.formatOnSave": true, "editor.defaultFormatter": "esbenp.prettier-vscode"
npm run fix:prettier
to fix prettier errors)
- VS Code comes bundled with Typescript support. Its Prettier extension is called "Prettier - Code Formatter," and I suggest the settings
- Fork the DesModder repository to your GitHub account
- Repeat the Setup directions with your forked repository instead of the main GitHub repository
- Clone and open your fork of the DesModder directory in your editor.
- For this example, open the file
src/plugins/index.ts
. - To test Prettier, indent some line by a few spaces. Prettier should automatically remove those spaces when you save the file.
- To test Typescript, mess with one of the lines in
keyToPlugin
, e.g. replaceglesmos: GLesmos,
withglesmos: "GLesmos"
. You should get red squiggles under the key nameglesmos
and elsewhere in the file. - If both of these worked, then you are ready to start development. Run
npm run dev
in the DesModder directory to start the development server. There should hopefully be no errors. - You should have loaded the unpacked extension based on the instructions in "Setup Environment." Check that it works by opening https://desmos.com/calculator and seeing the buttons that DesModder adds
In this section, we will create a plugin which will simply change the displayed username in the top-right.
-
You should already have a fork of DesModder cloned to your computer
-
Create a new branch named "plugin-change-username" using
git checkout -b plugin-change-username
-
In the directory
src/plugins
, add a new directory calledchange-username
and a filesrc/plugins/change-username/index.ts
with the following contents:import { PluginController } from "../PluginController"; export default class ChangeUsername extends PluginController { static id = "change-username" as const; static enabledByDefault = true; oldName = ""; afterEnable() { const headerElement = getHeaderElement(); if (headerElement === null) return; const text = headerElement.innerText; if (text !== undefined) this.oldName = text; headerElement.innerText = "DesModder ♥"; } afterDisable() { const headerElement = getHeaderElement(); if (headerElement === null) return; headerElement.innerText = this.oldName; } } function getHeaderElement(): HTMLElement | null { return document.querySelector(".header-account-name"); }
-
Setup the displayed name. This is managed in the Fluent file
localization/en.ftl
. Add some lines at the bottom. These are of the form[pluginID]-name
and[pluginID]-desc
:## Change Username change-username-name = Change Username change-username-desc = Renames the displayed username in the top-right
-
Load the plugin: In
src/plugins/index.ts
, addimport ChangeUsername from "./change-username"
near the top andchangeUsername: ChangeUsername,
inkeyToPlugin
in the middle of the file.- Add
get changeUsername () { return this.ep["change-username"]; }
at the end of the classTransparentPlugins
.
- Add
-
Add the plugin to the menu: in
src/plugins/pillbox-menus/components/Menu.tsx
, add the plugin ID"change-username"
to the category listvisual
incategoryPlugins
.- after reloading the webpage (assuming you're running
npm run dev
), a new plugin should appear in the list in desmos.com/calculator.
- after reloading the webpage (assuming you're running
-
Commit the changes to your fork
git add .
git commit -m "Add Plugin 'Change Username'"
git push
-
For an actual plugin, you would do some more testing and eventually open a pull request on the repository. Run
npm run test
andnpm run lint
before submitting the PR to ensure that it will meet automated checks. You can fix some problems automatically withnpm run fix
.
Before creating translations, figure out the language code for the language. At time of writing, vanilla Desmos has support for: en, es, et, ru, da, de, pt-BR, pt-PT, ca, fr, it, is, nl, no, sv-SE, hu, cs, pl, id, vi, el, uk, ka, th, tr, zh-CN, zh-TW, ko, ja.
The following examples will refer to the language code fr
(French), but replace it with your language code.
- Create a new FTL (fluent) file by duplicating
localization/en.ftl
tolocalization/fr.ftl
- Add a line near the top of
src/i18n/i18n-core.ts
with an import statement, e.g.import frFTL from "./fr.ftl";
- Add a line at the bottom of
src/i18n/18n-core.ts
adding the imported language, e.g.addLanguage("fr", frFTL)
- Edit some strings in the
localization/fr.ftl
file - Follow the directions in "Making Changes" to run
npm run dev
to view changes on each reload of the page.
If you want to check for mistakes, run npm run audit-langs fr
.