├── extension ├── data │ ├── images │ │ ├── icon16.png │ │ ├── icon48.png │ │ ├── balloon.png │ │ ├── icon128.png │ │ ├── icon256.png │ │ ├── snoo_up.png │ │ ├── beta_icon16.png │ │ ├── beta_icon48.png │ │ ├── snoo_splat.png │ │ ├── snoo_uh_oh.png │ │ ├── beta_icon128.png │ │ ├── beta_icon256.png │ │ ├── snoo_running.gif │ │ ├── snoo_balloon_org.png │ │ ├── snoo_balloon_footer.png │ │ ├── logo_vector.svg │ │ └── beta_logo_vector.svg │ ├── tbplugins.d.ts │ ├── util │ │ ├── iter.ts │ │ ├── buildenv.ts │ │ ├── oldLegacyStorageBullshit.ts │ │ ├── icons.ts │ │ ├── dom.ts │ │ ├── platform.ts │ │ ├── logging.ts │ │ ├── cache.ts │ │ ├── ui_interop.tsx │ │ ├── purify.js │ │ └── settings.ts │ ├── styles │ │ ├── font │ │ │ ├── MaterialIcons-Regular.eot │ │ │ ├── MaterialIcons-Regular.ttf │ │ │ ├── MaterialIcons-Regular.woff │ │ │ └── MaterialIcons-Regular.woff2 │ │ ├── codemirror │ │ │ ├── fullscreen.css │ │ │ ├── matchesonscrollbar.css │ │ │ ├── dialog.css │ │ │ └── show-hint.css │ │ ├── devtools.css │ │ ├── old_comment.css │ │ ├── support.css │ │ ├── comment.css │ │ ├── nukecomments.css │ │ ├── achievements.css │ │ ├── macros.css │ │ ├── notifier.css │ │ ├── domaintagger.css │ │ ├── trouble.css │ │ ├── queue_overlay.css │ │ ├── config.css │ │ ├── queuetools.css │ │ ├── personalnotes.css │ │ ├── profile.css │ │ ├── modmatrix.css │ │ ├── usernotes.css │ │ ├── removalreasons.css │ │ ├── old_queuetools.css │ │ └── tbui.css │ ├── types │ │ └── cssmodules.d.ts │ ├── background │ │ ├── handlers │ │ │ ├── reload.js │ │ │ ├── url_changed.js │ │ │ ├── globalmessage.js │ │ │ ├── settings.js │ │ │ ├── modqueue.js │ │ │ └── cache.js │ │ ├── index.ts │ │ └── messageHandling.js │ ├── components │ │ ├── Pager.module.css │ │ ├── controls │ │ │ ├── index.ts │ │ │ ├── BracketButton.tsx │ │ │ ├── GeneralButton.tsx │ │ │ ├── ActionButton.tsx │ │ │ ├── ActionSelect.tsx │ │ │ ├── NormalInput.tsx │ │ │ ├── RelativeTime.tsx │ │ │ ├── ActionSelect.module.css │ │ │ ├── NormalInput.module.css │ │ │ ├── ActionButton.module.css │ │ │ ├── Icon.tsx │ │ │ ├── BracketButton.module.css │ │ │ ├── GeneralButton.module.css │ │ │ └── Icon.module.css │ │ ├── PageNotificationContainer.module.css │ │ ├── TextFeedbackContainer.module.css │ │ ├── WindowTabs.module.css │ │ ├── WindowTabs.tsx │ │ ├── TextFeedbackContainer.tsx │ │ ├── Window.module.css │ │ ├── Window.tsx │ │ ├── PageNotificationContainer.tsx │ │ └── Pager.tsx │ ├── AppRoot.tsx │ ├── modules │ │ ├── modnotes.module.css │ │ ├── general.js │ │ ├── historybutton.module.css │ │ ├── support.js │ │ └── flyingsnoo.js │ ├── tbmodule.module.css │ ├── store │ │ ├── index.ts │ │ ├── textFeedbackSlice.ts │ │ └── settingsSlice.ts │ ├── base.css │ ├── hooks.ts │ └── tbplugins.js ├── firefox_manifest.json └── chrome_manifest.json ├── .gitattributes ├── .gitignore ├── .git-blame-ignore-revs ├── .eslintignore ├── .github ├── workflows │ ├── main.yml │ ├── docs.yml │ ├── publish-stable.yml │ └── publish-beta.yml └── dependabot.yml ├── .editorconfig ├── tsconfig.json ├── jsdoc.json ├── dprint.json ├── PRIVACY.md ├── README.md ├── package.json ├── .eslintrc.json ├── release.mjs └── rollup.config.js /extension/data/images/icon16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toolbox-team/reddit-moderator-toolbox/HEAD/extension/data/images/icon16.png -------------------------------------------------------------------------------- /extension/data/images/icon48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toolbox-team/reddit-moderator-toolbox/HEAD/extension/data/images/icon48.png -------------------------------------------------------------------------------- /extension/data/tbplugins.d.ts: -------------------------------------------------------------------------------- 1 | interface JQuery { 2 | /** Makes an element draggable */ 3 | drag(handle?: JQuery): void; 4 | } 5 | -------------------------------------------------------------------------------- /extension/data/images/balloon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toolbox-team/reddit-moderator-toolbox/HEAD/extension/data/images/balloon.png -------------------------------------------------------------------------------- /extension/data/images/icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toolbox-team/reddit-moderator-toolbox/HEAD/extension/data/images/icon128.png -------------------------------------------------------------------------------- /extension/data/images/icon256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toolbox-team/reddit-moderator-toolbox/HEAD/extension/data/images/icon256.png -------------------------------------------------------------------------------- /extension/data/images/snoo_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toolbox-team/reddit-moderator-toolbox/HEAD/extension/data/images/snoo_up.png -------------------------------------------------------------------------------- /extension/data/images/beta_icon16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toolbox-team/reddit-moderator-toolbox/HEAD/extension/data/images/beta_icon16.png -------------------------------------------------------------------------------- /extension/data/images/beta_icon48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toolbox-team/reddit-moderator-toolbox/HEAD/extension/data/images/beta_icon48.png -------------------------------------------------------------------------------- /extension/data/images/snoo_splat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toolbox-team/reddit-moderator-toolbox/HEAD/extension/data/images/snoo_splat.png -------------------------------------------------------------------------------- /extension/data/images/snoo_uh_oh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toolbox-team/reddit-moderator-toolbox/HEAD/extension/data/images/snoo_uh_oh.png -------------------------------------------------------------------------------- /extension/data/images/beta_icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toolbox-team/reddit-moderator-toolbox/HEAD/extension/data/images/beta_icon128.png -------------------------------------------------------------------------------- /extension/data/images/beta_icon256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toolbox-team/reddit-moderator-toolbox/HEAD/extension/data/images/beta_icon256.png -------------------------------------------------------------------------------- /extension/data/images/snoo_running.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toolbox-team/reddit-moderator-toolbox/HEAD/extension/data/images/snoo_running.gif -------------------------------------------------------------------------------- /extension/data/images/snoo_balloon_org.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toolbox-team/reddit-moderator-toolbox/HEAD/extension/data/images/snoo_balloon_org.png -------------------------------------------------------------------------------- /extension/data/images/snoo_balloon_footer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toolbox-team/reddit-moderator-toolbox/HEAD/extension/data/images/snoo_balloon_footer.png -------------------------------------------------------------------------------- /extension/data/util/iter.ts: -------------------------------------------------------------------------------- 1 | /** An iterable which may or may not be asynchronous. */ 2 | export type MaybeAsyncIterable = Iterable | AsyncIterable; 3 | -------------------------------------------------------------------------------- /extension/data/styles/font/MaterialIcons-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toolbox-team/reddit-moderator-toolbox/HEAD/extension/data/styles/font/MaterialIcons-Regular.eot -------------------------------------------------------------------------------- /extension/data/styles/font/MaterialIcons-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toolbox-team/reddit-moderator-toolbox/HEAD/extension/data/styles/font/MaterialIcons-Regular.ttf -------------------------------------------------------------------------------- /extension/data/styles/font/MaterialIcons-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toolbox-team/reddit-moderator-toolbox/HEAD/extension/data/styles/font/MaterialIcons-Regular.woff -------------------------------------------------------------------------------- /extension/data/styles/font/MaterialIcons-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toolbox-team/reddit-moderator-toolbox/HEAD/extension/data/styles/font/MaterialIcons-Regular.woff2 -------------------------------------------------------------------------------- /extension/data/styles/codemirror/fullscreen.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-fullscreen { 2 | position: fixed; 3 | top: 0; left: 0; right: 0; bottom: 0; 4 | height: auto; 5 | z-index: 9; 6 | } 7 | -------------------------------------------------------------------------------- /extension/data/styles/devtools.css: -------------------------------------------------------------------------------- 1 | .mod-toolbox-rd pre.tb-api-info { 2 | font-family: consolas, monospace; 3 | background-color: #eaeaea; 4 | color: #000; 5 | padding: 3px; 6 | } 7 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # JS files must always use LF to prevent issues with libraries and checksums 5 | *.js eol=lf 6 | *.mjs eol=lf 7 | *.json eol=lf 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.bak 2 | /.idea 3 | /.settings 4 | /.vscode 5 | /project.json 6 | /docs 7 | *.zip 8 | *.xpi 9 | *.nex 10 | /node_modules 11 | /build 12 | /scratch.js 13 | /ftpconfig.json 14 | .DS_Store 15 | /coverage 16 | -------------------------------------------------------------------------------- /extension/data/types/cssmodules.d.ts: -------------------------------------------------------------------------------- 1 | // Module type declarations for CSS module files imported into JS/TS. 2 | 3 | declare module '*.module.css' { 4 | const classes: {[key: string]: string}; 5 | export default classes; 6 | } 7 | -------------------------------------------------------------------------------- /extension/data/background/handlers/reload.js: -------------------------------------------------------------------------------- 1 | import browser from 'webextension-polyfill'; 2 | 3 | import {messageHandlers} from '../messageHandling'; 4 | 5 | messageHandlers.set('tb-reload', () => { 6 | browser.runtime.reload(); 7 | }); 8 | -------------------------------------------------------------------------------- /extension/data/styles/codemirror/matchesonscrollbar.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-search-match { 2 | background: gold; 3 | border-top: 1px solid orange; 4 | border-bottom: 1px solid orange; 5 | -moz-box-sizing: border-box; 6 | box-sizing: border-box; 7 | opacity: .5; 8 | } 9 | -------------------------------------------------------------------------------- /extension/data/components/Pager.module.css: -------------------------------------------------------------------------------- 1 | .controls { 2 | text-align: center; 3 | margin-bottom: 5px; 4 | } 5 | .content + .controls { 6 | margin-bottom: 0; 7 | margin-top: 5px; 8 | } 9 | .control.active { 10 | background-color: #B6C9DD; 11 | } 12 | -------------------------------------------------------------------------------- /extension/data/components/controls/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ActionButton'; 2 | export * from './ActionSelect'; 3 | export * from './BracketButton'; 4 | export * from './GeneralButton'; 5 | export * from './Icon'; 6 | export * from './NormalInput'; 7 | export * from './RelativeTime'; 8 | -------------------------------------------------------------------------------- /extension/data/styles/old_comment.css: -------------------------------------------------------------------------------- 1 | 2 | .mod-toolbox-rd #tb-bottombar #tb-toggle-removed { 3 | display: flex; 4 | opacity: 0.8; 5 | margin-right: 1em; 6 | } 7 | 8 | 9 | .mod-toolbox-rd #tb-bottombar #tb-toggle-removed:hover { 10 | opacity: 1; 11 | } 12 | -------------------------------------------------------------------------------- /.git-blame-ignore-revs: -------------------------------------------------------------------------------- 1 | # initial formatting from dprint transition 2 | 826ac79d9225a3bc4f7a5312b5f20cf993eba491 3 | a1104a469541b44745bbc5ec2ccfcf7082ad6d33 4 | aa5c5a24c366d37f328e190d9172d26da7fc8d52 5 | 6124856eb8878c7d7c924d3794f656bc0a2ebf33 6 | 89fd701c2ab3387516f90425b716b3aac3d1e627 7 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | # Build output 2 | build/* 3 | docs/* 4 | 5 | # Old tests 6 | tests/* 7 | 8 | # node_modules 9 | node_modules/* 10 | 11 | # IDE related 12 | .idea/* 13 | .settings/* 14 | .vscode/* 15 | 16 | # old plugins code (TODO) 17 | extension/data/tbplugins.js 18 | 19 | extension/data/libs/* 20 | -------------------------------------------------------------------------------- /extension/data/styles/support.css: -------------------------------------------------------------------------------- 1 | body.mod-toolbox-rd .tb-action-button.tb-insert-debug { 2 | display: inline-block !important; 3 | box-sizing: border-box !important; 4 | height: 26px !important; 5 | margin: 5px 5px 10px 0 !important; 6 | cursor: pointer; 7 | line-height: normal !important; 8 | } 9 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: tests 2 | on: [push, pull_request] 3 | jobs: 4 | ci: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - uses: actions/checkout@v4 8 | - uses: actions/setup-node@v4 9 | - run: npm ci 10 | - run: npm run fmt 11 | - run: npm run lint 12 | - run: npm run build 13 | -------------------------------------------------------------------------------- /extension/data/background/index.ts: -------------------------------------------------------------------------------- 1 | import './handlers/cache.js'; 2 | import './handlers/globalmessage.js'; 3 | import './handlers/modqueue.js'; 4 | import './handlers/notifications.js'; 5 | import './handlers/reload.js'; 6 | import './handlers/settings.js'; 7 | import './handlers/url_changed.js'; 8 | import './handlers/webrequest.js'; 9 | -------------------------------------------------------------------------------- /extension/data/styles/comment.css: -------------------------------------------------------------------------------- 1 | .mod-toolbox-rd #tb-flatview-search { 2 | background-color: #F7FAFD; 3 | color: #696969; 4 | border: 1px solid #B6C9DD; 5 | padding: 3px; 6 | margin: 11px 7 | } 8 | 9 | .mod-toolbox-rd #tb-flatview-search-count { 10 | background-color: #B6C9DD; 11 | padding: 4px; 12 | color: #F7FAFD; 13 | font-weight: bold; 14 | } 15 | -------------------------------------------------------------------------------- /extension/data/components/PageNotificationContainer.module.css: -------------------------------------------------------------------------------- 1 | .wrapper { 2 | position: fixed; 3 | bottom: 42px; 4 | right: 10px; 5 | width: 300px; 6 | } 7 | /* Leave space for the context menu handle when it's on the right side */ 8 | .wrapper.hasRightContextMenu { 9 | right: 30px; 10 | } 11 | 12 | .notification { 13 | margin-top: 5px; 14 | } 15 | 16 | .notification p { 17 | margin: 0; 18 | } 19 | -------------------------------------------------------------------------------- /extension/data/components/controls/BracketButton.tsx: -------------------------------------------------------------------------------- 1 | import {type ComponentPropsWithRef} from 'react'; 2 | import {classes} from '../../util/ui_interop'; 3 | import css from './BracketButton.module.css'; 4 | 5 | export const BracketButton = ({ 6 | inline, 7 | className, 8 | ...props 9 | }: ComponentPropsWithRef<'button'> & { 10 | inline?: boolean; 11 | }) => ( 12 |