[init] initial commit
This commit is contained in:
330
_includes/footer.html
Normal file
330
_includes/footer.html
Normal file
@ -0,0 +1,330 @@
|
||||
<!-- 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>
|
Reference in New Issue
Block a user