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) => { |   private renderCrawlItem = ({ item: crawl }: CrawlSearchResult) => { | ||||||
|     return html`<li
 |     return html`<li class="border-t first:border-t-0">
 | ||||||
|       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" |       <a | ||||||
|       role="button" |         href=${`${this.crawlsBaseUrl}/crawl/${crawl.id}`} | ||||||
|       @click=${() => this.navTo(`${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 || crawl.cid} |         title=${crawl.configName} | ||||||
|     > |         @click=${this.navLink} | ||||||
|       <div class="col-span-11 md:col-span-5"> |       > | ||||||
|         <div class="font-medium mb-1"> |         <div class="col-span-11 md:col-span-5"> | ||||||
|           <a |           <div class="font-medium mb-1">${crawl.configName || crawl.cid}</div> | ||||||
|             href=${`${this.crawlsBaseUrl}/crawl/${crawl.id}`} |           <div class="text-0-700 text-sm whitespace-nowrap truncate"> | ||||||
|             @click=${(e: any) => { |             <sl-format-date | ||||||
|               e.stopPropagation(); |               date=${`${crawl.started}Z` /** Z for UTC */} | ||||||
|               this.navLink(e); |               month="2-digit" | ||||||
|             }} |               day="2-digit" | ||||||
|           > |               year="2-digit" | ||||||
|             ${crawl.configName || crawl.cid} |               hour="numeric" | ||||||
|           </a> |               minute="numeric" | ||||||
|  |             ></sl-format-date> | ||||||
|  |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="text-0-700 text-sm whitespace-nowrap truncate"> |         <div class="md:order-last col-span-1 flex justify-end"> | ||||||
|           <sl-format-date |           <sl-dropdown @click=${(e: Event) => e.preventDefault()}> | ||||||
|             date=${`${crawl.started}Z` /** Z for UTC */} |             <sl-icon-button | ||||||
|             month="2-digit" |               slot="trigger" | ||||||
|             day="2-digit" |               name="three-dots" | ||||||
|             year="2-digit" |               label=${msg("More")} | ||||||
|             hour="numeric" |               style="font-size: 1rem" | ||||||
|             minute="numeric" |             ></sl-icon-button> | ||||||
|           ></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> |  | ||||||
| 
 | 
 | ||||||
|           <ul class="text-sm text-0-800 whitespace-nowrap" role="menu"> |             <ul class="text-sm text-0-800 whitespace-nowrap" role="menu"> | ||||||
|             ${isRunning(crawl) |               ${isRunning(crawl) | ||||||
|               ? html` |                 ? html` | ||||||
|                   <li |                     <li | ||||||
|                     class="p-2 hover:bg-zinc-100 cursor-pointer" |                       class="p-2 hover:bg-zinc-100 cursor-pointer" | ||||||
|                     role="menuitem" |                       role="menuitem" | ||||||
|                     @click=${(e: any) => { |                       @click=${(e: any) => { | ||||||
|                       this.stop(crawl); |                         this.stop(crawl); | ||||||
|                       e.target.closest("sl-dropdown").hide(); |                         e.target.closest("sl-dropdown").hide(); | ||||||
|                     }} |                       }} | ||||||
|                   > |                     > | ||||||
|                     <sl-icon |                       <sl-icon | ||||||
|                       class="inline-block align-middle" |                         class="inline-block align-middle" | ||||||
|                       name="slash-circle" |                         name="slash-circle" | ||||||
|                     ></sl-icon> |                       ></sl-icon> | ||||||
|                     <span class="inline-block align-middle"> |                       <span class="inline-block align-middle"> | ||||||
|                       ${msg("Stop gracefully")} |                         ${msg("Stop gracefully")} | ||||||
|                     </span> |                       </span> | ||||||
|                   </li> |                     </li> | ||||||
|                   <li |                     <li | ||||||
|                     class="p-2 text-danger hover:bg-danger hover:text-white cursor-pointer" |                       class="p-2 text-danger hover:bg-danger hover:text-white cursor-pointer" | ||||||
|                     role="menuitem" |                       role="menuitem" | ||||||
|                     @click=${(e: any) => { |                       @click=${(e: any) => { | ||||||
|                       this.cancel(crawl); |                         this.cancel(crawl); | ||||||
|                       e.target.closest("sl-dropdown").hide(); |                         e.target.closest("sl-dropdown").hide(); | ||||||
|                     }} |                       }} | ||||||
|                   > |                     > | ||||||
|                     <sl-icon |                       <sl-icon | ||||||
|                       class="inline-block align-middle" |                         class="inline-block align-middle" | ||||||
|                       name="trash" |                         name="trash" | ||||||
|                     ></sl-icon> |                       ></sl-icon> | ||||||
|                     <span class="inline-block align-middle"> |                       <span class="inline-block align-middle"> | ||||||
|                       ${msg("Cancel immediately")} |                         ${msg("Cancel immediately")} | ||||||
|                     </span> |                       </span> | ||||||
|                   </li> |                     </li> | ||||||
|                   <hr /> |                     <hr /> | ||||||
|                 ` |                   ` | ||||||
|               : ""} |                 : ""} | ||||||
|             <li |               <li | ||||||
|               class="p-2 hover:bg-zinc-100 cursor-pointer" |                 class="p-2 hover:bg-zinc-100 cursor-pointer" | ||||||
|               role="menuitem" |                 role="menuitem" | ||||||
|               @click=${(e: any) => { |                 @click=${(e: any) => { | ||||||
|                 CopyButton.copyToClipboard(crawl.id); |                   CopyButton.copyToClipboard(crawl.id); | ||||||
|                 e.target.closest("sl-dropdown").hide(); |                   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" |  | ||||||
|               > |               > | ||||||
|                 ${this.numberFormatter.format(+crawl.stats.done)} |                 ${msg("Copy Crawl ID")} | ||||||
|                 <span class="text-0-400">/</span> |               </li> | ||||||
|                 ${this.numberFormatter.format(+crawl.stats.found)} |               <li | ||||||
|               </div> |                 class="p-2 hover:bg-zinc-100 cursor-pointer" | ||||||
|               <div class="text-0-500 text-sm whitespace-nowrap truncate"> |                 role="menuitem" | ||||||
|                 ${msg("pages crawled")} |                 @click=${(e: any) => { | ||||||
|               </div> |                   CopyButton.copyToClipboard(crawl.cid); | ||||||
|             ` |                   e.target.closest("sl-dropdown").hide(); | ||||||
|           : ""} |                 }} | ||||||
|       </div> |               > | ||||||
|       <div class="col-span-6 md:col-span-2"> |                 ${msg("Copy Crawl Template ID")} | ||||||
|         ${crawl.manual |               </li> | ||||||
|           ? html` |               <li | ||||||
|               <div class="whitespace-nowrap truncate mb-1"> |                 class="p-2 hover:bg-zinc-100 cursor-pointer" | ||||||
|                 <span |                 role="menuitem" | ||||||
|                   class="bg-fuchsia-50 text-fuchsia-700 text-sm rounded px-1 leading-4" |                 @click=${(e: any) => { | ||||||
|                   >${msg("Manual Start")}</span |                   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> |                   ${this.numberFormatter.format(+crawl.stats.done)} | ||||||
|               <div class="ml-1 text-0-500 text-sm whitespace-nowrap truncate"> |                   <span class="text-0-400">/</span> | ||||||
|                 ${msg(str`by ${crawl.userName || crawl.userid}`)} |                   ${this.numberFormatter.format(+crawl.stats.found)} | ||||||
|               </div> |                 </div> | ||||||
|             ` |                 <div class="text-0-500 text-sm whitespace-nowrap truncate"> | ||||||
|           : html` |                   ${msg("pages crawled")} | ||||||
|               <div class="whitespace-nowrap truncate"> |                 </div> | ||||||
|                 <span |               ` | ||||||
|                   class="bg-teal-50 text-teal-700 text-sm rounded px-1 leading-4" |             : ""} | ||||||
|                   >${msg("Scheduled Run")}</span |         </div> | ||||||
|                 > |         <div class="col-span-6 md:col-span-2"> | ||||||
|               </div> |           ${crawl.manual | ||||||
|             `}
 |             ? html` | ||||||
|       </div> |                 <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>`;
 |     </li>`;
 | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -66,12 +66,14 @@ export default class LiteElement extends LitElement { | |||||||
|    * @param event Click event |    * @param event Click event | ||||||
|    */ |    */ | ||||||
|   navLink(event: MouseEvent, href?: string): void { |   navLink(event: MouseEvent, href?: string): void { | ||||||
|     // Detect keypress for opening in a new tab
 |  | ||||||
|     if ( |     if ( | ||||||
|  |       // Detect keypress for opening in a new tab
 | ||||||
|       event.ctrlKey || |       event.ctrlKey || | ||||||
|       event.shiftKey || |       event.shiftKey || | ||||||
|       event.metaKey || |       event.metaKey || | ||||||
|       (event.button && event.button == 1) |       (event.button && event.button == 1) || | ||||||
|  |       // Account for event prevented on anchor tag
 | ||||||
|  |       event.defaultPrevented | ||||||
|     ) { |     ) { | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user