From d7f58c964cd5e950882f64d95c7a053a6be482cb Mon Sep 17 00:00:00 2001 From: sua yoo Date: Mon, 31 Jan 2022 17:36:50 -0800 Subject: [PATCH] Fix in-app link UX (#132) closes #130, closes #113 --- frontend/src/index.ts | 23 +++++++------ .../pages/archive/crawl-templates-detail.ts | 13 +++++--- .../src/pages/archive/crawl-templates-list.ts | 11 +++++-- .../src/pages/archive/crawl-templates-new.ts | 9 +++++- frontend/src/pages/archive/crawl-templates.ts | 11 +++++-- frontend/src/pages/archive/crawls-list.ts | 12 ++++++- frontend/src/utils/LiteElement.ts | 32 ++++++++++++++++--- 7 files changed, 85 insertions(+), 26 deletions(-) diff --git a/frontend/src/index.ts b/frontend/src/index.ts index 3b1d87e9..2300e825 100644 --- a/frontend/src/index.ts +++ b/frontend/src/index.ts @@ -1,4 +1,5 @@ import type { TemplateResult } from "lit"; +import { render } from "lit"; import { state, query } from "lit/decorators.js"; import { ifDefined } from "lit/directives/if-defined.js"; import { msg, localized } from "@lit/localize"; @@ -491,6 +492,9 @@ export class App extends LiteElement { }; } + /** + * Show global toast alert + */ onNotify(event: NotifyEvent) { event.stopPropagation(); @@ -502,7 +506,8 @@ export class App extends LiteElement { duration = 5000, } = event.detail; - const alert = Object.assign(document.createElement("sl-alert"), { + const container = document.createElement("sl-alert"); + const alert = Object.assign(container, { type: type, closable: true, duration: duration, @@ -512,16 +517,16 @@ export class App extends LiteElement { // "--sl-panel-border-width: 0px", "--sl-spacing-large: var(--sl-spacing-medium)", ].join(";"), - innerHTML: ` - - - ${title ? `${title}` : ""} - ${message ? `
${message}
` : ""} -
- - `, }); + render( + html` + + ${title ? html`${title}` : ""} + ${message ? html`
${message}
` : ""} + `, + container + ); document.body.append(alert); alert.toast(); } diff --git a/frontend/src/pages/archive/crawl-templates-detail.ts b/frontend/src/pages/archive/crawl-templates-detail.ts index e2e19769..38036ff3 100644 --- a/frontend/src/pages/archive/crawl-templates-detail.ts +++ b/frontend/src/pages/archive/crawl-templates-detail.ts @@ -415,11 +415,14 @@ export class CrawlTemplatesDetail extends LiteElement { this.notify({ message: msg( - str`Started crawl from ${ - this.crawlTemplate!.name - }.
View crawl` + html`Started crawl from ${this.crawlTemplate!.name}. +
+ View crawl` ), type: "success", icon: "check2-circle", diff --git a/frontend/src/pages/archive/crawl-templates-list.ts b/frontend/src/pages/archive/crawl-templates-list.ts index abd5a9d5..2676600c 100644 --- a/frontend/src/pages/archive/crawl-templates-list.ts +++ b/frontend/src/pages/archive/crawl-templates-list.ts @@ -47,7 +47,6 @@ export class CrawlTemplatesList extends LiteElement { message: msg("Sorry, couldn't retrieve crawl templates at this time."), type: "danger", icon: "exclamation-octagon", - duration: 10000, }); } } @@ -379,7 +378,7 @@ export class CrawlTemplatesList extends LiteElement { ); this.notify({ - message: msg(str`Deleted ${template.name}.`), + message: msg(html`Deleted ${template.name}.`), type: "success", icon: "check2-circle", }); @@ -415,7 +414,13 @@ export class CrawlTemplatesList extends LiteElement { this.notify({ message: msg( - str`Started crawl from ${template.name}.
View crawl` + html`Started crawl from ${template.name}.
+ View crawl` ), type: "success", icon: "check2-circle", diff --git a/frontend/src/pages/archive/crawl-templates-new.ts b/frontend/src/pages/archive/crawl-templates-new.ts index d9d52f6b..7c3b3982 100644 --- a/frontend/src/pages/archive/crawl-templates-new.ts +++ b/frontend/src/pages/archive/crawl-templates-new.ts @@ -543,7 +543,14 @@ export class CrawlTemplatesNew extends LiteElement { this.notify({ message: data.run_now_job ? msg( - str`Crawl running with new template.
View crawl` + html`Crawl running with new template.
+ View crawl` ) : msg("Crawl template created."), type: "success", diff --git a/frontend/src/pages/archive/crawl-templates.ts b/frontend/src/pages/archive/crawl-templates.ts index e804756e..14c887b7 100644 --- a/frontend/src/pages/archive/crawl-templates.ts +++ b/frontend/src/pages/archive/crawl-templates.ts @@ -46,7 +46,6 @@ export class CrawlTemplatesList extends LiteElement { message: msg("Sorry, couldn't retrieve crawl templates at this time."), type: "danger", icon: "exclamation-octagon", - duration: 10000, }); } } @@ -119,7 +118,7 @@ export class CrawlTemplatesList extends LiteElement { ); this.notify({ - message: msg(str`Deleted ${template.name}.`), + message: msg(html`Deleted ${template.name}.`), type: "success", icon: "check2-circle", }); @@ -155,7 +154,13 @@ export class CrawlTemplatesList extends LiteElement { this.notify({ message: msg( - str`Started crawl from ${template.name}.
View crawl` + html`Started crawl from ${template.name}.
+ View crawl` ), type: "success", icon: "check2-circle", diff --git a/frontend/src/pages/archive/crawls-list.ts b/frontend/src/pages/archive/crawls-list.ts index 8eef4044..cae3e582 100644 --- a/frontend/src/pages/archive/crawls-list.ts +++ b/frontend/src/pages/archive/crawls-list.ts @@ -242,7 +242,17 @@ export class CrawlsList extends LiteElement { title=${crawl.configName || crawl.cid} >
-
${crawl.configName || crawl.cid}
+
Look!` + * ``` + * + * Note: In order for `this` methods to work, you'll + * need to bind `this` or use a fat arrow function. + * For example: + * ```ts + * message: html`` + * ``` + * Or: + * ```ts + * message: html`` + * ``` **/ - message: string; + message: string | TemplateResult; /** Notification title */ title?: string; /** Shoelace icon name */ @@ -50,7 +64,17 @@ export default class LiteElement extends LitElement { * ``` * @param event Click event */ - navLink(event: Event): void { + navLink(event: MouseEvent, href?: string): void { + // Detect keypress for opening in a new tab + if ( + event.ctrlKey || + event.shiftKey || + event.metaKey || + (event.button && event.button == 1) + ) { + return; + } + event.preventDefault(); const evt: NavigateEvent = new CustomEvent("navigate", {