diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..063b0e4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.DS_Store +Thumbs.db +db.json +*.log +node_modules/ +public/ +.deploy*/ \ No newline at end of file diff --git a/404.html b/404.html deleted file mode 100644 index 58bcadf..0000000 --- a/404.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - Page Not Found - - - -
-
4 0 4
-
- Page not found -
-
- - - - - - Back - -
-
- - - - \ No newline at end of file diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..e4f6c38 --- /dev/null +++ b/_config.yml @@ -0,0 +1,74 @@ +# Hexo Configuration +## Docs: https://hexo.io/docs/configuration.html +## Source: https://github.com/hexojs/hexo/ + +# Site +title: Red Orange Yellow +subtitle: +description: +author: Red Orange +language: zh-cn +timezone: + +# URL +## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/' +url: http://resyin.github.io/ +root: / +permalink: :year/:month/:day/:title/ +permalink_defaults: + +# Directory +source_dir: source +public_dir: public +tag_dir: tags +archive_dir: archives +category_dir: categories +code_dir: downloads/code +i18n_dir: :lang +skip_render: + +# Writing +new_post_name: :title.md # File name of new posts +default_layout: post +titlecase: false # Transform title into titlecase +external_link: true # Open external links in new tab +filename_case: 0 +render_drafts: false +post_asset_folder: false +relative_link: false +future: true +highlight: + enable: true + line_number: true + auto_detect: false + tab_replace: + +# Category & Tag +default_category: uncategorized +category_map: +tag_map: + +# Date / Time format +## Hexo uses Moment.js to parse and display date +## You can customize the date format as defined in +## http://momentjs.com/docs/#/displaying/format/ +date_format: YYYY-MM-DD +time_format: HH:mm:ss + +# Pagination +## Set per_page to 0 to disable pagination +per_page: 10 +pagination_dir: page + +# Extensions +## Plugins: https://hexo.io/plugins/ +## Themes: https://hexo.io/themes/ +# theme: landscape +theme: cactus-dark + +# Deployment +## Docs: https://hexo.io/docs/deployment.html +deploy: + type: git + repository: https://github.com/resyin/resyin.github.io + branch: master diff --git a/archives/index.html b/archives/index.html deleted file mode 100644 index 3c948af..0000000 --- a/archives/index.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - -HUANG RESYIN - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - -
- - -
- - - - - - -
-
- - diff --git a/atom.xml b/atom.xml deleted file mode 100644 index 5d9b0f2..0000000 --- a/atom.xml +++ /dev/null @@ -1,552 +0,0 @@ - - - https://resyin.github.io - HUANG RESYIN - 2020-04-15T06:21:30.759Z - https://github.com/jpmonette/feed - - - Do something - https://resyin.github.io/images/avatar.png - https://resyin.github.io/favicon.ico - All rights reserved 2020, HUANG RESYIN - - <![CDATA[在 Vue Router 中使用 HTML5 History 模式]]> - https://resyin.github.io/post/vue-router-history/ - - - 2020-04-13T05:11:25.000Z - Vue Router 目前支持三种模式:

-
    -
  • hash 使用 URL hash 实现页面跳转。支持所有浏览器,但会在 URL 中携带 # 号。Vue Router 的默认模式。
  • -
  • history 使用 HTML5 History API 实现页面跳转。支持实现 history.pushState 的浏览器,需服务器配合。
  • -
  • abstract 支持 Node.js 服务端环境。
  • -
-

使用 history 模式时需要对前端代码及服务器进行相关配置,并且根据部署位置(在域名的根路径下或子路径下),配置也略有差异。

-

以标准的 Vue CLI 项目与 Nignx 服务器为例:

-

部署在 http://host:port/

-

前端配置

-
// router.js
-const router = new VueRouter({
-  mode: "history"
-  routes
-});
-
-
// vue.config.js
-module.exports = {
-  publicPath: "/"
-};
-
-

服务器配置

-
# nginx.conf
-location / {
-    # root <your_web_files_path>;
-    index  index.html;
-    try_files $uri $uri/ /index.html;
-}
-
-

部署在 http://host:port/context/

-

前端配置

-
// router.js
-const router = new VueRouter({
-  mode: "history",
-  base: process.env.BASE_URL,
-  routes
-});
-
-
// vue.config.js
-module.exports = {
-  publicPath: process.env.NODE_ENV === "production" ? "/context/" : "/",
-};
-
-

其中 process.env.BASE_URL 等价于 publicPath,即 context 的值。

-

服务器配置

-
# nginx.conf
-location /context/ {
-    # alias <your_web_files_path>;
-    index index.html;
-    try_files $uri $uri/ /context/index.html;
-}
-
-

注意,PWA 的输出文件 index.html,与 Nginx config 中的 index.html 相对应,如输出文件名自定义,Nginx config 也需要与其保持一致。

-]]>
-
- - <![CDATA[基于 Mock.js 的前端开发指南]]> - https://resyin.github.io/post/mockjs-usage/ - - - 2020-02-17T04:51:40.000Z - 关于 Mock.js -

Mock.js 能做什么?

-
    -
  • 能生成随机数据
  • -
  • 能拦截 Ajax 请求
  • -
-

Mock.js 有哪些特点?

-
    -
  • 前后端分离
    -让前端工程师独立于后端进行开发。
  • -
  • 低耦合
    -无需修改既有代码,即可拦截 Ajax 请求,返回模拟的响应数据。
  • -
  • 数据类型多样
    -支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等。
  • -
  • 增加单元测试的真实性
    -通过随机数据,模拟各种场景。
  • -
  • 方便扩展
    -支持扩展更多数据类型,支持自定义函数和正则。
  • -
  • 简单易用
  • -
-

基于以上特点,Mock.js 被广泛应用于前端开发中,以保证开发效率与进度。

-

安装

-

Mock.js 允许多种安装方式:

-

浏览器引入

-

<script type="text/javascript" src="http://mockjs.com/dist/mock.js"></script>

-

使用 npm 或 yarn 安装

-
    -
  • $ npm install mockjs --save
  • -
  • $ yarn add mockjs
  • -
-

拦截 Ajax 请求

-

Vue CLI 生成的项目为例,安装 Axios 发送 Ajax 请求。

-

引用 Mock.js

-

安装完成 Mock.js 后,在项目 src 目录下新建 mock 目录及 index.js 文件,引用 Mock.js:

-
// in src/mock/index.js
-import Mock from "mockjs";
-
-

将 mock 配置关联到项目中:

-
// in src/main.js
-import "./mock";
-// 将 Axios 挂载到 Vue 原型中,以便在单文件组件中以 this.$http 使用
-import axios from "axios";
-Vue.prototype.$http = axios;
-
-

使用 Mock.mock()

-

Mock.mock( rurl?, rtype?, template|function( options ) )

-
    -
  • rurl
    -可选参数,表示需要拦截的 Ajax URL,可以是 URL 字符串或 URL 正则。
    -例如 //domain/list.json/、'/domian/list.json'。
  • -
  • rtype
    -可选参数,表示需要拦截的 Ajax 请求类型。
    -例如 GET、POST、PUT、DELETE 等。
  • -
  • template
    -可选参数,表示数据模板,可以是对象或字符串。
  • -
  • function(options)
    -可选参数,表示用于生成响应数据的函数。 -
      -
    • options
      -指向本次请求的 Ajax 选项集,含有 url、type 和 body 三个属性,参见 XMLHttpRequest 规范。
    • -
    -
  • -
-

假设业务场景是获取一段资讯列表,网络请求 URL 为 /api/news,类型为 get,拦截函数为:

-
// in src/mock/index.js
-import Mock from "mockjs";
-
-Mock.mock("/api/news", "get", {
-    code: "OK",
-    results: [
-        {
-            id: "1",
-            title: "前端组件设计原则",
-            img:
-                "https://user-gold-cdn.xitu.io/2019/1/24/16880541998cbc09?imageView2/0/w/1280/h/960/format/webp/ignore-error/1",
-            publishedAt: "2018-11-02",
-            author: "Andrew Dinihan",
-            url: "https://juejin.im/post/5c49cff56fb9a049bd42a90f"
-        },
-        {
-            id: "2",
-            title: "正则全攻略使用手册",
-            img: "https://segmentfault.com/img/bVbnRSc?w=650&h=255",
-            publishedAt: "2019-01-28",
-            author: "Croc_wend",
-            url: "https://segmentfault.com/a/1190000018042746"
-        }
-    ]
-});
-
-

网络请求方法:

-
// in any.vue
-async getNews() {
-    const { data: res } = await this.$http({ url: "/api/news" });
-    console.log("get", res);
-}
-
-

控制台中可见,响应数据为编写的测试数据,至此 Mock.js 拦截了 Ajax 请求。

-

生成随机数据

-

Mock.js 提供了多种数据类型:

-
    -
  • Base -
      -
    • boolean 布尔类型
    • -
    • natural 自然数(大于等于0的整数)
    • -
    • integer 整数
    • -
    • float 浮点数
    • -
    • character 字符
    • -
    • string 字符串
    • -
    • range 整数区间
    • -
    -
  • -
  • Date -
      -
    • date 日期
    • -
    • time 时间
    • -
    • datetime 日期时间
    • -
    • now 当前日期时间
    • -
    -
  • -
  • Image -
      -
    • image 图片地址
    • -
    • dataImage 图片 Base64
    • -
    -
  • -
  • Color -
      -
    • color 16进制颜色值
    • -
    • hex 16进制颜色值
    • -
    • rgb rgb颜色值
    • -
    • rgba rgba颜色值
    • -
    • hsl hsl颜色值
    • -
    -
  • -
  • Text -
      -
    • paragraph 一段英文
    • -
    • cparagraph 一段中文
    • -
    • sentence 一句英文(首字母大写)
    • -
    • csentence 一句中文
    • -
    • word 一个英文单词
    • -
    • cword 一个中文字
    • -
    • title 一个英文标题(所有字母大写)
    • -
    • ctitle 一个中文标题
    • -
    -
  • -
  • Name -
      -
    • first 英文名
    • -
    • last 英文姓
    • -
    • name 英文姓名
    • -
    • cfirst 中文姓
    • -
    • clast 中文名
    • -
    • cname 中文姓名
    • -
    -
  • -
  • Web -
      -
    • url URL
    • -
    • protocol 协议
    • -
    • domain 域名
    • -
    • tld 顶级域名
    • -
    • email 邮件地址
    • -
    • ip IP 地址
    • -
    -
  • -
  • Address -
      -
    • region 中国区域
    • -
    • province 中国省、直辖市、自治区、特别行政区
    • -
    • city 中国城市
    • -
    • county 中国县
    • -
    • zip 邮政编码
    • -
    -
  • -
  • Helper -
      -
    • capitalize 把字符串的第一个字母转换为大写
    • -
    • upper 把字符串转换为大写
    • -
    • lower 把字符串转换为小写
    • -
    • pick 从数组中随机选取一个元素
    • -
    • shuffle 打乱数组中元素的顺序
    • -
    -
  • -
  • Miscellaneous -
      -
    • guid UUID
    • -
    • id 18位身份证号
    • -
    • increment 自增整数
    • -
    -
  • -
-

使用 @ 符号与以上任一数据类型的生成函数名相结合,即可组成占位符,在 Mock.mock() 的 template 中替换固定字符串,生成随机字符串。

-

速查以上数据类型,改写拦截函数:

-
// in src/mock/index.js
-import Mock from "mockjs";
-
-Mock.mock("/api/news", "get", {
-    code: "OK",
-    results: [
-        {
-            id: "@guid", // 生成 UUID
-            title: "@ctitle(3,5)", // 生成 3-5 字的中文标题
-            img: "@dataImage('200x100')", // 生成 200px*100px 的图片 Base64
-            publishedAt: "@date('yyyy-MM-dd')", // 生成 yyyy-MM-dd 格式的日期
-            author: "@name(true)", // 生成英文姓名
-            url: "@url('http')" // 生成 http 协议的 URL
-        }
-    ]
-});
-
-

语法规范

-

Mock.js 的语法规范包括两部分:

-
    -
  • 数据占位符定义规范(Data Placeholder Definition,DPD)
  • -
  • 数据模板定义规范(Data Template Definition,DTD)
  • -
-

上一节中使用的 @guid 等占位符属于 Mock.js 语法规范的数据占位符定义规范; 数据模板定义规范则定义 Mock.mock() template 内属性的最终值。

-

属性由属性名、生成规则、属性值组成:

-
Mock.mock({
-    // 属性名|生成规则:属性值
-    'name|rule': value
-});
-
-

其中:

-
    -
  • 属性名和生成规则之间用竖线 | 分隔
  • -
  • 生成规则是可选参数
  • -
  • 生成规则有 7 种格式: -
      -
    • 'name|min-max': value
    • -
    • 'name|count': value
    • -
    • 'name|min-max.dmin-dmax': value
    • -
    • 'name|min-max.dcount': value
    • -
    • 'name|count.dmin-dmax': value
    • -
    • 'name|count.dcount': value
    • -
    • 'name|+step': value
    • -
    -
  • -
  • 属性值的类型影响生成规则 -
      -
    • String -
        -
      • 'name|min-max': string 通过重复 string 生成一个字符串,重复次数大于等于 min,小于等于 max
      • -
      • 'name|count': string 通过重复 string 生成一个字符串,重复次数等于 count
      • -
      -
    • -
    • Number -
        -
      • 'name|+1': number 属性值自动加 1,初始值为 number
      • -
      • 'name|min-max': number 生成一个大于等于 min、小于等于 max 的整数,属性值 number 只是用来确定类型
      • -
      • 'name|min-max.dmin-dmax': number 生成一个浮点数,整数部分大于等于 min、小于等于 max,小数部分保留 dmindmax
      • -
      -
    • -
    • Boolean -
        -
      • 'name|1': boolean 随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率同样是 1/2
      • -
      • 'name|min-max': value 随机生成一个布尔值,值为 value 的概率是 min / (min + max),值为 !value 的概率是 max / (min + max)
      • -
      -
    • -
    • Object -
        -
      • 'name|count': object 从属性值 object 中随机选取 count 个属性
      • -
      • 'name|min-max': object从属性值 object 中随机选取 minmax 个属性
      • -
      -
    • -
    • Array -
        -
      • 'name|1': array 从属性值 array 中随机选取 1 个元素,作为最终值
      • -
      • 'name|+1': array 从属性值 array 中顺序选取 1 个元素,作为最终值
      • -
      • 'name|min-max': array 通过重复属性值 array 生成一个新数组,重复次数大于等于 min,小于等于 max
      • -
      • 'name|count': array 通过重复属性值 array 生成一个新数组,重复次数为 count
      • -
      -
    • -
    • Function -
        -
      • 执行函数 function,取其返回值作为最终的属性值,函数的上下文为属性 'name' 所在的对象
      • -
      -
    • -
    • RegExp -
        -
      • 根据正则表达式 regexp 反向生成可以匹配它的字符串。用于生成自定义格式的字符串。
      • -
      -
    • -
    -
  • -
  • 属性值中可以含有占位符
  • -
  • 属性值还指定了最终值的初始值和类型
  • -
-

回到项目中。业务场景是获取一段资讯列表,但上一节生成的随机数据只有 1 项,此时使用数据模板定义规范的属性生成规则,将 1 项目变为多项:

