2018-06-04 17:31:48 +08:00

174 lines
5.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function($) {
$(document).ready(function() {
$("pre").addClass("prettyprint");
prettyPrint();
// 隐藏禁用javascript针对微信内置浏览器的提示
$('.noscript').hide();
// 图片缩放效果
var $imgs = $('img').not('.avatar-image,.carousel-image,.card-cover-image,.qrcode');
// 给图片加上点击放大效果materialbox插件
$imgs.addClass('materialboxed').each(function(i, el) {
$(this).attr('data-caption', $(this).attr('alt') || ' ');
}).materialbox();
// 优化表格的显示
$('table').each(function() {
var $table = $(this);
// 除去多行代码的情况
if ($table.find('pre').length == 0) {
$table.addClass('responsive-table striped bordered');
}
});
$(".button-collapse").sideNav();
$(".category-menu").sideNav();
$(".tag-menu").sideNav();
// 针对gallery post
$('.carousel').carousel({full_width: true});
$('.carousel-control.prev').click(function() {
$('.carousel').carousel('prev');
});
$('.carousel-control.next').click(function() {
$('.carousel').carousel('next');
});
// 文章目录
$('article').not('.simple-article').find('h1').add('h2').add('h3').add('h4').add('h5').add('h6').scrollSpy();
// 目录随屏幕滚动防止目录过长越过footer
var $toc = $('.toc');
var scrollTargetTop = 0;
$(window).scroll(function() {
var $activeLink = $toc.find('a.active.section');
if ($(window).scrollTop() < 100) {
scrollTargetTop = 0;
} else {
if ($activeLink[0]) {
scrollTargetTop = $activeLink.offset().top - $toc.offset().top;
}
}
$toc.css('top', '-' + scrollTargetTop + 'px');
});
// 修正文章目录的left-border颜色
var color = $('.table-of-contents-text').css('color');
$('.table-of-contents-link').css('border-left-color', color);
// 针对移动端做的优化FAB按钮点击一下收回
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
$('.fixed-action-btn').addClass('click-to-toggle');
}
// 回到顶部
$('.btn-return-top').click(function() {
$('body, html').animate({
scrollTop: 0
}, 500);
});
// 搜索功能
$('.modal-trigger').leanModal({
// 打开搜索框时自动聚焦
ready: function() {
if ($('#search').is(":visible")) {
$('#search-input').focus();
}
}
});
initSearch('/search.xml', 'search-input', 'search-result');
});
// 初始化搜索与匹配函数
var initSearch = function(path, search_id, content_id) {
'use strict';
$.ajax({
url: path,
dataType: "xml",
success: function(xmlResponse) {
// get the contents from search data
var datas = $("entry", xmlResponse).map(function() {
return {
title: $("title", this).text(),
content: $("content", this).text(),
url: $("url", this).text()
};
}).get();
var $input = document.getElementById(search_id);
var $resultContent = document.getElementById(content_id);
$input.addEventListener('input', function() {
var str = '<ul class=\"search-result-list\">';
var keywords = this.value.trim().toLowerCase().split(/[\s\-]+/);
$resultContent.innerHTML = "";
if (this.value.trim().length <= 0) {
return;
}
// perform local searching
datas.forEach(function(data) {
var isMatch = true;
var content_index = [];
var data_title = data.title.trim().toLowerCase();
var data_content = data.content.trim().replace(/<[^>]+>/g, "").toLowerCase();
var data_url = data.url;
var index_title = -1;
var index_content = -1;
var first_occur = -1;
// only match artiles with not empty titles and contents
if (data_title != '' && data_content != '') {
keywords.forEach(function(keyword, i) {
index_title = data_title.indexOf(keyword);
index_content = data_content.indexOf(keyword);
if (index_title < 0 && index_content < 0) {
isMatch = false;
} else {
if (index_content < 0) {
index_content = 0;
}
if (i == 0) {
first_occur = index_content;
}
}
});
}
// show search results
if (isMatch) {
keywords.forEach(function(keyword) {
var regS = new RegExp(keyword, "gi");
data_title = data_title.replace(regS, "<span class=\"search-keyword pink lighten-2\">" + keyword + "</span>");
});
str += "<li><a href='" + data_url + "' class='search-result-title'>" + data_title + "</a>";
var content = data.content.trim().replace(/<[^>]+>/g, "");
if (first_occur >= 0) {
// cut out 100 characters
var start = first_occur - 20;
var end = first_occur + 80;
if (start < 0) {
start = 0;
}
if (start == 0) {
end = 100;
}
if (end > content.length) {
end = content.length;
}
var match_content = content.substring(start, end);
// highlight all keywords
keywords.forEach(function(keyword) {
var regS = new RegExp(keyword, "gi");
match_content = match_content.replace(regS, "<span class=\"search-keyword pink lighten-2\">" + keyword + "</span>");
});
str += "<p class=\"search-result\">..." + match_content + "...</p>"
}
str += "</li>";
}
});
str += "</ul>";
$resultContent.innerHTML = str;
});
}
});
}
})(jQuery);