Skip to content

Capchdo/portal

Repository files navigation

BIT Portal

克隆并改进网瑞达 WebVPN

check Netlify Status

开发

避免网站重复

yq 可列出重复的校内 URL:

yq '.[].[].url.campus' ./src/lib/sites.yaml | sort | uniq --all-repeated

用以下 deno 程序可检查重复的人类易读版 URL。

import { parse } from 'jsr:@std/yaml'
import { humanize_url } from './src/lib/site.ts'

const yaml = await Deno.readTextFile('./src/lib/sites.yaml')
const sites = Object.entries(parse(yaml)).flatMap(([name, group]) => group)
const urls = sites.map((s) => humanize_url(s.url))
urls.filter((u, i) => i !== urls.indexOf(u))

网站图片

  • 如果网站有众所周知的图标,采用图标;不然采用首页有特色部位的截图(例如带网站名称的醒目大图),但不能有实质性信息,例如随时会变的通知。

  • 分辨率至少 600×400,让人能一眼辨别。

  • 采用 WebP 格式,并尽可能降低分辨率,尽量减少性能负担。

    Get-ChildItem *.* | % { magick $_.Name -resize 600x400^ "$($_.BaseName).webp" }

确保图片存在

用以下 deno 程序可列出缺失的图片文件。

import { parse } from 'jsr:@std/yaml'
import { existsSync } from 'jsr:@std/fs'
import { assert } from 'jsr:@std/assert'

const yaml = await Deno.readTextFile('./src/lib/sites.yaml')
const sites = Object.entries(parse(yaml)).flatMap(([name, group]) => group)
const files = sites
  .map((s) => s.img_url)
  .filter((u) => u)
  .map((u) => {
    const base = 'https://img.haobit.eu.org/portal/'
    assert(u.startsWith(base), `Fail to recognize “${u}”`)
    return u.slice(base.length)
  })
files.filter((f) => !existsSync('./portal-img/' + f))