Skip to content
Merged
Show file tree
Hide file tree
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
25 changes: 19 additions & 6 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,31 @@ jobs:
- name: Build
run: npm run build

- name: Resolve artifact name
id: artifact
- name: Inject version for dev build
if: github.ref_name == 'dev'
id: inject
run: |
VERSION=$(head -n 20 dist/EdgeDL.user.js | grep '@version' | sed -E 's/.*@version\s+([0-9.]+).*/\1/')
BASE_VERSION=$(grep -E "@version[[:space:]]+[0-9.]+" rollup.config.js \
| sed -E 's/.*@version[[:space:]]+([0-9.]+).*/\1/')

SHORT_SHA=$(git rev-parse --short HEAD)
FULL_VERSION="${BASE_VERSION}-dev+${SHORT_SHA}"

sed -i -E "s|//[[:space:]]*@version[[:space:]]+.*|// @version ${FULL_VERSION}|" dist/EdgeDL.user.js

if [ "${{ github.ref_name }}" = "main" ]; then
NAME="EdgeDL-build-v${VERSION}"
echo "full_version=${FULL_VERSION}" >> $GITHUB_OUTPUT

- name: Resolve artifact name
id: artifact
run: |
if [ -n "${{ steps.inject.outputs.full_version }}" ]; then
VERSION="${{ steps.inject.outputs.full_version }}"
else
NAME="EdgeDL-build-v${VERSION}-${SHORT_SHA}"
VERSION=$(grep -E "@version[[:space:]]+[0-9.]+" rollup.config.js \
| sed -E 's/.*@version[[:space:]]+([0-9.]+).*/\1/')
fi

NAME="EdgeDL-build-${VERSION}"
echo "name=$NAME" >> $GITHUB_OUTPUT

- name: Upload build artifact
Expand Down
2 changes: 1 addition & 1 deletion rollup.config.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 20 additions & 4 deletions src/main.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { isDownloadLink } from './detector.js';
import { openDownload } from './intent/factory.js';
import { showDownloadPicker } from './download-picker.js';
import { extractUrlFromOnclick } from './utils.js';
import { registerMenu } from './menu.js';
registerMenu();

Expand All @@ -16,11 +17,26 @@ document.addEventListener('click', e => {
if (e.__edgedl_handled__) return;
e.__edgedl_handled__ = true;

const link = e.target?.closest?.('a');
if (!link || !link.href) return;
const link = e.target?.closest?.('a, [onclick]');
if (!link) return;

const url = link.href;
if (!isDownloadLink(url)) return;
let url = link.href;

if (
!url ||
url === '#' ||
url === '##' ||
url.startsWith('javascript:')
) {
const onclick = link.getAttribute('onclick')
|| link.closest('[onclick]')?.getAttribute('onclick');

if (onclick) {
url = extractUrlFromOnclick(onclick);
}
}

if (!url || !isDownloadLink(url)) return;

// 阻止浏览器原生下载与页面跳转
e.preventDefault();
Expand Down
14 changes: 14 additions & 0 deletions src/utils.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// 从 onclick 中解析下载 URL
export function extractUrlFromOnclick(onclick) {
if (!onclick) return null;

const match = onclick.match(
/(https?:\/\/[^"'()\s]+)/i
);

if (match) {
return match[1];
}

return null;
}