enable opening crawl in new tab
This commit is contained in:
parent
29b586b03f
commit
f90ef071de
@ -248,215 +248,207 @@ export class CrawlsList extends LiteElement {
|
||||
}
|
||||
|
||||
private renderCrawlItem = ({ item: crawl }: CrawlSearchResult) => {
|
||||
return html`<li
|
||||
class="grid grid-cols-12 gap-4 p-4 leading-none hover:bg-zinc-50 hover:text-primary border-t first:border-t-0 transition-colors"
|
||||
role="button"
|
||||
@click=${() => this.navTo(`${this.crawlsBaseUrl}/crawl/${crawl.id}`)}
|
||||
title=${crawl.configName || crawl.cid}
|
||||
>
|
||||
<div class="col-span-11 md:col-span-5">
|
||||
<div class="font-medium mb-1">
|
||||
<a
|
||||
href=${`${this.crawlsBaseUrl}/crawl/${crawl.id}`}
|
||||
@click=${(e: any) => {
|
||||
e.stopPropagation();
|
||||
this.navLink(e);
|
||||
}}
|
||||
>
|
||||
${crawl.configName || crawl.cid}
|
||||
</a>
|
||||
return html`<li class="border-t first:border-t-0">
|
||||
<a
|
||||
href=${`${this.crawlsBaseUrl}/crawl/${crawl.id}`}
|
||||
class="grid grid-cols-12 gap-4 p-4 leading-none hover:bg-zinc-50 hover:text-primary transition-colors"
|
||||
title=${crawl.configName}
|
||||
@click=${this.navLink}
|
||||
>
|
||||
<div class="col-span-11 md:col-span-5">
|
||||
<div class="font-medium mb-1">${crawl.configName || crawl.cid}</div>
|
||||
<div class="text-0-700 text-sm whitespace-nowrap truncate">
|
||||
<sl-format-date
|
||||
date=${`${crawl.started}Z` /** Z for UTC */}
|
||||
month="2-digit"
|
||||
day="2-digit"
|
||||
year="2-digit"
|
||||
hour="numeric"
|
||||
minute="numeric"
|
||||
></sl-format-date>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-0-700 text-sm whitespace-nowrap truncate">
|
||||
<sl-format-date
|
||||
date=${`${crawl.started}Z` /** Z for UTC */}
|
||||
month="2-digit"
|
||||
day="2-digit"
|
||||
year="2-digit"
|
||||
hour="numeric"
|
||||
minute="numeric"
|
||||
></sl-format-date>
|
||||
</div>
|
||||
</div>
|
||||
<div class="md:order-last col-span-1 flex justify-end">
|
||||
<sl-dropdown @click=${(e: any) => e.stopPropagation()}>
|
||||
<sl-icon-button
|
||||
slot="trigger"
|
||||
name="three-dots"
|
||||
label=${msg("More")}
|
||||
style="font-size: 1rem"
|
||||
></sl-icon-button>
|
||||
<div class="md:order-last col-span-1 flex justify-end">
|
||||
<sl-dropdown @click=${(e: Event) => e.preventDefault()}>
|
||||
<sl-icon-button
|
||||
slot="trigger"
|
||||
name="three-dots"
|
||||
label=${msg("More")}
|
||||
style="font-size: 1rem"
|
||||
></sl-icon-button>
|
||||
|
||||
<ul class="text-sm text-0-800 whitespace-nowrap" role="menu">
|
||||
${isRunning(crawl)
|
||||
? html`
|
||||
<li
|
||||
class="p-2 hover:bg-zinc-100 cursor-pointer"
|
||||
role="menuitem"
|
||||
@click=${(e: any) => {
|
||||
this.stop(crawl);
|
||||
e.target.closest("sl-dropdown").hide();
|
||||
}}
|
||||
>
|
||||
<sl-icon
|
||||
class="inline-block align-middle"
|
||||
name="slash-circle"
|
||||
></sl-icon>
|
||||
<span class="inline-block align-middle">
|
||||
${msg("Stop gracefully")}
|
||||
</span>
|
||||
</li>
|
||||
<li
|
||||
class="p-2 text-danger hover:bg-danger hover:text-white cursor-pointer"
|
||||
role="menuitem"
|
||||
@click=${(e: any) => {
|
||||
this.cancel(crawl);
|
||||
e.target.closest("sl-dropdown").hide();
|
||||
}}
|
||||
>
|
||||
<sl-icon
|
||||
class="inline-block align-middle"
|
||||
name="trash"
|
||||
></sl-icon>
|
||||
<span class="inline-block align-middle">
|
||||
${msg("Cancel immediately")}
|
||||
</span>
|
||||
</li>
|
||||
<hr />
|
||||
`
|
||||
: ""}
|
||||
<li
|
||||
class="p-2 hover:bg-zinc-100 cursor-pointer"
|
||||
role="menuitem"
|
||||
@click=${(e: any) => {
|
||||
CopyButton.copyToClipboard(crawl.id);
|
||||
e.target.closest("sl-dropdown").hide();
|
||||
}}
|
||||
>
|
||||
${msg("Copy Crawl ID")}
|
||||
</li>
|
||||
<li
|
||||
class="p-2 hover:bg-zinc-100 cursor-pointer"
|
||||
role="menuitem"
|
||||
@click=${(e: any) => {
|
||||
CopyButton.copyToClipboard(crawl.cid);
|
||||
e.target.closest("sl-dropdown").hide();
|
||||
}}
|
||||
>
|
||||
${msg("Copy Crawl Template ID")}
|
||||
</li>
|
||||
<li
|
||||
class="p-2 hover:bg-zinc-100 cursor-pointer"
|
||||
role="menuitem"
|
||||
@click=${(e: any) => {
|
||||
this.navTo(
|
||||
`/archives/${crawl.aid}/crawl-templates/config/${crawl.cid}`
|
||||
);
|
||||
}}
|
||||
>
|
||||
${msg("View Crawl Template")}
|
||||
</li>
|
||||
</ul>
|
||||
</sl-dropdown>
|
||||
</div>
|
||||
<div class="col-span-12 md:col-span-2 flex items-start">
|
||||
<div class="mr-2">
|
||||
<!-- TODO switch case in lit template? needed for tailwindcss purging -->
|
||||
<span
|
||||
class="inline-block ${crawl.state === "failed"
|
||||
? "text-red-500"
|
||||
: crawl.state === "complete"
|
||||
? "text-emerald-500"
|
||||
: isRunning(crawl)
|
||||
? "text-purple-500"
|
||||
: "text-zinc-300"}"
|
||||
style="font-size: 10px; vertical-align: 2px"
|
||||
>
|
||||
●
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<div
|
||||
class="whitespace-nowrap mb-1 capitalize${isRunning(crawl)
|
||||
? " motion-safe:animate-pulse"
|
||||
: ""}"
|
||||
>
|
||||
${crawl.state.replace(/_/g, " ")}
|
||||
</div>
|
||||
<div class="text-0-500 text-sm whitespace-nowrap truncate">
|
||||
${crawl.finished
|
||||
? html`
|
||||
<sl-relative-time
|
||||
date=${`${crawl.finished}Z` /** Z for UTC */}
|
||||
></sl-relative-time>
|
||||
`
|
||||
: html`<btrix-relative-duration
|
||||
value=${`${crawl.started}Z`}
|
||||
></btrix-relative-duration>`}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-span-6 md:col-span-2">
|
||||
${crawl.finished
|
||||
? html`
|
||||
<div class="whitespace-nowrap truncate text-sm">
|
||||
<span class="font-mono text-0-800 tracking-tighter">
|
||||
<sl-format-bytes
|
||||
value=${crawl.fileSize || 0}
|
||||
lang=${/* TODO localize: */ "en"}
|
||||
></sl-format-bytes>
|
||||
</span>
|
||||
<span class="text-0-500">
|
||||
(${crawl.fileCount === 1
|
||||
? msg(str`${crawl.fileCount} file`)
|
||||
: msg(str`${crawl.fileCount} files`)})
|
||||
</span>
|
||||
</div>
|
||||
<div class="text-0-500 text-sm whitespace-nowrap truncate">
|
||||
${msg(
|
||||
str`in ${RelativeDuration.humanize(
|
||||
new Date(`${crawl.finished}Z`).valueOf() -
|
||||
new Date(`${crawl.started}Z`).valueOf()
|
||||
)}`
|
||||
)}
|
||||
</div>
|
||||
`
|
||||
: crawl.stats
|
||||
? html`
|
||||
<div
|
||||
class="whitespace-nowrap truncate text-sm text-purple-600 font-mono tracking-tighter"
|
||||
<ul class="text-sm text-0-800 whitespace-nowrap" role="menu">
|
||||
${isRunning(crawl)
|
||||
? html`
|
||||
<li
|
||||
class="p-2 hover:bg-zinc-100 cursor-pointer"
|
||||
role="menuitem"
|
||||
@click=${(e: any) => {
|
||||
this.stop(crawl);
|
||||
e.target.closest("sl-dropdown").hide();
|
||||
}}
|
||||
>
|
||||
<sl-icon
|
||||
class="inline-block align-middle"
|
||||
name="slash-circle"
|
||||
></sl-icon>
|
||||
<span class="inline-block align-middle">
|
||||
${msg("Stop gracefully")}
|
||||
</span>
|
||||
</li>
|
||||
<li
|
||||
class="p-2 text-danger hover:bg-danger hover:text-white cursor-pointer"
|
||||
role="menuitem"
|
||||
@click=${(e: any) => {
|
||||
this.cancel(crawl);
|
||||
e.target.closest("sl-dropdown").hide();
|
||||
}}
|
||||
>
|
||||
<sl-icon
|
||||
class="inline-block align-middle"
|
||||
name="trash"
|
||||
></sl-icon>
|
||||
<span class="inline-block align-middle">
|
||||
${msg("Cancel immediately")}
|
||||
</span>
|
||||
</li>
|
||||
<hr />
|
||||
`
|
||||
: ""}
|
||||
<li
|
||||
class="p-2 hover:bg-zinc-100 cursor-pointer"
|
||||
role="menuitem"
|
||||
@click=${(e: any) => {
|
||||
CopyButton.copyToClipboard(crawl.id);
|
||||
e.target.closest("sl-dropdown").hide();
|
||||
}}
|
||||
>
|
||||
${this.numberFormatter.format(+crawl.stats.done)}
|
||||
<span class="text-0-400">/</span>
|
||||
${this.numberFormatter.format(+crawl.stats.found)}
|
||||
</div>
|
||||
<div class="text-0-500 text-sm whitespace-nowrap truncate">
|
||||
${msg("pages crawled")}
|
||||
</div>
|
||||
`
|
||||
: ""}
|
||||
</div>
|
||||
<div class="col-span-6 md:col-span-2">
|
||||
${crawl.manual
|
||||
? html`
|
||||
<div class="whitespace-nowrap truncate mb-1">
|
||||
<span
|
||||
class="bg-fuchsia-50 text-fuchsia-700 text-sm rounded px-1 leading-4"
|
||||
>${msg("Manual Start")}</span
|
||||
${msg("Copy Crawl ID")}
|
||||
</li>
|
||||
<li
|
||||
class="p-2 hover:bg-zinc-100 cursor-pointer"
|
||||
role="menuitem"
|
||||
@click=${(e: any) => {
|
||||
CopyButton.copyToClipboard(crawl.cid);
|
||||
e.target.closest("sl-dropdown").hide();
|
||||
}}
|
||||
>
|
||||
${msg("Copy Crawl Template ID")}
|
||||
</li>
|
||||
<li
|
||||
class="p-2 hover:bg-zinc-100 cursor-pointer"
|
||||
role="menuitem"
|
||||
@click=${(e: any) => {
|
||||
this.navTo(
|
||||
`/archives/${crawl.aid}/crawl-templates/config/${crawl.cid}`
|
||||
);
|
||||
}}
|
||||
>
|
||||
${msg("View Crawl Template")}
|
||||
</li>
|
||||
</ul>
|
||||
</sl-dropdown>
|
||||
</div>
|
||||
<div class="col-span-12 md:col-span-2 flex items-start">
|
||||
<div class="mr-2">
|
||||
<!-- TODO switch case in lit template? needed for tailwindcss purging -->
|
||||
<span
|
||||
class="inline-block ${crawl.state === "failed"
|
||||
? "text-red-500"
|
||||
: crawl.state === "complete"
|
||||
? "text-emerald-500"
|
||||
: isRunning(crawl)
|
||||
? "text-purple-500"
|
||||
: "text-zinc-300"}"
|
||||
style="font-size: 10px; vertical-align: 2px"
|
||||
>
|
||||
●
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<div
|
||||
class="whitespace-nowrap mb-1 capitalize${isRunning(crawl)
|
||||
? " motion-safe:animate-pulse"
|
||||
: ""}"
|
||||
>
|
||||
${crawl.state.replace(/_/g, " ")}
|
||||
</div>
|
||||
<div class="text-0-500 text-sm whitespace-nowrap truncate">
|
||||
${crawl.finished
|
||||
? html`
|
||||
<sl-relative-time
|
||||
date=${`${crawl.finished}Z` /** Z for UTC */}
|
||||
></sl-relative-time>
|
||||
`
|
||||
: html`<btrix-relative-duration
|
||||
value=${`${crawl.started}Z`}
|
||||
></btrix-relative-duration>`}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-span-6 md:col-span-2">
|
||||
${crawl.finished
|
||||
? html`
|
||||
<div class="whitespace-nowrap truncate text-sm">
|
||||
<span class="font-mono text-0-800 tracking-tighter">
|
||||
<sl-format-bytes
|
||||
value=${crawl.fileSize || 0}
|
||||
lang=${/* TODO localize: */ "en"}
|
||||
></sl-format-bytes>
|
||||
</span>
|
||||
<span class="text-0-500">
|
||||
(${crawl.fileCount === 1
|
||||
? msg(str`${crawl.fileCount} file`)
|
||||
: msg(str`${crawl.fileCount} files`)})
|
||||
</span>
|
||||
</div>
|
||||
<div class="text-0-500 text-sm whitespace-nowrap truncate">
|
||||
${msg(
|
||||
str`in ${RelativeDuration.humanize(
|
||||
new Date(`${crawl.finished}Z`).valueOf() -
|
||||
new Date(`${crawl.started}Z`).valueOf()
|
||||
)}`
|
||||
)}
|
||||
</div>
|
||||
`
|
||||
: crawl.stats
|
||||
? html`
|
||||
<div
|
||||
class="whitespace-nowrap truncate text-sm text-purple-600 font-mono tracking-tighter"
|
||||
>
|
||||
</div>
|
||||
<div class="ml-1 text-0-500 text-sm whitespace-nowrap truncate">
|
||||
${msg(str`by ${crawl.userName || crawl.userid}`)}
|
||||
</div>
|
||||
`
|
||||
: html`
|
||||
<div class="whitespace-nowrap truncate">
|
||||
<span
|
||||
class="bg-teal-50 text-teal-700 text-sm rounded px-1 leading-4"
|
||||
>${msg("Scheduled Run")}</span
|
||||
>
|
||||
</div>
|
||||
`}
|
||||
</div>
|
||||
${this.numberFormatter.format(+crawl.stats.done)}
|
||||
<span class="text-0-400">/</span>
|
||||
${this.numberFormatter.format(+crawl.stats.found)}
|
||||
</div>
|
||||
<div class="text-0-500 text-sm whitespace-nowrap truncate">
|
||||
${msg("pages crawled")}
|
||||
</div>
|
||||
`
|
||||
: ""}
|
||||
</div>
|
||||
<div class="col-span-6 md:col-span-2">
|
||||
${crawl.manual
|
||||
? html`
|
||||
<div class="whitespace-nowrap truncate mb-1">
|
||||
<span
|
||||
class="bg-fuchsia-50 text-fuchsia-700 text-sm rounded px-1 leading-4"
|
||||
>${msg("Manual Start")}</span
|
||||
>
|
||||
</div>
|
||||
<div class="ml-1 text-0-500 text-sm whitespace-nowrap truncate">
|
||||
${msg(str`by ${crawl.userName || crawl.userid}`)}
|
||||
</div>
|
||||
`
|
||||
: html`
|
||||
<div class="whitespace-nowrap truncate">
|
||||
<span
|
||||
class="bg-teal-50 text-teal-700 text-sm rounded px-1 leading-4"
|
||||
>${msg("Scheduled Run")}</span
|
||||
>
|
||||
</div>
|
||||
`}
|
||||
</div>
|
||||
</a>
|
||||
</li>`;
|
||||
};
|
||||
|
||||
|
@ -66,12 +66,14 @@ export default class LiteElement extends LitElement {
|
||||
* @param event Click event
|
||||
*/
|
||||
navLink(event: MouseEvent, href?: string): void {
|
||||
// Detect keypress for opening in a new tab
|
||||
if (
|
||||
// Detect keypress for opening in a new tab
|
||||
event.ctrlKey ||
|
||||
event.shiftKey ||
|
||||
event.metaKey ||
|
||||
(event.button && event.button == 1)
|
||||
(event.button && event.button == 1) ||
|
||||
// Account for event prevented on anchor tag
|
||||
event.defaultPrevented
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user