-
// in src/mock/index.js
-import Mock from "mockjs";
-
-Mock.mock("/api/news", "get", {
-    code: "OK",
-    // 数组内,随机生产 5-10 个对象
-    "results|5-10": [
-        {
-            id: "@guid", // 生成 UUID
-            title: "@ctitle(3,5)", // 生成 3-5 字的中文标题
-            img: "@dataImage('200x100')", // 生成 200px*100px 的图片 Base64
-            publishedAt: "@date('yyyy-MM-dd')", // 生成 yyyy-MM-dd 格式的日期
-            author: "@name(true)", // 生成英文姓名
-            url: "@url('http')" // 生成 http 协议的 URL
-        }
-    ]
-});
-
-

增删改查

-

除了拦截 GET 请求,Mock.js 同样支持 POSTDELETEPUT 请求:

-

拦截 POST 请求

-
// in src/mock/index.js
-Mock.mock("/api/news", "post", opts => {
-    let result = JSON.parse(opts.body);
-    result.id = Mock.Random.guid();
-    return {
-        code: "OK",
-        result
-    };
-});
-
-
// in any.vue
-async onCreate() {
-    const { data: res } = await this.$http({
-    url: `/api/news`,
-    method: "post",
-    data: {
-        title: "前端组件设计原则",
-        img:
-        "https://user-gold-cdn.xitu.io/2019/1/24/16880541998cbc09?imageView2/0/w/1280/h/960/format/webp/ignore-error/1",
-        publishedAt: "2018-11-02",
-        author: "Andrew Dinihan",
-        url: "https://juejin.im/post/5c49cff56fb9a049bd42a90f"
-    }
-    });
-    console.log("post", res);
-},
-
-

拦截 DELETE 请求

-

通常 Delete 请求会将 ID 作为 Path 参数放在 URL 中传递,此时需要使用正则表达式匹配 URL,并获取 Path 参数。

-
// in src/mock/index.js
-Mock.mock(/\/api\/news/, "delete", opts => {
-    const pathArray = /\/api\/news\/([\w\\-]+)/.exec(opts.url);
-    const id = pathArray[1];
-    return {
-        code: "OK",
-        result: { id }
-    };
-});
-
-
// in any.vue
-async onDelete(news) {
-    const { data: res } = await this.$http({
-        url: `/api/news/${news.id}`,
-        method: "delete"
-    });
-    console.log("delete", res);
-},
-
-

拦截 PUT 请求

-

与 Delete 拦截方式一致。

-
// in src/mock/index.js
-Mock.mock(/\/api\/news/, "put", opts => {
-    const pathArray = /\/api\/news\/([\w\\-]+)/.exec(opts.url);
-    const id = pathArray[1];
-    let result = JSON.parse(opts.body);
-    result.id = id;
-    return {
-        code: "OK",
-        result
-    };
-});
-
-
// in any.vue
-async onUpdate(news) {
-    const { data: res } = await this.$http({
-    url: `/api/news/${news.id}`,
-    method: "put",
-    data: {
-        title: "正则全攻略使用手册",
-        img: "https://segmentfault.com/img/bVbnRSc?w=650&h=255",
-        publishedAt: "2019-01-28",
-        author: "Croc_wend",
-        url: "https://segmentfault.com/a/1190000018042746"
-    }
-    });
-    console.log("update", res);
-}
-
-

关联 Mock 数据

-

上一节中的增删改查操作虽然在 Ajax 请求时被拦截,但是彼此间并无关联,数据并无变更。此时可以将 4 者关联(该节与 Mock.js 无关,纯粹的 JavaScript 操作)。

-
import Mock from "mockjs";
-
-let ret = Mock.mock({
-  code: "OK",
-  "results|5-10": [
-    {
-      id: "@guid", // 生成 UUID
-      title: "@ctitle(3,5)", // 生成 3-5 字的中文标题
-      img: "@dataImage('200x100')", // 生成 200px*100px 的图片 Base64
-      publishedAt: "@date('yyyy-MM-dd')", // 生成 yyyy-MM-dd 格式的日期
-      author: "@name(true)", // 生成英文姓名
-      url: "@url('http')" // 生成 http 协议的 URL
-    }
-  ]
-});
-
-Mock.mock("/api/news", "get", () => {
-  return ret;
-});
-
-Mock.mock("/api/news", "post", opts => {
-  let result = JSON.parse(opts.body);
-  result.id = Mock.Random.guid();
-  ret.results.push(result);
-  return ret;
-});
-
-Mock.mock(/\/api\/news/, "delete", opts => {
-  const pathArray = /\/api\/news\/([\w\\-]+)/.exec(opts.url);
-  const id = pathArray[1];
-  ret.results = ret.results.filter(val => {
-    return val.id != id;
-  });
-  return ret;
-});
-
-Mock.mock(/\/api\/news/, "put", opts => {
-  const pathArray = /\/api\/news\/([\w\\-]+)/.exec(opts.url);
-  const id = pathArray[1];
-  let result = JSON.parse(opts.body);
-  ret.results = ret.results.map(val => {
-    return val.id === id ? result : val;
-  });
-  return ret;
-});
-
-

动态开启

-

项目中可以使用 npm script 编辑启动命令,通过环境变量来控制是否加载 Mock 服务。

-

Vue CLI 为例,在 development 模式下,增加 Mock 服务的启动命令:

-

新增 serve:mock

-
// in package.json
-{
-    "scripts": {
-        "serve": "vue-cli-service serve",
-        "serve:mock": "vue-cli-service serve --mode mock",
-        "build": "vue-cli-service build",
-        "lint": "vue-cli-service lint"
-    } 
-},
-
-

新建 .env.mock 文件

-
NODE_ENV=development
-VUE_APP_MOCK=true
-
-

判断环境变量是否启用 Mock 服务

-
// in src/mock/index.js
-import Mock from "mockjs";
-
-if (
-  process.env.NODE_ENV === "development" &&
-  process.env.VUE_APP_MOCK === "true"
-) {
-    // your mock code
-}
-
-

此时当你运行 $ npm run serve,Mock 服务未启用,请求 API 服务;当你运行 $ npm run serve:mock,Mock 服务启用,Ajax 请求被拦截。

-

结语

-

示例代码,欢迎一起玩耍。

-]]>
-
-
\ No newline at end of file diff --git a/favicon.ico b/favicon.ico deleted file mode 100644 index e1d4e8c..0000000 Binary files a/favicon.ico and /dev/null differ diff --git a/images/avatar.png b/images/avatar.png deleted file mode 100644 index e1d4e8c..0000000 Binary files a/images/avatar.png and /dev/null differ diff --git a/index.html b/index.html deleted file mode 100644 index 28c4215..0000000 --- a/index.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - -HUANG RESYIN - - - - - - - - - - - - - - - - - - - - - -
-
- - -
-
- -
-
- -
- -
- -
- -
- -
-
- -
- -
- -
- - - - -
- -
-
- -
- - -
- - - - - - -
-
- - diff --git a/media/README.md b/media/README.md deleted file mode 100644 index 2063dc4..0000000 --- a/media/README.md +++ /dev/null @@ -1 +0,0 @@ -media: 静态资源存放文件夹,可在此文件夹放 images、fonts、scripts... 等资源 diff --git a/media/images/sidebar-bg.jpg b/media/images/sidebar-bg.jpg deleted file mode 100644 index 892b749..0000000 Binary files a/media/images/sidebar-bg.jpg and /dev/null differ diff --git a/media/logo.png b/media/logo.png deleted file mode 100644 index 2fe16cf..0000000 Binary files a/media/logo.png and /dev/null differ diff --git a/media/scripts/index.js b/media/scripts/index.js deleted file mode 100644 index a32b591..0000000 --- a/media/scripts/index.js +++ /dev/null @@ -1 +0,0 @@ -console.log('Hello Gridea') \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..fba3f72 --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "hexo-site", + "version": "0.0.0", + "private": true, + "hexo": { + "version": "3.2.2" + }, + "dependencies": { + "hexo": "^3.2.0", + "hexo-deployer-git": "^0.2.0", + "hexo-generator-archive": "^0.1.4", + "hexo-generator-category": "^0.1.3", + "hexo-generator-index": "^0.2.0", + "hexo-generator-tag": "^0.2.0", + "hexo-renderer-ejs": "^0.2.0", + "hexo-renderer-marked": "^0.2.10", + "hexo-renderer-stylus": "^0.3.1", + "hexo-server": "^0.2.0" + } +} diff --git a/post-images/1582075630323.jpg b/post-images/1582075630323.jpg deleted file mode 100644 index 3e9ffce..0000000 Binary files a/post-images/1582075630323.jpg and /dev/null differ diff --git a/post-images/fire-emblem-threehouses.jpg b/post-images/fire-emblem-threehouses.jpg deleted file mode 100644 index 14befe1..0000000 Binary files a/post-images/fire-emblem-threehouses.jpg and /dev/null differ diff --git a/post-images/hello-gridea.png b/post-images/hello-gridea.png deleted file mode 100644 index bbd1205..0000000 Binary files a/post-images/hello-gridea.png and /dev/null differ diff --git a/post-images/mockjs-usage.jpg b/post-images/mockjs-usage.jpg deleted file mode 100644 index a694276..0000000 Binary files a/post-images/mockjs-usage.jpg and /dev/null differ diff --git a/post/2019-nCoV/index.html b/post/2019-nCoV/index.html deleted file mode 100644 index 10781a8..0000000 --- a/post/2019-nCoV/index.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - -2019-nCoV | HUANG RESYIN - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
-

- 2019-nCoV -

- -
-

2019

-

年末,互联网就有关于SARS出现的传言。虽然对于2002年非典的记忆已经零碎,但是SARS可以通过人际传播、10%的致死率还是让我突然紧张,像老妈子一样告诉家人少出门、戴口罩、多通风、勤洗手。

-

随后官方紧急辟谣,造谣者被训诫。

-

2020

-

春节,新型冠状病毒2019-nCoV爆发于武汉,随着春运席卷中国各地。政府呼吁民众在家自我隔离、公共交通停运、企业延迟复工,身边的人开始关注疫情变化,在微信群里或朋友圈里分享着救人治病的谣言。

-

高尚是高尚者的墓志铭

-

因此我喝了一碗我爹煮的大蒜汤,但是我不会怀疑我爹的善意。正如最初的“造谣者”——医生李文亮的善意。如果执法机关正视医护人员的专业性、2019-nCoV与SARS的相似性,不因名字真的不叫SARS而将这种预警视为谣言,或许疫情能够被有效控制。

-

2020年1月28日,最高人民法院发文《治理有关新型肺炎的谣言问题》,重新定性谣言。
-2020年2月7日,李文亮因感染病毒不治逝世,被誉为疫情“吹哨人”。

-

病毒星球

-

病毒带走了太多的生命,毁灭了太多家庭。流感,艾滋,非典,埃博拉。当提起这些名字的时候我们惊惧、恐慌、深恶痛绝,病毒从来不是一个美好的词汇。事实上,这只是我们的狭隘。

-

病毒一词最先出自罗马,意为毒液或精液,包含着毁灭与创造两种含义。当我们了解它,会发现它比人类更加古老,影响着气候、土壤、海洋以及生物进化。地球上1/10的氧气由病毒创造,人类DNA片段中8%来自病毒,人类利用病毒(噬菌体)治疗疾病...

-

病毒不该背负这场灾祸的罪恶。

-

弱小和无知不是生存的障碍,傲慢才是

-

2020年2月7日,华南农业大学公布2019-nCoV的中间宿主或为穿山甲。
-2020年2月11日,世界卫生组织公布2019-nCoV的自然宿主或为菊头蝠。

-

蝙蝠、穿山甲、果子狸、骆驼,人类。

-

他们和我们在本质上不过是一堆不断融合突变的DNA。人类没有权利也没有能力凌驾于谁之上,如果把他们视为食物视为药材,那么就要接受自然选择,接受生或死。也许自然根本不在乎选择,毕竟在数以亿计的时间里,人类只不过是幸运的尘埃。

-

人类从历史中学到的唯一的教训,就是没有从历史中吸取到任何教训

-

当疫情平复后,没有人去吊唁牺牲的医护人员,蝙蝠和穿山甲依然遭受捕猎,野味市场新上了一套消毒设备。

-

这个世界依旧人声鼎沸。

-
-

引用

- - -
-
-
- - - - - - - - - - -
-
- - diff --git a/post/a-planet-of-viruses/index.html b/post/a-planet-of-viruses/index.html deleted file mode 100644 index 76990f5..0000000 --- a/post/a-planet-of-viruses/index.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - -2019-nCoV | HUANG RESYIN - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
-

- 2019-nCoV -

- -
-

2019

-

年末,互联网就有关于SARS出现的传言。虽然对于2002年非典的记忆已经零碎,但是SARS可以通过人际传播、10%的致死率还是让我突然紧张,像老妈子一样告诉家人少出门、戴口罩、多通风、勤洗手。

-

随后官方紧急辟谣,造谣者被训诫。

-

2020

-

春节,新型冠状病毒2019-nCoV爆发于武汉,随着春运席卷中国各地。政府呼吁民众在家自我隔离、公共交通停运、企业延迟复工,身边的人开始关注疫情变化,在微信群里或朋友圈里分享着救人治病的谣言。

-

高尚是高尚者的墓志铭

-

因此我喝了一碗我爹煮的大蒜汤,但是我不会怀疑我爹的善意。正如最初的“造谣者”——医生李文亮的善意。如果执法机关正视医护人员的专业性、2019-nCoV与SARS的相似性,不因名字真的不叫SARS而将这种预警视为谣言,或许疫情能够被有效控制。

-

2020年1月28日,最高人民法院发文《治理有关新型肺炎的谣言问题》,重新定性谣言。
-2020年2月7日,李文亮因感染病毒不治逝世,被誉为疫情“吹哨人”。

-

病毒星球

-

病毒带走了太多的生命,毁灭了太多家庭。流感,艾滋,非典,埃博拉。当提起这些名字的时候我们惊惧、恐慌、深恶痛绝,病毒从来不是一个美好的词汇。事实上,这只是我们的狭隘。

-

病毒一词最先出自罗马,意为毒液或精液,包含着毁灭与创造两种含义。当我们了解它,会发现它比人类更加古老,影响着气候、土壤、海洋以及生物进化。地球上1/10的氧气由病毒创造,人类DNA片段中8%来自病毒,人类利用病毒(噬菌体)治疗疾病...

-

病毒不该背负这场灾祸的罪恶。

-

弱小和无知不是生存的障碍,傲慢才是

-

2020年2月7日,华南农业大学公布2019-nCoV的中间宿主或为穿山甲。
-2020年2月11日,世界卫生组织公布2019-nCoV的自然宿主或为菊头蝠。

-

蝙蝠、穿山甲、果子狸、骆驼,人类。

-

他们和我们在本质上不过是一堆不断融合突变的DNA。人类没有权利也没有能力凌驾于谁之上,如果把他们视为食物视为药材,那么就要接受自然选择,接受生或死。也许自然根本不在乎选择,毕竟在数以亿计的时间里,人类只不过是幸运的尘埃。

-

人类从历史中学到的唯一的教训,就是没有从历史中吸取到任何教训

