173 lines
3.9 KiB
JavaScript
173 lines
3.9 KiB
JavaScript
|
import { html, css, Component, classMap } from 'wkit'
|
|||
|
|
|||
|
import fetch from '/lib/fetch.js'
|
|||
|
|
|||
|
class Header extends Component {
|
|||
|
static props = {
|
|||
|
input: ''
|
|||
|
}
|
|||
|
|
|||
|
static styles = css`
|
|||
|
.common-header {
|
|||
|
flex-shrink: 0;
|
|||
|
display: flex;
|
|||
|
flex-direction: column;
|
|||
|
justify-content: space-between;
|
|||
|
align-items: center;
|
|||
|
width: 100%;
|
|||
|
height: 240px;
|
|||
|
background: var(--color-red-1);
|
|||
|
color: #fff;
|
|||
|
|
|||
|
.wrapper {
|
|||
|
display: flex;
|
|||
|
width: 1024px;
|
|||
|
justify-content: space-between;
|
|||
|
align-items: center;
|
|||
|
}
|
|||
|
|
|||
|
.navibar {
|
|||
|
height: 36px;
|
|||
|
margin-top: 24px;
|
|||
|
|
|||
|
.logo {
|
|||
|
font-weight: bold;
|
|||
|
font-size: 26px;
|
|||
|
|
|||
|
& img {
|
|||
|
display: block;
|
|||
|
height: 36px;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.navi {
|
|||
|
display: flex;
|
|||
|
align-items: center;
|
|||
|
font-size: 16px;
|
|||
|
|
|||
|
& router-link {
|
|||
|
margin: 0 16px;
|
|||
|
padding: 3px 6px;
|
|||
|
border-radius: 4px;
|
|||
|
transition: background 0.2s ease-in-out;
|
|||
|
|
|||
|
&:hover {
|
|||
|
background: rgba(255, 255, 255, 0.3);
|
|||
|
}
|
|||
|
|
|||
|
&.router-link-active {
|
|||
|
text-decoration: underline;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.banner {
|
|||
|
width: 640px;
|
|||
|
text-align: center;
|
|||
|
}
|
|||
|
|
|||
|
.search {
|
|||
|
display: none;
|
|||
|
width: 520px;
|
|||
|
color: #fff;
|
|||
|
--bg-color: rgba(0, 0, 0, 0.3);
|
|||
|
}
|
|||
|
|
|||
|
&.search-show {
|
|||
|
height: 320px;
|
|||
|
.search {
|
|||
|
display: inline-block;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
&::after {
|
|||
|
display: flex;
|
|||
|
justify-content: center;
|
|||
|
align-items: center;
|
|||
|
width: 100%;
|
|||
|
height: 48px;
|
|||
|
font-size: 16px;
|
|||
|
background: rgba(0, 0, 0, 0.1);
|
|||
|
content: '免费、快速、开放的 CDN 服务';
|
|||
|
}
|
|||
|
}
|
|||
|
@media screen and (max-width: 1024px) {
|
|||
|
.common-header {
|
|||
|
.navibar {
|
|||
|
width: 100%;
|
|||
|
padding: 0 32px;
|
|||
|
}
|
|||
|
.wrapper {
|
|||
|
width: 100%;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
`
|
|||
|
|
|||
|
search() {
|
|||
|
let id = this.input.trim()
|
|||
|
if (id) {
|
|||
|
fetch('/package/search/' + encodeURIComponent(id)).then(r => {
|
|||
|
let dict = { versions: [], id }
|
|||
|
let last = null
|
|||
|
for (let it of r.data) {
|
|||
|
let tmp = it.split('/')
|
|||
|
let v = tmp.shift()
|
|||
|
let n = tmp.join('/')
|
|||
|
if (last === v) {
|
|||
|
dict[last].push(n)
|
|||
|
} else {
|
|||
|
last = v
|
|||
|
dict.versions.push(last)
|
|||
|
dict[last] = [n]
|
|||
|
}
|
|||
|
}
|
|||
|
this.$store.result = dict
|
|||
|
})
|
|||
|
} else {
|
|||
|
this.$store.result = null
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
render() {
|
|||
|
return html`
|
|||
|
<div
|
|||
|
class="common-header noselect"
|
|||
|
:class=${classMap({ 'search-show': this.$store.searchShow })}
|
|||
|
>
|
|||
|
<header class="navibar">
|
|||
|
<div class="wrapper">
|
|||
|
<a class="logo"><img src="/assets/logo.svg" /></a>
|
|||
|
|
|||
|
<nav class="navi">
|
|||
|
<router-link :to=${{ path: '/' }}>首 页</router-link>
|
|||
|
<router-link :to=${{ path: '/request' }}>收 录</router-link>
|
|||
|
<router-link :to=${{ path: '/about' }}>关 于</router-link>
|
|||
|
</nav>
|
|||
|
</div>
|
|||
|
</header>
|
|||
|
|
|||
|
<cite class="banner">
|
|||
|
<p>
|
|||
|
我们的目标是提供这样一个仓库,让它尽可能全面收录优秀的支持ESM访问的开源库,并免费为之提供
|
|||
|
CDN加速服务,使之有更好的访问速度和稳定的环境。
|
|||
|
</p>
|
|||
|
<p>同时我们也提供自主提交开源库的收录(前提是在npm上发布的)</p>
|
|||
|
</cite>
|
|||
|
|
|||
|
<wc-input
|
|||
|
class="search"
|
|||
|
no-border
|
|||
|
placeholder="请输入开源库的名字~~"
|
|||
|
clearable
|
|||
|
value=${this.input}
|
|||
|
@submit=${this.search}
|
|||
|
></wc-input>
|
|||
|
</div>
|
|||
|
`
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
Header.reg('header')
|