├── .prettierignore
├── src
├── modules
│ ├── comments
│ │ ├── contextMenu.less
│ │ ├── hideShare.less
│ │ ├── comments.less
│ │ ├── sortButtons.less
│ │ ├── userTags.less
│ │ ├── contextMenu.ts
│ │ ├── moreReplies.ts
│ │ └── userTags.ts
│ ├── profileMenu
│ │ ├── profileMenu.less
│ │ └── profileMenuWindow.less
│ ├── customFeed
│ │ ├── customFeed.less
│ │ └── customFeed.ts
│ ├── redirectMode.ts
│ ├── bookmarkMode.ts
│ ├── users
│ │ ├── usernameMode.ts
│ │ ├── userPage.ts
│ │ ├── users.ts
│ │ ├── userOperations.ts
│ │ └── userInfo.ts
│ ├── app.less
│ ├── collapseAwardsMode.ts
│ ├── bookmark.less
│ ├── header.less
│ ├── rightSidebar.ts
│ ├── collapseAwards.less
│ ├── subs
│ │ ├── subs.less
│ │ ├── flairWindow.less
│ │ ├── flairBar.less
│ │ ├── flairWindow.ts
│ │ ├── flair.ts
│ │ ├── flairBar.ts
│ │ └── subs.ts
│ ├── sidebar
│ │ ├── sidebarSettingsWindow.less
│ │ ├── sidebar.less
│ │ ├── sections
│ │ │ ├── resources.ts
│ │ │ ├── games.ts
│ │ │ ├── custom.ts
│ │ │ ├── subs.ts
│ │ │ └── recent.ts
│ │ ├── sidebarNavigation.ts
│ │ ├── sidebarSection.ts
│ │ ├── subFilter.less
│ │ ├── sidebarSectionRenderer.ts
│ │ ├── sidebar.ts
│ │ ├── subFilter.ts
│ │ └── sidebarSettingsWindow.ts
│ ├── settings
│ │ ├── prefs.ts
│ │ └── settingsWindow.less
│ ├── redirect.less
│ ├── biggerFonts.ts
│ ├── feed
│ │ ├── feedSort.ts
│ │ ├── feedSettings
│ │ │ └── feedSettingsWindow.less
│ │ ├── feedButtons.less
│ │ ├── feedLocation.ts
│ │ ├── feedRedirect.ts
│ │ └── feed.ts
│ ├── notifications.less
│ ├── biggerFonts.less
│ ├── filters
│ │ ├── hiddenContentWindow.ts
│ │ ├── hiddenContent.less
│ │ ├── filtersWindow.less
│ │ ├── filters.less
│ │ └── hiddenContent.ts
│ ├── wideMode.less
│ ├── posts
│ │ ├── posts.less
│ │ └── postsBackplates.less
│ ├── toaster.ts
│ ├── notifications.ts
│ ├── customCSS.ts
│ ├── header.ts
│ ├── redirect.ts
│ ├── scrollToTop.less
│ ├── app.ts
│ ├── collapseAwards.ts
│ ├── wideMode.ts
│ └── bookmark.ts
├── _compatibility
│ ├── latestMigration.ts
│ ├── migration_1_0_0.ts
│ ├── migrations.ts
│ └── migration_1_2_0.ts
├── typings.d.ts
├── defines.ts
├── utils
│ ├── changesObserver.less
│ ├── UI
│ │ ├── options.less
│ │ ├── toggle.ts
│ │ ├── toggle.less
│ │ ├── input.less
│ │ ├── options.ts
│ │ └── input.ts
│ ├── element.ts
│ ├── imageViewer.less
│ ├── svg.ts
│ ├── window.less
│ ├── redditAPI.ts
│ ├── changesObserver.ts
│ ├── tools.ts
│ ├── window.ts
│ └── database.ts
├── _debug
│ ├── debug.less
│ └── debug.ts
└── core.ts
├── .husky
└── pre-commit
├── public
├── scr
│ ├── flairs.png
│ ├── page.png
│ ├── post.png
│ ├── readme.png
│ ├── settings.png
│ ├── userTags.png
│ ├── bookmarks.png
│ ├── feedButtons.png
│ └── commentsSort.png
├── icon
│ ├── originFavicon64x64.png
│ └── redditPlusPlusFavicon64x64.png
└── descriptions
│ ├── RedditPlusPlus.description.txt
│ └── RedditPlusPlus.description.ru.txt
├── .gitignore
├── .prettierrc.json
├── resources
├── dragAnchor.svg
├── settingsArrow.svg
├── subFilter.svg
├── scrollButton.svg
├── bookmarkSaved.svg
├── comments
│ ├── userTags
│ │ ├── blockedIcon.svg
│ │ ├── followedButton.svg
│ │ ├── followedIcon.svg
│ │ ├── blockedButton.svg
│ │ ├── warningButton.svg
│ │ ├── warningIcon.svg
│ │ ├── likedButton.svg
│ │ └── likedIcon.svg
│ ├── sortButtons
│ │ ├── qa.svg
│ │ ├── old.svg
│ │ └── controversial.svg
│ ├── bannedUser.svg
│ ├── newUser.svg
│ └── shareButton.svg
├── postUnwrapButton.svg
├── feedButtons
│ ├── feedButtonRising.svg
│ ├── feedButtonTop.svg
│ ├── feedButtonNew.svg
│ ├── feedButtonHot.svg
│ ├── feedButtonBest.svg
│ └── feedButtonBest_empty.svg
├── imageCloseButton.svg
├── bookmarkUnsaved.svg
├── inputClear.svg
├── sidebarSubsManager.svg
├── windowCloseButton.svg
├── settingsButton.svg
├── deleteButton.svg
├── showIco.svg
├── hiddenIco.svg
├── contentFilter.svg
└── settingsGear.svg
├── config
├── empty.cjs
├── webpack.config.prod.cjs
├── webpack.config.dev.cjs
└── webpack.config.base.cjs
├── .editorconfig
├── tsconfig.json
├── redditAPI.md
├── LICENSE
├── README.md
└── package.json
/.prettierignore:
--------------------------------------------------------------------------------
1 | dist/
2 | public/
--------------------------------------------------------------------------------
/src/modules/comments/contextMenu.less:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/modules/profileMenu/profileMenu.less:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.husky/pre-commit:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | . "$(dirname "$0")/_/husky.sh"
3 |
4 | npm run lint-staged
5 |
--------------------------------------------------------------------------------
/public/scr/flairs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lnm95/redditPlusPlus/HEAD/public/scr/flairs.png
--------------------------------------------------------------------------------
/public/scr/page.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lnm95/redditPlusPlus/HEAD/public/scr/page.png
--------------------------------------------------------------------------------
/public/scr/post.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lnm95/redditPlusPlus/HEAD/public/scr/post.png
--------------------------------------------------------------------------------
/public/scr/readme.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lnm95/redditPlusPlus/HEAD/public/scr/readme.png
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | *.code-workspace
4 | .idea
5 | .vscode
6 | *.ai
7 | *.psd
8 |
9 |
--------------------------------------------------------------------------------
/public/scr/settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lnm95/redditPlusPlus/HEAD/public/scr/settings.png
--------------------------------------------------------------------------------
/public/scr/userTags.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lnm95/redditPlusPlus/HEAD/public/scr/userTags.png
--------------------------------------------------------------------------------
/public/scr/bookmarks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lnm95/redditPlusPlus/HEAD/public/scr/bookmarks.png
--------------------------------------------------------------------------------
/public/scr/feedButtons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lnm95/redditPlusPlus/HEAD/public/scr/feedButtons.png
--------------------------------------------------------------------------------
/public/scr/commentsSort.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lnm95/redditPlusPlus/HEAD/public/scr/commentsSort.png
--------------------------------------------------------------------------------
/src/modules/comments/hideShare.less:
--------------------------------------------------------------------------------
1 | shreddit-comment-share-button {
2 | display: none !important;
3 | }
4 |
--------------------------------------------------------------------------------
/src/modules/profileMenu/profileMenuWindow.less:
--------------------------------------------------------------------------------
1 | .pp_profileMenuElement_tittleContainer {
2 | width: 100%;
3 | }
4 |
--------------------------------------------------------------------------------
/public/icon/originFavicon64x64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lnm95/redditPlusPlus/HEAD/public/icon/originFavicon64x64.png
--------------------------------------------------------------------------------
/public/icon/redditPlusPlusFavicon64x64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lnm95/redditPlusPlus/HEAD/public/icon/redditPlusPlusFavicon64x64.png
--------------------------------------------------------------------------------
/src/modules/customFeed/customFeed.less:
--------------------------------------------------------------------------------
1 | .pp_customFeed_masthead_ico {
2 | width: 50px !important;
3 | height: 50px !important;
4 | }
5 |
--------------------------------------------------------------------------------
/src/_compatibility/latestMigration.ts:
--------------------------------------------------------------------------------
1 | import { migration_1_2_0 } from './migration_1_2_0';
2 |
3 | export const latestMigration = migration_1_2_0;
4 |
--------------------------------------------------------------------------------
/src/modules/redirectMode.ts:
--------------------------------------------------------------------------------
1 | export enum RedirectMode {
2 | Disabled = `Disabled`,
3 | Suggestion = `Suggestion`,
4 | Forced = `Forced`
5 | }
6 |
--------------------------------------------------------------------------------
/src/modules/bookmarkMode.ts:
--------------------------------------------------------------------------------
1 | export enum BookmarkMode {
2 | Disabled = `Disabled`,
3 | WhenUpvoted = `When upvoted`,
4 | Always = `Always`
5 | }
6 |
--------------------------------------------------------------------------------
/src/modules/users/usernameMode.ts:
--------------------------------------------------------------------------------
1 | export enum UsernameMode {
2 | ProfileName = `Profile name`,
3 | Nickname = `Nickname`,
4 | Both = `Both`
5 | }
6 |
--------------------------------------------------------------------------------
/src/modules/app.less:
--------------------------------------------------------------------------------
1 | // ban hint
2 | faceplate-banner {
3 | max-width: 1000px !important;
4 | }
5 |
6 | .pp_hidden {
7 | display: none !important;
8 | }
9 |
--------------------------------------------------------------------------------
/src/modules/collapseAwardsMode.ts:
--------------------------------------------------------------------------------
1 | export enum AwardsMode {
2 | Default = `Default behaviour`,
3 | WhenUpvoted = `Show when upvoted`,
4 | RemoveCompletely = `Remove completely`
5 | }
6 |
--------------------------------------------------------------------------------
/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "tabWidth": 4,
3 | "printWidth": 200,
4 | "trailingComma": "none",
5 | "arrowParens": "avoid",
6 | "semi": true,
7 | "singleQuote": true,
8 | "endOfLine": "lf"
9 | }
10 |
--------------------------------------------------------------------------------
/resources/dragAnchor.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/resources/settingsArrow.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/config/empty.cjs:
--------------------------------------------------------------------------------
1 | /**
2 | * This is an empty javascript file for webpack to generate a development UserScript without real code.
3 | * So we could make UserScript manager load script file from local file path.
4 | * See webpack.config.dev.js for more details.
5 | */
6 |
--------------------------------------------------------------------------------
/resources/subFilter.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/scrollButton.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/bookmarkSaved.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/comments/userTags/blockedIcon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/postUnwrapButton.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/feedButtons/feedButtonRising.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/feedButtons/feedButtonTop.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/typings.d.ts:
--------------------------------------------------------------------------------
1 | declare module '*.less';
2 | declare module '*.svg';
3 |
4 | declare const VERSION: string;
5 | declare const DEBUG: boolean;
6 |
7 | declare function GM_getValue(key: string, defaultValue: any): any;
8 | declare function GM_setValue(key: string, value: any): void;
9 | declare function GM_deleteValue(key: string): void;
10 |
--------------------------------------------------------------------------------
/resources/feedButtons/feedButtonNew.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/modules/bookmark.less:
--------------------------------------------------------------------------------
1 | .pp_bookmark_hiddenButton {
2 | width: 32px;
3 | height: 32px;
4 | position: absolute;
5 | opacity: 0 !important;
6 | overflow: hidden;
7 | }
8 |
9 | .pp_bookmark_hiddenButton > div {
10 | padding: 0px !important;
11 | }
12 |
13 | .pp_bookmark_post {
14 | margin-right: 5px !important;
15 | }
16 |
--------------------------------------------------------------------------------
/resources/comments/sortButtons/qa.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/modules/header.less:
--------------------------------------------------------------------------------
1 | #reddit-logo {
2 | text-decoration: none;
3 | }
4 |
5 | #user-drawer-content {
6 | max-height: 90vh;
7 | overflow: auto;
8 | }
9 |
10 | .pp_logo {
11 | width: max-content;
12 | color: var(--shreddit-color-wordmark);
13 | font-size: 22px;
14 | font-weight: 1000;
15 | letter-spacing: -2px;
16 | }
17 |
--------------------------------------------------------------------------------
/src/modules/rightSidebar.ts:
--------------------------------------------------------------------------------
1 | export function renderRightSidebar(rightSidebar: Element) {
2 | rightSidebar.className = `right-sidebar min-w-0 w-[316px] max-w-[316px] hidden s:block styled-scrollbars xs:sticky xs:top-[56px] xs:max-h-[calc(100vh-var(--shreddit-header-height)-1px)] xs:overflow-y-auto xs:overflow-x-hidden pp_rightSidebar pp_defaultText`;
3 | }
4 |
--------------------------------------------------------------------------------
/resources/imageCloseButton.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/modules/collapseAwards.less:
--------------------------------------------------------------------------------
1 | .pp_awardButton {
2 | max-width: 100px;
3 | opacity: 1;
4 | transition: all 0.5s !important;
5 | }
6 |
7 | .pp_awardButton_hidden {
8 | display: none;
9 | }
10 |
11 | .pp_awardButton_collapsed {
12 | max-width: 0px !important;
13 | opacity: 0 !important;
14 | visibility: hidden !important;
15 | }
16 |
--------------------------------------------------------------------------------
/src/modules/subs/subs.less:
--------------------------------------------------------------------------------
1 | .masthead > section > div {
2 | display: flex;
3 | flex-direction: column;
4 | align-items: flex-start;
5 | }
6 |
7 | .masthead > section > div > div:last-child {
8 | align-self: flex-end;
9 | }
10 |
11 | .pp_mastheadSection {
12 | top: -3rem;
13 |
14 | > div {
15 | gap: 1rem;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/resources/comments/userTags/followedButton.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/comments/userTags/followedIcon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/comments/userTags/blockedButton.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | [*]
2 | charset=utf-8
3 | end_of_line=lf
4 | trim_trailing_whitespace=true
5 | insert_final_newline=true
6 | indent_style=space
7 | indent_size=4
8 |
9 | [{.babelrc,.stylelintrc,.eslintrc,jest.config,*.bowerrc,*.jsb3,*.jsb2,*.json,*.yaml,*.yml}]
10 | indent_style=space
11 | indent_size=2
12 |
13 | [{*.js,*.vue,*.ts,*.cjs,.swcrc}]
14 | indent_style=space
15 | indent_size=2
16 |
--------------------------------------------------------------------------------
/resources/comments/userTags/warningButton.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/feedButtons/feedButtonHot.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/defines.ts:
--------------------------------------------------------------------------------
1 | export enum ContentType {
2 | Comment,
3 | Post
4 | }
5 |
6 | export const MAX_LOAD_LAG: number = 2000;
7 | export const MIN_LOAD_LAG: number = 15;
8 |
9 | export const HOUR_SECONDS: number = 60 * 60;
10 | export const DAY_SECONDS: number = HOUR_SECONDS * 24;
11 |
12 | export function secondsToTime(seconds: number): number {
13 | return seconds * 1000;
14 | }
15 |
--------------------------------------------------------------------------------
/src/modules/sidebar/sidebarSettingsWindow.less:
--------------------------------------------------------------------------------
1 | .pp_sidebarSettings_sectionTittle {
2 | width: 100%;
3 | display: flex;
4 | align-items: center;
5 | }
6 |
7 | .pp_sidebarSettings_section {
8 | padding: 0rem 3rem;
9 | gap: 8px;
10 | align-items: center;
11 | }
12 |
13 | .pp_sidebarSettings_section > span {
14 | text-wrap-mode: nowrap;
15 | margin-left: 3rem;
16 | }
17 |
--------------------------------------------------------------------------------
/resources/comments/bannedUser.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/resources/comments/newUser.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/comments/userTags/warningIcon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/bookmarkUnsaved.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/inputClear.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/sidebarSubsManager.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/modules/settings/prefs.ts:
--------------------------------------------------------------------------------
1 | import { Database } from '../../utils/database';
2 |
3 | export class PrefsKey {
4 | static COMMENTS_CURRENT_SORT: string = `COMMENTS_CURRENT_SORT`;
5 | static SUB_FILTER: string = `SUB_FILTER`;
6 | static CONTENT_FILTERS: string = `CONTENT_FILTERS`;
7 | static PROFILE_MENU_ELEMENTS: string = `PROFILE_MENU_ELEMENTS`;
8 | }
9 |
10 | export const prefs = new Database