-

当疫情平复后,没有人去吊唁牺牲的医护人员,蝙蝠和穿山甲依然遭受捕猎,野味市场新上了一套消毒设备。

-

这个世界依旧人声鼎沸。

-
-

引用

- - -
-
-
- - - - - - - - - - - - -
-
- - diff --git a/post/about/index.html b/post/about/index.html deleted file mode 100644 index 8860420..0000000 --- a/post/about/index.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - -关于 | HUANG RESYIN - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
-

- 关于 -

- -
-

HUANG RESYIN

-

一流中二患者 / 二流游戏玩家 / 三流程序员

- -
-
-
- - - - - - - - - - -
-
- - diff --git a/post/fire-emblem-threehouses/index.html b/post/fire-emblem-threehouses/index.html deleted file mode 100644 index 8a51afc..0000000 --- a/post/fire-emblem-threehouses/index.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - -《火焰纹章:风花雪月》养成记录 | HUANG RESYIN - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
-

- 《火焰纹章:风花雪月》养成记录 -

- -
-

贝雷丝

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
职业转职要求职业特技精通特技精通战技
平民----
剑客----
盗贼----
- -
-
-
- - - - - - - - - - -
-
- - diff --git a/post/hello-gridea/index.html b/post/hello-gridea/index.html deleted file mode 100644 index 0bb93d6..0000000 --- a/post/hello-gridea/index.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - -Hello Gridea | Gridea - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-

Hello Gridea

- - -
-
- -
-

👏 欢迎使用 Gridea
-✍️ Gridea 一个静态博客写作客户端。你可以用它来记录你的生活、心情、知识、笔记、创意... ...

- -

Github
-Gridea 主页
-示例网站

-

特性👇

-

📝 你可以使用最酷的 Markdown 语法,进行快速创作

-

🌉 你可以给文章配上精美的封面图和在文章任意位置插入图片

-

🏷️ 你可以对文章进行标签分组

-

📋 你可以自定义菜单,甚至可以创建外部链接菜单

-

💻 你可以在 WindowsMacOSLinux 设备上使用此客户端

-

🌎 你可以使用 𝖦𝗂𝗍𝗁𝗎𝖻 𝖯𝖺𝗀𝖾𝗌Coding Pages 向世界展示,未来将支持更多平台

-

💬 你可以进行简单的配置,接入 GitalkDisqusJS 评论系统

-

🇬🇧 你可以使用中文简体英语

-

🌁 你可以任意使用应用内默认主题或任意第三方主题,强大的主题自定义能力

-

🖥 你可以自定义源文件夹,利用 OneDrive、百度网盘、iCloud、Dropbox 等进行多设备同步

-

🌱 当然 Gridea 还很年轻,有很多不足,但请相信,它会不停向前 🏃

-

未来,它一定会成为你离不开的伙伴

-

尽情发挥你的才华吧!

-

😘 Enjoy~

- -
- -
- - - Gridea - - -
- - - - - -
- -
-
-
- - - - - - - - - - - diff --git a/post/mockjs-usage/index.html b/post/mockjs-usage/index.html deleted file mode 100644 index eb3e591..0000000 --- a/post/mockjs-usage/index.html +++ /dev/null @@ -1,610 +0,0 @@ - - - - - -基于 Mock.js 的前端开发指南 | HUANG RESYIN - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
-

- 基于 Mock.js 的前端开发指南 -

- -
-

关于 Mock.js

-

Mock.js 能做什么?

-
    -
  • 能生成随机数据
  • -
  • 能拦截 Ajax 请求
  • -
-

Mock.js 有哪些特点?

-
    -
  • 前后端分离
    -让前端工程师独立于后端进行开发。
  • -
  • 低耦合
    -无需修改既有代码,即可拦截 Ajax 请求,返回模拟的响应数据。
  • -
  • 数据类型多样
    -支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等。
  • -
  • 增加单元测试的真实性
    -通过随机数据,模拟各种场景。
  • -
  • 方便扩展
    -支持扩展更多数据类型,支持自定义函数和正则。
  • -
  • 简单易用
  • -
-

基于以上特点,Mock.js 被广泛应用于前端开发中,以保证开发效率与进度。

-

安装

-

Mock.js 允许多种安装方式:

-

浏览器引入

-

<script type="text/javascript" src="http://mockjs.com/dist/mock.js"></script>

-

使用 npm 或 yarn 安装

-
    -
  • $ npm install mockjs --save
  • -
  • $ yarn add mockjs
  • -
-

拦截 Ajax 请求

-

Vue CLI 生成的项目为例,安装 Axios 发送 Ajax 请求。

-

引用 Mock.js

-

安装完成 Mock.js 后,在项目 src 目录下新建 mock 目录及 index.js 文件,引用 Mock.js:

-
// in src/mock/index.js
-import Mock from "mockjs";
-
-

将 mock 配置关联到项目中:

-
// in src/main.js
-import "./mock";
-// 将 Axios 挂载到 Vue 原型中,以便在单文件组件中以 this.$http 使用
-import axios from "axios";
-Vue.prototype.$http = axios;
-
-

使用 Mock.mock()

-

Mock.mock( rurl?, rtype?, template|function( options ) )

-
    -
  • rurl
    -可选参数,表示需要拦截的 Ajax URL,可以是 URL 字符串或 URL 正则。
    -例如 //domain/list.json/、'/domian/list.json'。
  • -
  • rtype
    -可选参数,表示需要拦截的 Ajax 请求类型。
    -例如 GET、POST、PUT、DELETE 等。
  • -
  • template
    -可选参数,表示数据模板,可以是对象或字符串。
  • -
  • function(options)
    -可选参数,表示用于生成响应数据的函数。 -
      -
    • options
      -指向本次请求的 Ajax 选项集,含有 url、type 和 body 三个属性,参见 XMLHttpRequest 规范。
    • -
    -
  • -
-

假设业务场景是获取一段资讯列表,网络请求 URL 为 /api/news,类型为 get,拦截函数为:

-
// in src/mock/index.js
-import Mock from "mockjs";
-
-Mock.mock("/api/news", "get", {
-    code: "OK",
-    results: [
-        {
-            id: "1",
-            title: "前端组件设计原则",
-            img:
-                "https://user-gold-cdn.xitu.io/2019/1/24/16880541998cbc09?imageView2/0/w/1280/h/960/format/webp/ignore-error/1",
-            publishedAt: "2018-11-02",
-            author: "Andrew Dinihan",
-            url: "https://juejin.im/post/5c49cff56fb9a049bd42a90f"
-        },
-        {
-            id: "2",
-            title: "正则全攻略使用手册",
-            img: "https://segmentfault.com/img/bVbnRSc?w=650&h=255",
-            publishedAt: "2019-01-28",
-            author: "Croc_wend",
-            url: "https://segmentfault.com/a/1190000018042746"
-        }
-    ]
-});
-
-

网络请求方法:

-
// in any.vue
-async getNews() {
-    const { data: res } = await this.$http({ url: "/api/news" });
-    console.log("get", res);
-}
-
-

控制台中可见,响应数据为编写的测试数据,至此 Mock.js 拦截了 Ajax 请求。

-

生成随机数据

-

Mock.js 提供了多种数据类型:

-
    -
  • Base -
      -
    • boolean 布尔类型
    • -
    • natural 自然数(大于等于0的整数)
    • -
    • integer 整数
    • -
    • float 浮点数
    • -
    • character 字符
    • -
    • string 字符串
    • -
    • range 整数区间
    • -
    -
  • -
  • Date -
      -
    • date 日期
    • -
    • time 时间
    • -
    • datetime 日期时间
    • -
    • now 当前日期时间
    • -
    -
  • -
  • Image -
      -
    • image 图片地址
    • -
    • dataImage 图片 Base64
    • -
    -
  • -
  • Color -
      -
    • color 16进制颜色值
    • -
    • hex 16进制颜色值
    • -
    • rgb rgb颜色值
    • -
    • rgba rgba颜色值
    • -
    • hsl hsl颜色值
    • -
    -
  • -
  • Text -
      -
    • paragraph 一段英文
    • -
    • cparagraph 一段中文
    • -
    • sentence 一句英文(首字母大写)
    • -
    • csentence 一句中文
    • -
    • word 一个英文单词
    • -
    • cword 一个中文字
    • -
    • title 一个英文标题(所有字母大写)
    • -
    • ctitle 一个中文标题
    • -
    -
  • -
  • Name -
      -
    • first 英文名
    • -
    • last 英文姓
    • -
    • name 英文姓名
    • -
    • cfirst 中文姓
    • -
    • clast 中文名
    • -
    • cname 中文姓名
    • -
    -
  • -
  • Web -
      -
    • url URL
    • -
    • protocol 协议
    • -
    • domain 域名
    • -
    • tld 顶级域名
    • -
    • email 邮件地址
    • -
    • ip IP 地址
    • -
    -
  • -
  • Address -
      -
    • region 中国区域
    • -
    • province 中国省、直辖市、自治区、特别行政区
    • -
    • city 中国城市
    • -
    • county 中国县
    • -
    • zip 邮政编码
    • -
    -
  • -
  • Helper -
      -
    • capitalize 把字符串的第一个字母转换为大写
    • -
    • upper 把字符串转换为大写
    • -
    • lower 把字符串转换为小写
    • -
    • pick 从数组中随机选取一个元素
    • -
    • shuffle 打乱数组中元素的顺序
    • -
    -
  • -
  • Miscellaneous -
      -
    • guid UUID
    • -
    • id 18位身份证号
    • -
    • increment 自增整数
    • -
    -
  • -
-

使用 @ 符号与以上任一数据类型的生成函数名相结合,即可组成占位符,在 Mock.mock() 的 template 中替换固定字符串,生成随机字符串。

-

速查以上数据类型,改写拦截函数:

-
// in src/mock/index.js
-import Mock from "mockjs";
-
-Mock.mock("/api/news", "get", {
-    code: "OK",
-    results: [
-        {
-            id: "@guid", // 生成 UUID
-            title: "@ctitle(3,5)", // 生成 3-5 字的中文标题
-            img: "@dataImage('200x100')", // 生成 200px*100px 的图片 Base64
-            publishedAt: "@date('yyyy-MM-dd')", // 生成 yyyy-MM-dd 格式的日期
-            author: "@name(true)", // 生成英文姓名
-            url: "@url('http')" // 生成 http 协议的 URL
-        }
-    ]
-});
-
-

语法规范

-

Mock.js 的语法规范包括两部分:

-
    -
  • 数据占位符定义规范(Data Placeholder Definition,DPD)
  • -
  • 数据模板定义规范(Data Template Definition,DTD)
  • -
-

上一节中使用的 @guid 等占位符属于 Mock.js 语法规范的数据占位符定义规范; 数据模板定义规范则定义 Mock.mock() template 内属性的最终值。

-

属性由属性名、生成规则、属性值组成:

-
Mock.mock({
-    // 属性名|生成规则:属性值
-    'name|rule': value
-});
-
-

其中:

-
    -
  • 属性名和生成规则之间用竖线 | 分隔
  • -
  • 生成规则是可选参数
  • -
  • 生成规则有 7 种格式: -
      -
    • 'name|min-max': value
    • -
    • 'name|count': value
    • -
    • 'name|min-max.dmin-dmax': value
    • -
    • 'name|min-max.dcount': value
    • -
    • 'name|count.dmin-dmax': value
    • -
    • 'name|count.dcount': value
    • -
    • 'name|+step': value
    • -
    -
  • -
  • 属性值的类型影响生成规则 -
      -
    • String -
        -
      • 'name|min-max': string 通过重复 string 生成一个字符串,重复次数大于等于 min,小于等于 max
      • -
      • 'name|count': string 通过重复 string 生成一个字符串,重复次数等于 count
      • -
      -
    • -
    • Number -
        -
      • 'name|+1': number 属性值自动加 1,初始值为 number
      • -
      • 'name|min-max': number 生成一个大于等于 min、小于等于 max 的整数,属性值 number 只是用来确定类型
      • -
      • 'name|min-max.dmin-dmax': number 生成一个浮点数,整数部分大于等于 min、小于等于 max,小数部分保留 dmindmax
      • -
      -
    • -
    • Boolean -
        -
      • 'name|1': boolean 随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率同样是 1/2
      • -
      • 'name|min-max': value 随机生成一个布尔值,值为 value 的概率是 min / (min + max),值为 !value 的概率是 max / (min + max)
      • -
      -
    • -
    • Object -
        -
      • 'name|count': object 从属性值 object 中随机选取 count 个属性
      • -
      • 'name|min-max': object从属性值 object 中随机选取 minmax 个属性
      • -
      -
    • -
    • Array -
        -
      • 'name|1': array 从属性值 array 中随机选取 1 个元素,作为最终值
      • -
      • 'name|+1': array 从属性值 array 中顺序选取 1 个元素,作为最终值
      • -
      • 'name|min-max': array 通过重复属性值 array 生成一个新数组,重复次数大于等于 min,小于等于 max
      • -
      • 'name|count': array 通过重复属性值 array 生成一个新数组,重复次数为 count
      • -
      -
    • -
    • Function -
        -
      • 执行函数 function,取其返回值作为最终的属性值,函数的上下文为属性 'name' 所在的对象
      • -
      -
    • -
    • RegExp -
        -
      • 根据正则表达式 regexp 反向生成可以匹配它的字符串。用于生成自定义格式的字符串。
      • -
      -
    • -
    -
  • -
  • 属性值中可以含有占位符
  • -
  • 属性值还指定了最终值的初始值和类型
  • -
-

回到项目中。业务场景是获取一段资讯列表,但上一节生成的随机数据只有 1 项,此时使用数据模板定义规范的属性生成规则,将 1 项目变为多项:

-
// in src/mock/index.js
-import Mock from "mockjs";
-
-Mock.mock("/api/news", "get", {
-    code: "OK",
-    // 数组内,随机生产 5-10 个对象
-    "results|5-10": [
-        {
-            id: "@guid", // 生成 UUID
-            title: "@ctitle(3,5)", // 生成 3-5 字的中文标题
-            img: "@dataImage('200x100')", // 生成 200px*100px 的图片 Base64
-            publishedAt: "@date('yyyy-MM-dd')", // 生成 yyyy-MM-dd 格式的日期
-            author: "@name(true)", // 生成英文姓名
-            url: "@url('http')" // 生成 http 协议的 URL
-        }
-    ]
-});
-
-

增删改查

-

除了拦截 GET 请求,Mock.js 同样支持 POSTDELETEPUT 请求:

-

拦截 POST 请求

-
// in src/mock/index.js
-Mock.mock("/api/news", "post", opts => {
-    let result = JSON.parse(opts.body);
-    result.id = Mock.Random.guid();
-    return {
-        code: "OK",
-        result
-    };
-});
-
-
// in any.vue
-async onCreate() {
-    const { data: res } = await this.$http({
-    url: `/api/news`,
-    method: "post",
-    data: {
-        title: "前端组件设计原则",
-        img:
-        "https://user-gold-cdn.xitu.io/2019/1/24/16880541998cbc09?imageView2/0/w/1280/h/960/format/webp/ignore-error/1",
-        publishedAt: "2018-11-02",
-        author: "Andrew Dinihan",
-        url: "https://juejin.im/post/5c49cff56fb9a049bd42a90f"
-    }
-    });
-    console.log("post", res);
-},
-
-

