have a separate parse method for identifier so we don't validate the fragment hash
This commit is contained in:
parent
a460b52e03
commit
41d7308ba8
3 changed files with 15 additions and 13 deletions
22
src/Link.js
22
src/Link.js
|
@ -80,7 +80,7 @@ export function tryFixUrl(fragment) {
|
||||||
|
|
||||||
const validAttempts = [];
|
const validAttempts = [];
|
||||||
for (const attempt of [...new Set(attempts)]) {
|
for (const attempt of [...new Set(attempts)]) {
|
||||||
const link = Link.parse(attempt);
|
const link = Link.parseFragment(attempt);
|
||||||
if (link) {
|
if (link) {
|
||||||
validAttempts.push({ url: attempt, link });
|
validAttempts.push({ url: attempt, link });
|
||||||
}
|
}
|
||||||
|
@ -98,11 +98,17 @@ export class Link {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static parse(fragment) {
|
static parseIdentifier(identifier) {
|
||||||
if (!fragment) {
|
return Link._parse(identifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
static parseFragment(fragment) {
|
||||||
|
let [linkStr, queryParamsStr] = fragment.split("?");
|
||||||
|
if (!linkStr.startsWith("#/")) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
let [linkStr, queryParamsStr] = fragment.split("?");
|
linkStr = linkStr.substr(2);
|
||||||
|
const [identifier, eventId] = linkStr.split("/");
|
||||||
|
|
||||||
let viaServers = [];
|
let viaServers = [];
|
||||||
let clientId = null;
|
let clientId = null;
|
||||||
|
@ -121,14 +127,10 @@ export class Link {
|
||||||
}
|
}
|
||||||
webInstances = getWebInstanceMap(queryParams);
|
webInstances = getWebInstanceMap(queryParams);
|
||||||
}
|
}
|
||||||
|
return Link._parse(identifier, eventId, clientId, viaServers, webInstances);
|
||||||
if (!linkStr.startsWith("#/")) {
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
linkStr = linkStr.substr(2);
|
|
||||||
|
|
||||||
const [identifier, eventId] = linkStr.split("/");
|
|
||||||
|
|
||||||
|
static _parse(identifier, eventId = undefined, clientId = null, viaServers = [], webInstances = {}) {
|
||||||
let matches;
|
let matches;
|
||||||
matches = USERID_PATTERN.exec(identifier);
|
matches = USERID_PATTERN.exec(identifier);
|
||||||
if (matches) {
|
if (matches) {
|
||||||
|
|
|
@ -76,7 +76,7 @@ export class RootViewModel extends ViewModel {
|
||||||
} else if (hash === "" || hash === "#" || hash === "#/") {
|
} else if (hash === "" || hash === "#" || hash === "#/") {
|
||||||
this._updateChildVMs(null, oldLink);
|
this._updateChildVMs(null, oldLink);
|
||||||
this.createLinkViewModel = new CreateLinkViewModel(this.childOptions());
|
this.createLinkViewModel = new CreateLinkViewModel(this.childOptions());
|
||||||
} else if (newLink = Link.parse(hash)) {
|
} else if (newLink = Link.parseFragment(hash)) {
|
||||||
this._updateChildVMs(newLink, oldLink);
|
this._updateChildVMs(newLink, oldLink);
|
||||||
} else {
|
} else {
|
||||||
this._updateChildVMs(null, oldLink);
|
this._updateChildVMs(null, oldLink);
|
||||||
|
|
|
@ -30,7 +30,7 @@ export class CreateLinkViewModel extends ViewModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
async createLink(identifier) {
|
async createLink(identifier) {
|
||||||
this._link = Link.parse(identifier);
|
this._link = Link.parseIdentifier(identifier);
|
||||||
if (this._link) {
|
if (this._link) {
|
||||||
this.openLink("#" + this._link.toFragment());
|
this.openLink("#" + this._link.toFragment());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue