🎨 Format Optimization
This commit is contained in:
5
bin/README.md
vendored
5
bin/README.md
vendored
@@ -40,6 +40,7 @@ npm install pake-cli -g
|
||||
## Usage
|
||||
|
||||
### Development
|
||||
|
||||
The `DEFAULT_DEV_PAKE_OPTIONS` configuration in `bin/defaults.ts` can be modified at development time to match the `pake-cli` configuration description.
|
||||
|
||||
```typescript
|
||||
@@ -47,7 +48,7 @@ export const DEFAULT_DEV_PAKE_OPTIONS: PakeCliOptions & {url: string} = {
|
||||
...DEFAULT_PAKE_OPTIONS,
|
||||
url: 'https://weread.qq.com',
|
||||
name: 'Weread',
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
then
|
||||
@@ -129,7 +130,6 @@ screen.
|
||||
--fullscreen
|
||||
```
|
||||
|
||||
|
||||
#### [activation-shortcut]
|
||||
|
||||
Set the activation shortcut for the application. Default is ` `, it does not take effect, you can customize the activation shortcut with the following commands, e.g. `CmdOrControl+Shift+P`, use can refer to [available-modifiers](https://www.electronjs.org/docs/latest/api/accelerator#available-modifiers).
|
||||
@@ -248,4 +248,3 @@ The typed package has dev-tools for debugging, in addition to outputting more lo
|
||||
## Conclusion
|
||||
|
||||
After completing the above steps, your application should be successfully packaged. Please note that the packaging process may take some time depending on your system configuration and network conditions. Be patient, and once the packaging is complete, you can find the application installer in the specified directory.
|
||||
|
||||
|
||||
2
bin/README_CN.md
vendored
2
bin/README_CN.md
vendored
@@ -48,7 +48,7 @@ export const DEFAULT_DEV_PAKE_OPTIONS: PakeCliOptions & {url: string} = {
|
||||
...DEFAULT_PAKE_OPTIONS,
|
||||
url: 'https://weread.qq.com',
|
||||
name: 'Weread',
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
之后运行
|
||||
|
||||
25
bin/cli.ts
vendored
25
bin/cli.ts
vendored
@@ -18,10 +18,7 @@ ${green('| __/ (_| | < __/')} ${yellow('https://github.com/tw93/pake')}
|
||||
${green('|_| \\__,_|_|\\_\\___| can turn any webpage into a desktop app with Rust.')}
|
||||
`;
|
||||
|
||||
program
|
||||
.addHelpText('beforeAll', logo)
|
||||
.usage(`[url] [options]`)
|
||||
.showHelpAfterError();
|
||||
program.addHelpText('beforeAll', logo).usage(`[url] [options]`).showHelpAfterError();
|
||||
|
||||
program
|
||||
.argument('[url]', 'The web URL you want to package', validateUrlInput)
|
||||
@@ -37,12 +34,24 @@ program
|
||||
.option('--inject [injects...]', 'Injection of .js or .css Files', DEFAULT.inject)
|
||||
.option('--debug', 'Debug build and more output', DEFAULT.debug)
|
||||
.addOption(new Option('--user-agent <string>', 'Custom user agent').default(DEFAULT.userAgent).hideHelp())
|
||||
.addOption(new Option('--targets <string>', 'Only for Linux, option "deb" or "appimage"').default(DEFAULT.targets).hideHelp())
|
||||
.addOption(
|
||||
new Option('--targets <string>', 'Only for Linux, option "deb" or "appimage"').default(DEFAULT.targets).hideHelp(),
|
||||
)
|
||||
.addOption(new Option('--always-on-top', 'Always on the top level').default(DEFAULT.alwaysOnTop).hideHelp())
|
||||
.addOption(new Option('--disabled-web-shortcuts', 'Disabled webPage shortcuts').default(DEFAULT.disabledWebShortcuts).hideHelp())
|
||||
.addOption(new Option('--safe-domain [domains...]', 'Domains that Require Security Configuration').default(DEFAULT.safeDomain).hideHelp())
|
||||
.addOption(
|
||||
new Option('--disabled-web-shortcuts', 'Disabled webPage shortcuts')
|
||||
.default(DEFAULT.disabledWebShortcuts)
|
||||
.hideHelp(),
|
||||
)
|
||||
.addOption(
|
||||
new Option('--safe-domain [domains...]', 'Domains that Require Security Configuration')
|
||||
.default(DEFAULT.safeDomain)
|
||||
.hideHelp(),
|
||||
)
|
||||
.addOption(new Option('--show-system-tray', 'Show system tray in app').default(DEFAULT.showSystemTray).hideHelp())
|
||||
.addOption(new Option('--system-tray-icon <string>', 'Custom system tray icon').default(DEFAULT.systemTrayIcon).hideHelp())
|
||||
.addOption(
|
||||
new Option('--system-tray-icon <string>', 'Custom system tray icon').default(DEFAULT.systemTrayIcon).hideHelp(),
|
||||
)
|
||||
.version(packageJson.version, '-v, --version', 'Output the current version')
|
||||
.action(async (url: string, options: PakeCliOptions) => {
|
||||
await checkUpdateTips();
|
||||
|
||||
2
bin/helpers/merge.ts
vendored
2
bin/helpers/merge.ts
vendored
@@ -197,7 +197,7 @@ export async function mergeConfig(url: string, options: PakeAppOptions, tauriCon
|
||||
logger.error('The injected file must be in either CSS or JS format.');
|
||||
return;
|
||||
}
|
||||
const files = inject.map(filepath => path.isAbsolute(filepath) ? filepath : path.join(process.cwd(), filepath));
|
||||
const files = inject.map(filepath => (path.isAbsolute(filepath) ? filepath : path.join(process.cwd(), filepath)));
|
||||
tauriConf.pake.inject = files;
|
||||
await combineFiles(files, injectFilePath);
|
||||
} else {
|
||||
|
||||
3
bin/helpers/rust.ts
vendored
3
bin/helpers/rust.ts
vendored
@@ -9,7 +9,8 @@ import { isChinaDomain } from '@/utils/ip';
|
||||
export async function installRust() {
|
||||
const isActions = process.env.GITHUB_ACTIONS;
|
||||
const isInChina = await isChinaDomain('sh.rustup.rs');
|
||||
const rustInstallScriptForMac = isInChina && !isActions
|
||||
const rustInstallScriptForMac =
|
||||
isInChina && !isActions
|
||||
? 'export RUSTUP_DIST_SERVER="https://rsproxy.cn" && export RUSTUP_UPDATE_ROOT="https://rsproxy.cn/rustup" && curl --proto "=https" --tlsv1.2 -sSf https://rsproxy.cn/rustup-init.sh | sh'
|
||||
: "curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y";
|
||||
const rustInstallScriptForWindows = 'winget install --id Rustlang.Rustup';
|
||||
|
||||
5
bin/options/index.ts
vendored
5
bin/options/index.ts
vendored
@@ -20,10 +20,7 @@ function isValidName(name: string, platform: NodeJS.Platform): boolean {
|
||||
return !!name && reg.test(name);
|
||||
}
|
||||
|
||||
export default async function handleOptions(
|
||||
options: PakeCliOptions,
|
||||
url: string,
|
||||
): Promise<PakeAppOptions> {
|
||||
export default async function handleOptions(options: PakeCliOptions, url: string): Promise<PakeAppOptions> {
|
||||
const { platform } = process;
|
||||
const isActions = process.env.GITHUB_ACTIONS;
|
||||
let name = options.name;
|
||||
|
||||
2
bin/types.ts
vendored
2
bin/types.ts
vendored
@@ -42,7 +42,7 @@ export interface PakeCliOptions {
|
||||
// Tray icon, default same as app icon for Windows and Linux, macOS requires separate png or ico
|
||||
systemTrayIcon: string;
|
||||
|
||||
// Recursive copy, when url is a local file path, if this option is enabled, the url path file and all its subfiles will be copied to the pake static file folder, default off
|
||||
// Recursive copy, when url is a local file path, if this option is enabled, the url path file and all its subFiles will be copied to the pake static file folder, default off
|
||||
useLocalFile: false;
|
||||
|
||||
// Multi arch, supports both Intel and M1 chips, only for Mac
|
||||
|
||||
8
bin/utils/combine.ts
vendored
8
bin/utils/combine.ts
vendored
@@ -4,10 +4,14 @@ export default async function combineFiles(files: string[], output: string) {
|
||||
const contents = files.map(file => {
|
||||
const fileContent = fs.readFileSync(file);
|
||||
if (file.endsWith('.css')) {
|
||||
return "window.addEventListener('DOMContentLoaded', (_event) => { const css = `" + fileContent + "`; const style = document.createElement('style'); style.innerHTML = css; document.head.appendChild(style); });";
|
||||
return (
|
||||
"window.addEventListener('DOMContentLoaded', (_event) => { const css = `" +
|
||||
fileContent +
|
||||
"`; const style = document.createElement('style'); style.innerHTML = css; document.head.appendChild(style); });"
|
||||
);
|
||||
}
|
||||
|
||||
return "window.addEventListener('DOMContentLoaded', (_event) => { " + fileContent + " });";
|
||||
return "window.addEventListener('DOMContentLoaded', (_event) => { " + fileContent + ' });';
|
||||
});
|
||||
fs.writeFileSync(output, contents.join('\n'));
|
||||
return files;
|
||||
|
||||
5
bin/utils/dir.ts
vendored
5
bin/utils/dir.ts
vendored
@@ -7,4 +7,7 @@ const currentModulePath = fileURLToPath(import.meta.url);
|
||||
// Resolve the parent directory of the current module
|
||||
export const npmDirectory = path.join(path.dirname(currentModulePath), '..');
|
||||
|
||||
export const tauriConfigDirectory = process.env.NODE_ENV === 'development' ? path.join(npmDirectory, 'src-tauri', '.pake') : path.join(npmDirectory, 'src-tauri');
|
||||
export const tauriConfigDirectory =
|
||||
process.env.NODE_ENV === 'development'
|
||||
? path.join(npmDirectory, 'src-tauri', '.pake')
|
||||
: path.join(npmDirectory, 'src-tauri');
|
||||
|
||||
6
script/app_config.mjs
vendored
6
script/app_config.mjs
vendored
@@ -86,7 +86,6 @@ switch (os.platform()) {
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
updateIconFile(platformVariables.iconPath, platformVariables.defaultIconPath);
|
||||
|
||||
updatePlatformConfig(platformConfig, platformVariables);
|
||||
@@ -148,7 +147,6 @@ function updatePlatformConfig(platformConfig, platformVariables) {
|
||||
}
|
||||
|
||||
function save() {
|
||||
|
||||
writeFileSync(variables.pakeConfigPath, JSON.stringify(pakeJson, null, 2));
|
||||
writeFileSync(variables.tauriConfigPath, JSON.stringify(tauriJson, null, 2));
|
||||
|
||||
@@ -158,13 +156,11 @@ function save() {
|
||||
writeFileSync(variables.macos.configFilePath, JSON.stringify(macosJson, null, 2));
|
||||
|
||||
writeFileSync(variables.windows.configFilePath, JSON.stringify(windowsJson, null, 2));
|
||||
|
||||
}
|
||||
|
||||
function updateDesktopEntry() {
|
||||
linuxJson.tauri.bundle.deb.files = {};
|
||||
linuxJson.tauri.bundle.deb.files[variables.linux.desktopEntryConfig.configKey] =
|
||||
variables.linux.desktopEntryConfig.configValue;
|
||||
linuxJson.tauri.bundle.deb.files[variables.linux.desktopEntryConfig.configKey] = variables.linux.desktopEntryConfig.configValue;
|
||||
writeFileSync(variables.linux.desktopEntryPath, variables.linux.desktopEntry);
|
||||
}
|
||||
|
||||
|
||||
1
src-tauri/src/inject/component.js
vendored
1
src-tauri/src/inject/component.js
vendored
@@ -17,5 +17,4 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
}
|
||||
|
||||
window.pakeToast = pakeToast;
|
||||
|
||||
});
|
||||
|
||||
52
src-tauri/src/inject/event.js
vendored
52
src-tauri/src/inject/event.js
vendored
@@ -1,13 +1,13 @@
|
||||
const shortcuts = {
|
||||
'ArrowUp': () => scrollTo(0, 0),
|
||||
'ArrowDown': () => scrollTo(0, document.body.scrollHeight),
|
||||
'[': () => window.history.back(),
|
||||
']': () => window.history.forward(),
|
||||
'r': () => window.location.reload(),
|
||||
'-': () => zoomOut(),
|
||||
'=': () => zoomIn(),
|
||||
'+': () => zoomIn(),
|
||||
'0': () => setZoom('100%'),
|
||||
0: () => setZoom('100%'),
|
||||
r: () => window.location.reload(),
|
||||
ArrowUp: () => scrollTo(0, 0),
|
||||
ArrowDown: () => scrollTo(0, document.body.scrollHeight),
|
||||
};
|
||||
|
||||
function setZoom(zoom) {
|
||||
@@ -22,11 +22,11 @@ function zoomCommon(zoomChange) {
|
||||
}
|
||||
|
||||
function zoomIn() {
|
||||
zoomCommon((currentZoom) => `${Math.min(parseInt(currentZoom) + 10, 200)}%`);
|
||||
zoomCommon(currentZoom => `${Math.min(parseInt(currentZoom) + 10, 200)}%`);
|
||||
}
|
||||
|
||||
function zoomOut() {
|
||||
zoomCommon((currentZoom) => `${Math.max(parseInt(currentZoom) - 10, 30)}%`);
|
||||
zoomCommon(currentZoom => `${Math.max(parseInt(currentZoom) - 10, 30)}%`);
|
||||
}
|
||||
|
||||
function handleShortcut(event) {
|
||||
@@ -75,7 +75,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
appWindow.startDragging().then();
|
||||
});
|
||||
|
||||
domEl.addEventListener('mousedown', (e) => {
|
||||
domEl.addEventListener('mousedown', e => {
|
||||
e.preventDefault();
|
||||
if (e.buttons === 1 && e.detail !== 2) {
|
||||
appWindow.startDragging().then();
|
||||
@@ -83,13 +83,13 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
});
|
||||
|
||||
domEl.addEventListener('dblclick', () => {
|
||||
appWindow.isFullscreen().then((fullscreen) => {
|
||||
appWindow.isFullscreen().then(fullscreen => {
|
||||
appWindow.setFullscreen(!fullscreen).then();
|
||||
});
|
||||
});
|
||||
|
||||
if (window['pakeConfig']?.disabled_web_shortcuts !== true) {
|
||||
document.addEventListener('keyup', (event) => {
|
||||
document.addEventListener('keyup', event => {
|
||||
if (/windows|linux/i.test(navigator.userAgent) && event.ctrlKey) {
|
||||
handleShortcut(event);
|
||||
}
|
||||
@@ -103,7 +103,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
function collectUrlToBlobs() {
|
||||
const backupCreateObjectURL = window.URL.createObjectURL;
|
||||
window.blobToUrlCaches = new Map();
|
||||
window.URL.createObjectURL = (blob) => {
|
||||
window.URL.createObjectURL = blob => {
|
||||
const url = backupCreateObjectURL.call(window.URL, blob);
|
||||
window.blobToUrlCaches.set(url, blob);
|
||||
return url;
|
||||
@@ -111,7 +111,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
}
|
||||
|
||||
function convertBlobUrlToBinary(blobUrl) {
|
||||
return new Promise((resolve) => {
|
||||
return new Promise(resolve => {
|
||||
const blob = window.blobToUrlCaches.get(blobUrl);
|
||||
const reader = new FileReader();
|
||||
|
||||
@@ -145,7 +145,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
}
|
||||
|
||||
function downloadFromBlobUrl(blobUrl, filename) {
|
||||
convertBlobUrlToBinary(blobUrl).then((binary) => {
|
||||
convertBlobUrlToBinary(blobUrl).then(binary => {
|
||||
invoke('download_file_by_binary', {
|
||||
params: {
|
||||
filename,
|
||||
@@ -158,12 +158,14 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
// detect blob download by createElement("a")
|
||||
function detectDownloadByCreateAnchor() {
|
||||
const createEle = document.createElement;
|
||||
document.createElement = (el) => {
|
||||
document.createElement = el => {
|
||||
if (el !== 'a') return createEle.call(document, el);
|
||||
const anchorEle = createEle.call(document, el);
|
||||
|
||||
// use addEventListener to avoid overriding the original click event.
|
||||
anchorEle.addEventListener('click', (e) => {
|
||||
anchorEle.addEventListener(
|
||||
'click',
|
||||
e => {
|
||||
const url = anchorEle.href;
|
||||
const filename = anchorEle.download || getFilenameFromUrl(url);
|
||||
if (window.blobToUrlCaches.has(url)) {
|
||||
@@ -174,18 +176,19 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
} else if (isDownloadLink(url) || anchorEle.hostname !== window.location.host) {
|
||||
handleExternalLink(e, url);
|
||||
}
|
||||
}, true);
|
||||
},
|
||||
true,
|
||||
);
|
||||
|
||||
return anchorEle;
|
||||
};
|
||||
}
|
||||
|
||||
const isExternalLink = (link) => window.location.host !== link.host;
|
||||
const isExternalLink = link => window.location.host !== link.host;
|
||||
// process special download protocol['data:','blob:']
|
||||
const isSpecialDownload = (url) => ['blob', 'data'].some(protocol => url.startsWith(protocol));
|
||||
const isSpecialDownload = url => ['blob', 'data'].some(protocol => url.startsWith(protocol));
|
||||
|
||||
const isDownloadRequired = (url, anchorElement, e) =>
|
||||
anchorElement.download || e.metaKey || e.ctrlKey || isDownloadLink(url);
|
||||
const isDownloadRequired = (url, anchorElement, e) => anchorElement.download || e.metaKey || e.ctrlKey || isDownloadLink(url);
|
||||
|
||||
const handleExternalLink = (e, url) => {
|
||||
e.preventDefault();
|
||||
@@ -197,7 +200,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
invoke('download_file', { params: { url, filename } });
|
||||
};
|
||||
|
||||
const detectAnchorElementClick = (e) => {
|
||||
const detectAnchorElementClick = e => {
|
||||
const anchorElement = e.target.closest('a');
|
||||
if (anchorElement && anchorElement.href) {
|
||||
anchorElement.target = '_self';
|
||||
@@ -249,10 +252,13 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
}
|
||||
|
||||
// Fix Chinese input method "Enter" on Safari
|
||||
document.addEventListener('keydown', (e) => {
|
||||
document.addEventListener(
|
||||
'keydown',
|
||||
e => {
|
||||
if (e.keyCode === 229) e.stopPropagation();
|
||||
}, true);
|
||||
|
||||
},
|
||||
true,
|
||||
);
|
||||
});
|
||||
|
||||
function setDefaultZoom() {
|
||||
|
||||
Reference in New Issue
Block a user