Support bootstrapping URL, debug and stage from URL params

This commit is contained in:
Johannes Zillmann 2021-04-10 20:25:23 +02:00
parent c8cfbebb92
commit 8e9642c9ed
3 changed files with 41 additions and 4 deletions

View File

@ -1,10 +1,12 @@
import { Writable, writable } from 'svelte/store'; import { Writable, writable } from 'svelte/store';
import { debugFromParams, debugStageFromParams } from './processParameters';
export const debugEnabled = storedWritable('debugEnabled', false); export const debugEnabled = storedWritable('debugEnabled', false, debugFromParams);
export const debugStage = storedWritable('debugStage', 0); export const debugStage = storedWritable('debugStage', 0, debugStageFromParams);
function storedWritable<T>(key: string, defaultValue: T): Writable<T> { function storedWritable<T>(key: string, defaultValue: T, paramLoadFunction: (defaultValue: T) => T): Writable<T> {
const store = writable(fromLocalStore(key, defaultValue)); const value = paramLoadFunction(fromLocalStore(key, defaultValue));
const store = writable(value);
store.subscribe((value) => { store.subscribe((value) => {
localStorage.setItem(key, JSON.stringify(value)); localStorage.setItem(key, JSON.stringify(value));
}); });

View File

@ -7,12 +7,21 @@
import ProgressRing from '../components/ProgressRing.svelte'; import ProgressRing from '../components/ProgressRing.svelte';
import Checkbox from '../components/Checkbox.svelte'; import Checkbox from '../components/Checkbox.svelte';
import { debugEnabled } from '../config'; import { debugEnabled } from '../config';
import { urlFromParams } from '../processParameters';
let specifiedFileName: string; let specifiedFileName: string;
let dragover = false; let dragover = false;
let upload: Promise<any>; let upload: Promise<any>;
let rejectionError: string; let rejectionError: string;
let parseProgress: Progress; let parseProgress: Progress;
const url = urlFromParams();
if (url) {
dragover = true;
specifiedFileName = url;
upload = loadUrl(handleProgress, url);
}
function handleUrlLoad() { function handleUrlLoad() {
dragover = true; dragover = true;
let answer = prompt('Url of the pdf'); let answer = prompt('Url of the pdf');

View File

@ -0,0 +1,26 @@
const params = new URLSearchParams(window.location.search);
export function debugFromParams(defaultValue: boolean): boolean {
const defined = params.has('debug');
if (!defined) {
return defaultValue;
}
return params.get('debug') !== 'false';
}
export function debugStageFromParams(defaultValue: number): number {
const stage = +params.get('stage');
if (!Number.isInteger(stage)) {
return defaultValue;
}
return stage;
}
export function urlFromParams(): string {
return getParameterByName('url');
}
function getParameterByName(name: string): string {
const match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}