拦截 DELETE 请求

-

通常 Delete 请求会将 ID 作为 Path 参数放在 URL 中传递,此时需要使用正则表达式匹配 URL,并获取 Path 参数。

-
// in src/mock/index.js
-Mock.mock(/\/api\/news/, "delete", opts => {
-    const pathArray = /\/api\/news\/([\w\\-]+)/.exec(opts.url);
-    const id = pathArray[1];
-    return {
-        code: "OK",
-        result: { id }
-    };
-});
-
-
// in any.vue
-async onDelete(news) {
-    const { data: res } = await this.$http({
-        url: `/api/news/${news.id}`,
-        method: "delete"
-    });
-    console.log("delete", res);
-},
-
-

拦截 PUT 请求

-

与 Delete 拦截方式一致。

-
// in src/mock/index.js
-Mock.mock(/\/api\/news/, "put", opts => {
-    const pathArray = /\/api\/news\/([\w\\-]+)/.exec(opts.url);
-    const id = pathArray[1];
-    let result = JSON.parse(opts.body);
-    result.id = id;
-    return {
-        code: "OK",
-        result
-    };
-});
-
-
// in any.vue
-async onUpdate(news) {
-    const { data: res } = await this.$http({
-    url: `/api/news/${news.id}`,
-    method: "put",
-    data: {
-        title: "正则全攻略使用手册",
-        img: "https://segmentfault.com/img/bVbnRSc?w=650&h=255",
-        publishedAt: "2019-01-28",
-        author: "Croc_wend",
-        url: "https://segmentfault.com/a/1190000018042746"
-    }
-    });
-    console.log("update", res);
-}
-
-

关联 Mock 数据

-

上一节中的增删改查操作虽然在 Ajax 请求时被拦截,但是彼此间并无关联,数据并无变更。此时可以将 4 者关联(该节与 Mock.js 无关,纯粹的 JavaScript 操作)。

-
import Mock from "mockjs";
-
-let ret = Mock.mock({
-  code: "OK",
-  "results|5-10": [
-    {
-      id: "@guid", // 生成 UUID
-      title: "@ctitle(3,5)", // 生成 3-5 字的中文标题
-      img: "@dataImage('200x100')", // 生成 200px*100px 的图片 Base64
-      publishedAt: "@date('yyyy-MM-dd')", // 生成 yyyy-MM-dd 格式的日期
-      author: "@name(true)", // 生成英文姓名
-      url: "@url('http')" // 生成 http 协议的 URL
-    }
-  ]
-});
-
-Mock.mock("/api/news", "get", () => {
-  return ret;
-});
-
-Mock.mock("/api/news", "post", opts => {
-  let result = JSON.parse(opts.body);
-  result.id = Mock.Random.guid();
-  ret.results.push(result);
-  return ret;
-});
-
-Mock.mock(/\/api\/news/, "delete", opts => {
-  const pathArray = /\/api\/news\/([\w\\-]+)/.exec(opts.url);
-  const id = pathArray[1];
-  ret.results = ret.results.filter(val => {
-    return val.id != id;
-  });
-  return ret;
-});
-
-Mock.mock(/\/api\/news/, "put", opts => {
-  const pathArray = /\/api\/news\/([\w\\-]+)/.exec(opts.url);
-  const id = pathArray[1];
-  let result = JSON.parse(opts.body);
-  ret.results = ret.results.map(val => {
-    return val.id === id ? result : val;
-  });
-  return ret;
-});
-
-

动态开启

-

项目中可以使用 npm script 编辑启动命令,通过环境变量来控制是否加载 Mock 服务。

-

Vue CLI 为例,在 development 模式下,增加 Mock 服务的启动命令:

-

新增 serve:mock

-
// in package.json
-{
-    "scripts": {
-        "serve": "vue-cli-service serve",
-        "serve:mock": "vue-cli-service serve --mode mock",
-        "build": "vue-cli-service build",
-        "lint": "vue-cli-service lint"
-    } 
-},
-
-

新建 .env.mock 文件

-
NODE_ENV=development
-VUE_APP_MOCK=true
-
-

判断环境变量是否启用 Mock 服务

-
// in src/mock/index.js
-import Mock from "mockjs";
-
-if (
-  process.env.NODE_ENV === "development" &&
-  process.env.VUE_APP_MOCK === "true"
-) {
-    // your mock code
-}
-
-

此时当你运行 $ npm run serve,Mock 服务未启用,请求 API 服务;当你运行 $ npm run serve:mock,Mock 服务启用,Ajax 请求被拦截。

-

结语

-

示例代码,欢迎一起玩耍。

- -
-
-
- - - - - - - - - - -
-
- - diff --git a/post/vue-router-history/index.html b/post/vue-router-history/index.html deleted file mode 100644 index 69d0923..0000000 --- a/post/vue-router-history/index.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - - -在 Vue Router 中使用 HTML5 History 模式 | HUANG RESYIN - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
-

- 在 Vue Router 中使用 HTML5 History 模式 -

- -
-

Vue Router 目前支持三种模式:

-
    -
  • hash 使用 URL hash 实现页面跳转。支持所有浏览器,但会在 URL 中携带 # 号。Vue Router 的默认模式。
  • -
  • history 使用 HTML5 History API 实现页面跳转。支持实现 history.pushState 的浏览器,需服务器配合。
  • -
  • abstract 支持 Node.js 服务端环境。
  • -
-

使用 history 模式时需要对前端代码及服务器进行相关配置,并且根据部署位置(在域名的根路径下或子路径下),配置也略有差异。

-

以标准的 Vue CLI 项目与 Nignx 服务器为例:

-

部署在 http://host:port/

-

前端配置

-
// router.js
-const router = new VueRouter({
-  mode: "history"
-  routes
-});
-
-
// vue.config.js
-module.exports = {
-  publicPath: "/"
-};
-
-

服务器配置

-
# nginx.conf
-location / {
-    # root <your_web_files_path>;
-    index  index.html;
-    try_files $uri $uri/ /index.html;
-}
-
-

部署在 http://host:port/context/

-

前端配置

-
// router.js
-const router = new VueRouter({
-  mode: "history",
-  base: process.env.BASE_URL,
-  routes
-});
-
-
// vue.config.js
-module.exports = {
-  publicPath: process.env.NODE_ENV === "production" ? "/context/" : "/",
-};
-
-

其中 process.env.BASE_URL 等价于 publicPath,即 context 的值。

-

服务器配置

-
# nginx.conf
-location /context/ {
-    # alias <your_web_files_path>;
-    index index.html;
-    try_files $uri $uri/ /context/index.html;
-}
-
-

注意,PWA 的输出文件 index.html,与 Nginx config 中的 index.html 相对应,如输出文件名自定义,Nginx config 也需要与其保持一致。

