331 lines
11 KiB
HTML
331 lines
11 KiB
HTML
<!-- Footer -->
|
|
<footer>
|
|
<div class="container">
|
|
<div class="row">
|
|
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
|
<!-- SNS Link -->
|
|
{% include sns-links.html center=true %}
|
|
|
|
<p class="copyright text-muted">
|
|
Copyright © {{ site.title }} {{ site.time | date: '%Y' }}
|
|
| Powered by <a href="https://jekyllrb.com">Jekyll</a> |
|
|
<iframe style="margin-left: 2px; margin-bottom:-5px;" frameborder="0" scrolling="0" width="100px"
|
|
height="20px"
|
|
src="https://ghbtns.com/github-btn.html?user=mffan0922&repo=mffan0922.github.io&type=star&count=true">
|
|
</iframe>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
|
|
<!-- jQuery -->
|
|
<script src="{{ "/js/jquery.min.js " | prepend: site.baseurl }}"></script>
|
|
|
|
<!-- Bootstrap Core JavaScript -->
|
|
<!-- Currently, only navbar scroll-down effect at desktop still depends on this -->
|
|
<script src="{{ "/js/bootstrap.min.js " | prepend: site.baseurl }}"></script>
|
|
|
|
<!-- Custom Theme JavaScript -->
|
|
<script src="{{ "/js/hux-blog.min.js " | prepend: site.baseurl }}"></script>
|
|
|
|
<!-- Simple Jekyll Search -->
|
|
<script src="{{ "/js/simple-jekyll-search.min.js" | prepend: site.baseurl }}"></script>
|
|
|
|
<!-- Service Worker -->
|
|
{% if site.service-worker %}
|
|
<script src="{{ "/js/snackbar.js " | prepend: site.baseurl }}"></script>
|
|
<script src="{{ "/js/sw-registration.js " | prepend: site.baseurl }}"></script>
|
|
{% endif %}
|
|
|
|
<!-- async load function -->
|
|
<script>
|
|
function async(u, c) {
|
|
var d = document, t = 'script',
|
|
o = d.createElement(t),
|
|
s = d.getElementsByTagName(t)[0];
|
|
o.src = u;
|
|
if (c) { o.addEventListener('load', function (e) { c(null, e); }, false); }
|
|
s.parentNode.insertBefore(o, s);
|
|
}
|
|
</script>
|
|
|
|
<!--
|
|
Because of the native support for backtick-style fenced code blocks
|
|
right within the Markdown is landed in Github Pages,
|
|
From V1.6, There is no need for Highlight.js,
|
|
so Huxblog drops it officially.
|
|
|
|
- https://github.com/blog/2100-github-pages-now-faster-and-simpler-with-jekyll-3-0
|
|
- https://help.github.com/articles/creating-and-highlighting-code-blocks/
|
|
- https://github.com/jneen/rouge/wiki/list-of-supported-languages-and-lexers
|
|
-->
|
|
<!--
|
|
<script>
|
|
async("http://cdn.bootcss.com/highlight.js/8.6/highlight.min.js", function(){
|
|
hljs.initHighlightingOnLoad();
|
|
})
|
|
</script>
|
|
<link href="http://cdn.bootcss.com/highlight.js/8.6/styles/github.min.css" rel="stylesheet">
|
|
-->
|
|
|
|
|
|
{% if page.plchart %}
|
|
<!-- jquery.tagcloud.js -->
|
|
<script>
|
|
// https://stackoverflow.com/questions/9975810/make-iframe-automatically-adjust-height-according-to-the-contents-without-using
|
|
function resizeIframe(obj) {
|
|
obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px';
|
|
}
|
|
|
|
$(document).ready(function () {
|
|
var $chart = document.querySelector("#chart");
|
|
$chart.onload = function () {
|
|
resizeIframe($chart)
|
|
}
|
|
window.addEventListener("resize", () => {
|
|
resizeIframe($chart)
|
|
});
|
|
})
|
|
</script>
|
|
{% endif %}
|
|
|
|
|
|
{% if page.title == 'Archive' %}
|
|
<!-- jquery.tagcloud.js -->
|
|
<script>
|
|
async('{{ "/js/jquery.tagcloud.js" | prepend: site.baseurl }}', function () {
|
|
$.fn.tagcloud.defaults = {
|
|
//size: {start: 1, end: 1, unit: 'em'},
|
|
color: { start: '#bbbbee', end: '#2f93b4' },
|
|
};
|
|
$('#tag_cloud a').tagcloud();
|
|
})
|
|
</script>
|
|
<script src='{{ "/js/archive.js " | prepend: site.baseurl }}'></script>
|
|
{% endif %}
|
|
|
|
<!--fastClick.js -->
|
|
<script>
|
|
async("/js/fastclick.min.js", function () {
|
|
var $nav = document.querySelector("nav");
|
|
if ($nav) FastClick.attach($nav);
|
|
})
|
|
</script>
|
|
|
|
|
|
<!-- Google Analytics
|
|
{% if site.ga_track_id %}
|
|
<script>
|
|
// dynamic User by Hux
|
|
var _gaId = '{{ site.ga_track_id }}';
|
|
var _gaDomain = '{{ site.ga_domain }}';
|
|
|
|
// Originial
|
|
(function (i, s, o, g, r, a, m) {
|
|
i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {
|
|
(i[r].q = i[r].q || []).push(arguments)
|
|
}, i[r].l = 1 * new Date(); a = s.createElement(o),
|
|
m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)
|
|
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
|
|
|
|
ga('create', _gaId, _gaDomain);
|
|
ga('send', 'pageview');
|
|
</script>
|
|
{% endif %}
|
|
-->
|
|
|
|
|
|
<!-- Baidu Tongji
|
|
{% if site.ba_track_id %}
|
|
<script>
|
|
// dynamic User by Hux
|
|
var _baId = '{{ site.ba_track_id }}';
|
|
|
|
// Originial
|
|
var _hmt = _hmt || [];
|
|
(function () {
|
|
var hm = document.createElement("script");
|
|
hm.src = "//hm.baidu.com/hm.js?" + _baId;
|
|
var s = document.getElementsByTagName("script")[0];
|
|
s.parentNode.insertBefore(hm, s);
|
|
})();
|
|
</script>
|
|
{% endif %}
|
|
-->
|
|
|
|
<!-- Side Catalog -->
|
|
{% unless page.no-catalog %}
|
|
<script type="text/javascript">
|
|
function generateCatalog(selector) {
|
|
|
|
// interop with multilangual
|
|
if ('{{ page.multilingual }}' == 'true') {
|
|
_containerSelector = 'div.post-container.active'
|
|
} else {
|
|
_containerSelector = 'div.post-container'
|
|
}
|
|
|
|
// init
|
|
var P = $(_containerSelector), a, n, t, l, i, c;
|
|
a = P.find('h1,h2,h3,h4,h5,h6');
|
|
|
|
// clean
|
|
$(selector).html('')
|
|
|
|
// appending
|
|
a.each(function () {
|
|
n = $(this).prop('tagName').toLowerCase();
|
|
i = "#" + $(this).prop('id');
|
|
t = $(this).text();
|
|
c = $('<a href="' + i + '" rel="nofollow">' + t + '</a>');
|
|
l = $('<li class="' + n + '_nav"></li>').append(c);
|
|
$(selector).append(l);
|
|
});
|
|
return true;
|
|
}
|
|
|
|
generateCatalog(".catalog-body");
|
|
|
|
// toggle side catalog
|
|
$(".catalog-toggle").click((function (e) {
|
|
e.preventDefault();
|
|
$('.side-catalog').toggleClass("fold")
|
|
}))
|
|
|
|
/*
|
|
* Doc: https://github.com/davist11/jQuery-One-Page-Nav
|
|
* Fork by Hux to support padding
|
|
*/
|
|
async("{{ '/js/jquery.nav.js' | prepend: site.baseurl }}", function () {
|
|
$('.catalog-body').onePageNav({
|
|
currentClass: "active",
|
|
changeHash: !1,
|
|
easing: "swing",
|
|
filter: "",
|
|
scrollSpeed: 700,
|
|
scrollOffset: 0,
|
|
scrollThreshold: .2,
|
|
begin: null,
|
|
end: null,
|
|
scrollChange: null,
|
|
padding: 80
|
|
});
|
|
});
|
|
</script>
|
|
{% endunless %}
|
|
|
|
|
|
<!-- Multi-Lingual -->
|
|
{% if page.multilingual %}
|
|
<!-- Handle Language Change -->
|
|
<script type="text/javascript">
|
|
// get nodes
|
|
var $zh = document.querySelector(".zh");
|
|
var $en = document.querySelector(".en");
|
|
var $select = document.querySelector("select");
|
|
|
|
// Changes at v1.8.1: include lang flag as a url query. This interop well with catalog hash anchors.
|
|
function getLang() { return new URLSearchParams(document.location.search).get("lang") }
|
|
|
|
function setLang(newLang) {
|
|
var params = new URLSearchParams(document.location.search)
|
|
params.set("lang", newLang)
|
|
document.location.search = params.toString() // refresh.
|
|
}
|
|
|
|
// handle render
|
|
function _render() {
|
|
var lang = getLang()
|
|
// en
|
|
if (lang == "en") {
|
|
$select.selectedIndex = 1;
|
|
$en.style.display = "block";
|
|
$en.classList.add("active");
|
|
$zh.style.display = "none";
|
|
$zh.classList.remove("active");
|
|
// default to zh-cn
|
|
} else {
|
|
$select.selectedIndex = 0;
|
|
$zh.style.display = "block";
|
|
$zh.classList.add("active");
|
|
$en.style.display = "none";
|
|
$en.classList.remove("active");
|
|
}
|
|
// interop with catalog
|
|
generateCatalog(".catalog-body");
|
|
}
|
|
|
|
// handle select change
|
|
function onLanChange(index) {
|
|
if (index == 0) {
|
|
lang = "zh"
|
|
} else {
|
|
lang = "en"
|
|
}
|
|
setLang(lang)
|
|
}
|
|
|
|
// init
|
|
_render();
|
|
</script>
|
|
{% endif %}
|
|
|
|
<!-- Simple Jekyll Search -->
|
|
<script>
|
|
// https://stackoverflow.com/questions/1912501/unescape-html-entities-in-javascript
|
|
function htmlDecode(input) {
|
|
var e = document.createElement('textarea');
|
|
e.innerHTML = input;
|
|
// handle case of empty input
|
|
return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue;
|
|
}
|
|
|
|
SimpleJekyllSearch({
|
|
searchInput: document.getElementById('search-input'),
|
|
resultsContainer: document.getElementById('search-results'),
|
|
json: '/search.json',
|
|
searchResultTemplate: '<div class="post-preview item"><a href="{url}"><h2 class="post-title">{title}</h2><h3 class="post-subtitle">{subtitle}</h3><hr></a></div>',
|
|
noResultsText: 'No results',
|
|
limit: 50,
|
|
fuzzy: false,
|
|
// a hack to get escaped subtitle unescaped. for some reason,
|
|
// post.subtitle w/o escape filter nuke entire search.
|
|
templateMiddleware: function (prop, value, template) {
|
|
if (prop === 'subtitle' || prop === 'title') {
|
|
if (value.indexOf("code")) {
|
|
return htmlDecode(value);
|
|
} else {
|
|
return value;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
$(document).ready(function () {
|
|
var $searchPage = $('.search-page');
|
|
var $searchOpen = $('.search-icon');
|
|
var $searchClose = $('.search-icon-close');
|
|
var $searchInput = $('#search-input');
|
|
var $body = $('body');
|
|
|
|
$searchOpen.on('click', function (e) {
|
|
e.preventDefault();
|
|
$searchPage.toggleClass('search-active');
|
|
var prevClasses = $body.attr('class') || '';
|
|
setTimeout(function () {
|
|
$body.addClass('no-scroll');
|
|
}, 400)
|
|
|
|
if ($searchPage.hasClass('search-active')) {
|
|
$searchClose.on('click', function (e) {
|
|
e.preventDefault();
|
|
$searchPage.removeClass('search-active');
|
|
$body.attr('class', prevClasses); // from closure
|
|
});
|
|
$searchInput.focus();
|
|
}
|
|
});
|
|
});
|
|
</script>
|