Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 79 additions & 15 deletions index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,10 @@ TEST: addTests('isCommit', [
]);

export const isCommitList = (url: URL | HTMLAnchorElement | Location = location): boolean => isRepoCommitList(url) || isPRCommitList(url);
TEST: addTests('isCommitList', combinedTestOnly);
TEST: addTests('isCommitList', [
'isRepoCommitList',
'isPRCommitList',
]);

export const isRepoCommitList = (url: URL | HTMLAnchorElement | Location = location): boolean => Boolean(getRepo(url)?.path.startsWith('commits'));
TEST: addTests('isRepoCommitList', [
Expand Down Expand Up @@ -202,7 +205,10 @@ TEST: addTests('isGlobalPRList', [
]);

export const isGlobalIssueOrPRList = (url: URL | HTMLAnchorElement | Location = location): boolean => isGlobalPRList(url) || isGlobalIssueList(url);
TEST: addTests('isGlobalIssueOrPRList', combinedTestOnly);
TEST: addTests('isGlobalIssueOrPRList', [
'isGlobalPRList',
'isGlobalIssueList',
]);

export const isGlobalSearchResults = (url: URL | HTMLAnchorElement | Location = location): boolean => url.pathname === '/search' && new URLSearchParams(url.search).get('q') !== null;
TEST: addTests('isGlobalSearchResults', [
Expand All @@ -215,13 +221,23 @@ TEST: addTests('isIssue', [
]);

export const isIssueList = (url: URL | HTMLAnchorElement | Location = location): boolean => isRepoIssueList(url) || isGlobalIssueList(url) || isMilestone(url);
TEST: addTests('isIssueList', combinedTestOnly);
TEST: addTests('isIssueList', [
'isRepoIssueList',
'isGlobalIssueList',
'isMilestone',
]);

export const isIssueOrPRList = (url: URL | HTMLAnchorElement | Location = location): boolean => isIssueList(url) || isPRList(url);
TEST: addTests('isIssueOrPRList', combinedTestOnly);
TEST: addTests('isIssueOrPRList', [
'isIssueList',
'isPRList',
]);

export const isConversation = (url: URL | HTMLAnchorElement | Location = location): boolean => isIssue(url) || isPRConversation(url);
TEST: addTests('isConversation', combinedTestOnly);
TEST: addTests('isConversation', [
'isIssue',
'isPRConversation',
]);

export const isLabelList = (url: URL | HTMLAnchorElement | Location = location): boolean => getRepo(url)?.path === 'labels';
TEST: addTests('isLabelList', [
Expand Down Expand Up @@ -327,7 +343,10 @@ TEST: addTests('isPRConflicts', [

/** Any `isIssueOrPRList` can display both issues and PRs, prefer that detection. `isPRList` only exists because this page has PR-specific filters like the "Reviews" dropdown */
export const isPRList = (url: URL | HTMLAnchorElement | Location = location): boolean => isRepoPRList(url) || isGlobalPRList(url);
TEST: addTests('isPRList', combinedTestOnly);
TEST: addTests('isPRList', [
'isRepoPRList',
'isGlobalPRList',
]);

export const isPRCommit = (url: URL | HTMLAnchorElement | Location = location): boolean => /^pull\/\d+\/(commits|changes)\/[\da-f]{7,40}$/.test(getRepo(url)?.path);
TEST: addTests('isPRCommit', [
Expand Down Expand Up @@ -428,23 +447,33 @@ TEST: addTests('isEditingFile', [
]);

export const hasFileEditor = (url: URL | HTMLAnchorElement | Location = location): boolean => isEditingFile(url) || isNewFile(url) || isDeletingFile(url);
TEST: addTests('hasFileEditor', combinedTestOnly);
TEST: addTests('hasFileEditor', [
'isEditingFile',
'isNewFile',
'isDeletingFile',
]);

export const isEditingRelease = (url: URL | HTMLAnchorElement | Location = location): boolean => Boolean(getRepo(url)?.path.startsWith('releases/edit'));
TEST: addTests('isEditingRelease', [
'https://github.com/sindresorhus/refined-github/releases/edit/v1.2.3',
]);

export const hasReleaseEditor = (url: URL | HTMLAnchorElement | Location = location): boolean => isEditingRelease(url) || isNewRelease(url);
TEST: addTests('hasReleaseEditor', combinedTestOnly);
TEST: addTests('hasReleaseEditor', [
'isEditingRelease',
'isNewRelease',
]);

export const isEditingWikiPage = (url: URL | HTMLAnchorElement | Location = location): boolean => isRepoWiki(url) && getCleanPathname(url).endsWith('/_edit');
TEST: addTests('isEditingWikiPage', [
'https://github.com/tooomm/wikitest/wiki/Getting-Started/_edit',
]);

export const hasWikiPageEditor = (url: URL | HTMLAnchorElement | Location = location): boolean => isEditingWikiPage(url) || isNewWikiPage(url);
TEST: addTests('hasWikiPageEditor', combinedTestOnly);
TEST: addTests('hasWikiPageEditor', [
'isEditingWikiPage',
'isNewWikiPage',
]);

export const isRepo = (url: URL | HTMLAnchorElement | Location = location): boolean => {
const [user, repo, extra] = getCleanPathname(url).split('/');
Expand Down Expand Up @@ -535,7 +564,11 @@ export const isRepoIssueOrPRList = (url: URL | HTMLAnchorElement | Location = lo
isRepoPRList(url)
|| isRepoIssueList(url)
|| isRepoTaxonomyIssueOrPRList(url);
TEST: addTests('isRepoIssueOrPRList', combinedTestOnly);
TEST: addTests('isRepoIssueOrPRList', [
'isRepoPRList',
'isRepoIssueList',
'isRepoTaxonomyIssueOrPRList',
]);

export const isRepoPRList = (url: URL | HTMLAnchorElement | Location = location): boolean => Boolean(getRepo(url)?.path.startsWith('pulls'));
TEST: addTests('isRepoPRList', [
Expand Down Expand Up @@ -740,7 +773,10 @@ TEST: addTests('isRenderedTextFile', [
]);

export const hasRenderedText = (url: URL | HTMLAnchorElement | Location = location): boolean => isRepoRoot(url) || isRenderedTextFile(url);
TEST: addTests('hasRenderedText', combinedTestOnly);
TEST: addTests('hasRenderedText', [
'isRepoRoot',
'isRenderedTextFile',
]);

export const isFileFinder = (url: URL | HTMLAnchorElement | Location = location): boolean => Boolean(getRepo(url)?.path.startsWith('find/'));
TEST: addTests('isFileFinder', [
Expand Down Expand Up @@ -895,15 +931,29 @@ TEST: addTests('isProfileRepoList', [
'https://github.com/orgs/refined-github/repositories?q=&type=private&language=&sort=',
]);

TEST: addTests('hasComments', combinedTestOnly);
TEST: addTests('hasComments', [
'isPR',
'isIssue',
'isCommit',
'isTeamDiscussion',
'isSingleGist',
]);
export const hasComments = (url: URL | HTMLAnchorElement | Location = location): boolean =>
isPR(url)
|| isIssue(url)
|| isCommit(url)
|| isTeamDiscussion(url)
|| isSingleGist(url);

TEST: addTests('hasRichTextEditor', combinedTestOnly);
TEST: addTests('hasRichTextEditor', [
'hasComments',
'isNewIssue',
'isCompare',
'isRepliesSettings',
'hasReleaseEditor',
'isDiscussion',
'isNewDiscussion',
]);
export const hasRichTextEditor = (url: URL | HTMLAnchorElement | Location = location): boolean =>
hasComments(url)
|| isNewIssue(url)
Expand All @@ -913,7 +963,17 @@ export const hasRichTextEditor = (url: URL | HTMLAnchorElement | Location = loca
|| isDiscussion(url)
|| isNewDiscussion(url);

TEST: addTests('hasCode', combinedTestOnly);
TEST: addTests('hasCode', [
'hasComments',
'isRepoTree',
'isRepoSearch',
'isGlobalSearchResults',
'isSingleFile',
'isGist',
'isCompare',
'isCompareWikiPage',
'isBlame',
]);
/** Static code, not the code editor */
export const hasCode = (url: URL | HTMLAnchorElement | Location = location): boolean =>
hasComments(url)
Expand All @@ -936,7 +996,11 @@ export const isRepoGitObject = (url: URL | HTMLAnchorElement | Location = locati
isRepo(url)
&& [undefined, 'blob', 'tree', 'blame'].includes(getCleanPathname(url).split('/')[2]);

TEST: addTests('hasFiles', combinedTestOnly);
TEST: addTests('hasFiles', [
'isCommit',
'isCompare',
'isPRFiles',
]);
/** Has a list of files */
export const hasFiles = (url: URL | HTMLAnchorElement | Location = location): boolean =>
isCommit(url)
Expand Down