testing `restore-file` by fregante · Pull Request #16 · refined-github/sandbox · GitHub
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
85862b9
testing `restore-file`
fregante Jun 15, 2022
1a89949
Restore README.md
fregante Jun 15, 2022
165ae08
Update README.md
fregante Apr 25, 2023
f73a6a4
Restore README.md
fregante Apr 25, 2023
a06eee1
Create 6621
fregante May 6, 2023
7ac1499
Update README.md
fregante May 6, 2023
b027af7
Discard changes to README.md
fregante May 6, 2023
d42bd46
Update and rename 6621 to 6621.js
fregante May 6, 2023
6a7407e
Update README.md
fregante May 6, 2023
e3bd409
Discard changes to README.md
fregante May 6, 2023
11434b6
Update README.md
fregante May 6, 2023
cacf6db
Discard changes to README.md
fregante May 6, 2023
b1b4f1a
Discard changes to 6621.js
fregante May 6, 2023
fd318ac
Create 6670
fregante May 20, 2023
3b0dc5e
Discard changes to 6670
fregante May 20, 2023
4d23319
Create 6670
fregante May 20, 2023
add5d19
Discard changes to 6670
fregante May 20, 2023
c427fba
Update README.md
fregante May 20, 2023
a5dba4a
Discard changes to README.md
fregante May 20, 2023
682c95c
Create new
fregante May 21, 2023
181a6b5
Update README.md
fregante May 21, 2023
fcaf33b
Rename wait-for-checks.yml to renamed
fregante May 21, 2023
ae4ce62
Discard changes to new
fregante May 21, 2023
586ba4b
Discard changes to README.md
fregante May 21, 2023
069f938
Discard changes to .github/workflows/renamed
fregante May 21, 2023
b754744
Discard changes to .github/workflows/wait-for-checks.yml
fregante May 21, 2023
3324ebc
Rename README.md to readme.md
fregante Jun 1, 2023
2a5a9cd
Create new file
fregante Jun 1, 2023
2b56a13
Rename wait-for-checks.yml to new-name.yml
fregante Jun 1, 2023
7ce7799
Discard changes to new file
fregante Jun 1, 2023
12344dc
Discard changes to .github/workflows/wait-for-checks.yml
fregante Jun 1, 2023
06759e7
Delete readme.md
fregante Jun 1, 2023
7fbd855
Discard changes to README.md
fregante Jun 1, 2023
62978d5
Create 1
fregante Jun 8, 2024
f4a844e
Create 2
fregante Jun 8, 2024
1cdc539
Create d
fregante Jun 8, 2024
46eb2cb
Create 😆
fregante Jun 8, 2024
316546c
Discard changes to 1
fregante Jun 8, 2024
00e1505
Discard changes to d
fregante Jun 8, 2024
3606acd
Discard changes to 😆
fregante Jun 8, 2024
6b035ee
Merge branch 'default-a' into testing-`restore-file`
fregante Jun 8, 2024
c47d3f3
Update emoji
fregante Jun 8, 2024
7ee153a
Discard changes to emoji
fregante Jun 8, 2024
65e207e
Update emoji
fregante Jun 8, 2024
722c74f
Discard changes to emoji
fregante Jun 8, 2024
5069abb
Discard changes to 2
fregante Jun 8, 2024
3c80a4b
Update emoji
fregante Jun 8, 2024
67e152b
Discard changes to emoji
fregante Jun 8, 2024
4dae1a2
Merge branch 'default-a' into testing-`restore-file`
fregante Aug 3, 2024
d330836
Update package-lock.json
fregante Aug 3, 2024
49e80ab
Merge branch 'default-a' into testing-`restore-file`
fregante Aug 3, 2024
ef5f759
Delete pexels-eberhardgross-1624496.tiff
fregante Aug 3, 2024
e4057bc
Add files via upload
fregante Aug 3, 2024
a7f7a02
Discard changes to package-lock.json
fregante Aug 3, 2024
5fccfba
Add files via upload
fregante Nov 9, 2025
1922043
Discard changes to pexels-eberhardgross-1624496.tiff
SunsetTechuila May 12, 2026
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
133 changes: 133 additions & 0 deletions releases-tab.tsx
35 changes: 35 additions & 0 deletions reload-failed-proxied-images.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import delegate, {type DelegateEvent} from 'delegate-it';

import delay from '../helpers/delay.js';
import onetime from '../helpers/onetime.js';
import features from '../feature-manager.js';

