diff --git a/README.md b/README.md index 0238fbd79168a69538bfda163e355c193ec4045f..336154d811e6f562a093ac5f555564367254fba1 100644 --- a/README.md +++ b/README.md @@ -35,8 +35,8 @@ ## 预览 **主题** -- [sim 在线预览](https://nav3.cn/#/sim) -- [light 在线预览](https://nav3.cn/#/light) +- [Sim 在线预览](https://nav3.cn/#/sim) +- [Light 在线预览](https://nav3.cn/#/light) ![Preview](media/1.png) ![Preview](media/2.png) diff --git a/build.mjs b/build.mjs index b332e6d8b406a85cdb7808046e09b251df0ed3cd..27d1a351ed14f9e8c997f285231452755bde25f2 100644 --- a/build.mjs +++ b/build.mjs @@ -4,6 +4,9 @@ import fs from 'fs' import config from './nav.config.js' import path from 'path' +const now = new Date() +const date = `${now.getMonth() + 1}-${now.getDate()}-${now.getDay()} ${now.getHours()}:${now.getMinutes()}` + const { description, title, keywords, baiduStatisticsUrl } = config.default const htmlTemplate = ` ${title} @@ -20,6 +23,7 @@ hm.src = '${baiduStatisticsUrl}'; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); + `.trim() try { diff --git a/nav.config.ts b/nav.config.ts index 94a987abf81efd8155b588791217cc98a76aa7be..66119bdee3d2e267aa2f52dce5d4054e58da9e77 100644 --- a/nav.config.ts +++ b/nav.config.ts @@ -71,7 +71,7 @@ const c: IConfig = { baiduStatisticsUrl: 'https://hm.baidu.com/hm.js?4582be7af7e7c95ef75351e07c6c32ba', // 只支持 Light 主题 - // https://www.nav3.cn/#/index?q=grabient + // https://www.nav3.cn/#/light?q=grabient backgroundLinear: [ 'linear-gradient(62deg, #8EC5FC 0%, #E0C3FC 100%)', 'linear-gradient(90deg, #FEE140 0%, #FA709A 100%)', diff --git a/src/assets/img/view.svg b/src/assets/img/view.svg new file mode 100644 index 0000000000000000000000000000000000000000..c4b3e4da36ff6dcc23f0ece49f0a0f8a984a175b --- /dev/null +++ b/src/assets/img/view.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/create/create.component.html b/src/components/create/create.component.html index 4562f1edbb926f05b799ac70a2da15b95d905d98..21bbd6abb4df8be2d7c4f5054a2a00861258f649 100644 --- a/src/components/create/create.component.html +++ b/src/components/create/create.component.html @@ -83,14 +83,20 @@ 网站链接 - + 图标地址 - + + + + + + + diff --git a/src/components/create/create.component.scss b/src/components/create/create.component.scss index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3d2a49a9edf4f7733390851e8d0465e647ef381a 100644 --- a/src/components/create/create.component.scss +++ b/src/components/create/create.component.scss @@ -0,0 +1,5 @@ +.prefix-icon { + width: 20px; + height: 20px; + pointer-events: none; +} diff --git a/src/components/create/create.component.ts b/src/components/create/create.component.ts index cfe097469bdf8adb10e1268805a384cfc2a066f8..12e97c07fb60cff6ddb8a30b527c0982aae0cd8d 100644 --- a/src/components/create/create.component.ts +++ b/src/components/create/create.component.ts @@ -1,7 +1,7 @@ // Copyright @ 2018-2021 xiejiahe. All rights reserved. MIT license. import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core' -import { setWebsiteList } from '../../utils' +import { setWebsiteList, getLogoUrl } from '../../utils' import { NzMessageService } from 'ng-zorro-antd/message' import { NzNotificationService } from 'ng-zorro-antd/notification' import { updateFileContent } from '../../services' @@ -27,6 +27,7 @@ export class CreateComponent implements OnInit { isLogin = !!getToken() radioType: '1'|'2'|'3'|'6' = '6' submiting = false + iconUrl = '' constructor( private fb: FormBuilder, @@ -34,7 +35,7 @@ export class CreateComponent implements OnInit { private notification: NzNotificationService, ) {} - ngOnInit(): void { + ngOnInit() { this.validateForm = this.fb.group({ title: [null, [Validators.required]], oneSelect: [null, [Validators.required]], @@ -62,6 +63,12 @@ export class CreateComponent implements OnInit { } } + async onUrlBlur(e) { + const res = await getLogoUrl(e.target?.value) + this.iconUrl = (res || '') as string + this.validateForm.get('icon')!.setValue(res || '') + } + hanldeOneSelect(value) { if (!value) return diff --git a/src/components/fixbar/index.component.html b/src/components/fixbar/index.component.html index 4fb75ca734735c8b6211431b2568b69359ea53c7..898b62d46ae98a9a56178b491261a7dd56783005 100644 --- a/src/components/fixbar/index.component.html +++ b/src/components/fixbar/index.component.html @@ -1,4 +1,13 @@
+ +
+ +
+
+
Token: ${getToken()}