- -
-
-
- - - - - - - - - - - - -
-
- - diff --git a/scaffolds/draft.md b/scaffolds/draft.md new file mode 100644 index 0000000..498e95b --- /dev/null +++ b/scaffolds/draft.md @@ -0,0 +1,4 @@ +--- +title: {{ title }} +tags: +--- diff --git a/scaffolds/page.md b/scaffolds/page.md new file mode 100644 index 0000000..f01ba3c --- /dev/null +++ b/scaffolds/page.md @@ -0,0 +1,4 @@ +--- +title: {{ title }} +date: {{ date }} +--- diff --git a/scaffolds/post.md b/scaffolds/post.md new file mode 100644 index 0000000..1f9b9a4 --- /dev/null +++ b/scaffolds/post.md @@ -0,0 +1,5 @@ +--- +title: {{ title }} +date: {{ date }} +tags: +--- diff --git a/source/_posts/_/simple-git-instructions.md b/source/_posts/_/simple-git-instructions.md new file mode 100644 index 0000000..6cd67b0 --- /dev/null +++ b/source/_posts/_/simple-git-instructions.md @@ -0,0 +1,227 @@ +--- +title: 简易的 Git 使用 +tags: [Git,GitHub] +categories: "Git" +comments: true +--- + +# 简介 + +Git 是一款免费开源的分布式版本控制系统。区别于 Subversion 等版本控制系统将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异,而是对当时的全部文件制作一个快照并保存这个快照的索引。 + + + +## 文件处于 Git 中的状态 + +- 已提交(committed),数据已经安全的保存在本地数据库中 +- 已修改(modified),修改了文件,但还没保存到数据库中 +- 已暂存(staged),对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中 + +## 基本的 Git 工作流程 + +1. 在工作目录中修改文件 + +2. 暂存文件,将文件的快照放入暂存区域 + +3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录 + +## 安装 + +- [在 Linux 上安装](http://git-scm.com/download/linux) +- [在 Mac 上安装](http://git-scm.com/download/mac) +- [在 Windows 上安装]( http://git-scm.com/download/win) + +## Git 的初始配置 + +Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置: + +1. /etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量 + +2. ~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 可以传递 --global 选项让 Git 读写此文件 + +3. 当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库 + +且每一个级别覆盖上一级别的配置。 + +- 查看你的配置信息: `$ git config --list ` + +- 用户配置 + - 配置用户名:`$ git config --global user.name "Your Name"` + - 配置用户邮箱:`$ git config --global user.email yourname@example.com` + +- 文本编辑器配置 + - 配置你的编辑器为 EMACS:`$ git config --global core.editor emacs` + +- 其他配置请参考以上 + +## 获取帮助 + +可以查看更加详细的 Git 使用方式。 + +- 获取 Git 命令列表: `$ git` +- 获取 Git 命令帮助: `$ git help ` ,如 `$ git help config` + +# Git 本地仓库操作 + +## 初始化 Git 仓库 + +使当前目录初始化为一个 Git 仓库: `$ git init` 。 + +## 状态文件查看 + +查看目录下文件在 Git 中的[状态](#jump1): `$ git status` 。 + +## 添加文件到暂存区 + +Git 会提示 Untracked files 来展示未暂存的文件,添加文件到暂存区: `$ git add ` ,如添加 README.md 文件: `$ git add README.md` 。 + +添加所有未暂存的文件到暂存区: `$ git add .` 。 + +## 还原修改且未暂存的文件 + +修改暂存区的文件后,文件状态会回到未暂存。可以使用: `$ git checkout ` ,文件会还原到之前在暂存区时的文件。 + +该命令十分危险,你所有的更改将会消失并且不可挽回。 + +## 查看修改且未暂存文件的详细差异信息 + +虽然 `$ git status` 可以展示文件的状态,但是不能显示具体的改动。 + +使用 `$ git diff` 可以查看曾在暂存区修改后未暂存文件在修改前后的详细差异信息。 + +## 查看已暂存但未提交的详细差异信息 + +文件在一次提交后,经过修改再次存到暂存区,使用 `$ git diff --staged` 可以查看上次提交与当前暂存文件的详细差异信息。 + +## 将已暂存的文件移除暂存区 + +`$ git rm --cached ` , 如: `$ git rm --cached README.md` 。 + +## 提交暂存区文件到本地仓库 + +`$ git commit -m 'message'` 。 message为提交时必填的附加信息。 + +## 更改提交 + +在提交后,发现提交了不需要提交的文件,或者遗漏了要提交的文件,可以在调整暂存区文件后: `$ git commit --amend` ,该命令会使你的本次提交覆盖上次提交。 + +## 查看提交记录 + +查看 commit 记录和附加信息: `$ git log` 。 + +## 查看分支 + +`$ git init` 后, Git 会创建默认分支 master ,但是一般我们并不在其上进行开发,而是新建分支来开发,开发完成后将分支合并到 master 下。 + +用 `$ git branch` 可以查看当前的分支状态。 + +## 新建分支 + +`$ git branch ` ,如创建一个名为 dev 的分支: `$ git branch dev` 。 + +## 删除分支 + +`git branch -d ` ,如删除一个名为 dev 的分支: `git branch -d dev` 。 + +如果要删除的分支还没有合并到 master 下,使用以上命令删除会失败,但是可以强制删除: +`git branch -D ` 。 + +## 切换分支 + +`$ git checkout ` ,如从 master 切换到 dev : `$ git checkout dev` 。 + +也可以在新建分支的时候就切换到该分支,如: `$ git checkout -b dev` 。 + +## 合并分支 + +当在开发分支开发完毕后需要合并到主分支时,首先切换到主分支,然后: `$ git merge ` 将开发分支合并到主分支。 + +`$ git rebase ` 也可以合并分支,这种方式会以时间排序。 + +## 标签 + +标签的意义在于可以精准定位不同时段的代码。 + +建立标签: `$ git tag ` ,例如设置当前代码为 V1 版本: `$ git tag V1` ;经过一段时间的开发后可以设置代码为 V2 版本: `$ git tag V2` 。 + +查看标签:`$ git tag` 。 + +切换标签:可以通过 `$ git checkout ` 来切换不同时段的代码,如在开发过程中想回到 V1 时段的代码:`$ git checkout V1` 。 + +# Git 远程仓库操作 + +## 本地仓库与远程仓库的关联 + +### 注册GitHub + +在[GitHub](https://github.com/)注册你的账户,需要提供用户名、密码、邮箱。 + +### 生成SSH KEY + +`$ ssh` 确认你是否安装了SSH,如果出现 `usage:ssh...` 则证明你已安装,若未安装请砸电脑。 + +然后用 `$ ssh-keygen -t rsa` (回车回车回车...)在 `~/.ssh`(Linux/Mac)或 `C:\Users\<...>/.ssh` (Windows 7)目录下生成私钥 `id_rsa` 与公钥 `id_rsa.pub`。打开 `id_rsa.pub` 并复制公钥内容。 + +### 绑定SSH + +在GitHub中依次:右上角头像旁 ▼-->Settings-->Personal settings-->SSH and GPG keys-->New SSH key。 + +将你复制的公钥内容粘贴在出现的Key文本框中,Title文本框中请随意填写。 + +### 测试 + +`$ ssh -T git@github.com` ,若让你yes请输入yes,不要输入y。然后你会看见 `Hi Gril! You've successfully authenticated...` 。 + +## 远程操作 + +### 在本地克隆远程仓库 + +`$ git clone ` 。把一个存在的远程仓库克隆到本地。SSH 可以在 GitHub 的仓库内 Clone or download 下找到。克隆的仓库已经是一个 Git 仓库,不需要初始化操作。 + +### 添加本地仓库为远程仓库 + +首先,需要在 GitHub 上建立一个新的仓库,这个新的仓库会提供一个 SSH。 + +`$ git remote add ` ,例如:`$ git remote add origin git@github.com:yourname/test.git` 。 + +### 查看远程仓库 + +`$ git remote` 。一个本地仓库可以对应多个远程仓库,该命令会返回该本地仓库关联的所有远程仓库。 + +### 提交到远程仓库 + +`$ git push ` ,例如:`$ git push origin master` 。 `origin` 为默认的远程仓库名,`master` 是默认分支 master 。如果提交到其他分支,可换成其他分支名;如果提交到其他远程仓库,可换成其他远程仓库名。 + +### 同步远程仓库 + +`$ git pull ` ,例如:`$ git pull origin master` 。将远程仓库同步到本地,一般情况下都是先 pull 再 push ,避免冲突。 + +注意: `$ git pull` 与 `$ git fetch` 都会将远程仓库同步到本地。区别在于 `$ git pull` 会将远程仓库与本地仓库做合并操作,而 `$ git fetch` 只会将仓库同步到本地不做任何操作。相对来说, `$ git fetch` 会更加安全些。 + + +# 参考 & 引用 + + - [Git Book](https://git-scm.com/doc) + - [stormzhang](http://stormzhang.com/) 的 [从0开始学习 GitHub](http://stormzhang.com/github/2016/06/19/learn-github-from-zero-summary/) + - [廖雪峰](http://www.liaoxuefeng.com/) 的 [Git教程](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000) + + + + + + + + + + + + + + + + + + + + + diff --git a/source/_posts/_/simple-http-instructions-1.md b/source/_posts/_/simple-http-instructions-1.md new file mode 100644 index 0000000..f6955f5 --- /dev/null +++ b/source/_posts/_/simple-http-instructions-1.md @@ -0,0 +1,208 @@ +--- +title: 简易的 HTTP 基础(一) +tags: [HTTP] +categories: "HTTP" +comments: true +--- + +# HTTP + +*HyperText Transfer Protocol* 超文本转移协议。 + +目前主流版本为 **HTTP/1.1** ,标准为[RFC](http://www.ietf.org/rfc/rfc2616.txt)。 + + + +# TCP/IP 协议族 + +是互联网相关各类协议族的总称,通常使用的网络均是在 TCP/IP 协议族上运作的。 + +HTTP 为其一个子集。 + +### TCP/IP 协议族的分层 + +- 应用层 +- 传输层 +- 网络层 +- 数据链路层 + +**应用层** + +决定了向用户提供应用服务时通信的活动。 + +- FTP *File Transfer Protocol* +- DNS *Domain Name System* +- HTTP + +**传输层** + +对处于网络连接的设备提供数据传输。 + +- TCP *Transmission Control Protocol* +- UDP *User Data Protocol* + +**网络层** + +网络互连层,用来处理网络上流动的数据包(网络传输的最小单位)。规定了如何选择路径将数据包传给目标设备。 + +**链路层** + +网络接口层,用来处理连接网络的硬件部分。包括操作系统、硬件驱动、网卡等。 + +### TCP/IP 协议族的通信传输流 + +通过分层的顺序在设备间通信。 + +1. 客户端在应用层以 HTTP 协议发送一个 HTTP 请求 +2. 为传输方便,传输层以 TCP 协议将从应用层接收到的 HTTP 请求报文进行处理:将报文标记序号以及端口号 +3. 网络层以 IP 协议将应用层处理后的数据做进一步处理:添加作为通信目的地的 MAC 地址 +4. 服务器在链路层接收网络层数据,并按序向上传递到服务器的应用层,完成一次由客户端到服务器的 HTTP 请求 + +数据的封装:发送端在层与层间会增加属于该层的首部信息,接收端层与层间会消去属于该层的首部信息。于是最后得到的是最初的 HTTP 数据。 + +### TCP/IP 协议族的 IP + +*Internet Protocol* 网际协议,处于网络层,用于指定传输目的地的地址。主要包括: + +- IP 地址,指定节点地址(可变) +- MAC *Media Access Control Address* 地址,指定网卡地址(不变) + +ARP *Address Resolution Protocol* 地址解析协议,可以根据 IP 地址反查出 MAC 地址。所以 IP 间通信主要依赖 MAC 。 + +Routing 路由选择,当往某 IP 地址发送数据但 ARP 未解析出 MAC 时,会先将数据发往已知的 MAC 做路由中转。该过程可能会重复多次,直到将数据发送到某 MAC ,该 MAC 即 IP 地址所在的 MAC 。 + + +### TCP/IP 协议族的 TCP + +处于传输层,主要为数据提供可靠的字节流服务,在发送端将报文段分割为数据包进行传输;并在接收端将数据包重组为报文段。 + +为确保数据安全,TCP 采用了 three-way handshaking 3次握手策略。 + +1. 发送端将带有 SYN *synchronize* 标志的数据包发送给接收端 +2. 接收端将带有 SYN/ACK *acknowledgement* 标志的数据包发送给发送端用来确认可以传输 +3. 发送端将带有 ACK 标志的数据包再发给接收端表示握手结束 + +### TCP/IP 协议族的 DNS + +与 HTTP 同处于应用层。提供域名与 IP 地址间的解析服务。 + +域名比起 IP 地址的数字更容易被记住,所以通常情况我们以域名来访问网络。然而计算机更容易处理数字表示的 IP 地址。所以需使用 DNS 将域名解析为 IP 地址;也可以将 IP 地址转为域名。 + +### URI & URL + +- URI *Uniform Resource Identifier* 统一资源标识符,用于表示某一网络资源 +- URL *Uniform Resource Locator* 统一资源定位符,用于表示某一网络地点,通常所说的网址 + +由于地址也可视为资源的一种,所以 URL 为 URI 的子集。 + +URI 的格式: + +`http://user:pass@localhost:port/dir/res?param=value` + +- http: 应用层协议 +- user:pass 认证信息,可省略 +- localhost 服务器地址 +- port 服务器端口号 +- dir 资源所在的路径 +- res 资源文件 +- param 参数,可省略 +- value 参数值,可省略 + +# HTTP 协议 + +HTTP 协议是 stateless 无状态协议:不对请求和响应之间的状态进行保存,不对请求和响应做持久化处理。也就是说当次请求与响应,与之前的请求与响应无关。但有时我们需要状态保存,所以引入了 Cookie 。 + +### Request 请求 + +HTTP 协议规定,请求从客户端出发。客户端会发送类似这样的 HTTP 请求报文: + +``` +method URI HTTP/1.1 +Host: +Connection: +Accept: +User-Agent: +Accept-Encoding: +Accept-Language: +Cookie: +... + +... +``` + +- 第一行描述了请求方法,访问的资源,HTTP 协议版本 +- 第二行到第九行,描述了可选的请求首部信息,即 Request Header +- 第十行为空行,用于区分 Header 与 Body +- 第十一行开始描述请求的主体,即 Request Body + +#### Request Method 请求方法 + +###### GET + +用于获取资源。 + +###### POST + +用于提交数据,同时也可以获取资源。 + +GET也可以用于提交数据,但是由于是将请求信息拼接到 URI 中,使请求信息可见,所以存在安全隐患,并不建议以 GET 提交数据。 + +###### PUT + +用于传输文件。将文件内容置于请求主体中传输。但是 PUT 方法不能身份认证,所以人人可以传输文件存在安全隐患,所以不建议使用。 + +###### HEAD + +用于返回 Response Header 响应首部。与 GET 方法区分:GET 主要是获取资源,即 Response Body 主体部分。 + +###### DELETE + +用于删除文件。与 PUT 方法相反。 + +###### OPTIONS + +用于查询 URI 所支持的 Request Method 请求方法。 + +###### TRACE + +用于路径追踪。不常用。 + +###### CONNECT + +用于在与代理服务器通信时建立隧道,主要使用 SSL *Secure Sockets Layer* 安全套阶层与 TLS *Transport Layer Security* 传输层安全协议把通信内容加密后传输。 + +###### LINK&UNLINK + +HTTP/1.0 中的方法,HTTP/1.1 已弃用。 + +### Response 响应 + +``` +HTTP/1.1 status-code status-phrase +Server +Date: +Content-Length: + + +... +... +``` + +- 第一行描述了 HTTP 协议版本,状态码,状态短语 +- 第二行到第四行,描述了响应首部信息,即 Response Header +- 第五行为空行,用于区分 Header 与 Body +- 第六行开始描述响应的主体,即 Response Body + +### Cookie 状态管理 + +通过在请求与响应报文中写入 Cookie 信息来控制客户端的状态。 + +1. 客户端第一次请求服务器时,服务器生成一个 Cookie 并在响应时把该 Cookie 设置在 Response Header 中的 Set-Cookie 内 +2. 客户端收到服务器的响应,保存 Response Header 中 Set-Cookie 的 Cookie +3. 客户端再次请求服务器时会自动在请求 Request Header 中的 Cookie 内添加 Cookie ,服务器得到这个 Cookie ,识别出这是之前传给某客户端的 Cookie ,于是找到了该客户端,获取其之前请求与响应的状态 + +# 参考 & 引用 + +- 图解 HTTP +- HTTP 权威指南 + diff --git a/source/_posts/_/syncing-a-fork.md b/source/_posts/_/syncing-a-fork.md new file mode 100644 index 0000000..7f5f350 --- /dev/null +++ b/source/_posts/_/syncing-a-fork.md @@ -0,0 +1,33 @@ +--- +title: Syncing a fork +tags: [GIT] +categories: "GIT" +comments: true +--- + +当 fork 的项目更新时,可以通过下面的方式将作者的分支同步到自己的分支: + +- `git clone https://github.com/your_name/project_name.git` + +- `git remote -v` + + + +- `git remote add project_name https://github.com/author_name/project_name.git` + +- `git remote -v` + +- `git fetch project_name` + +- `git branch -av` + +- `git merge project_name/master` + +- `git push origin master` + + +或者: +[Syncing a fork][1] + + + [1]: https://help.github.com/articles/syncing-a-fork/ \ No newline at end of file diff --git a/source/_posts/hello-world.md b/source/_posts/hello-world.md new file mode 100644 index 0000000..b0d4b14 --- /dev/null +++ b/source/_posts/hello-world.md @@ -0,0 +1,44 @@ +--- +title: Hello World +tags: [Begin,End] +categories: "OTHER" +comments: true +--- + +Welcome to [Hexo](https://hexo.io/)! This is your very first post. Check [documentation](https://hexo.io/docs/) for more info. If you get any problems when using Hexo, you can find the answer in [troubleshooting](https://hexo.io/docs/troubleshooting.html) or you can ask me on [GitHub](https://github.com/hexojs/hexo/issues). + + + +## Quick Start + +### Create a new post + +``` bash +$ hexo new "My New Post" +``` + +More info: [Writing](https://hexo.io/docs/writing.html) + +### Run server + +``` bash +$ hexo server +``` + +More info: [Server](https://hexo.io/docs/server.html) + +### Generate static files + +``` bash +$ hexo generate +``` + +More info: [Generating](https://hexo.io/docs/generating.html) + +### Deploy to remote sites + +``` bash +$ hexo deploy +``` + +More info: [Deployment](https://hexo.io/docs/deployment.html) diff --git a/styles/main.css b/styles/main.css deleted file mode 100644 index 0f9d329..0000000 --- a/styles/main.css +++ /dev/null @@ -1,1814 +0,0 @@ -/*! modern-normalize | MIT License | https://github.com/sindresorhus/modern-normalize */ -/* Document - ========================================================================== */ -/** - * Use a better box model (opinionated). - */ -html { - box-sizing: border-box; -} -*, -*::before, -*::after { - box-sizing: inherit; -} -/** - * Use a more readable tab size (opinionated). - */ -:root { - -moz-tab-size: 4; - tab-size: 4; -} -/** - * 1. Correct the line height in all browsers. - * 2. Prevent adjustments of font size after orientation changes in iOS. - */ -html { - line-height: 1.15; - /* 1 */ - -webkit-text-size-adjust: 100%; - /* 2 */ -} -/* Sections - ========================================================================== */ -/** - * Remove the margin in all browsers. - */ -body { - margin: 0; -} -/** - * Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3) - */ -body { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; -} -/* Grouping content - ========================================================================== */ -/** - * Add the correct height in Firefox. - */ -hr { - height: 0; -} -/* Text-level semantics - ========================================================================== */ -/** - * Add the correct text decoration in Chrome, Edge, and Safari. - */ -abbr[title] { - text-decoration: underline dotted; -} -/** - * Add the correct font weight in Chrome, Edge, and Safari. - */ -b, -strong { - font-weight: bolder; -} -/** - * 1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3) - * 2. Correct the odd `em` font sizing in all browsers. - */ -code, -kbd, -samp, -pre { - font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, Courier, monospace; - /* 1 */ - font-size: 1em; - /* 2 */ -} -/** - * Add the correct font size in all browsers. - */ -small { - font-size: 80%; -} -/** - * Prevent `sub` and `sup` elements from affecting the line height in all browsers. - */ -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} -sub { - bottom: -0.25em; -} -sup { - top: -0.5em; -} -/* Forms - ========================================================================== */ -/** - * 1. Change the font styles in all browsers. - * 2. Remove the margin in Firefox and Safari. - */ -button, -input, -optgroup, -select, -textarea { - font-family: inherit; - /* 1 */ - font-size: 100%; - /* 1 */ - line-height: 1.15; - /* 1 */ - margin: 0; - /* 2 */ -} -/** - * Remove the inheritance of text transform in Edge and Firefox. - * 1. Remove the inheritance of text transform in Firefox. - */ -button, -select { - /* 1 */ - text-transform: none; -} -/** - * Correct the inability to style clickable types in iOS and Safari. - */ -button, -[type='button'], -[type='reset'], -[type='submit'] { - -webkit-appearance: button; -} -/** - * Remove the inner border and padding in Firefox. - */ -button::-moz-focus-inner, -[type='button']::-moz-focus-inner, -[type='reset']::-moz-focus-inner, -[type='submit']::-moz-focus-inner { - border-style: none; - padding: 0; -} -/** - * Restore the focus styles unset by the previous rule. - */ -button:-moz-focusring, -[type='button']:-moz-focusring, -[type='reset']:-moz-focusring, -[type='submit']:-moz-focusring { - outline: 1px dotted ButtonText; -} -/** - * Correct the padding in Firefox. - */ -fieldset { - padding: 0.35em 0.75em 0.625em; -} -/** - * Remove the padding so developers are not caught out when they zero out `fieldset` elements in all browsers. - */ -legend { - padding: 0; -} -/** - * Add the correct vertical alignment in Chrome and Firefox. - */ -progress { - vertical-align: baseline; -} -/** - * Correct the cursor style of increment and decrement buttons in Safari. - */ -[type='number']::-webkit-inner-spin-button, -[type='number']::-webkit-outer-spin-button { - height: auto; -} -/** - * 1. Correct the odd appearance in Chrome and Safari. - * 2. Correct the outline style in Safari. - */ -[type='search'] { - -webkit-appearance: textfield; - /* 1 */ - outline-offset: -2px; - /* 2 */ -} -/** - * Remove the inner padding in Chrome and Safari on macOS. - */ -[type='search']::-webkit-search-decoration { - -webkit-appearance: none; -} -/** - * 1. Correct the inability to style clickable types in iOS and Safari. - * 2. Change font properties to `inherit` in Safari. - */ -::-webkit-file-upload-button { - -webkit-appearance: button; - /* 1 */ - font: inherit; - /* 2 */ -} -/* Interactive - ========================================================================== */ -/* - * Add the correct display in Chrome and Safari. - */ -summary { - display: list-item; -} -*, -*:before, -*:after { - margin: 0; - padding: 0; -} -html, -body, -div, -span, -applet, -object, -iframe, -h1, -h2, -h3, -h4, -h5, -h6, -p, -blockquote, -pre, -a, -abbr, -acronym, -address, -big, -cite, -code, -del, -dfn, -em, -img, -ins, -kbd, -q, -s, -samp, -small, -strike, -strong, -sub, -sup, -tt, -var, -b, -u, -i, -center, -dl, -dt, -dd, -ol, -ul, -li, -fieldset, -form, -label, -legend, -table, -caption, -tbody, -tfoot, -thead, -tr, -th, -td, -article, -aside, -canvas, -details, -embed, -figure, -figcaption, -footer, -header, -hgroup, -menu, -nav, -output, -ruby, -section, -summary, -time, -mark, -audio, -video { - border: 0; - vertical-align: baseline; -} -html { - font-size: 58%; -} -body { - font-family: "PingFang SC", -apple-system, BlinkMacSystemFont, opensans, Optima, 'Microsoft Yahei', sans-serif; - font-size: 16px; - letter-spacing: 1.0382px; -} -button { - outline: none !important; -} -a { - text-decoration: none !important; - transition: all 0.3s; -} -body, -div, -a, -p, -ul, -li, -ol, -h1, -h2, -h3, -h4, -h5, -h6, -table, -tr, -td { - box-sizing: border-box; - margin: 0; - padding: 0; -} -ol li { - list-style: decimal; - font-size: 16px; -} -ul li { - list-style: disc; - font-size: 16px; -} -.main { - max-width: 100%; - min-height: 100vh; - margin: 0 auto; -} -.main .main-content { - flex: 1; - display: flex; - min-height: 100vh; - flex-direction: column; -} -.gt-post-content { - word-break: break-all; - word-wrap: break-word; -} -.gt-post-content a { - transition: all 0.3s; -} -.gt-post-content img { - display: block; - max-width: 100%; - border-radius: 2px; - margin: 18px auto; -} -.gt-post-content p { - line-height: 1.725; - margin-bottom: 18px; - font-size: 16px; - letter-spacing: 1.0382px; -} -.gt-post-content pre { - margin-bottom: 18px; -} -.gt-post-content blockquote { - padding: 16px; - border-left: 4px; - border-style: solid; - margin-bottom: 16px; -} -.gt-post-content blockquote p { - margin-bottom: 0; -} -.gt-post-content table { - border-collapse: collapse; - margin: 1rem 0; - display: block; - overflow-x: auto; -} -.gt-post-content tr { - border-top: 1px solid #dfe2e5; -} -.gt-post-content td, -.gt-post-content th { - border: 1px solid #dfe2e5; - padding: 0.6em 1em; -} -.gt-post-content ul, -.gt-post-content ol { - padding-left: 20px; - line-height: 1.725; - margin-bottom: 16px; -} -.gt-post-content h1, -.gt-post-content h2, -.gt-post-content h3, -.gt-post-content h4, -.gt-post-content h5, -.gt-post-content h6 { - margin-bottom: 18px; - padding-top: 14px; - font-weight: bold; -} -.gt-post-content h1 { - font-size: 28px; -} -.gt-post-content h2 { - font-size: 24px; -} -.gt-post-content h3 { - font-size: 20px; -} -.gt-post-content h4 { - font-size: 18px; -} -.gt-post-content h5 { - font-size: 16px; -} -.gt-post-content h6 { - font-size: 14px; -} -.gt-post-content p code, -.gt-post-content li code { - padding: 0 6px; - margin: 0 3px; - font-size: 13px; - border-radius: 4px; - display: inline-block; -} -.gt-post-content pre { - margin-bottom: 18px; -} -.gt-post-content pre code { - font-size: 13px; - font-family: Menlo, Monaco, 'Source Code Pro', Consolas, 'Courier New', monospace; - padding: 1em; - border-radius: 5px; - line-height: 1.375; - width: 100%; - overflow: scroll; - display: block; -} -.gt-fr { - display: flex; - flex-direction: row; - align-items: center; -} -.gt-fc { - display: flex; - flex-direction: column; -} -.navbar { - padding: 38px 96px !important; -} -.navbar .navbar-brand { - display: flex; - flex-direction: row; - align-items: center; -} -.navbar .navbar-brand .user-avatar { - width: 40px; - height: 40px; - border-radius: 50%; -} -.navbar .navbar-brand .site-name { - font-size: 28px !important; - font-weight: bold; - margin-left: 16px; -} -.navbar .navbar-nav { - width: 100%; - justify-content: flex-end; -} -.navbar .navbar-nav .nav-item { - padding: 16px 32px; -} -.navbar .navbar-nav .nav-item a { - font-size: 15px; - flex-shrink: 0; -} -.navbar .img-more { - width: 22px; - height: 22px; -} -@media (max-width: 992px) { - .navbar { - padding: 30px 30px 0 30px !important; - } - .navbar .navbar-brand .user-avatar { - width: 31px; - height: 31px; - border-radius: 50%; - } - .navbar .navbar-brand .site-name { - font-size: 21px !important; - font-weight: bold; - } - .navbar .nav-item { - padding: 16px 32px; - } - .navbar .nav-item:first-child { - margin-top: 35px; - } -} -.post-list-container { - display: flex; - flex-direction: column; - align-items: center; -} -.post-list-container .post-inner { - min-width: 1000px; - max-width: 1000px; -} -.post-list-container .post-inner .post { - margin: 30px; - border-radius: 4px; - padding: 28px; - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - transition: all 0.3s; -} -.post-list-container .post-inner .post .post-left { - width: 100%; - display: flex; - flex-direction: column; -} -.post-list-container .post-inner .post .post-left .sticky-top-flag { - color: white; - padding: 3px 10px; - font-size: 12px; - border-radius: 3px; - margin-right: 10px; - vertical-align: middle; -} -.post-list-container .post-inner .post .post-left .post-title { - font-size: 22px; - font-weight: normal; - vertical-align: middle; -} -.post-list-container .post-inner .post .post-left .post-abstract { - width: 100%; - margin-top: 20px; - line-height: 1.5; -} -.post-list-container .post-inner .post .post-left .post-abstract * { - font-size: 13px; - margin-bottom: 0; -} -.post-list-container .post-inner .post .post-left .post-info { - margin-top: 20px; -} -.post-list-container .post-inner .post .post-left .post-info .post-time { - font-size: 12px; -} -.post-list-container .post-inner .post .post-left .post-info .post-tag { - font-size: 12px; - margin-left: 10px; -} -.post-list-container .post-inner .post:hover { - transform: scale(1.012); -} -.post-list-container .post-inner .post .post-feature-image { - width: 200px; - height: 100px; - flex-basis: 200px; - flex-shrink: 0; - margin-left: 20px; - border-radius: 2px; - overflow: hidden; - background-size: cover; - background-position: center; -} -.pagination-container { - padding: 24px 32px 32px; - align-self: center; -} -.pagination-container .prev-page { - margin: 0 16px; - font-size: 14px; -} -.pagination-container .next-page { - margin: 0 16px; - font-size: 14px; -} -@media (max-width: 992px) { - .post-list-container .post-inner { - min-width: 0; - width: 100%; - margin-top: 16px; - } - .post-list-container .post-inner .post { - margin: 12px 16px 12px 16px; - padding: 18px 22px 18px 22px; - } - .post-list-container .post-inner .post .post-left .post-title { - font-size: 17px; - font-weight: bold; - } - .post-list-container .post-inner .post .post-left .post-abstract { - margin-top: 10px; - } - .post-list-container .post-inner .post .post-left .post-info { - margin-top: 10px; - } - .post-list-container .post-inner .post .post-left .post-info .post-time { - font-size: 12px; - } - .post-list-container .post-inner .post .post-left .post-info .post-tag { - font-size: 12px; - margin-left: 10px; - } - .post-list-container .post-inner .post .post-feature-image { - width: 0; - height: 0; - flex-basis: 0; - flex-shrink: 0; - margin-left: 0; - border-radius: 2px; - overflow: hidden; - background-size: cover; - background-position: center; - } -} -.post-container { - display: flex; - flex-direction: column; - align-items: center; - min-height: 100%; -} -.post-container .post-detail { - flex: 1; - padding: 24px 32px; - width: 1000px; - border-radius: 4px; -} -.post-container .post-detail .post-title { - font-size: 26px; - text-align: center; - padding: 24px; - font-weight: normal; -} -.post-container .post-detail .post-info { - text-align: center; - font-size: 12px; - padding-bottom: 24px; -} -.post-container .post-detail .post-info .post-tag { - padding: 8px 16px; -} -.post-container .post-detail .post-content { - margin-top: 30px; -} -.next-post { - text-align: center; - padding: 24px 32px; -} -.next-post .next { - margin-bottom: 24px; - font-size: 14px; -} -.next-post .post-title { - font-size: 20px; - font-weight: bold; -} -#gitalk-container, -#disqus_thread { - padding: 24px 32px; - width: 80%; - max-width: 1000px; -} -@media (max-width: 992px) { - .post-container .post-detail { - width: 100%; - margin-top: 20px; - } - .post-container .post-detail .post-title { - font-size: 20px; - font-weight: bold; - } - #gitalk-container, - #disqus_thread { - padding: 24px 32px; - width: 100%; - } -} -.archives-container { - padding: 32px; - display: flex; - flex-direction: column; -} -.archives-container .year { - font-size: 34px; - font-weight: bold; - margin-top: 16px; - margin-bottom: 16px; - align-self: start; -} -.archives-container .post { - padding: 16px 0; -} -.archives-container .post .post-title { - font-size: 16px; -} -.archives-container .post .post-title small { - font-size: 80%; -} -@media (max-width: 600px) { - .archives-container { - padding: 16px; - } -} -.tags-container { - padding: 32px 32px; - flex: 1; - display: flex; - flex-direction: row; - justify-content: center; - align-items: center; -} -.tags-container .tag { - font-size: 15px; - margin-right: 20px; -} -.current-tag-container .title { - text-align: center; - font-size: 18px; - margin-bottom: 24px; -} -@media (max-width: 992px) { - .current-tag-container .title { - margin-top: 50px; - } -} -.about-page { - padding: 24px 32px; -} -.site-footer { - font-size: 12px; - text-align: center; - padding: 24px; -} -.site-footer .slogan { - padding-bottom: 16px; -} -.site-footer .social-container { - padding-bottom: 16px; -} -.site-footer .social-container i { - padding-left: 10px; - padding-right: 10px; - font-size: 20px; -} -/* - -Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull - -*/ -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #002b36; - color: #839496; -} -.hljs-comment, -.hljs-quote { - color: #586e75; -} -/* Solarized Green */ -.hljs-keyword, -.hljs-selector-tag, -.hljs-addition { - color: #859900; -} -/* Solarized Cyan */ -.hljs-number, -.hljs-string, -.hljs-meta .hljs-meta-string, -.hljs-literal, -.hljs-doctag, -.hljs-regexp { - color: #2aa198; -} -/* Solarized Blue */ -.hljs-title, -.hljs-section, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #268bd2; -} -/* Solarized Yellow */ -.hljs-attribute, -.hljs-attr, -.hljs-variable, -.hljs-template-variable, -.hljs-class .hljs-title, -.hljs-type { - color: #b58900; -} -/* Solarized Orange */ -.hljs-symbol, -.hljs-bullet, -.hljs-subst, -.hljs-meta, -.hljs-meta .hljs-keyword, -.hljs-selector-attr, -.hljs-selector-pseudo, -.hljs-link { - color: #cb4b16; -} -/* Solarized Red */ -.hljs-built_in, -.hljs-deletion { - color: #dc322f; -} -.hljs-formula { - background: #073642; -} -.hljs-emphasis { - font-style: italic; -} -.hljs-strong { - font-weight: bold; -} -@font-face { - font-family: KaTeX_AMS; - src: url(fonts/KaTeX_AMS-Regular.eot); - src: url(fonts/KaTeX_AMS-Regular.eot#iefix) format('embedded-opentype'), url(fonts/KaTeX_AMS-Regular.woff2) format('woff2'), url(fonts/KaTeX_AMS-Regular.woff) format('woff'), url(fonts/KaTeX_AMS-Regular.ttf) format('ttf'); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: KaTeX_Caligraphic; - src: url(fonts/KaTeX_Caligraphic-Bold.eot); - src: url(fonts/KaTeX_Caligraphic-Bold.eot#iefix) format('embedded-opentype'), url(fonts/KaTeX_Caligraphic-Bold.woff2) format('woff2'), url(fonts/KaTeX_Caligraphic-Bold.woff) format('woff'), url(fonts/KaTeX_Caligraphic-Bold.ttf) format('ttf'); - font-weight: 700; - font-style: normal; -} -@font-face { - font-family: KaTeX_Caligraphic; - src: url(fonts/KaTeX_Caligraphic-Regular.eot); - src: url(fonts/KaTeX_Caligraphic-Regular.eot#iefix) format('embedded-opentype'), url(fonts/KaTeX_Caligraphic-Regular.woff2) format('woff2'), url(fonts/KaTeX_Caligraphic-Regular.woff) format('woff'), url(fonts/KaTeX_Caligraphic-Regular.ttf) format('ttf'); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: KaTeX_Fraktur; - src: url(fonts/KaTeX_Fraktur-Bold.eot); - src: url(fonts/KaTeX_Fraktur-Bold.eot#iefix) format('embedded-opentype'), url(fonts/KaTeX_Fraktur-Bold.woff2) format('woff2'), url(fonts/KaTeX_Fraktur-Bold.woff) format('woff'), url(fonts/KaTeX_Fraktur-Bold.ttf) format('ttf'); - font-weight: 700; - font-style: normal; -} -@font-face { - font-family: KaTeX_Fraktur; - src: url(fonts/KaTeX_Fraktur-Regular.eot); - src: url(fonts/KaTeX_Fraktur-Regular.eot#iefix) format('embedded-opentype'), url(fonts/KaTeX_Fraktur-Regular.woff2) format('woff2'), url(fonts/KaTeX_Fraktur-Regular.woff) format('woff'), url(fonts/KaTeX_Fraktur-Regular.ttf) format('ttf'); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: KaTeX_Main; - src: url(fonts/KaTeX_Main-Bold.eot); - src: url(fonts/KaTeX_Main-Bold.eot#iefix) format('embedded-opentype'), url(fonts/KaTeX_Main-Bold.woff2) format('woff2'), url(fonts/KaTeX_Main-Bold.woff) format('woff'), url(fonts/KaTeX_Main-Bold.ttf) format('ttf'); - font-weight: 700; - font-style: normal; -} -@font-face { - font-family: KaTeX_Main; - src: url(fonts/KaTeX_Main-Italic.eot); - src: url(fonts/KaTeX_Main-Italic.eot#iefix) format('embedded-opentype'), url(fonts/KaTeX_Main-Italic.woff2) format('woff2'), url(fonts/KaTeX_Main-Italic.woff) format('woff'), url(fonts/KaTeX_Main-Italic.ttf) format('ttf'); - font-weight: 400; - font-style: italic; -} -@font-face { - font-family: KaTeX_Main; - src: url(fonts/KaTeX_Main-Regular.eot); - src: url(fonts/KaTeX_Main-Regular.eot#iefix) format('embedded-opentype'), url(fonts/KaTeX_Main-Regular.woff2) format('woff2'), url(fonts/KaTeX_Main-Regular.woff) format('woff'), url(fonts/KaTeX_Main-Regular.ttf) format('ttf'); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: KaTeX_Math; - src: url(fonts/KaTeX_Math-Italic.eot); - src: url(fonts/KaTeX_Math-Italic.eot#iefix) format('embedded-opentype'), url(fonts/KaTeX_Math-Italic.woff2) format('woff2'), url(fonts/KaTeX_Math-Italic.woff) format('woff'), url(fonts/KaTeX_Math-Italic.ttf) format('ttf'); - font-weight: 400; - font-style: italic; -} -@font-face { - font-family: KaTeX_SansSerif; - src: url(fonts/KaTeX_SansSerif-Regular.eot); - src: url(fonts/KaTeX_SansSerif-Regular.eot#iefix) format('embedded-opentype'), url(fonts/KaTeX_SansSerif-Regular.woff2) format('woff2'), url(fonts/KaTeX_SansSerif-Regular.woff) format('woff'), url(fonts/KaTeX_SansSerif-Regular.ttf) format('ttf'); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: KaTeX_Script; - src: url(fonts/KaTeX_Script-Regular.eot); - src: url(fonts/KaTeX_Script-Regular.eot#iefix) format('embedded-opentype'), url(fonts/KaTeX_Script-Regular.woff2) format('woff2'), url(fonts/KaTeX_Script-Regular.woff) format('woff'), url(fonts/KaTeX_Script-Regular.ttf) format('ttf'); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: KaTeX_Size1; - src: url(fonts/KaTeX_Size1-Regular.eot); - src: url(fonts/KaTeX_Size1-Regular.eot#iefix) format('embedded-opentype'), url(fonts/KaTeX_Size1-Regular.woff2) format('woff2'), url(fonts/KaTeX_Size1-Regular.woff) format('woff'), url(fonts/KaTeX_Size1-Regular.ttf) format('ttf'); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: KaTeX_Size2; - src: url(fonts/KaTeX_Size2-Regular.eot); - src: url(fonts/KaTeX_Size2-Regular.eot#iefix) format('embedded-opentype'), url(fonts/KaTeX_Size2-Regular.woff2) format('woff2'), url(fonts/KaTeX_Size2-Regular.woff) format('woff'), url(fonts/KaTeX_Size2-Regular.ttf) format('ttf'); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: KaTeX_Size3; - src: url(fonts/KaTeX_Size3-Regular.eot); - src: url(fonts/KaTeX_Size3-Regular.eot#iefix) format('embedded-opentype'), url(fonts/KaTeX_Size3-Regular.woff2) format('woff2'), url(fonts/KaTeX_Size3-Regular.woff) format('woff'), url(fonts/KaTeX_Size3-Regular.ttf) format('ttf'); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: KaTeX_Size4; - src: url(fonts/KaTeX_Size4-Regular.eot); - src: url(fonts/KaTeX_Size4-Regular.eot#iefix) format('embedded-opentype'), url(fonts/KaTeX_Size4-Regular.woff2) format('woff2'), url(fonts/KaTeX_Size4-Regular.woff) format('woff'), url(fonts/KaTeX_Size4-Regular.ttf) format('ttf'); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: KaTeX_Typewriter; - src: url(fonts/KaTeX_Typewriter-Regular.eot); - src: url(fonts/KaTeX_Typewriter-Regular.eot#iefix) format('embedded-opentype'), url(fonts/KaTeX_Typewriter-Regular.woff2) format('woff2'), url(fonts/KaTeX_Typewriter-Regular.woff) format('woff'), url(fonts/KaTeX_Typewriter-Regular.ttf) format('ttf'); - font-weight: 400; - font-style: normal; -} -.katex-display { - display: block; - margin: 1em 0; - text-align: center; -} -.katex-display > .katex { - display: inline-block; -} -.katex { - font: 400 1.21em KaTeX_Main; - line-height: 1.2; - white-space: nowrap; - text-indent: 0; -} -.katex .katex-html { - display: inline-block; -} -.katex .katex-mathml { - position: absolute; - clip: rect(1px, 1px, 1px, 1px); - padding: 0; - border: 0; - height: 1px; - width: 1px; - overflow: hidden; -} -.katex .base, -.katex .strut { - display: inline-block; -} -.katex .mathit { - font-family: KaTeX_Math; - font-style: italic; -} -.katex .mathbf { - font-family: KaTeX_Main; - font-weight: 700; -} -.katex .amsrm, -.katex .mathbb { - font-family: KaTeX_AMS; -} -.katex .mathcal { - font-family: KaTeX_Caligraphic; -} -.katex .mathfrak { - font-family: KaTeX_Fraktur; -} -.katex .mathtt { - font-family: KaTeX_Typewriter; -} -.katex .mathscr { - font-family: KaTeX_Script; -} -.katex .mathsf { - font-family: KaTeX_SansSerif; -} -.katex .mainit { - font-family: KaTeX_Main; - font-style: italic; -} -.katex .textstyle > .mord + .mop { - margin-left: 0.16667em; -} -.katex .textstyle > .mord + .mbin { - margin-left: 0.22222em; -} -.katex .textstyle > .mord + .mrel { - margin-left: 0.27778em; -} -.katex .textstyle > .mop + .mop, -.katex .textstyle > .mop + .mord, -.katex .textstyle > .mord + .minner { - margin-left: 0.16667em; -} -.katex .textstyle > .mop + .mrel { - margin-left: 0.27778em; -} -.katex .textstyle > .mop + .minner { - margin-left: 0.16667em; -} -.katex .textstyle > .mbin + .minner, -.katex .textstyle > .mbin + .mop, -.katex .textstyle > .mbin + .mopen, -.katex .textstyle > .mbin + .mord { - margin-left: 0.22222em; -} -.katex .textstyle > .mrel + .minner, -.katex .textstyle > .mrel + .mop, -.katex .textstyle > .mrel + .mopen, -.katex .textstyle > .mrel + .mord { - margin-left: 0.27778em; -} -.katex .textstyle > .mclose + .mop { - margin-left: 0.16667em; -} -.katex .textstyle > .mclose + .mbin { - margin-left: 0.22222em; -} -.katex .textstyle > .mclose + .mrel { - margin-left: 0.27778em; -} -.katex .textstyle > .mclose + .minner, -.katex .textstyle > .minner + .mop, -.katex .textstyle > .minner + .mord, -.katex .textstyle > .mpunct + .mclose, -.katex .textstyle > .mpunct + .minner, -.katex .textstyle > .mpunct + .mop, -.katex .textstyle > .mpunct + .mopen, -.katex .textstyle > .mpunct + .mord, -.katex .textstyle > .mpunct + .mpunct, -.katex .textstyle > .mpunct + .mrel { - margin-left: 0.16667em; -} -.katex .textstyle > .minner + .mbin { - margin-left: 0.22222em; -} -.katex .textstyle > .minner + .mrel { - margin-left: 0.27778em; -} -.katex .mclose + .mop, -.katex .minner + .mop, -.katex .mop + .mop, -.katex .mop + .mord, -.katex .mord + .mop, -.katex .textstyle > .minner + .minner, -.katex .textstyle > .minner + .mopen, -.katex .textstyle > .minner + .mpunct { - margin-left: 0.16667em; -} -.katex .reset-textstyle.textstyle { - font-size: 1em; -} -.katex .reset-textstyle.scriptstyle { - font-size: 0.7em; -} -.katex .reset-textstyle.scriptscriptstyle { - font-size: 0.5em; -} -.katex .reset-scriptstyle.textstyle { - font-size: 1.42857em; -} -.katex .reset-scriptstyle.scriptstyle { - font-size: 1em; -} -.katex .reset-scriptstyle.scriptscriptstyle { - font-size: 0.71429em; -} -.katex .reset-scriptscriptstyle.textstyle { - font-size: 2em; -} -.katex .reset-scriptscriptstyle.scriptstyle { - font-size: 1.4em; -} -.katex .reset-scriptscriptstyle.scriptscriptstyle { - font-size: 1em; -} -.katex .style-wrap { - position: relative; -} -.katex .vlist { - display: inline-block; -} -.katex .vlist > span { - display: block; - height: 0; - position: relative; -} -.katex .vlist > span > span { - display: inline-block; -} -.katex .vlist .baseline-fix { - display: inline-table; - table-layout: fixed; -} -.katex .msupsub { - text-align: left; -} -.katex .mfrac > span > span { - text-align: center; -} -.katex .mfrac .frac-line { - width: 100%; -} -.katex .mfrac .frac-line:before { - border-bottom-style: solid; - border-bottom-width: 1px; - content: ""; - display: block; -} -.katex .mfrac .frac-line:after { - border-bottom-style: solid; - border-bottom-width: 0.04em; - content: ""; - display: block; - margin-top: -1px; -} -.katex .mspace { - display: inline-block; -} -.katex .mspace.negativethinspace { - margin-left: -0.16667em; -} -.katex .mspace.thinspace { - width: 0.16667em; -} -.katex .mspace.mediumspace { - width: 0.22222em; -} -.katex .mspace.thickspace { - width: 0.27778em; -} -.katex .mspace.enspace { - width: 0.5em; -} -.katex .mspace.quad { - width: 1em; -} -.katex .mspace.qquad { - width: 2em; -} -.katex .llap, -.katex .rlap { - width: 0; - position: relative; -} -.katex .llap > .inner, -.katex .rlap > .inner { - position: absolute; -} -.katex .llap > .fix, -.katex .rlap > .fix { - display: inline-block; -} -.katex .llap > .inner { - right: 0; -} -.katex .rlap > .inner { - left: 0; -} -.katex .katex-logo .a { - font-size: 0.75em; - margin-left: -0.32em; - position: relative; - top: -0.2em; -} -.katex .katex-logo .t { - margin-left: -0.23em; -} -.katex .katex-logo .e { - margin-left: -0.1667em; - position: relative; - top: 0.2155em; -} -.katex .katex-logo .x { - margin-left: -0.125em; -} -.katex .rule { - display: inline-block; - border-style: solid; - position: relative; -} -.katex .overline .overline-line { - width: 100%; -} -.katex .overline .overline-line:before { - border-bottom-style: solid; - border-bottom-width: 1px; - content: ""; - display: block; -} -.katex .overline .overline-line:after { - border-bottom-style: solid; - border-bottom-width: 0.04em; - content: ""; - display: block; - margin-top: -1px; -} -.katex .sqrt > .sqrt-sign { - position: relative; -} -.katex .sqrt .sqrt-line { - width: 100%; -} -.katex .sqrt .sqrt-line:before { - border-bottom-style: solid; - border-bottom-width: 1px; - content: ""; - display: block; -} -.katex .sqrt .sqrt-line:after { - border-bottom-style: solid; - border-bottom-width: 0.04em; - content: ""; - display: block; - margin-top: -1px; -} -.katex .sqrt > .root { - margin-left: 0.27777778em; - margin-right: -0.55555556em; -} -.katex .fontsize-ensurer, -.katex .sizing { - display: inline-block; -} -.katex .fontsize-ensurer.reset-size1.size1, -.katex .sizing.reset-size1.size1 { - font-size: 1em; -} -.katex .fontsize-ensurer.reset-size1.size2, -.katex .sizing.reset-size1.size2 { - font-size: 1.4em; -} -.katex .fontsize-ensurer.reset-size1.size3, -.katex .sizing.reset-size1.size3 { - font-size: 1.6em; -} -.katex .fontsize-ensurer.reset-size1.size4, -.katex .sizing.reset-size1.size4 { - font-size: 1.8em; -} -.katex .fontsize-ensurer.reset-size1.size5, -.katex .sizing.reset-size1.size5 { - font-size: 2em; -} -.katex .fontsize-ensurer.reset-size1.size6, -.katex .sizing.reset-size1.size6 { - font-size: 2.4em; -} -.katex .fontsize-ensurer.reset-size1.size7, -.katex .sizing.reset-size1.size7 { - font-size: 2.88em; -} -.katex .fontsize-ensurer.reset-size1.size8, -.katex .sizing.reset-size1.size8 { - font-size: 3.46em; -} -.katex .fontsize-ensurer.reset-size1.size9, -.katex .sizing.reset-size1.size9 { - font-size: 4.14em; -} -.katex .fontsize-ensurer.reset-size1.size10, -.katex .sizing.reset-size1.size10 { - font-size: 4.98em; -} -.katex .fontsize-ensurer.reset-size2.size1, -.katex .sizing.reset-size2.size1 { - font-size: 0.71428571em; -} -.katex .fontsize-ensurer.reset-size2.size2, -.katex .sizing.reset-size2.size2 { - font-size: 1em; -} -.katex .fontsize-ensurer.reset-size2.size3, -.katex .sizing.reset-size2.size3 { - font-size: 1.14285714em; -} -.katex .fontsize-ensurer.reset-size2.size4, -.katex .sizing.reset-size2.size4 { - font-size: 1.28571429em; -} -.katex .fontsize-ensurer.reset-size2.size5, -.katex .sizing.reset-size2.size5 { - font-size: 1.42857143em; -} -.katex .fontsize-ensurer.reset-size2.size6, -.katex .sizing.reset-size2.size6 { - font-size: 1.71428571em; -} -.katex .fontsize-ensurer.reset-size2.size7, -.katex .sizing.reset-size2.size7 { - font-size: 2.05714286em; -} -.katex .fontsize-ensurer.reset-size2.size8, -.katex .sizing.reset-size2.size8 { - font-size: 2.47142857em; -} -.katex .fontsize-ensurer.reset-size2.size9, -.katex .sizing.reset-size2.size9 { - font-size: 2.95714286em; -} -.katex .fontsize-ensurer.reset-size2.size10, -.katex .sizing.reset-size2.size10 { - font-size: 3.55714286em; -} -.katex .fontsize-ensurer.reset-size3.size1, -.katex .sizing.reset-size3.size1 { - font-size: 0.625em; -} -.katex .fontsize-ensurer.reset-size3.size2, -.katex .sizing.reset-size3.size2 { - font-size: 0.875em; -} -.katex .fontsize-ensurer.reset-size3.size3, -.katex .sizing.reset-size3.size3 { - font-size: 1em; -} -.katex .fontsize-ensurer.reset-size3.size4, -.katex .sizing.reset-size3.size4 { - font-size: 1.125em; -} -.katex .fontsize-ensurer.reset-size3.size5, -.katex .sizing.reset-size3.size5 { - font-size: 1.25em; -} -.katex .fontsize-ensurer.reset-size3.size6, -.katex .sizing.reset-size3.size6 { - font-size: 1.5em; -} -.katex .fontsize-ensurer.reset-size3.size7, -.katex .sizing.reset-size3.size7 { - font-size: 1.8em; -} -.katex .fontsize-ensurer.reset-size3.size8, -.katex .sizing.reset-size3.size8 { - font-size: 2.1625em; -} -.katex .fontsize-ensurer.reset-size3.size9, -.katex .sizing.reset-size3.size9 { - font-size: 2.5875em; -} -.katex .fontsize-ensurer.reset-size3.size10, -.katex .sizing.reset-size3.size10 { - font-size: 3.1125em; -} -.katex .fontsize-ensurer.reset-size4.size1, -.katex .sizing.reset-size4.size1 { - font-size: 0.55555556em; -} -.katex .fontsize-ensurer.reset-size4.size2, -.katex .sizing.reset-size4.size2 { - font-size: 0.77777778em; -} -.katex .fontsize-ensurer.reset-size4.size3, -.katex .sizing.reset-size4.size3 { - font-size: 0.88888889em; -} -.katex .fontsize-ensurer.reset-size4.size4, -.katex .sizing.reset-size4.size4 { - font-size: 1em; -} -.katex .fontsize-ensurer.reset-size4.size5, -.katex .sizing.reset-size4.size5 { - font-size: 1.11111111em; -} -.katex .fontsize-ensurer.reset-size4.size6, -.katex .sizing.reset-size4.size6 { - font-size: 1.33333333em; -} -.katex .fontsize-ensurer.reset-size4.size7, -.katex .sizing.reset-size4.size7 { - font-size: 1.6em; -} -.katex .fontsize-ensurer.reset-size4.size8, -.katex .sizing.reset-size4.size8 { - font-size: 1.92222222em; -} -.katex .fontsize-ensurer.reset-size4.size9, -.katex .sizing.reset-size4.size9 { - font-size: 2.3em; -} -.katex .fontsize-ensurer.reset-size4.size10, -.katex .sizing.reset-size4.size10 { - font-size: 2.76666667em; -} -.katex .fontsize-ensurer.reset-size5.size1, -.katex .sizing.reset-size5.size1 { - font-size: 0.5em; -} -.katex .fontsize-ensurer.reset-size5.size2, -.katex .sizing.reset-size5.size2 { - font-size: 0.7em; -} -.katex .fontsize-ensurer.reset-size5.size3, -.katex .sizing.reset-size5.size3 { - font-size: 0.8em; -} -.katex .fontsize-ensurer.reset-size5.size4, -.katex .sizing.reset-size5.size4 { - font-size: 0.9em; -} -.katex .fontsize-ensurer.reset-size5.size5, -.katex .sizing.reset-size5.size5 { - font-size: 1em; -} -.katex .fontsize-ensurer.reset-size5.size6, -.katex .sizing.reset-size5.size6 { - font-size: 1.2em; -} -.katex .fontsize-ensurer.reset-size5.size7, -.katex .sizing.reset-size5.size7 { - font-size: 1.44em; -} -.katex .fontsize-ensurer.reset-size5.size8, -.katex .sizing.reset-size5.size8 { - font-size: 1.73em; -} -.katex .fontsize-ensurer.reset-size5.size9, -.katex .sizing.reset-size5.size9 { - font-size: 2.07em; -} -.katex .fontsize-ensurer.reset-size5.size10, -.katex .sizing.reset-size5.size10 { - font-size: 2.49em; -} -.katex .fontsize-ensurer.reset-size6.size1, -.katex .sizing.reset-size6.size1 { - font-size: 0.41666667em; -} -.katex .fontsize-ensurer.reset-size6.size2, -.katex .sizing.reset-size6.size2 { - font-size: 0.58333333em; -} -.katex .fontsize-ensurer.reset-size6.size3, -.katex .sizing.reset-size6.size3 { - font-size: 0.66666667em; -} -.katex .fontsize-ensurer.reset-size6.size4, -.katex .sizing.reset-size6.size4 { - font-size: 0.75em; -} -.katex .fontsize-ensurer.reset-size6.size5, -.katex .sizing.reset-size6.size5 { - font-size: 0.83333333em; -} -.katex .fontsize-ensurer.reset-size6.size6, -.katex .sizing.reset-size6.size6 { - font-size: 1em; -} -.katex .fontsize-ensurer.reset-size6.size7, -.katex .sizing.reset-size6.size7 { - font-size: 1.2em; -} -.katex .fontsize-ensurer.reset-size6.size8, -.katex .sizing.reset-size6.size8 { - font-size: 1.44166667em; -} -.katex .fontsize-ensurer.reset-size6.size9, -.katex .sizing.reset-size6.size9 { - font-size: 1.725em; -} -.katex .fontsize-ensurer.reset-size6.size10, -.katex .sizing.reset-size6.size10 { - font-size: 2.075em; -} -.katex .fontsize-ensurer.reset-size7.size1, -.katex .sizing.reset-size7.size1 { - font-size: 0.34722222em; -} -.katex .fontsize-ensurer.reset-size7.size2, -.katex .sizing.reset-size7.size2 { - font-size: 0.48611111em; -} -.katex .fontsize-ensurer.reset-size7.size3, -.katex .sizing.reset-size7.size3 { - font-size: 0.55555556em; -} -.katex .fontsize-ensurer.reset-size7.size4, -.katex .sizing.reset-size7.size4 { - font-size: 0.625em; -} -.katex .fontsize-ensurer.reset-size7.size5, -.katex .sizing.reset-size7.size5 { - font-size: 0.69444444em; -} -.katex .fontsize-ensurer.reset-size7.size6, -.katex .sizing.reset-size7.size6 { - font-size: 0.83333333em; -} -.katex .fontsize-ensurer.reset-size7.size7, -.katex .sizing.reset-size7.size7 { - font-size: 1em; -} -.katex .fontsize-ensurer.reset-size7.size8, -.katex .sizing.reset-size7.size8 { - font-size: 1.20138889em; -} -.katex .fontsize-ensurer.reset-size7.size9, -.katex .sizing.reset-size7.size9 { - font-size: 1.4375em; -} -.katex .fontsize-ensurer.reset-size7.size10, -.katex .sizing.reset-size7.size10 { - font-size: 1.72916667em; -} -.katex .fontsize-ensurer.reset-size8.size1, -.katex .sizing.reset-size8.size1 { - font-size: 0.28901734em; -} -.katex .fontsize-ensurer.reset-size8.size2, -.katex .sizing.reset-size8.size2 { - font-size: 0.40462428em; -} -.katex .fontsize-ensurer.reset-size8.size3, -.katex .sizing.reset-size8.size3 { - font-size: 0.46242775em; -} -.katex .fontsize-ensurer.reset-size8.size4, -.katex .sizing.reset-size8.size4 { - font-size: 0.52023121em; -} -.katex .fontsize-ensurer.reset-size8.size5, -.katex .sizing.reset-size8.size5 { - font-size: 0.57803468em; -} -.katex .fontsize-ensurer.reset-size8.size6, -.katex .sizing.reset-size8.size6 { - font-size: 0.69364162em; -} -.katex .fontsize-ensurer.reset-size8.size7, -.katex .sizing.reset-size8.size7 { - font-size: 0.83236994em; -} -.katex .fontsize-ensurer.reset-size8.size8, -.katex .sizing.reset-size8.size8 { - font-size: 1em; -} -.katex .fontsize-ensurer.reset-size8.size9, -.katex .sizing.reset-size8.size9 { - font-size: 1.19653179em; -} -.katex .fontsize-ensurer.reset-size8.size10, -.katex .sizing.reset-size8.size10 { - font-size: 1.43930636em; -} -.katex .fontsize-ensurer.reset-size9.size1, -.katex .sizing.reset-size9.size1 { - font-size: 0.24154589em; -} -.katex .fontsize-ensurer.reset-size9.size2, -.katex .sizing.reset-size9.size2 { - font-size: 0.33816425em; -} -.katex .fontsize-ensurer.reset-size9.size3, -.katex .sizing.reset-size9.size3 { - font-size: 0.38647343em; -} -.katex .fontsize-ensurer.reset-size9.size4, -.katex .sizing.reset-size9.size4 { - font-size: 0.43478261em; -} -.katex .fontsize-ensurer.reset-size9.size5, -.katex .sizing.reset-size9.size5 { - font-size: 0.48309179em; -} -.katex .fontsize-ensurer.reset-size9.size6, -.katex .sizing.reset-size9.size6 { - font-size: 0.57971014em; -} -.katex .fontsize-ensurer.reset-size9.size7, -.katex .sizing.reset-size9.size7 { - font-size: 0.69565217em; -} -.katex .fontsize-ensurer.reset-size9.size8, -.katex .sizing.reset-size9.size8 { - font-size: 0.83574879em; -} -.katex .fontsize-ensurer.reset-size9.size9, -.katex .sizing.reset-size9.size9 { - font-size: 1em; -} -.katex .fontsize-ensurer.reset-size9.size10, -.katex .sizing.reset-size9.size10 { - font-size: 1.20289855em; -} -.katex .fontsize-ensurer.reset-size10.size1, -.katex .sizing.reset-size10.size1 { - font-size: 0.20080321em; -} -.katex .fontsize-ensurer.reset-size10.size2, -.katex .sizing.reset-size10.size2 { - font-size: 0.2811245em; -} -.katex .fontsize-ensurer.reset-size10.size3, -.katex .sizing.reset-size10.size3 { - font-size: 0.32128514em; -} -.katex .fontsize-ensurer.reset-size10.size4, -.katex .sizing.reset-size10.size4 { - font-size: 0.36144578em; -} -.katex .fontsize-ensurer.reset-size10.size5, -.katex .sizing.reset-size10.size5 { - font-size: 0.40160643em; -} -.katex .fontsize-ensurer.reset-size10.size6, -.katex .sizing.reset-size10.size6 { - font-size: 0.48192771em; -} -.katex .fontsize-ensurer.reset-size10.size7, -.katex .sizing.reset-size10.size7 { - font-size: 0.57831325em; -} -.katex .fontsize-ensurer.reset-size10.size8, -.katex .sizing.reset-size10.size8 { - font-size: 0.69477912em; -} -.katex .fontsize-ensurer.reset-size10.size9, -.katex .sizing.reset-size10.size9 { - font-size: 0.8313253em; -} -.katex .fontsize-ensurer.reset-size10.size10, -.katex .sizing.reset-size10.size10 { - font-size: 1em; -} -.katex .delimsizing.size1 { - font-family: KaTeX_Size1; -} -.katex .delimsizing.size2 { - font-family: KaTeX_Size2; -} -.katex .delimsizing.size3 { - font-family: KaTeX_Size3; -} -.katex .delimsizing.size4 { - font-family: KaTeX_Size4; -} -.katex .delimsizing.mult .delim-size1 > span { - font-family: KaTeX_Size1; -} -.katex .delimsizing.mult .delim-size4 > span { - font-family: KaTeX_Size4; -} -.katex .nulldelimiter { - display: inline-block; - width: 0.12em; -} -.katex .op-symbol { - position: relative; -} -.katex .op-symbol.small-op { - font-family: KaTeX_Size1; -} -.katex .op-symbol.large-op { - font-family: KaTeX_Size2; -} -.katex .accent > .vlist > span, -.katex .op-limits > .vlist > span { - text-align: center; -} -.katex .accent .accent-body > span { - width: 0; -} -.katex .accent .accent-body.accent-vec > span { - position: relative; - left: 0.326em; -} -.katex .mtable .vertical-separator { - display: inline-block; - margin: 0 -0.025em; - border-right: 0.05em solid #000; -} -.katex .mtable .arraycolsep { - display: inline-block; -} -.katex .mtable .col-align-c > .vlist { - text-align: center; -} -.katex .mtable .col-align-l > .vlist { - text-align: left; -} -.katex .mtable .col-align-r > .vlist { - text-align: right; -} - - .gt-bg-theme-color-first { - background: #f9f9f9!important; - } - - .gt-bg-theme-color-second { - background: #f3f3f3!important; - } - - .gt-bg-content-color-first { - background: #5e5e5e!important; - } - - .gt-bg-content-color-second { - background: #BFBFBF!important; - } - - .gt-bg-accent-color-first { - background: #8b959f!important; - } - - .gt-bg-accent-color-second { - background: RGBA(139,149,159,0.14)!important; - } - - .gt-c-theme-color-first { - color: #f9f9f9!important; - } - - .gt-c-theme-color-second { - color: #f3f3f3!important; - } - - .gt-c-content-color-first { - color: #5e5e5e!important; - } - - .gt-c-content-color-second { - color: #BFBFBF!important; - } - - .gt-c-accent-color-first { - color: #8b959f!important; - } - - .gt-c-accent-color-second { - color: RGBA(139,149,159,0.14)!important; - } - - body { - color: #5e5e5e!important; - } - - a { - color: #8b959f!important; - } - - .post-content h1 { - display: inline-block; - color: #5e5e5e!important; - position: relative!important; - background: linear-gradient(180deg, transparent 75%, RGBA(139,149,159,0.4) 0)!important; - } - - .post-content h2 { - display: inline-block; - color: #5e5e5e!important; - position: relative!important; - background: linear-gradient(180deg, transparent 75%, RGBA(139,149,159,0.4) 0)!important; - } - - .gt-a-link { - color: #5e5e5e!important; - position: relative!important; - background: linear-gradient(180deg, transparent 75%, RGBA(139,149,159,0.4) 0)!important; - } - - .gt-post-content a { - color: #8b959f!important; - } - - .gt-post-content blockquote { - background: RGBA(139,149,159,0.14)!important; - border-color: #8b959f!important; - } - - .gt-post-content code { - background: RGBA(139,149,159,0.14)!important; - } - \ No newline at end of file diff --git a/tag/S5jJgKDNu/index.html b/tag/S5jJgKDNu/index.html deleted file mode 100644 index 551b68d..0000000 --- a/tag/S5jJgKDNu/index.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - -Gridea | Gridea - - - - - - - - - - - - - - - - - -
- - - - -
-
-

