summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormayx <mayx@outlook.com>2025-04-03 16:38:40 +0200
committermayx <mayx@outlook.com>2025-04-03 16:38:40 +0200
commitb0704e26fcd55ae2402222ef705b2c201b06045a (patch)
tree77c25a3b4a589cb9601a82ac2acd6c149adfbace
parent1b4fd0de9b6051d2edb1fb9d59399ecef7411024 (diff)
Update 6 files
- /js/main.js - /search.html - /_layouts/default.html - /_layouts/post.html - /_includes/anchor_headings.html - /_config.yml
-rw-r--r--_config.yml1
-rw-r--r--_includes/anchor_headings.html174
-rw-r--r--_layouts/default.html2
-rw-r--r--_layouts/post.html37
-rw-r--r--js/main.js12
-rw-r--r--search.html19
6 files changed, 194 insertions, 51 deletions
diff --git a/_config.yml b/_config.yml
index 7753887..4f78f33 100644
--- a/_config.yml
+++ b/_config.yml
@@ -1,6 +1,7 @@
theme: jekyll-theme-minimal
title: Mayx的博客
logo: https://avatars0.githubusercontent.com/u/17966333
+lang: zh-CN
author: mayx
description: Mayx's Home Page
timezone: Asia/Shanghai
diff --git a/_includes/anchor_headings.html b/_includes/anchor_headings.html
new file mode 100644
index 0000000..7e736d6
--- /dev/null
+++ b/_includes/anchor_headings.html
@@ -0,0 +1,174 @@
+{% capture headingsWorkspace %}
+ {% comment %}
+ Copyright (c) 2018 Vladimir "allejo" Jimenez
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use,
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following
+ conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+ {% endcomment %}
+ {% comment %}
+ Version 1.0.13
+ https://github.com/allejo/jekyll-anchor-headings
+
+ "Be the pull request you wish to see in the world." ~Ben Balter
+
+ Usage:
+ {% include anchor_headings.html html=content anchorBody="#" %}
+
+ Parameters:
+ * html (string) - the HTML of compiled markdown generated by kramdown in Jekyll
+
+ Optional Parameters:
+ * beforeHeading (bool) : false - Set to true if the anchor should be placed _before_ the heading's content
+ * headerAttrs (string) : '' - Any custom HTML attributes that will be added to the heading tag; you may NOT use `id`;
+ the `%heading%` and `%html_id%` placeholders are available
+ * anchorAttrs (string) : '' - Any custom HTML attributes that will be added to the `<a>` tag; you may NOT use `href`, `class` or `title`;
+ the `%heading%` and `%html_id%` placeholders are available
+ * anchorBody (string) : '' - The content that will be placed inside the anchor; the `%heading%` placeholder is available
+ * anchorClass (string) : '' - The class(es) that will be used for each anchor. Separate multiple classes with a space
+ * anchorTitle (string) : '' - The `title` attribute that will be used for anchors
+ * h_min (int) : 1 - The minimum header level to build an anchor for; any header lower than this value will be ignored
+ * h_max (int) : 6 - The maximum header level to build an anchor for; any header greater than this value will be ignored
+ * bodyPrefix (string) : '' - Anything that should be inserted inside of the heading tag _before_ its anchor and content
+ * bodySuffix (string) : '' - Anything that should be inserted inside of the heading tag _after_ its anchor and content
+ * generateId (true) : false - Set to true if a header without id should generate an id to use.
+
+ Output:
+ The original HTML with the addition of anchors inside of all of the h1-h6 headings.
+ {% endcomment %}
+
+ {% assign minHeader = include.h_min | default: 1 %}
+ {% assign maxHeader = include.h_max | default: 6 %}
+ {% assign beforeHeading = include.beforeHeading %}
+ {% assign headerAttrs = include.headerAttrs %}
+ {% assign nodes = include.html | split: '<h' %}
+
+ {% capture edited_headings %}{% endcapture %}
+
+ {% for _node in nodes %}
+ {% capture node %}{{ _node | strip }}{% endcapture %}
+
+ {% if node == "" %}
+ {% continue %}
+ {% endif %}
+
+ {% assign nextChar = node | replace: '"', '' | strip | slice: 0, 1 %}
+ {% assign headerLevel = nextChar | times: 1 %}
+
+ <!-- If the level is cast to 0, it means it's not a h1-h6 tag, so let's see if we need to fix it -->
+ {% if headerLevel == 0 %}
+ <!-- Split up the node based on closing angle brackets and get the first one. -->
+ {% assign firstChunk = node | split: '>' | first %}
+
+ <!-- If the first chunk does NOT contain a '<', that means we've broken another HTML tag that starts with 'h' -->
+ {% unless firstChunk contains '<' %}
+ {% capture node %}<h{{ node }}{% endcapture %}
+ {% endunless %}
+
+ {% capture edited_headings %}{{ edited_headings }}{{ node }}{% endcapture %}
+ {% continue %}
+ {% endif %}
+
+ {% capture _closingTag %}</h{{ headerLevel }}>{% endcapture %}
+ {% assign _workspace = node | split: _closingTag %}
+ {% capture _hAttrToStrip %}{{ _workspace[0] | split: '>' | first }}>{% endcapture %}
+ {% assign header = _workspace[0] | replace: _hAttrToStrip, '' %}
+ {% assign escaped_header = header | strip_html | strip %}
+
+ {% assign _classWorkspace = _workspace[0] | split: 'class="' %}
+ {% assign _classWorkspace = _classWorkspace[1] | split: '"' %}
+ {% assign _html_class = _classWorkspace[0] %}
+
+ {% if _html_class contains "no_anchor" %}
+ {% assign skip_anchor = true %}
+ {% else %}
+ {% assign skip_anchor = false %}
+ {% endif %}
+
+ {% assign _idWorkspace = _workspace[0] | split: 'id="' %}
+ {% if _idWorkspace[1] %}
+ {% assign _idWorkspace = _idWorkspace[1] | split: '"' %}
+ {% assign html_id = _idWorkspace[0] %}
+ {% assign h_attrs = headerAttrs %}
+ {% elsif include.generateId %}
+ <!-- If the header did not have an id we create one. -->
+ {% assign html_id = escaped_header | slugify %}
+ {% if html_id == "" %}
+ {% assign html_id = false %}
+ {% endif %}
+ <!-- Append the generated id to other potential header attributes. -->
+ {% capture h_attrs %}{{ headerAttrs }} id="%html_id%"{% endcapture %}
+ {% endif %}
+
+ <!-- Build the anchor to inject for our heading -->
+ {% capture anchor %}{% endcapture %}
+
+ {% if skip_anchor == false and html_id and headerLevel >= minHeader and headerLevel <= maxHeader %}
+ {% if h_attrs %}
+ {% capture _hAttrToStrip %}{{ _hAttrToStrip | split: '>' | first }} {{ h_attrs | strip | replace: '%heading%', escaped_header | replace: '%html_id%', html_id }}>{% endcapture %}
+ {% endif %}
+
+ {% capture anchor %}href="#{{ html_id }}"{% endcapture %}
+
+ {% if include.anchorClass %}
+ {% capture anchor %}{{ anchor }} class="{{ include.anchorClass }}"{% endcapture %}
+ {% endif %}
+
+ {% if include.anchorTitle %}
+ {% capture anchor %}{{ anchor }} title="{{ include.anchorTitle | replace: '%heading%', escaped_header }}"{% endcapture %}
+ {% endif %}
+
+ {% if include.anchorAttrs %}
+ {% capture anchor %}{{ anchor }} {{ include.anchorAttrs | replace: '%heading%', escaped_header | replace: '%html_id%', html_id }}{% endcapture %}
+ {% endif %}
+
+ {% capture anchor %}<a {{ anchor }}>{{ include.anchorBody | replace: '%heading%', escaped_header | default: '' }}</a>{% endcapture %}
+
+ <!-- In order to prevent adding extra space after a heading, we'll let the 'anchor' value contain it -->
+ {% if beforeHeading %}
+ {% capture anchor %}{{ anchor }} {% endcapture %}
+ {% else %}
+ {% capture anchor %} {{ anchor }}{% endcapture %}
+ {% endif %}
+ {% endif %}
+
+ {% capture new_heading %}
+<h{{ _hAttrToStrip }}
+ {{ include.bodyPrefix }}
+ {% if beforeHeading %}
+ {{ anchor }}{{ header }}
+ {% else %}
+ {{ header }}{{ anchor }}
+ {% endif %}
+ {{ include.bodySuffix }}
+</h{{ headerLevel }}>
+ {% endcapture %}
+
+ <!--
+ If we have content after the `</hX>` tag, then we'll want to append that here so we don't lost any content.
+ -->
+ {% assign chunkCount = _workspace | size %}
+ {% if chunkCount > 1 %}
+ {% capture new_heading %}{{ new_heading }}{{ _workspace | last }}{% endcapture %}
+ {% endif %}
+
+ {% capture edited_headings %}{{ edited_headings }}{{ new_heading }}{% endcapture %}
+ {% endfor %}
+{% endcapture %}{% assign headingsWorkspace = '' %}{{ edited_headings | strip }} \ No newline at end of file
diff --git a/_layouts/default.html b/_layouts/default.html
index ded6615..a3c59c7 100644
--- a/_layouts/default.html
+++ b/_layouts/default.html
@@ -1,5 +1,5 @@
<!DOCTYPE html>
-<html>
+<html lang="{{ site.lang | default: "zh-CN" }}">
<head>
<meta charset="UTF-8">
diff --git a/_layouts/post.html b/_layouts/post.html
index 5cb7938..fa64e24 100644
--- a/_layouts/post.html
+++ b/_layouts/post.html
@@ -75,7 +75,7 @@ layout: default
{% include toc.html html=content sanitize=true h_max=3 %}
-{{content}}
+{% if post.layout == "encrypt" %} {{content}} {% else %} <style>.post-content h1{text-indent:-12px;}.post-content h2{text-indent:-10px;}.post-content h3{text-indent:-8px;}.post-content h4{text-indent:-6px;}.post-content h5{text-indent:-4px;}.post-content h6{text-indent:-2px;}h1 .octicon,h2 .octicon,h3 .octicon,h4 .octicon,h5 .octicon,h6 .octicon{visibility:hidden;}h1:hover .octicon,h2:hover .octicon,h3:hover .octicon,h4:hover .octicon,h5:hover .octicon,h6:hover .octicon{visibility:visible;}.octicon{fill:currentColor;padding:0;margin-left:-16px;vertical-align:middle;}</style> <main class="post-content" role="main"></main>{% include anchor_headings.html html=content beforeHeading=true anchorBody="<svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg>" %}</main> {% endif %}
{% if page.tags %}
<small style="display: block">tags: {% for tag in page.tags %}<a href="/search.html?keyword={{ tag | url_encode }}"><em>{{ tag }}</em></a>{% unless forloop.last %} - {% endunless %}{% endfor %} <span style="float: right;"><a href="{% if site.github %}{{ site.github.repository_url }}{% else %}https://gitlab.com/mayx/mayx.gitlab.io{% endif %}/tree/master/{{ page.path }}">查看原始文件</a></span></small>
@@ -132,31 +132,16 @@ $.get(BlogAPI + "/suggest?id=" + blogurl + "&update=" + lastUpdated.valueOf(), f
<div id="gitalk-container"></div>
<script>
- if (window.location.host != "mabbs.github.io") {
- var gitalk = new Gitalk({
- clientID: '098934a2556425f19d6e',
- clientSecret: '0bd44eed8425e5437ce43c4ba9b2791fbc04581d',
- repo: 'mabbs.github.io',
- owner: 'Mabbs',
- admin: ['Mabbs'],
- id: '{{ page.id }}', // Ensure uniqueness and length less than 50
- distractionFreeMode: false, // Facebook-like distraction free mode
- proxy: "https://cors-anywhere.mayx.eu.org/?https://github.com/login/oauth/access_token"
- })
- }
- else {
- var gitalk = new Gitalk({
- clientID: '36557aec4c3cb04f7ac6',
- clientSecret: 'ac32993299751cb5a9ba81cf2b171cca65879cdb',
- repo: 'mabbs.github.io',
- owner: 'Mabbs',
- admin: ['Mabbs'],
- id: '{{ page.id }}', // Ensure uniqueness and length less than 50
- distractionFreeMode: false, // Facebook-like distraction free mode
- proxy: "https://cors-anywhere.mayx.eu.org/?https://github.com/login/oauth/access_token"
- })
- }
-
+ var gitalk = new Gitalk({
+ clientID: (window.location.host != "mabbs.github.io")?'098934a2556425f19d6e':'36557aec4c3cb04f7ac6',
+ clientSecret: (window.location.host != "mabbs.github.io")?'0bd44eed8425e5437ce43c4ba9b2791fbc04581d':'ac32993299751cb5a9ba81cf2b171cca65879cdb',
+ repo: 'mabbs.github.io',
+ owner: 'Mabbs',
+ admin: ['Mabbs'],
+ id: '{{ page.id }}', // Ensure uniqueness and length less than 50
+ distractionFreeMode: false, // Facebook-like distraction free mode
+ proxy: "https://cors-anywhere.mayx.eu.org/?https://github.com/login/oauth/access_token"
+ })
gitalk.render('gitalk-container')
</script>
<!-- <![endif]--> \ No newline at end of file
diff --git a/js/main.js b/js/main.js
index 72c46a0..f4b2a99 100644
--- a/js/main.js
+++ b/js/main.js
@@ -42,16 +42,8 @@ $(function () {
});
$(function() {
- function getQueryVariable(variable){
- var query = window.location.search.substring(1);
- var vars = query.split("&");
- for (var i=0;i<vars.length;i++) {
- var pair = vars[i].split("=");
- if(pair[0] == variable){return pair[1];}
- }
- return(false);
- }
- var keyword = decodeURI(getQueryVariable("kw"));
+ const urlParams = new URLSearchParams(window.location.search);
+ const keyword = urlParams.get('kw')?.trim();
if (!keyword) return;
diff --git a/search.html b/search.html
index 7f392cd..0f17864 100644
--- a/search.html
+++ b/search.html
@@ -8,20 +8,11 @@ title: 搜索
<ul id="results-container"></ul>
<script src="/js/simple-jekyll-search.min.js"></script>
<script>
-function getQueryVariable(variable){
- var query = window.location.search.substring(1);
- var vars = query.split("&");
- for (var i=0;i<vars.length;i++) {
- var pair = vars[i].split("=");
- if(pair[0] == variable){return pair[1];}
- }
- return(false);
-}
-var mykeyword = decodeURI(getQueryVariable("keyword"));
-var sbox = document.getElementById('search-input');
-var status = false;
-if(mykeyword != null && mykeyword.toString().length>1){
- sbox.value = mykeyword;
+const urlParams = new URLSearchParams(window.location.search);
+const mykeyword = urlParams.get('keyword')?.trim();
+const sbox = document.getElementById('search-input');
+if (mykeyword) {
+ sbox.value = mykeyword;
}
getSearchJSON(function(json){
var sjs = SimpleJekyllSearch({