+

上次构建时间: ${date || '未知'}

+ `, + }); + } + toggleZorroDark(dark: boolean) { if (dark) { const link = document.createElement('link') diff --git a/src/components/logo/logo.component.html b/src/components/logo/logo.component.html index ad59dbe3e9a0d8b5aea347758e494911c9e0f340..fe33f907619ce71778dabcdfa23dee604013349c 100644 --- a/src/components/logo/logo.component.html +++ b/src/components/logo/logo.component.html @@ -3,14 +3,15 @@ [src]="src" class="icon dark-border-color" (error)="onImgError($event)" + [ngStyle]="{ width: (size || 35) + 'px', height: (size || 35) + 'px' }" > diff --git a/src/components/logo/logo.component.scss b/src/components/logo/logo.component.scss index 351157ca1f6d54d7c39a5369ce1abeaf2d898350..6976479a514a37309a84455cfacf1f4d546deca7 100644 --- a/src/components/logo/logo.component.scss +++ b/src/components/logo/logo.component.scss @@ -1,7 +1,5 @@ .icon { display: inline-block; - width: 35px; - height: 35px; vertical-align: middle; border-radius: 50%; pointer-events: none; diff --git a/src/components/logo/logo.component.ts b/src/components/logo/logo.component.ts index 903669eea6135f617fc01013247a6465871547be..a67d0d696f3dc14023e8b19ae262db64b0e1783b 100644 --- a/src/components/logo/logo.component.ts +++ b/src/components/logo/logo.component.ts @@ -9,6 +9,7 @@ export class LogoComponent implements OnInit { @Input() src: string @Input() name: string @Input() colour: string + @Input() size: number hasError = false color = '#1890ff' diff --git a/src/utils/index.ts b/src/utils/index.ts index a83c3ec053e9f1f30c1e6fe07c92ec8f062edb32..1eca2c6e89e440632d71da42e79db23f6b13a858 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -169,7 +169,7 @@ export function getWebsiteList() { // 检测到网站更新,清除缓存 if (storageScriptUrl !== scriptUrl) { - const whiteList = ['token'] + const whiteList = ['token', 'IS_DARK'] const len = window.localStorage.length for (let i = 0; i < len; i++) { const key = window.localStorage.key(i) @@ -256,3 +256,32 @@ export function isDark(): boolean { return Boolean(Number(storageVal)) } + +export async function getLogoUrl(url: string): Promise { + try { + // const c = ['/favicon.ico', '/favicon.png', '/logo.png', '/favicon.svg', '/favicon.jpg'] + const { origin } = new URL(url) + const iconUrl = origin + '/favicon.ico' + + return new Promise(resolve => { + try { + const img = document.createElement('img') + img.src = iconUrl + img.style.display = 'none' + img.onload = () => { + img.parentNode.removeChild(img) + resolve(iconUrl) + } + img.onerror = () => { + img.parentNode.removeChild(img) + resolve(false) + } + document.body.append(img) + } catch (error) { + resolve(false) + } + }) + } catch { + return false + } +}