标签: Gridea

- -
-
- -

Hello Gridea

-
- -
-

👏 欢迎使用 Gridea
-✍️ Gridea 一个静态博客写作客户端。你可以用它来记录你的生活、心情、知识、笔记、创意... ...

- -
-
- - -
-
-
- -
- - -
- - -
- -
-
-
- - - - - - - - - - - diff --git a/tag/icYCc8ATC/index.html b/tag/icYCc8ATC/index.html deleted file mode 100644 index 11eba59..0000000 --- a/tag/icYCc8ATC/index.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - -JavaScript | HUANG RESYIN - - - - - - - - - - - - - - - - - - - - - -
-
- -
-

- #JavaScript -

-
-
-
- -
-
- -
- -
- -
- -
- -
-
- -
- -
- -
- - - - -
- -
-
-
- - -
- - - - - -
-
- - diff --git a/tag/you-xi/index.html b/tag/you-xi/index.html deleted file mode 100644 index 7ac32e9..0000000 --- a/tag/you-xi/index.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - -游戏 | HUANG RESYIN - - - - - - - - - - - - - - - - - - - - - -
-
- -
-

- #游戏 -

-
-
-
- -
-
- -
- -
- -
- - - - -
- -
-
-
- - -
- - - - - -
-
- - diff --git a/tag/za-nian/index.html b/tag/za-nian/index.html deleted file mode 100644 index 380e808..0000000 --- a/tag/za-nian/index.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - -杂念 | HUANG RESYIN - - - - - - - - - - - - - - - - - - - - - -
-
- -
-

- #杂念 -

-
-
-
- -
-
- -
- -
- -
- -
- -
-
-
- - -
- - - - - -
-
- - diff --git a/tags/index.html b/tags/index.html deleted file mode 100644 index c8b7dd9..0000000 --- a/tags/index.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - -HUANG RESYIN - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - #JavaScript - -
- - - - - -
-
- - diff --git a/themes/cactus-dark b/themes/cactus-dark new file mode 160000 index 0000000..14a1321 --- /dev/null +++ b/themes/cactus-dark @@ -0,0 +1 @@ +Subproject commit 14a1321bf2634ce3ea30371c477a5c0279a75bab