save
This commit is contained in:
2
.github/workflows/deploy-aliyun-oss.yml
vendored
2
.github/workflows/deploy-aliyun-oss.yml
vendored
@@ -34,7 +34,7 @@ jobs:
|
||||
run: pnpm install
|
||||
|
||||
- name: Build
|
||||
run: pnpm run build
|
||||
run: pnpm run build-oss
|
||||
|
||||
- name: Deploy to OSS + Refresh CDN
|
||||
run: pnpm run deploy-oss
|
||||
|
||||
2
.github/workflows/deploy-pages.yml
vendored
2
.github/workflows/deploy-pages.yml
vendored
@@ -34,7 +34,7 @@ jobs:
|
||||
run: pnpm install
|
||||
|
||||
- name: Build
|
||||
run: pnpm run build-nocdn
|
||||
run: pnpm run build
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v3
|
||||
|
||||
11
Note.md
11
Note.md
@@ -68,13 +68,4 @@ Food and talk
|
||||
26的 of curse
|
||||
|
||||
1、例句可以选中单词,并添加到收藏
|
||||
|
||||
1、域名:你需要一个真正的品牌,type域名,契合内容,让人记得住
|
||||
2、口号太墨迹记不住,要简介:学习英语,一次敲击,一点进步记忆不再盲目,学习更高效,开源单词与文章练习工具
|
||||
3、布局:没有逻辑,首页进去看到标题,然后两个小的单词练习、文章联系,下面又是一大堆大的,没有逻辑和划分
|
||||
4、下面联系方式你需要放一个QQ群,社群资源,全放联系方式等于没放
|
||||
5、ABC页面弹出来的保存书签,不是加入书签就不迷失,是要让他们肌肉记忆住这个网站
|
||||
6、ABC页面太墨迹,不简洁,进度复杂,本周学习记录改成日历,有个标记,+激励分享功能,满足炫耀欲望
|
||||
7、设置不要用那个烂字体,真的很山寨,
|
||||
8、更新日志要按v版本和日期跟踪,要写的多,做得少,显示你在认真维护,是个令人尊重的程序员
|
||||
9、必须加后端、账号注册
|
||||
2、ABC页面太墨迹,不简洁,进度复杂,本周学习记录改成日历,有个标记,+激励分享功能,满足炫耀欲望
|
||||
|
||||
7
components.d.ts
vendored
7
components.d.ts
vendored
@@ -20,7 +20,6 @@ declare module 'vue' {
|
||||
Book: typeof import('./src/components/Book.vue')['default']
|
||||
Checkbox: typeof import('./src/components/base/checkbox/Checkbox.vue')['default']
|
||||
Close: typeof import('./src/components/icon/Close.vue')['default']
|
||||
CollectNotice: typeof import('./src/components/CollectNotice.vue')['default']
|
||||
ConflictNotice: typeof import('./src/components/ConflictNotice.vue')['default']
|
||||
DeleteIcon: typeof import('./src/components/icon/DeleteIcon.vue')['default']
|
||||
Dialog: typeof import('./src/components/dialog/Dialog.vue')['default']
|
||||
@@ -78,7 +77,6 @@ declare module 'vue' {
|
||||
IconFluentSlideTextTitleEdit20Regular: typeof import('~icons/fluent/slide-text-title-edit20-regular')['default']
|
||||
IconFluentSpeakerEdit20Regular: typeof import('~icons/fluent/speaker-edit20-regular')['default']
|
||||
IconFluentSpeakerSettings20Regular: typeof import('~icons/fluent/speaker-settings20-regular')['default']
|
||||
IconFluentStar12Regular: typeof import('~icons/fluent/star12-regular')['default']
|
||||
IconFluentStar16Filled: typeof import('~icons/fluent/star16-filled')['default']
|
||||
IconFluentStar16Regular: typeof import('~icons/fluent/star16-regular')['default']
|
||||
IconFluentStar20Filled: typeof import('~icons/fluent/star20-filled')['default']
|
||||
@@ -92,12 +90,7 @@ declare module 'vue' {
|
||||
IconFluentWeatherMoon16Regular: typeof import('~icons/fluent/weather-moon16-regular')['default']
|
||||
IconFluentWeatherSunny16Regular: typeof import('~icons/fluent/weather-sunny16-regular')['default']
|
||||
IconIconParkOutlineAddMusic: typeof import('~icons/icon-park-outline/add-music')['default']
|
||||
IconMaterialSymbolsMail: typeof import('~icons/material-symbols/mail')['default']
|
||||
IconPhExportLight: typeof import('~icons/ph/export-light')['default']
|
||||
IconRiTwitterFill: typeof import('~icons/ri/twitter-fill')['default']
|
||||
IconSimpleIconsGithub: typeof import('~icons/simple-icons/github')['default']
|
||||
IconSimpleIconsWechat: typeof import('~icons/simple-icons/wechat')['default']
|
||||
IconSimpleIconsXiaohongshu: typeof import('~icons/simple-icons/xiaohongshu')['default']
|
||||
IconSystemUiconsImport: typeof import('~icons/system-uicons/import')['default']
|
||||
InputNumber: typeof import('./src/components/base/InputNumber.vue')['default']
|
||||
List: typeof import('./src/components/list/List.vue')['default']
|
||||
|
||||
44
index.html
44
index.html
@@ -2,34 +2,50 @@
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.png"/>
|
||||
<link rel="manifest" href="/manifest.json">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||
<title>Type Words - 词文记 | 单词跟打 · 文章跟打</title>
|
||||
<title>Type Words 官网 - 词文记 | 单词跟打 · 文章跟打</title>
|
||||
<!-- 搜索引擎描述 -->
|
||||
<meta name="description"
|
||||
content="Type Words:在线英语练习平台,支持单词、文章跟打练习,提升打字与语言能力。Practice English, one keystroke at a time.">
|
||||
content="Type Words 官方网站 - 在线英语练习平台,支持单词、文章跟打练习,提升英语学习效率。Practice English, one strike, one step forward">
|
||||
<!-- 关键词(可选,搜索引擎基本不用,但能补充信息) -->
|
||||
<meta name="keywords"
|
||||
content="Type Words, Typing Word, 英语打字练习, 单词跟打, 文章跟打, 键盘练习, 英语学习, 文章学习">
|
||||
content="Type Words, Typing Word, Type Words 官网, 官方网站, 英语打字练习, 单词跟打, 文章跟打, 键盘练习, 英语学习, 文章学习, 打字练习软件, 单词记忆工具, 英语学习软件, 背单词神器, 英语肌肉记忆, 键盘工作者, 免费英语学习, 音标发音, 默写练习, 在线学英语, CET-4, CET-6, TOEFL, IELTS, GRE, GMAT, SAT, 考研英语, 专四专八, 程序员英语, JavaScript API, Node.js API, Java API, Linux命令, 编程词汇, 技术英语, VSCode插件, 开源项目, GitHub趋势榜, V2EX热搜, Gitee GVP, 少数派推荐, 英语打字训练, WPM统计, 准确率分析, 商务英语, BEC, 雅思听力, 日语学习, 多语言学习, 英语口语练习, 单词拼写训练">
|
||||
|
||||
<meta name="author" content="zyronon"/>
|
||||
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"/>
|
||||
<link rel="canonical" href="https://2study.top/"/>
|
||||
|
||||
<!-- Open Graph(用于社交媒体分享,微信/QQ/知乎/Facebook 等) -->
|
||||
<meta property="og:title" content="Type Words - 英语打字练习平台">
|
||||
<meta property="og:title" content="Type Words 官网 - 英语打字练习平台">
|
||||
<meta property="og:description"
|
||||
content="在线英语打字练习平台,支持单词跟打与文章跟打,帮助提升打字速度与英语学习效率。">
|
||||
content="Type Words 官方网站 - 在线英语练习平台,支持单词、文章跟打练习,提升英语学习效率。Practice English, one strike, one step forward">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://2study.top/">
|
||||
<meta property="og:image" content="https://2study.top/favicon.png">
|
||||
|
||||
<!-- Twitter Card(用于 Twitter 分享) -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Type Words - 英语打字练习平台">
|
||||
<meta name="twitter:title" content="Type Words 官网 - 英语打字练习平台">
|
||||
<meta name="twitter:description"
|
||||
content="Type Words:在线英语练习平台,支持单词跟打、文章练习,提升打字速度与英语水平。">
|
||||
content="Type Words 官方网站 - 在线英语练习平台,支持单词、文章跟打练习,提升英语学习效率。Practice English, one strike, one step forward">
|
||||
<meta name="twitter:image" content="https://2study.top/favicon.png">
|
||||
|
||||
<!--用于百度站长验证 -->
|
||||
<meta name="baidu-site-verification" content="codeva-Kw33xFT3p2"/>
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.png"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||
<!-- 苹果设备(iOS Safari)在用户添加到主屏时显示的图标-->
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/favicon.png"/>
|
||||
<!-- 设置浏览器地址栏颜色(在 Android Chrome 特别明显)。-->
|
||||
<meta name="theme-color" content="#818CF8"/>
|
||||
|
||||
<!-- 阻止 iOS 自动把数字识别为电话号码。-->
|
||||
<!-- HandheldFriendly 和 MobileOptimized 是旧手机浏览器的优化提示(现在作用不大)。-->
|
||||
<meta name="format-detection" content="telephone=no"/>
|
||||
<meta name="HandheldFriendly" content="True"/>
|
||||
<meta name="MobileOptimized" content="320"/>
|
||||
|
||||
<!-- referrer 控制请求来源信息-->
|
||||
<meta name="referrer" content="origin-when-cross-origin"/>
|
||||
<!-- color-scheme 告诉浏览器支持亮/暗模式-->
|
||||
<meta name="color-scheme" content="light dark"/>
|
||||
|
||||
<script>
|
||||
if (!location.href.includes('localhost')
|
||||
@@ -68,6 +84,10 @@
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
<div>You need to enable JavaScript to run Type Words.</div>
|
||||
<div>你需要启用 JavaScript 来运行 Type Words.</div>
|
||||
</noscript>
|
||||
<div id="app"></div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
[[redirects]]
|
||||
from = "/baidu"
|
||||
to = "https://api.fanyi.baidu.com/api/trans/vip/translate"
|
||||
status = 200
|
||||
force = true
|
||||
@@ -6,10 +6,11 @@
|
||||
"start": "vite",
|
||||
"dev": "vite",
|
||||
"test": "",
|
||||
"build": "vite build && node scripts/do.js",
|
||||
"build-nocdn": "vite build",
|
||||
"build": "vite build",
|
||||
"build-oss": "vite build && node scripts/do.js",
|
||||
"build-tsc": "vue-tsc && vite build",
|
||||
"report": "vite build",
|
||||
"report-oss": "vite build",
|
||||
"preview": "vite preview",
|
||||
"commit": "git-cz",
|
||||
"prepare": "husky install",
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 200 KiB |
BIN
public/qq.jpg
Normal file
BIN
public/qq.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 183 KiB |
@@ -2,81 +2,51 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.png"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||
<title>Type Words - 词文记 | 单词跟打 · 文章跟打</title>
|
||||
<title>Type Words 官网 - 词文记 | 单词跟打 · 文章跟打</title>
|
||||
<!-- 搜索引擎描述 -->
|
||||
<meta name="description"
|
||||
content="Type Words:在线英语练习平台,支持单词、文章跟打练习,提升打字与语言能力。Practice English, one keystroke at a time.">
|
||||
content="Type Words 官方网站 - 在线英语练习平台,支持单词、文章跟打练习,提升英语学习效率。Practice English, one strike, one step forward">
|
||||
<!-- 关键词(可选,搜索引擎基本不用,但能补充信息) -->
|
||||
<meta name="keywords"
|
||||
content="Type Words, Typing Word, 英语打字练习, 单词跟打, 文章跟打, 键盘练习, 英语学习, 文章学习">
|
||||
content="Type Words, Typing Word, Type Words 官网, 官方网站, 英语打字练习, 单词跟打, 文章跟打, 键盘练习, 英语学习, 文章学习, 打字练习软件, 单词记忆工具, 英语学习软件, 背单词神器, 英语肌肉记忆, 键盘工作者, 免费英语学习, 音标发音, 默写练习, 在线学英语, CET-4, CET-6, TOEFL, IELTS, GRE, GMAT, SAT, 考研英语, 专四专八, 程序员英语, JavaScript API, Node.js API, Java API, Linux命令, 编程词汇, 技术英语, VSCode插件, 开源项目, GitHub趋势榜, V2EX热搜, Gitee GVP, 少数派推荐, 英语打字训练, WPM统计, 准确率分析, 商务英语, BEC, 雅思听力, 日语学习, 多语言学习, 英语口语练习, 单词拼写训练">
|
||||
|
||||
<meta name="author" content="zyronon" />
|
||||
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1" />
|
||||
<link rel="canonical" href="https://2study.top/" />
|
||||
|
||||
<!-- Open Graph(用于社交媒体分享,微信/QQ/知乎/Facebook 等) -->
|
||||
<meta property="og:title" content="Type Words - 英语打字练习平台">
|
||||
<meta property="og:title" content="Type Words 官网 - 英语打字练习平台">
|
||||
<meta property="og:description"
|
||||
content="在线英语打字练习平台,支持单词跟打与文章跟打,帮助提升打字速度与英语学习效率。">
|
||||
content="Type Words 官方网站 - 在线英语练习平台,支持单词、文章跟打练习,提升英语学习效率。Practice English, one strike, one step forward">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://2study.top/">
|
||||
<meta property="og:image" content="https://2study.top/favicon.png">
|
||||
|
||||
<!-- Twitter Card(用于 Twitter 分享) -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Type Words - 英语打字练习平台">
|
||||
<meta name="twitter:title" content="Type Words 官网 - 英语打字练习平台">
|
||||
<meta name="twitter:description"
|
||||
content="Type Words:在线英语练习平台,支持单词跟打、文章练习,提升打字速度与英语水平。">
|
||||
content="Type Words 官方网站 - 在线英语练习平台,支持单词、文章跟打练习,提升英语学习效率。Practice English, one strike, one step forward">
|
||||
<meta name="twitter:image" content="https://2study.top/favicon.png">
|
||||
|
||||
<script>
|
||||
if ('serviceWorker' in navigator) {
|
||||
window.addEventListener('load', () => {
|
||||
navigator.serviceWorker.register('/service-worker.js').then(registration => {
|
||||
console.log('ServiceWorker registration successful with scope: ', registration.scope);
|
||||
}).catch(error => {
|
||||
console.log('ServiceWorker registration failed: ', error);
|
||||
});
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<script>
|
||||
function nav(url) {
|
||||
window.location.href = url;
|
||||
// history.pushState(null, "", url);
|
||||
}
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.png"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||
<!-- 苹果设备(iOS Safari)在用户添加到主屏时显示的图标-->
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/favicon.png" />
|
||||
<!-- 设置浏览器地址栏颜色(在 Android Chrome 特别明显)。-->
|
||||
<meta name="theme-color" content="#818CF8" />
|
||||
|
||||
function toggleEl(val, close = false) {
|
||||
let le = document.querySelector(val)
|
||||
if (le) {
|
||||
if (['none', ''].includes(le.style.display) && !close) {
|
||||
le.style.display = 'block';
|
||||
setTimeout(function () {
|
||||
le.style.opacity = 1;
|
||||
}, 10)
|
||||
} else {
|
||||
le.style.opacity = 0;
|
||||
setTimeout(function () {
|
||||
le.style.display = 'none';
|
||||
}, 300)
|
||||
}
|
||||
}
|
||||
}
|
||||
<!-- 阻止 iOS 自动把数字识别为电话号码。-->
|
||||
<!-- HandheldFriendly 和 MobileOptimized 是旧手机浏览器的优化提示(现在作用不大)。-->
|
||||
<meta name="format-detection" content="telephone=no" />
|
||||
<meta name="HandheldFriendly" content="True" />
|
||||
<meta name="MobileOptimized" content="320" />
|
||||
|
||||
function toggleWechatDialog() {
|
||||
toggleEl('.mask')
|
||||
toggleEl('#wechatDialog')
|
||||
}
|
||||
<!-- referrer 控制请求来源信息-->
|
||||
<meta name="referrer" content="origin-when-cross-origin" />
|
||||
<!-- color-scheme 告诉浏览器支持亮/暗模式-->
|
||||
<meta name="color-scheme" content="light dark" />
|
||||
|
||||
function toggleXhsDialog() {
|
||||
toggleEl('.mask')
|
||||
toggleEl('#xhsDialog')
|
||||
}
|
||||
|
||||
function closeDialog() {
|
||||
toggleEl('.mask')
|
||||
toggleEl('#wechatDialog', true)
|
||||
toggleEl('#xhsDialog', true)
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
body {
|
||||
background: rgb(231, 232, 235);
|
||||
@@ -95,7 +65,7 @@
|
||||
|
||||
h2 {
|
||||
font-size: 1.4rem !important;
|
||||
font-weight: bold !important;
|
||||
font-weight: normal !important;
|
||||
color: rgb(91, 91, 91);
|
||||
margin: 0;
|
||||
}
|
||||
@@ -108,7 +78,7 @@
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
gap: 0.8rem;
|
||||
gap: 0.6rem;
|
||||
margin-bottom: 0;
|
||||
width: 25%;
|
||||
background: rgb(247, 247, 247);
|
||||
@@ -149,9 +119,9 @@
|
||||
white-space: nowrap;
|
||||
border-radius: 0.3rem;
|
||||
color: white;
|
||||
background: rgb(75, 85, 99);
|
||||
background: rgb(12, 140, 233);
|
||||
padding: 0 1.3rem;
|
||||
height: 2.4rem;
|
||||
height: 2.5rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
@@ -228,6 +198,7 @@
|
||||
}
|
||||
|
||||
.content {
|
||||
margin-top: 6rem;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
@@ -240,11 +211,15 @@
|
||||
}
|
||||
|
||||
.sky {
|
||||
margin-top: 3rem;
|
||||
border-top: 1px solid #cecece;
|
||||
border-bottom: 1px solid #cecece;
|
||||
padding: 1.2rem 0;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
gap: 0.4rem;
|
||||
width: 100%;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
@@ -267,9 +242,9 @@
|
||||
.bottom {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
margin: 2rem 0;
|
||||
margin:1rem 0 2rem 0;
|
||||
width: 100%;
|
||||
padding-top: 2rem;
|
||||
padding-top: 1.5rem;
|
||||
border-top: 1px solid #c4c4c4;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
@@ -291,14 +266,69 @@
|
||||
margin-top: 1.2rem;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
if ('serviceWorker' in navigator) {
|
||||
window.addEventListener('load', () => {
|
||||
navigator.serviceWorker.register('/service-worker.js').then(registration => {
|
||||
console.log('ServiceWorker registration successful with scope: ', registration.scope);
|
||||
}).catch(error => {
|
||||
console.log('ServiceWorker registration failed: ', error);
|
||||
});
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<script>
|
||||
function nav(url) {
|
||||
window.location.href = url;
|
||||
// history.pushState(null, "", url);
|
||||
}
|
||||
|
||||
function toggleEl(val, close = false) {
|
||||
let le = document.querySelector(val)
|
||||
if (le) {
|
||||
if (['none', ''].includes(le.style.display) && !close) {
|
||||
le.style.display = 'block';
|
||||
setTimeout(function () {
|
||||
le.style.opacity = 1;
|
||||
}, 10)
|
||||
} else {
|
||||
le.style.opacity = 0;
|
||||
setTimeout(function () {
|
||||
le.style.display = 'none';
|
||||
}, 300)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function toggleWechatDialog() {
|
||||
toggleEl('.mask')
|
||||
toggleEl('#wechatDialog')
|
||||
}
|
||||
function toggleQQDialog() {
|
||||
toggleEl('.mask')
|
||||
toggleEl('#qqDialog')
|
||||
}
|
||||
|
||||
function toggleXhsDialog() {
|
||||
toggleEl('.mask')
|
||||
toggleEl('#xhsDialog')
|
||||
}
|
||||
|
||||
function closeDialog() {
|
||||
toggleEl('.mask')
|
||||
toggleEl('#wechatDialog', true)
|
||||
toggleEl('#xhsDialog', true)
|
||||
toggleEl('#qqDialog', true)
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<div class="content">
|
||||
<h1>Type Words</h1>
|
||||
<div class="text-center">
|
||||
<h2>学习英语,一次敲击,一点进步</h2>
|
||||
<h2>记忆不再盲目,学习更高效,开源单词与文章练习工具</h2>
|
||||
<h2>学习英语,一次敲击,一点进步,开源单词与文章练习工具</h2>
|
||||
</div>
|
||||
<div class="">
|
||||
<div class="base-button" onclick="nav('/words')">单词练习</div>
|
||||
@@ -306,11 +336,11 @@
|
||||
</div>
|
||||
|
||||
<div class="sky">
|
||||
<a href="https://skywork.ai/p/GrXQb4" class="w" target="_blank">
|
||||
<img src="/skywork-ai.png"
|
||||
<a href="https://skywork.ai/p/GrXQb4" style="width: 40%;" target="_blank">
|
||||
<img src="https://2study.top/skywork-ai.png"
|
||||
alt="Skywork.AI"
|
||||
class="sky-img"></a>
|
||||
<span>Skywork.AI:<a href="https://skywork.ai/p/GrXQb4" class="color-blue!" target="_blank">10 tasks in 1 hour, not 10 hours →Limited free spots: 127 left</a></span>
|
||||
<span>赞助:<a href="https://skywork.ai/p/GrXQb4" class="color-blue!" target="_blank">Skywork.AI: 10 tasks in 1 hour, not 10 hours →Limited free spots: 127 left</a></span>
|
||||
</div>
|
||||
<div class="w">
|
||||
<div class="card-wrap">
|
||||
@@ -383,7 +413,7 @@
|
||||
<div class="title">简洁高效</div>
|
||||
<div class="desc">
|
||||
<ul>
|
||||
<li>简洁设计,现代化UI,无广告</li>
|
||||
<li>简洁设计,现代化UI</li>
|
||||
<li>界面清爽,操作简单</li>
|
||||
<li>不强制关注任何平台</li>
|
||||
</ul>
|
||||
@@ -425,6 +455,10 @@
|
||||
d="M8.691 2.188C3.891 2.188 0 5.476 0 9.53c0 2.212 1.17 4.203 3.002 5.55a.59.59 0 0 1 .213.665l-.39 1.48c-.019.07-.048.141-.048.213c0 .163.13.295.29.295a.33.33 0 0 0 .167-.054l1.903-1.114a.86.86 0 0 1 .717-.098a10.2 10.2 0 0 0 2.837.403c.276 0 .543-.027.811-.05c-.857-2.578.157-4.972 1.932-6.446c1.703-1.415 3.882-1.98 5.853-1.838c-.576-3.583-4.196-6.348-8.596-6.348M5.785 5.991c.642 0 1.162.529 1.162 1.18a1.17 1.17 0 0 1-1.162 1.178A1.17 1.17 0 0 1 4.623 7.17c0-.651.52-1.18 1.162-1.18zm5.813 0c.642 0 1.162.529 1.162 1.18a1.17 1.17 0 0 1-1.162 1.178a1.17 1.17 0 0 1-1.162-1.178c0-.651.52-1.18 1.162-1.18m5.34 2.867c-1.797-.052-3.746.512-5.28 1.786c-1.72 1.428-2.687 3.72-1.78 6.22c.942 2.453 3.666 4.229 6.884 4.229c.826 0 1.622-.12 2.361-.336a.72.72 0 0 1 .598.082l1.584.926a.3.3 0 0 0 .14.047c.134 0 .24-.111.24-.247c0-.06-.023-.12-.038-.177l-.327-1.233a.6.6 0 0 1-.023-.156a.49.49 0 0 1 .201-.398C23.024 18.48 24 16.82 24 14.98c0-3.21-2.931-5.837-6.656-6.088V8.89c-.135-.01-.27-.027-.407-.03zm-2.53 3.274c.535 0 .969.44.969.982a.976.976 0 0 1-.969.983a.976.976 0 0 1-.969-.983c0-.542.434-.982.97-.982zm4.844 0c.535 0 .969.44.969.982a.976.976 0 0 1-.969.983a.976.976 0 0 1-.969-.983c0-.542.434-.982.969-.982"></path>
|
||||
</svg>
|
||||
</div>
|
||||
|
||||
<div class="icon" onclick="toggleQQDialog()">
|
||||
<svg viewBox="0 0 24 24" width="1.4em" height="1.4em"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"/><path fill="currentColor" d="M12 2a6.285 6.285 0 0 0-6.276 5.937l-.146 2.63a28 28 0 0 0-.615 1.41c-1.24 3.073-1.728 5.773-1.088 6.032c.335.135.913-.426 1.566-1.432a6.67 6.67 0 0 0 1.968 3.593c-1.027.35-1.91.828-1.91 1.33c0 .509 2.48.503 4.239.5h.001c.549-.002 1.01-.008 1.38-.057a6.7 6.7 0 0 0 1.76 0c.37.05.833.055 1.382.056c1.76.004 4.239.01 4.239-.499c0-.502-.883-.979-1.909-1.33a6.67 6.67 0 0 0 1.967-3.586c.65 1.002 1.227 1.56 1.56 1.425c.64-.259.154-2.96-1.088-6.032a28 28 0 0 0-.607-1.395l-.147-2.645A6.285 6.285 0 0 0 12 2"/></g></svg>
|
||||
</div>
|
||||
<div class="icon" onclick="toggleXhsDialog()">
|
||||
<svg viewBox="0 0 24 24" width="1.4em" height="1.4em">
|
||||
<path fill="currentColor"
|
||||
@@ -464,7 +498,7 @@
|
||||
|
||||
<div class="dialog" id="wechatDialog">
|
||||
<header>
|
||||
<div class="title">Type Words 交流群</div>
|
||||
<div class="title">微信群</div>
|
||||
<svg
|
||||
onclick="toggleWechatDialog()"
|
||||
viewBox="0 0 20 20" width="24" height="1.2em" class="cursor-pointer">
|
||||
@@ -473,9 +507,7 @@
|
||||
</svg>
|
||||
</header>
|
||||
<div class="dialog-body">
|
||||
<span>
|
||||
加入我们的用户社群后,您可以与我们的开发团队进行沟通,分享您的使用体验和建议,帮助我们改进产品,同时也能够及时了解我们的最新动态和更新内容。
|
||||
</span>
|
||||
<span>加入我们的用户社群后,您可以与我们的开发团队进行沟通,分享您的使用体验和建议,帮助我们改进产品,同时也能够及时了解我们的最新动态和更新内容。</span>
|
||||
<div class="center">
|
||||
<img src="/wechat.png" alt="微信群二维码" class="img">
|
||||
</div>
|
||||
@@ -499,6 +531,24 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="dialog" id="qqDialog">
|
||||
<header>
|
||||
<div class="title">QQ群</div>
|
||||
<svg
|
||||
onclick="toggleXhsDialog()"
|
||||
viewBox="0 0 20 20" width="24" height="1.2em" class="cursor-pointer">
|
||||
<path fill="currentColor"
|
||||
d="m4.089 4.216l.057-.07a.5.5 0 0 1 .638-.057l.07.057L10 9.293l5.146-5.147a.5.5 0 0 1 .638-.057l.07.057a.5.5 0 0 1 .057.638l-.057.07L10.707 10l5.147 5.146a.5.5 0 0 1 .057.638l-.057.07a.5.5 0 0 1-.638.057l-.07-.057L10 10.707l-5.146 5.147a.5.5 0 0 1-.638.057l-.07-.057a.5.5 0 0 1-.057-.638l.057-.07L9.293 10L4.146 4.854a.5.5 0 0 1-.057-.638l.057-.07z"></path>
|
||||
</svg>
|
||||
</header>
|
||||
<div class="dialog-body">
|
||||
<span>加入我们的用户社群后,您可以与我们的开发团队进行沟通,分享您的使用体验和建议,帮助我们改进产品,同时也能够及时了解我们的最新动态和更新内容。</span>
|
||||
<div class="center">
|
||||
<img src="/qq.jpg" alt="QQ群二维码" class="img">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 62 KiB |
BIN
public/word.png
BIN
public/word.png
Binary file not shown.
|
Before Width: | Height: | Size: 166 KiB |
@@ -427,8 +427,8 @@ function onContextMenu(e: MouseEvent, sentence: Sentence, i, j, w) {
|
||||
label: "收藏单词",
|
||||
onClick: () => {
|
||||
let word = props.article.sections[i][j].words[w]
|
||||
let doc = nlp(word.word)
|
||||
let text = word.word
|
||||
let doc = nlp(text)
|
||||
// 优先判断是不是动词
|
||||
if (doc.verbs().found) {
|
||||
text = doc.verbs().toInfinitive().text()
|
||||
|
||||
@@ -17,7 +17,8 @@ function pathResolve(dir: string) {
|
||||
}
|
||||
|
||||
const lifecycle = process.env.npm_lifecycle_event;
|
||||
let isCdnBuild = ['build', 'report'].includes(lifecycle)
|
||||
let isCdnBuild = ['build-oss', 'report-oss'].includes(lifecycle)
|
||||
let isAnalyseBuild = ['report-oss', 'report'].includes(lifecycle)
|
||||
|
||||
// https://vitejs.dev/config/
|
||||
export default defineConfig(() => {
|
||||
@@ -47,7 +48,7 @@ export default defineConfig(() => {
|
||||
},
|
||||
}),
|
||||
UnoCSS(),
|
||||
lifecycle === 'report' ?
|
||||
isAnalyseBuild ?
|
||||
visualizer({
|
||||
gzipSize: true,
|
||||
brotliSize: true,
|
||||
|
||||
Reference in New Issue
Block a user