async function handleErroredImage({delegateTarget}: DelegateEvent<ErrorEvent, HTMLImageElement>): Promise<void> {
console.log('Refined GitHub: image failed loading, will retry', delegateTarget.src);

await delay(5000);
try {
// A clone image retries downloading
const cloned = delegateTarget.cloneNode();
await cloned.decode();
// If successfully loaded, the failed image will be replaced.
delegateTarget.replaceWith(cloned);
} catch {}
}

function initOnce(): void {
delegate('img[src^="https://camo.githubusercontent.com/"]', 'error', handleErroredImage, {capture: true});
}

void features.add(import.meta.url, {
init: onetime(initOnce),
});

/*

Test URLs:

1. https://github.com/refined-github/sandbox/blob/7416/7416.md
2. See log in console

*/
120 changes: 120 additions & 0 deletions repo-age.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
import twas from 'twas';
import {CachedFunction} from 'webext-storage-cache';
import React from 'dom-chef';
import RepoIcon from 'octicons-plain-react/Repo';
import elementReady from 'element-ready';
import * as pageDetect from 'github-url-detection';

import features from '../feature-manager.js';
import api from '../github-helpers/api.js';
import {cacheByRepo} from '../github-helpers/index.js';
import GetRepoAge from './repo-age.gql';
import GetFirstCommit from './repo-age-first-commit.gql';
import {randomArrayItem} from '../helpers/math.js';

type CommitTarget = {
oid: string;
committedDate: string;
resourcePath: string;
history: {
totalCount: number;
};
};

const fresh = [
'Freshly baked',
'Freshly brewed',
'Newly minted',
'Hot off the presses',
'Straight out of the oven',
'Still hot',
'Smells fresh',
'Just a baby',
'It’s my birthday',
'Brand spanking new',
'It’s a new world ✨',
'Certified Fresh Repo™',
'So it begins, the great battle of our time',
];

const dateFormatter = new Intl.DateTimeFormat('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric',
});

async function getRepoAge(commitSha: string, commitsCount: number): Promise<[committedDate: string, resourcePath: string]> {
const {repository} = await api.v4(GetRepoAge, {
variables: {
cursor: `${commitSha} ${commitsCount - Math.min(6, commitsCount)}`,
},
});

const {committedDate, resourcePath} = repository.defaultBranchRef.target.history.nodes
.reverse()
// Filter out any invalid commit dates #3185
.find((commit: CommitTarget) => new Date(commit.committedDate).getFullYear() > 1970);

return [committedDate, resourcePath];
}

const firstCommit = new CachedFunction('first-commit', {
async updater(): Promise<[committedDate: string, resourcePath: string]> {
const {repository} = await api.v4(GetFirstCommit);

const {oid: commitSha, history, committedDate, resourcePath} = repository.defaultBranchRef.target as CommitTarget;
const commitsCount = history.totalCount;
if (commitsCount === 1) {
return [committedDate, resourcePath];
}

return getRepoAge(commitSha, commitsCount);
},
cacheKey: cacheByRepo,
});

async function init(): Promise<void> {
const [firstCommitDate, firstCommitHref] = await firstCommit.get();
const birthday = new Date(firstCommitDate);

// `twas` could also return `an hour ago` or `just now`
const [value, unit] = twas(birthday.getTime())
.replace('just now', '1 second')
.replace(/^an?/, '1')
.split(' ');

// About a day old or less ?
const age = Date.now() - birthday.getTime() < 10e7
? randomArrayItem(fresh)
: <><strong>{value}</strong> {unit} old</>;

const sidebarForksLinkIcon = await elementReady('.BorderGrid .octicon-repo-forked');
sidebarForksLinkIcon!.closest('.mt-2')!.after(
<h3 className="sr-only">Repository age</h3>,
<div className="mt-2">
<a href={firstCommitHref} className="Link--muted" title={`First commit dated ${dateFormatter.format(birthday)}`}>
<RepoIcon className="mr-2" /> {age}
</a>
</div>,
);
}

void features.add(import.meta.url, {
include: [
pageDetect.isRepoRoot,
],
exclude: [
pageDetect.isEmptyRepoRoot,
],
deduplicate: 'has-rgh-inner',
init,
});

/*

Test URLs:

https://github.com/refined-github/sandbox
https://github.com/refined-github/sandbox/tree/6619

*/
50 changes: 50 additions & 0 deletions repo-avatars.tsx
Loading