├── .env ├── src ├── style │ ├── sidebar.less │ ├── search.less │ ├── common.less │ └── main.less ├── assets │ ├── logo.png │ └── img │ │ ├── author.png │ │ ├── clear.png │ │ ├── logo.ico │ │ ├── logo2.png │ │ ├── search.png │ │ ├── favicon_128.png │ │ ├── favicon_196.png │ │ ├── favicon_32.png │ │ ├── favicon_512.png │ │ ├── favicon_1024.png │ │ ├── search.svg │ │ └── simple-so.svg ├── components │ ├── BookmarkEdit.vue │ ├── Bookmarks.vue │ └── Setting.vue ├── main.js ├── utils │ ├── storage.js │ └── request.js ├── views │ ├── software.vue │ ├── nav.vue │ ├── os.vue │ └── Home.vue ├── router │ └── index.js └── App.vue ├── vercel.json ├── .coding-ci.yml ├── public ├── favicon.ico ├── img │ ├── bg1.jpg │ ├── clear.png │ ├── logo.ico │ ├── logo2.png │ ├── author.png │ ├── search.png │ ├── favicon_32.png │ ├── favicon_1024.png │ ├── favicon_128.png │ ├── favicon_196.png │ ├── favicon_512.png │ ├── search.svg │ └── simple-so.svg └── json │ ├── search_engine.json │ └── url.json ├── jsconfig.json ├── .gitignore ├── vite.config.js ├── package.json ├── .github └── workflows │ └── node.js.yml ├── index.html ├── README.md └── LICENSE /.env: -------------------------------------------------------------------------------- 1 | BASE_URL="/" 2 | -------------------------------------------------------------------------------- /src/style/sidebar.less: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "regions": [ 3 | "hkg1" 4 | ] 5 | } -------------------------------------------------------------------------------- /.coding-ci.yml: -------------------------------------------------------------------------------- 1 | $: 2 | api_trigger_vscode: 3 | clouddev: 4 | runner: 5 | cpus: 1 -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /public/img/bg1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/public/img/bg1.jpg -------------------------------------------------------------------------------- /public/img/clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/public/img/clear.png -------------------------------------------------------------------------------- /public/img/logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/public/img/logo.ico -------------------------------------------------------------------------------- /public/img/logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/public/img/logo2.png -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/src/assets/logo.png -------------------------------------------------------------------------------- /public/img/author.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/public/img/author.png -------------------------------------------------------------------------------- /public/img/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/public/img/search.png -------------------------------------------------------------------------------- /public/img/favicon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/public/img/favicon_32.png -------------------------------------------------------------------------------- /src/assets/img/author.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/src/assets/img/author.png -------------------------------------------------------------------------------- /src/assets/img/clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/src/assets/img/clear.png -------------------------------------------------------------------------------- /src/assets/img/logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/src/assets/img/logo.ico -------------------------------------------------------------------------------- /src/assets/img/logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/src/assets/img/logo2.png -------------------------------------------------------------------------------- /src/assets/img/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/src/assets/img/search.png -------------------------------------------------------------------------------- /public/img/favicon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/public/img/favicon_1024.png -------------------------------------------------------------------------------- /public/img/favicon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/public/img/favicon_128.png -------------------------------------------------------------------------------- /public/img/favicon_196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/public/img/favicon_196.png -------------------------------------------------------------------------------- /public/img/favicon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/public/img/favicon_512.png -------------------------------------------------------------------------------- /src/assets/img/favicon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/src/assets/img/favicon_128.png -------------------------------------------------------------------------------- /src/assets/img/favicon_196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/src/assets/img/favicon_196.png -------------------------------------------------------------------------------- /src/assets/img/favicon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/src/assets/img/favicon_32.png -------------------------------------------------------------------------------- /src/assets/img/favicon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/src/assets/img/favicon_512.png -------------------------------------------------------------------------------- /src/assets/img/favicon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zzd/Simple-Search-Page/HEAD/src/assets/img/favicon_1024.png -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "paths": { 4 | "@/*": ["./src/*"] 5 | } 6 | }, 7 | "exclude": ["node_modules", "dist"] 8 | } 9 | -------------------------------------------------------------------------------- /src/components/BookmarkEdit.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import App from './App.vue' 3 | import router from './router' 4 | 5 | const app = createApp(App) 6 | 7 | app.use(router) 8 | 9 | app.mount('#app') 10 | -------------------------------------------------------------------------------- /src/utils/storage.js: -------------------------------------------------------------------------------- 1 | const storage = { 2 | set(key, value) { 3 | localStorage.setItem(key, JSON.stringify(value)) 4 | }, 5 | get(key) { 6 | return JSON.parse(localStorage.getItem(key)) 7 | }, 8 | remove(key) { 9 | localStorage.removeItem(key) 10 | } 11 | } 12 | export default storage -------------------------------------------------------------------------------- /src/utils/request.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | const request = { 4 | async post(url) { 5 | // console.log(data); 6 | return await axios 7 | .post(url); 8 | }, 9 | 10 | async get(url) { 11 | return await axios 12 | .get(url); 13 | } 14 | 15 | } 16 | 17 | export default request -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | .DS_Store 12 | dist 13 | dist-ssr 14 | coverage 15 | *.local 16 | 17 | /cypress/videos/ 18 | /cypress/screenshots/ 19 | 20 | # Editor directories and files 21 | .vscode/* 22 | !.vscode/extensions.json 23 | .idea 24 | *.suo 25 | *.ntvs* 26 | *.njsproj 27 | *.sln 28 | *.sw? 29 | 30 | *.tsbuildinfo 31 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2024. ZHANGDI Studio All Rights Reserved. 3 | */ 4 | import { fileURLToPath, URL } from 'node:url' 5 | 6 | import { defineConfig } from 'vite' 7 | import vue from '@vitejs/plugin-vue' 8 | 9 | // https://vitejs.dev/config/ 10 | export default defineConfig({ 11 | plugins: [ 12 | vue(), 13 | ], 14 | resolve: { 15 | alias: { 16 | '@': fileURLToPath(new URL('./src', import.meta.url)) 17 | } 18 | } 19 | }) 20 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "simple-search-page-vue", 3 | "version": "3.0.2", 4 | "private": true, 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "preview": "vite preview" 10 | }, 11 | "dependencies": { 12 | "axios": "^1.6.7", 13 | "fetch-jsonp": "^1.3.0", 14 | "vue": "^3.4.21", 15 | "vue-router": "^4.3.0" 16 | }, 17 | "devDependencies": { 18 | "@vitejs/plugin-vue": "^5.0.4", 19 | "less": "^4.2.0", 20 | "vite": "^5.1.5" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/views/software.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 22 | 23 | -------------------------------------------------------------------------------- /.github/workflows/node.js.yml: -------------------------------------------------------------------------------- 1 | name: Node.js CI 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | 10 | jobs: 11 | build-and-deploy: 12 | runs-on: ubuntu-latest 13 | strategy: 14 | matrix: 15 | node-version: [16] 16 | steps: 17 | - name: Checkout 18 | uses: actions/checkout@master 19 | - name: Install and Build 20 | run: | 21 | npm install 22 | npm run build 23 | - name: Deploy to GitHub Pages 24 | uses: JamesIves/github-pages-deploy-action@4.1.8 25 | with: 26 | branch: gh-pages 27 | folder: dist 28 | -------------------------------------------------------------------------------- /src/views/nav.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 33 | 34 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 15 | 16 | 17 | 18 | 19 | 简洁主页 - 无广告不干扰 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /public/json/search_engine.json: -------------------------------------------------------------------------------- 1 | { 2 | "list": [ 3 | "baidu", 4 | "google", 5 | "bing", 6 | "sougou", 7 | "360", 8 | "scholar" 9 | ], 10 | "360": [ 11 | "https://www.so.com/s", 12 | "q", 13 | "360搜索,SO靠谱", 14 | "360" 15 | ], 16 | "baidu": [ 17 | "https://www.baidu.com/s", 18 | "wd", 19 | "百度一下,你就知道", 20 | "百度" 21 | ], 22 | "google": [ 23 | "https://www.google.com/search", 24 | "q", 25 | "Google 搜索", 26 | "谷歌" 27 | ], 28 | "bing": [ 29 | "https://cn.bing.com/search", 30 | "q", 31 | "微软 Bing", 32 | "必应" 33 | ], 34 | "sougou": [ 35 | "https://www.sogou.com/web", 36 | "query", 37 | "上网从搜狗开始", 38 | "搜狗" 39 | ], 40 | "scholar": [ 41 | "https://scholar.google.com/scholar", 42 | "q", 43 | "谷歌学术", 44 | "学术" 45 | ] 46 | } -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Home from '../views/Home.vue' 2 | import {createRouter, createWebHistory} from 'vue-router' 3 | 4 | const routes = [ 5 | { 6 | path: '/', 7 | name: 'home', 8 | component: Home 9 | }, 10 | { 11 | path: '/nav', 12 | name: 'nav', 13 | component: () => import('../views/nav.vue') 14 | }, 15 | { 16 | path: '/os', 17 | name: 'os', 18 | component: () => import('../views/os.vue') 19 | }, 20 | { 21 | path: '/software', 22 | name: 'software', 23 | component: () => import('../views/software.vue') 24 | } 25 | ] 26 | 27 | const routerHistory = createWebHistory(import.meta.env.BASE_URL) 28 | const router = createRouter({ 29 | history: routerHistory, 30 | routes, 31 | }) 32 | 33 | export default router 34 | -------------------------------------------------------------------------------- /src/assets/img/search.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | 7 | 8 | 10 | 12 | -------------------------------------------------------------------------------- /public/img/search.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | 7 | 8 | 10 | 12 | -------------------------------------------------------------------------------- /src/components/Bookmarks.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 41 | 42 | -------------------------------------------------------------------------------- /src/views/os.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 56 | 57 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | logo 4 | 5 |

6 |

7 | GitHub repo size 8 | GitHub All Releases 9 | GitHub All Releases 10 | GitHub license 11 | GitHub stars 12 |

13 | 14 | # simple-search-page-vue 15 | 16 | 3.0.0新版来了,基于Vue实现。 17 | 18 | This template should help get you started developing with Vue 3 in Vite. 19 | 20 | ## Recommended IDE Setup 21 | 22 | [VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin). 23 | 24 | ## Customize configuration 25 | 26 | See [Vite Configuration Reference](https://vitejs.dev/config/). 27 | 28 | ## Project Setup 29 | 30 | ```sh 31 | npm install 32 | ``` 33 | 34 | ### Compile and Hot-Reload for Development 35 | 36 | ```sh 37 | npm run dev 38 | ``` 39 | 40 | ### Compile and Minify for Production 41 | 42 | ```sh 43 | npm run build 44 | ``` 45 | -------------------------------------------------------------------------------- /src/components/Setting.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 71 | 72 | -------------------------------------------------------------------------------- /src/style/search.less: -------------------------------------------------------------------------------- 1 | #logo { 2 | text-align: center; 3 | width: 100%; 4 | height: 25%; 5 | 6 | img { 7 | padding: 0; 8 | height: 70px; 9 | position: relative; 10 | top: 70%; 11 | } 12 | } 13 | 14 | #search-hot { 15 | max-width: 470px; 16 | width: 74%; 17 | background: #f5f5f5; 18 | overflow: hidden; 19 | position: relative; 20 | top: 0; 21 | 22 | ul { 23 | font-size: 15px; 24 | 25 | li { 26 | list-style: none; 27 | cursor: pointer; 28 | height: 25px; 29 | line-height: 25px; 30 | color: #838383; 31 | 32 | span { 33 | -webkit-tap-highlight-color: #00000000; 34 | list-style: none; 35 | cursor: pointer; 36 | display: inline-block; 37 | width: 25px; 38 | height: 25px; 39 | line-height: 25px; 40 | text-align: center; 41 | background: #e5e5e5; 42 | margin-right: 10px; 43 | color: #535353; 44 | border: 1px solid #f5f5f5; 45 | } 46 | 47 | .search_index0 { 48 | color: rgb(255, 255, 255); 49 | background: rgb(245, 69, 69); 50 | } 51 | 52 | .search_index1 { 53 | color: rgb(255, 255, 255); 54 | background: rgb(255, 133, 71); 55 | } 56 | 57 | .search_index2 { 58 | color: rgb(255, 255, 255); 59 | background: rgb(255, 172, 56); 60 | } 61 | } 62 | 63 | li:hover { 64 | background: white; 65 | color: #444444; 66 | } 67 | 68 | li.selected { 69 | background: white; 70 | color: #444444; 71 | } 72 | } 73 | } 74 | 75 | #container { 76 | width: 85%; 77 | margin: 0 auto; 78 | position: relative 79 | } 80 | 81 | .float-left { 82 | float: left 83 | } 84 | 85 | .float-right { 86 | float: right 87 | } 88 | 89 | #headline-content { 90 | max-width: 650px; 91 | margin: 0 auto 92 | } 93 | 94 | 95 | #search-bar { 96 | padding: 40px 0 70px 97 | } 98 | 99 | #search-tab { 100 | font-weight: 700; 101 | max-width: 470px; 102 | height: 33px; 103 | margin: 0 0 20px; 104 | display: flex; 105 | align-items: center; 106 | flex-direction: row; 107 | justify-content: space-between; 108 | border-bottom: 1px solid #e9e9e9; 109 | -webkit-tap-highlight-color: transparent; 110 | 111 | span { 112 | height: 32px; 113 | padding: 0 8px; 114 | display: inline-block; 115 | font-size: 16px; 116 | line-height: 1; 117 | opacity: .6; 118 | color: #444444; 119 | border-bottom: 2px solid transparent; 120 | cursor: pointer; 121 | white-space: nowrap; 122 | overflow: hidden; 123 | -webkit-transition: all .2s ease-in; 124 | transition: all .2s ease-in 125 | } 126 | 127 | span.active, span:hover { 128 | opacity: 1; 129 | border-color: #838383 130 | } 131 | } 132 | 133 | #search-form input[type=search] { 134 | max-width: 470px; 135 | width: 74%; 136 | background: #f5f5f5; 137 | overflow: hidden 138 | } 139 | 140 | #search-form input[type=submit] { 141 | max-width: 130px; 142 | width: 26%; 143 | font-weight: 700; 144 | } 145 | 146 | #search-keyword { 147 | border-top: 2px solid #f5f5f5; 148 | border-bottom: 2px solid #f5f5f5; 149 | } 150 | 151 | #search-keyword:focus { 152 | border-bottom: 2px solid #444444; 153 | -webkit-transition: all .2s ease-in; 154 | transition: all .2s ease-in 155 | } -------------------------------------------------------------------------------- /src/style/common.less: -------------------------------------------------------------------------------- 1 | @import (css) url("https://fonts.googleapis.com/css?family=Noto+Sans+SC:400,700&display=swap?subset=chinese-simplified"); 2 | 3 | *, :after, :before { 4 | margin: 0; 5 | padding: 0; 6 | outline: 0; 7 | border: 0; 8 | -webkit-box-sizing: border-box; 9 | -moz-box-sizing: border-box; 10 | box-sizing: border-box; 11 | -webkit-tap-highlight-color: transparent; 12 | scroll-behavior: smooth; 13 | } 14 | 15 | input[type=email], input[type=number], input[type=password], input[type=search], input[type=tel], input[type=text], input[type=url], select { 16 | width: 100%; 17 | height: 46px; 18 | line-height: 26px; 19 | font-family: inherit; 20 | font-size: inherit; 21 | padding: 0 15px; 22 | color: #333333; 23 | background: #fff; 24 | border-radius: 0; 25 | -webkit-appearance: none 26 | } 27 | 28 | button, input[type=button], input[type=reset], input[type=submit], textarea { 29 | height: 46px; 30 | font-family: inherit; 31 | font-size: inherit; 32 | border-radius: 0; 33 | -webkit-appearance: none 34 | } 35 | 36 | button, input[type=button], input[type=reset], input[type=submit] { 37 | text-transform: uppercase; 38 | padding: 0 15px; 39 | cursor: pointer; 40 | color: #fff; 41 | background: #444444; 42 | -webkit-transition: .2s; 43 | transition: .2s 44 | } 45 | 46 | button:hover, input[type=button]:hover, input[type=reset]:hover, input[type=submit]:hover { 47 | background-color: #2d2d2d 48 | } 49 | 50 | input[type="search"]::-webkit-search-cancel-button { 51 | -webkit-appearance: none; 52 | cursor: pointer; 53 | height: 15px; 54 | width: 15px; 55 | color: #444444; 56 | background: url("../assets/img/clear.png") no-repeat; 57 | background-size: contain; 58 | } 59 | 60 | /*通用元素样式*/ 61 | .tag_box { 62 | border: 1px solid #444444; 63 | color: #444444; 64 | border-radius: 3px; 65 | padding: .1rem .2rem; 66 | vertical-align: middle; 67 | font-size: 80%; 68 | font-weight: 700; 69 | } 70 | 71 | a { 72 | text-decoration: none; 73 | color: #444444; 74 | } 75 | 76 | ul li { 77 | list-style: none; 78 | 79 | a { 80 | display: inline-block; 81 | cursor: pointer; 82 | color: #666666; 83 | -webkit-transition: all .2s ease-in; 84 | transition: all .2s ease-in 85 | } 86 | } 87 | 88 | li.selected a { 89 | background: #e5e5e5; 90 | color: #444444; 91 | } 92 | 93 | li a:hover { 94 | color: #444444; 95 | background: #e5e5e5; 96 | } 97 | 98 | li a:active { 99 | color: #444444; 100 | background: #838383; 101 | } 102 | 103 | .scrollbar { 104 | width: 4px; 105 | height: auto; 106 | margin: 0 auto; 107 | } 108 | 109 | ::-webkit-scrollbar { 110 | width: 4px; 111 | height: 4px; 112 | } 113 | 114 | ::-webkit-scrollbar-thumb { 115 | /*滚动条里面小方块*/ 116 | border-radius: 2px; 117 | background: #666666; 118 | } 119 | 120 | ::-webkit-scrollbar-track { 121 | /*滚动条里面轨道*/ 122 | border-radius: 0; 123 | background: #e5e5e5; 124 | } 125 | 126 | @media (max-width: 640px) { 127 | #menu, 128 | .beian, 129 | #top-menu-list, 130 | .exchange { 131 | display: none; 132 | } 133 | 134 | } 135 | 136 | @media (max-height: 420px) { 137 | #menu, 138 | #foot, 139 | .beian, 140 | #top-menu-list, 141 | .exchange { 142 | display: none; 143 | } 144 | } 145 | 146 | @media screen and (max-width: 1024px) { 147 | #container { 148 | width: 90% 149 | } 150 | 151 | #site-main { 152 | margin: 0 153 | } 154 | } 155 | 156 | @media screen and (max-width: 768px) { 157 | #container { 158 | width: 70% 159 | } 160 | 161 | #search-hot { 162 | width: 100%; 163 | } 164 | 165 | #burger { 166 | margin-top: 43px 167 | } 168 | 169 | #headline-content { 170 | max-width: 100% 171 | } 172 | 173 | #search-bar { 174 | padding-bottom: 60px 175 | } 176 | 177 | #search-tab span { 178 | font-size: 15px 179 | } 180 | 181 | #work-link #container { 182 | width: 85% 183 | } 184 | } 185 | 186 | @media screen and (max-width: 480px) { 187 | #container { 188 | width: 90% 189 | } 190 | } 191 | 192 | /*全局自适应样式结束*/ 193 | 194 | #frame-box { 195 | height: 85%; 196 | width: 85%; 197 | margin: 0 auto; 198 | padding: 57px 0 0 0; 199 | /*background: #ffefc0;*/ 200 | min-width: 640px; 201 | } 202 | 203 | #left-menu { 204 | height: auto; 205 | width: 128px; 206 | /*background: aqua;*/ 207 | margin: 28px 0; 208 | border-right: 1px solid #e9e9e9; 209 | float: left; 210 | } 211 | 212 | #left-menu ul li { 213 | text-align: center; 214 | list-style: none; 215 | height: 40px; 216 | padding: 0; 217 | margin: 6px 0; 218 | border-right: 2px solid #ffffff; 219 | } 220 | 221 | #left-menu ul li.selected { 222 | border-right: 2px solid #838383; 223 | } 224 | 225 | #left-menu ul li a { 226 | vertical-align: middle; 227 | height: 32px; 228 | line-height: 32px; 229 | padding: 0 16px; 230 | margin: 4px 0; 231 | } 232 | 233 | #right-main { 234 | font-size: 14px; 235 | padding: 0 0 0 10px; 236 | margin: 28px 0 0 0; 237 | line-height: 32px; 238 | height: 100%; 239 | width: auto; 240 | overflow-y: auto; 241 | overflow-x: hidden; 242 | white-space: normal; 243 | word-break: break-all; 244 | } 245 | 246 | #right-main span { 247 | line-height: 24px; 248 | margin: 0; 249 | padding: 0 0 3px 0; 250 | border-bottom: 2px solid #838383; 251 | cursor: text; 252 | color: #999999; 253 | font-size: 14px; 254 | } 255 | 256 | /*OS模块框架结束*/ 257 | -------------------------------------------------------------------------------- /src/style/main.less: -------------------------------------------------------------------------------- 1 | @import "common"; 2 | @import "sidebar"; 3 | 4 | html, 5 | body, #app { 6 | width: 100%; 7 | height: 100%; 8 | position: relative; 9 | overflow: hidden; 10 | background: #ffffff; 11 | } 12 | 13 | html { 14 | font-family: "-apple-system", "Noto Sans SC", 'Microsoft YaHei', "helvetica", "sans-serif"; 15 | color: #444444; 16 | font-weight: 400; 17 | } 18 | 19 | #content { 20 | width: 100%; 21 | height: 100%; 22 | background: #ffffff; 23 | z-index: -100; 24 | /*opacity:0.6; filter: alpha(opacity=70);*/ 25 | -webkit-transition: all .5s ease-in; 26 | transition: all .5s ease-in 27 | } 28 | 29 | #foot { 30 | position: absolute; 31 | bottom: 10px; 32 | z-index: 1000; 33 | text-align: center; 34 | width: 100%; 35 | color: #444444; 36 | height: 20px; 37 | line-height: 20px; 38 | font-size: 14px; 39 | 40 | .out_link { 41 | position: relative; 42 | } 43 | 44 | .out_link::before { 45 | content: ''; 46 | position: absolute; 47 | bottom: 0; 48 | left: 0; 49 | right: 0; 50 | height: 2px; 51 | background-color: #444444; 52 | transform-origin: bottom right; 53 | transform: scaleX(0); 54 | transition: transform 0.4s ease; 55 | } 56 | 57 | .out_link:hover::before { 58 | transform-origin: bottom left; 59 | transform: scaleX(1); 60 | } 61 | } 62 | 63 | 64 | #top-menu-list { 65 | height: 42px; 66 | margin: 0 4%; 67 | position: absolute; 68 | top: 15px; 69 | /*background: aquamarine;*/ 70 | } 71 | 72 | #top-menu-ul { 73 | text-align: center; 74 | display: inline-block; 75 | height: 42px; 76 | margin: auto 0; 77 | /*background: #ffefc0;*/ 78 | 79 | li { 80 | float: left; 81 | width: 62px; 82 | list-style: none; 83 | text-align: center; 84 | margin: 0 2px; 85 | white-space: nowrap; 86 | -webkit-transition: all .2s ease-in; 87 | transition: all .2s ease-in; 88 | 89 | a { 90 | vertical-align: middle; 91 | height: 32px; 92 | line-height: 32px; 93 | padding: 0 16px; 94 | margin: 5px 0; 95 | } 96 | } 97 | } 98 | 99 | /*侧边栏模块样式*/ 100 | 101 | #menu { 102 | width: 50px; 103 | height: 50px; 104 | transform: scale(0.8); 105 | position: absolute; 106 | right: 10px; 107 | top: 5px; 108 | cursor: pointer; 109 | z-index: 2001; 110 | 111 | i { 112 | position: fixed; 113 | right: 10px; 114 | margin: 24px auto; 115 | width: 30px; 116 | height: 2px; 117 | background: #444444; 118 | transition: 0.3s all ease; 119 | } 120 | 121 | i:before { 122 | content: ''; 123 | width: 20px; 124 | height: 2px; 125 | top: -8px; 126 | background: #444444; 127 | position: absolute; 128 | right: 0; 129 | transition: 0.3s all ease; 130 | } 131 | 132 | i:after { 133 | content: ''; 134 | width: 20px; 135 | height: 2px; 136 | bottom: -8px; 137 | background: #444444; 138 | position: absolute; 139 | left: 0; 140 | transition: 0.3s all ease; 141 | } 142 | } 143 | 144 | #menu.on { 145 | i { 146 | width: 25px; 147 | background: #444444; 148 | } 149 | 150 | i:before { 151 | top: -5px; 152 | transform: rotate(45deg); 153 | width: 14px; 154 | right: -1px; 155 | left: auto; 156 | background: #444444; 157 | } 158 | 159 | i:after { 160 | bottom: -5px; 161 | transform: rotate(-45deg); 162 | width: 14px; 163 | right: -1px; 164 | left: auto; 165 | background: #444444; 166 | } 167 | } 168 | 169 | 170 | .list { 171 | width: 376px; 172 | padding: 0 20px 0 0; 173 | height: 100%; 174 | overflow: hidden; 175 | overflow-y: auto; 176 | position: absolute; 177 | right: 0; 178 | z-index: 2000; 179 | background: #f7f7f7; 180 | transition: 0.3s all ease; 181 | 182 | ul { 183 | float: left; 184 | 185 | li { 186 | text-align: center; 187 | margin: 0 auto; 188 | float: left; 189 | -webkit-transition: all .2s ease-in; 190 | transition: all .2s ease-in 191 | } 192 | } 193 | 194 | #setting { 195 | width: 46px; 196 | //height: 100%; 197 | padding: 20px 0 20px 0; 198 | //border-right: 1px solid #e9e9e9; 199 | 200 | li { 201 | width: 46px; 202 | margin: 6px 0; 203 | border-right: 2px solid #f7f7f7; 204 | 205 | a { 206 | padding: 4px 6px; 207 | line-height: 24px; 208 | margin: 0 5px 0 5px; 209 | } 210 | } 211 | 212 | li.selected { 213 | border-right: 2px solid #838383; 214 | } 215 | } 216 | 217 | #element { 218 | width: 294px; 219 | //height: 100%; 220 | padding: 20px 0 0 5px; 221 | border-left: 1px solid #e9e9e9; 222 | 223 | li { 224 | width: 96px; 225 | padding: 9px 0; 226 | white-space: nowrap; 227 | 228 | a { 229 | vertical-align: middle; 230 | height: 32px; 231 | line-height: 32px; 232 | padding: 0 16px; 233 | } 234 | } 235 | 236 | li.element-title { 237 | width: 100%; 238 | padding: 9px 0; 239 | text-align: left; 240 | 241 | span { 242 | line-height: 24px; 243 | margin: 0; 244 | padding: 0 0 5px 0; 245 | border-bottom: 2px solid #838383; 246 | cursor: text; 247 | color: #999999; 248 | font-size: 14px; 249 | } 250 | } 251 | 252 | div { 253 | padding: 9px 0; 254 | line-height: 32px; 255 | float: left; 256 | color: #666666; 257 | } 258 | } 259 | } 260 | 261 | .list.closed { 262 | right: -376px; 263 | } 264 | 265 | 266 | /*侧边栏模块样式结束*/ -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 52 | 53 | 139 | 140 | 147 | -------------------------------------------------------------------------------- /src/views/Home.vue: -------------------------------------------------------------------------------- 1 | 35 | 36 | 153 | 156 | -------------------------------------------------------------------------------- /public/json/url.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "icon": "icon-sousuo1", 4 | "title": "常用/搜索", 5 | "node": [ 6 | { 7 | "url": "https://www.baidu.com/", 8 | "icon": "icon-baidu", 9 | "text": "百度" 10 | }, 11 | { 12 | "url": "https://www.google.com/", 13 | "icon": "icon-google", 14 | "text": "谷歌" 15 | }, 16 | { 17 | "url": "https://github.com", 18 | "icon": "icon-gitHub", 19 | "text": "GitHub" 20 | }, 21 | { 22 | "url": "https://wx.qq.com/", 23 | "icon": "icon-weixin", 24 | "text": "微信" 25 | }, 26 | { 27 | "url": "https://weibo.com/", 28 | "icon": "icon-weibo", 29 | "text": "微博" 30 | }, 31 | { 32 | "url": "https://tieba.baidu.com/", 33 | "icon": "icon-baidutieba", 34 | "text": "贴吧" 35 | }, 36 | { 37 | "url": "https://mail.163.com/", 38 | "icon": "icon-wangyi", 39 | "text": "网易邮箱" 40 | }, 41 | { 42 | "url": "https://mail.google.com/", 43 | "icon": "icon-Gmail", 44 | "text": "Gmail" 45 | }, 46 | { 47 | "url": "https://outlook.live.com/mail/", 48 | "icon": "icon-outlook_x", 49 | "text": "Outlook" 50 | } 51 | ] 52 | }, 53 | { 54 | "icon": "icon-shipin1", 55 | "title": "视频/直播", 56 | "node": [ 57 | { 58 | "url": "https://www.youtube.com/", 59 | "icon": "icon-youtube", 60 | "text": "YouTube" 61 | }, 62 | { 63 | "url": "https://www.bilibili.com/", 64 | "icon": "icon-bilibili", 65 | "text": "哔哩哔哩" 66 | }, 67 | { 68 | "url": "https://www.douyin.com/", 69 | "icon": "icon-douyin", 70 | "text": "抖音" 71 | }, 72 | { 73 | "url": "https://www.ixigua.com/", 74 | "icon": "icon-xigua", 75 | "text": "西瓜视频" 76 | }, 77 | { 78 | "url": "https://www.youku.com/", 79 | "icon": "icon-youku", 80 | "text": "优酷" 81 | }, 82 | { 83 | "url": "https://v.qq.com/", 84 | "icon": "icon-tengxunshipin", 85 | "text": "腾讯视频" 86 | }, 87 | { 88 | "url": "https://www.iqiyi.com/", 89 | "icon": "icon-aiqiyi", 90 | "text": "爱奇艺" 91 | }, 92 | { 93 | "url": "https://www.huya.com/", 94 | "icon": "icon-huyazhibo", 95 | "text": "虎牙直播" 96 | }, 97 | { 98 | "url": "https://www.douyu.com/", 99 | "icon": "icon-douyuTV", 100 | "text": "斗鱼直播" 101 | } 102 | ] 103 | }, 104 | { 105 | "icon": "icon-bangong", 106 | "title": "办公/设计", 107 | "node": [ 108 | { 109 | "url": "https://www.kancloud.cn/", 110 | "icon": "icon-biji", 111 | "text": "看云" 112 | }, 113 | { 114 | "url": "https://www.yuque.com/", 115 | "icon": "icon-yuquemianlogo", 116 | "text": "语雀" 117 | }, 118 | { 119 | "url": "https://www.latexstudio.net/", 120 | "icon": "icon-tianjiagongshi", 121 | "text": "LaTeX" 122 | }, 123 | { 124 | "url": "https://cn.overleaf.com/", 125 | "icon": "icon-xiezuo", 126 | "text": "Overleaf" 127 | }, 128 | { 129 | "url": "https://www.iconfont.cn/", 130 | "icon": "icon-alixingqiu", 131 | "text": "阿里图标" 132 | }, 133 | { 134 | "url": "https://huaban.com/", 135 | "icon": "icon-huabanwang", 136 | "text": "花瓣" 137 | } 138 | ] 139 | }, 140 | { 141 | "icon": "icon-caozuojiemiantubiao---_gongju", 142 | "title": "存储/工具", 143 | "node": [ 144 | { 145 | "url": "https://pan.baidu.com/", 146 | "icon": "icon-baiduwangpan", 147 | "text": "百度网盘" 148 | }, 149 | { 150 | "url": "https://www.jianguoyun.com/", 151 | "icon": "icon-jianguo", 152 | "text": "坚果云" 153 | }, 154 | { 155 | "url": "https://up.woozooo.com/u", 156 | "icon": "icon-yuncunchu", 157 | "text": "蓝奏云" 158 | }, 159 | { 160 | "url": "https://cowtransfer.com/", 161 | "icon": "icon--nainiu", 162 | "text": "奶牛快传" 163 | }, 164 | { 165 | "url": "https://send.firefox.com/", 166 | "icon": "icon-huohuliulanqifirefox", 167 | "text": "Ff Send" 168 | }, 169 | { 170 | "url": "https://translate.google.cn/", 171 | "icon": "icon-google", 172 | "text": "谷歌翻译" 173 | }, 174 | { 175 | "url": "https://lolicon.dev/", 176 | "icon": "icon-idrex", 177 | "text": "Toolbox" 178 | }, 179 | { 180 | "url": "https://tools.miku.ac/", 181 | "icon": "icon-gongju", 182 | "text": "MikuTools" 183 | }, 184 | { 185 | "url": "https://apkdl.in/", 186 | "icon": "icon-apk", 187 | "text": "APK下载" 188 | }, 189 | { 190 | "url": "http://tool.chinaz.com/", 191 | "icon": "icon-ico_yunyingguanli_yuangongxinxichaxun", 192 | "text": "站长工具" 193 | }, 194 | { 195 | "url": "https://tinify.cn/", 196 | "icon": "icon--xiongmao", 197 | "text": "TinyPNG" 198 | } 199 | ] 200 | }, 201 | { 202 | "icon": "icon-_qianduankaifa", 203 | "title": "开发/云", 204 | "node": [ 205 | { 206 | "url": "https://www.aliyun.com/", 207 | "icon": "icon-aliyun", 208 | "text": "阿里云" 209 | }, 210 | { 211 | "url": "https://cloud.tencent.com/", 212 | "icon": "icon-tengxunyun", 213 | "text": "腾讯云" 214 | }, 215 | { 216 | "url": "https://www.qiniu.com/", 217 | "icon": "icon-qiniuyun", 218 | "text": "七牛云" 219 | }, 220 | { 221 | "url": "https://www.cloudflare.com/", 222 | "icon": "icon-cloudflare", 223 | "text": "Cloudflare" 224 | }, 225 | { 226 | "url": "https://www.w3school.com.cn/", 227 | "icon": "icon-wc", 228 | "text": "W3school" 229 | }, 230 | { 231 | "url": "https://msdn.itellyou.cn/", 232 | "icon": "icon-weiruan", 233 | "text": "MSDN" 234 | }, 235 | { 236 | "url": "https://rrkee.com/", 237 | "icon": "icon-renren", 238 | "text": "人人客" 239 | }, 240 | { 241 | "url": "https://code.visualstudio.com/", 242 | "icon": "icon-file_type_vscode", 243 | "text": "VSCode" 244 | }, 245 | { 246 | "url": "https://www.jetbrains.com/", 247 | "icon": "icon-jetbrains", 248 | "text": "JetBrains" 249 | } 250 | ] 251 | }, 252 | { 253 | "icon": "icon-_shequluntan", 254 | "title": "论坛/学习", 255 | "node": [ 256 | { 257 | "url": "https://juejin.im/", 258 | "icon": "icon-juejin", 259 | "text": "掘金" 260 | }, 261 | { 262 | "url": "https://segmentfault.com/", 263 | "icon": "icon-iconsf-copy", 264 | "text": "SF思否" 265 | }, 266 | { 267 | "url": "https://www.52pojie.cn/", 268 | "icon": "icon-wuaipojie", 269 | "text": "吾爱破解" 270 | }, 271 | { 272 | "url": "https://www.itsk.com/", 273 | "icon": "icon-SKY", 274 | "text": "IT天空" 275 | }, 276 | { 277 | "url": "https://www.ituring.com.cn/", 278 | "icon": "icon-tulingyunlogo", 279 | "text": "图灵社区" 280 | }, 281 | { 282 | "url": "https://leetcode-cn.com/", 283 | "icon": "icon-LeetCode", 284 | "text": "力扣" 285 | } 286 | ] 287 | } 288 | ] -------------------------------------------------------------------------------- /src/assets/img/simple-so.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | 23 | 26 | 29 | 32 | 35 | 38 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /public/img/simple-so.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 15 | 16 | 17 | 18 | 19 | 20 | 23 | 24 | 27 | 30 | 33 | 36 | 39 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright 2018-2022 ZHANGDI Studio 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. --------------------------------------------------------------------------------