1
0
DavidZhang73.github.io/js/obsidian.js

1264 lines
38 KiB
JavaScript

/**
* Hexo-obsidian-theme
* @author Guo Xiang - @TriDiamond
* @description Use for hexo obsidian theme
*/
//JSHint ingores
/* jshint -W093 */
/* jshint -W030 */
/* jshint -W119 */
/**
* Watch the TOC during scroll and fill in active status
* @param {} menuSelector
* @param {*} options
*/
function scrollSpy(menuSelector, options) {
var menu = $(menuSelector);
if (!menu)
return;
options = options || {};
var offset = options.offset || 0;
var activeClassName = options.activeClassName || "active";
var scollTarget = $(".content :header").find("a.headerlink"),
lastId = null,
active = $();
$(window).scroll(function () {
// Get container scroll position
var fromTop = $(this).scrollTop() + offset;
// Get id of current scroll item
var id = scollTarget.filter(function () {
return $(this).offset().top < fromTop;
}).last().parent().attr("id") || "";
if (lastId !== id) {
active.removeClass(activeClassName);
var newActive = [];
for (var target = menu.find("[href='#" + id + "']"); target.length && !target.is(menu); target = target.parent()) {
if (target.is("li"))
newActive.push(target[0]);
}
active = $(newActive).addClass(activeClassName).trigger("scrollspy");
lastId = id;
}
});
}
/**
* Utilise the background color to avoid scrolling flashes
*/
function utiliseBgColor() {
setTimeout(function () {
if ($("#single").length) {
$('html').css('background', '#fff');
} else {
$('html').css('background', '#100e17');
}
}, 500);
}
/**
* Buidling the caption html in an aritle
*/
function buildImgCaption() {
var images = $('.content').find('img');
images.each(function () {
var caption = $(this).attr('alt');
$('.content').find("[alt='" + caption + "']").parent().append('<p class="image-caption">"' + caption + '"</p>');
});
}
var Home = location.href,
Pages = 4,
xhr,
xhrUrl = '';
var Obsidian = {
L: function (url, f, err) {
if (url == xhrUrl) {
return false;
}
xhrUrl = url;
if (xhr) {
xhr.abort();
}
xhr = $.ajax({
type: 'GET',
url: url,
timeout: 10000,
success: function (data) {
f(data);
xhrUrl = '';
},
error: function (a, b, c) {
if (b == 'abort') {
err && err();
} else {
window.location.href = url;
}
xhrUrl = '';
}
});
},
P: function () {
return !!('ontouchstart' in window);
},
PS: function () {
if (!(window.history && history.pushState)) {
return;
}
history.replaceState({
u: Home,
t: document.title
}, document.title, Home);
window.addEventListener('popstate', function (e) {
var state = e.state;
if (!state) return;
document.title = state.t;
if (state.u == Home) {
$('#preview').css('position', 'fixed');
setTimeout(function () {
$('#preview').removeClass('show');
$('#container').show();
window.scrollTo(0, parseInt($('#container').data('scroll')));
setTimeout(function () {
$('#preview').html('');
$(window).trigger('resize');
}, 300);
}, 0);
} else {
Obsidian.loading();
Obsidian.L(state.u, function (data) {
document.title = state.t;
$('#preview').html($(data).filter('#single'));
Obsidian.preview();
setTimeout(function () {
Obsidian.player();
}, 0);
});
}
});
},
HS: function (tag, flag) {
var id = tag.data('id') || 0,
url = tag.attr('href'),
title = tag.attr('title') + " - " + $("#config-title").text();
if (!$('#preview').length || !(window.history && history.pushState)) location.href = url;
Obsidian.loading();
var state = {
d: id,
t: title,
u: url
};
Obsidian.L(url, function (data) {
if (!$(data).filter('#single').length) {
location.href = url;
return;
}
switch (flag) {
case 'push':
history.pushState(state, title, url);
$('#preview').html($(data).filter('#single'));
break;
case 'replace':
history.replaceState(state, title, url);
$('#preview').html($(data).filter('#single'));
break;
}
document.title = title;
$('#preview').html($(data).filter('#single'));
switch (flag) {
case 'push':
Obsidian.preview();
break;
case 'replace':
Obsidian.initArticleJs();
window.scrollTo(0, 0);
Obsidian.loaded();
break;
}
setTimeout(function () {
Obsidian.player();
$('#top').show();
comment = $("#gitalk-container");
if (comment.data('ae') == true) {
comment.click();
}
}, 0);
});
},
preview: function () {
// preview toggle
$("#preview").one('transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd', function () {
var previewVisible = $('#preview').hasClass('show');
if (!!previewVisible) {
$('#container').hide();
} else {
$('#container').show();
}
Obsidian.loaded();
});
setTimeout(function () {
$('#preview').addClass('show');
$('#container').data('scroll', window.scrollY);
setTimeout(function () {
$('#preview').css({
'position': 'static',
// 'overflow-y': 'auto'
});
Obsidian.initArticleJs();
}, 500);
}, 0);
},
player: function () {
var p = $('#audio');
if (!p.length) {
$('.icon-play').css({
'color': '#dedede',
'cursor': 'not-allowed'
});
return;
}
var sourceSrc = $("#audio source").eq(0).attr('src');
if (sourceSrc == '' && p[0].src == '') {
audiolist = $('#audio-list li');
mp3 = audiolist.eq([Math.floor(Math.random() * audiolist.length)]);
p[0].src = mp3.data('url');
}
if (p.eq(0).data("autoplay") == true) {
p[0].play();
}
p.on({
'timeupdate': function () {
var progress = p[0].currentTime / p[0].duration * 100;
$('.bar').css('width', progress + '%');
if (progress / 5 <= 1) {
p[0].volume = progress / 5;
} else {
p[0].volume = 1;
}
},
'ended': function () {
$('.icon-pause').removeClass('icon-pause').addClass('icon-play');
},
'playing': function () {
$('.icon-play').removeClass('icon-play').addClass('icon-pause');
}
});
},
loading: function () {
var w = window.innerWidth;
var css = '<style class="loaderstyle" id="loaderstyle' + w + '">' +
'@-moz-keyframes loader' + w + '{100%{background-position:' + w + 'px 0}}' +
'@-webkit-keyframes loader' + w + '{100%{background-position:' + w + 'px 0}}' +
'.loader' + w + '{-webkit-animation:loader' + w + ' 3s linear infinite;-moz-animation:loader' + w + ' 3s linear infinite;}' +
'</style>';
$('.loaderstyle').remove();
$('head').append(css);
$('#loader').removeClass().addClass('loader' + w).show();
},
loaded: function () {
$('#loader').removeClass().hide();
},
F: function (id, w, h) {
var _height = $(id).parent().height(),
_width = $(id).parent().width(),
ratio = h / w;
if (_height / _width > ratio) {
id.style.height = _height + 'px';
id.style.width = _height / ratio + 'px';
} else {
id.style.width = _width + 'px';
id.style.height = _width * ratio + 'px';
}
id.style.left = (_width - parseInt(id.style.width)) / 2 + 'px';
id.style.top = (_height - parseInt(id.style.height)) / 2 + 'px';
},
initArticleJs: function () {
Obsidian.setCodeRowWithLang();
Obsidian.tocSpy(200);
if ($('#vcomments').length) {
initValine();
}
if ($('span[id^="busuanzi_"]').length) {
initialBusuanzi();
}
reprocessMathJax();
buildImgCaption();
utiliseBgColor('article');
Obsidian.initialShare();
},
setCodeRowWithLang: function () {
// Get the programming type of the current code block
var code = $("code");
if (code && code.length) {
code.each(function () {
var item = $(this),
lang = "";
if (item[0].className.indexOf(' ') > -1) {
lang = item[0].className.split(' ')[0];
} else {
lang = item[0].className;
}
var langMap = {
"html": "HTML",
"xml": "XML",
"svg": "SVG",
"mathml": "MathML",
"css": "CSS",
"clike": "C-like",
"js": "JavaScript",
"abap": "ABAP",
"apacheconf": "Apache Configuration",
"apl": "APL",
"arff": "ARFF",
"asciidoc": "AsciiDoc",
"adoc": "AsciiDoc",
"asm6502": "6502 Assembly",
"aspnet": "ASP.NET (C#)",
"autohotkey": "AutoHotkey",
"autoit": "AutoIt",
"shell": "BASH",
"bash": "BASH",
"basic": "BASIC",
"csharp": "C#",
"dotnet": "C#",
"cpp": "C++",
"cil": "CIL",
"csp": "Content-Security-Policy",
"css-extras": "CSS Extras",
"django": "Django/Jinja2",
"jinja2": "Django/Jinja2",
"dockerfile": "Docker",
"erb": "ERB",
"fsharp": "F#",
"gcode": "G-code",
"gedcom": "GEDCOM",
"glsl": "GLSL",
"gml": "GameMaker Language",
"gamemakerlanguage": "GameMaker Language",
"graphql": "GraphQL",
"hcl": "HCL",
"http": "HTTP",
"hpkp": "HTTP Public-Key-Pins",
"hsts": "HTTP Strict-Transport-Security",
"ichigojam": "IchigoJam",
"inform7": "Inform 7",
"javastacktrace": "Java stack trace",
"json": "JSON",
"jsonp": "JSONP",
"latex": "LaTeX",
"emacs": "Lisp",
"elisp": "Lisp",
"emacs-lisp": "Lisp",
"lolcode": "LOLCODE",
"markup-templating": "Markup templating",
"matlab": "MATLAB",
"mel": "MEL",
"n1ql": "N1QL",
"n4js": "N4JS",
"n4jsd": "N4JS",
"nand2tetris-hdl": "Nand To Tetris HDL",
"nasm": "NASM",
"nginx": "nginx",
"nsis": "NSIS",
"objectivec": "Objective-C",
"ocaml": "OCaml",
"opencl": "OpenCL",
"parigp": "PARI/GP",
"objectpascal": "Object Pascal",
"php": "PHP",
"php-extras": "PHP Extras",
"plsql": "PL/SQL",
"powershell": "PowerShell",
"properties": ".properties",
"protobuf": "Protocol Buffers",
"q": "Q (kdb+ database)",
"jsx": "React JSX",
"tsx": "React TSX",
"renpy": "Ren'py",
"rest": "reST (reStructuredText)",
"sas": "SAS",
"sass": "SASS (Sass)",
"scss": "SASS (Scss)",
"sql": "SQL",
"soy": "Soy (Closure Template)",
"tap": "TAP",
"toml": "TOML",
"tt2": "Template Toolkit 2",
"ts": "TypeScript",
"vbnet": "VB.Net",
"vhdl": "VHDL",
"vim": "vim",
"visual-basic": "Visual Basic",
"vb": "Visual Basic",
"wasm": "WebAssembly",
"wiki": "Wiki markup",
"xeoracube": "XeoraCube",
"xojo": "Xojo (REALbasic)",
"xquery": "XQuery",
"yaml": "YAML"
};
var displayLangText = "";
if (lang in langMap) displayLangText = langMap[lang];
else displayLangText = lang;
if (item.find(".language-mark").length <= 0 && displayLangText) {
// reset code block styles
item.css('background', 'transparent');
item.css('padding', 0);
var $code = item.text();
item.empty();
var myCodeMirror = CodeMirror(this, {
value: $code.slice(0, $code.length - 1),
mode: Obsidian.getCodeMirrorMode(lang),
lineNumbers: !item.is('.inline'),
readOnly: true,
lineWrapping: true,
theme: 'dracula'
});
item.find('.CodeMirror').prepend(
'<span class="language-mark" ref=' + lang + '> <b class="iconfont icon-code" style="line-height: 0.7rem"></b> ' + displayLangText + '</span>');
}
});
}
},
tocSpy: function (offset) {
var tocContainer = $("#toc");
var toc = tocContainer,
tocHeight = toc.height();
scrollSpy(tocContainer, {
offset: 200
});
$(".toc-item").on("scrollspy", function () {
var tocTop = toc.scrollTop(),
link = $(this).children(".toc-link"),
thisTop = link.position().top;
// make sure the highlighted element contains no child
if ($(this).height() != link.height())
return;
// if the highlighted element is above current view of toc
if (thisTop <= 0)
toc.scrollTop(tocTop + thisTop);
// else if below current view of toc
else if (tocHeight <= thisTop)
toc.scrollTop(tocTop + thisTop + link.outerHeight() - tocHeight);
});
},
reactToWindowHeight: function () {
var postSpacing = 315;
var winHeight = $(window).height();
var winWidth = $(window).width();
var firstPostHeight = $('#post0').height();
if (winWidth <= 900) {
postSpacing = 100;
}
if (firstPostHeight + postSpacing > winHeight || winWidth <= 900) {
$('#mark').css('height', firstPostHeight + postSpacing + 'px');
$('#screen').css('height', firstPostHeight + postSpacing + 'px');
}
},
initialShare: function () {
var $config = {
title: document.title,
description: document.description,
wechatQrcodeTitle: "微信扫一扫:分享", // 微信二维码提示文字
wechatQrcodeHelper: '<p>微信里点“发现”,扫一下</p><p>二维码便可将本文分享至朋友圈。</p>',
};
socialShare('.share-component-cc', $config);
},
v: function (t, e) {
if (t)
switch (t) {
case "javascript":
case "text/javascript":
case "js":
return t = "javascript";
case "json":
return e ? t : t = {
name: "javascript",
json: !0
};
case "jsonld":
case "json-ld":
return e ? t : "application/ld+json";
case "text/typescript":
case "typescript":
case "ts":
return e ? "typescript" : t = {
name: "javascript",
typescript: !0
};
case "clojure":
return t;
case "coffee":
case "coffeescript":
case "css":
return t;
case "less":
return e ? "less" : "text/x-less";
case "scss":
return e ? "scss" : t = "text/x-scss";
case "gfm":
case "github flavored markdown":
return t = "gfm";
case "markdown":
case "md":
case "mkd":
return t;
case "xml":
case "xaml":
case "mjml":
case "xul":
case "enml":
return e ? t : "xml";
case "haskell":
return t;
case "htmlmixed":
case "html":
case "xhtml":
case "svg":
case "epub":
return e ? /^html/.exec(t) ? "html" : t : t = "htmlmixed";
case "lua":
return t;
case "lisp":
case "commonlisp":
case "common lisp":
return t = "commonlisp";
case "pascal":
return t;
case "perl":
case "perl5":
case "perl4":
case "perl3":
case "perl2":
return "perl";
case "perl6":
return t;
case "php+html":
return e ? "php" : "application/x-httpd-php";
case "php":
case "php3":
case "php4":
case "php5":
case "php6":
return e ? t : "text/x-php";
case "cython":
return e ? t : t = "text/x-cython";
case "python":
return e ? t : t = "text/x-python";
case "ruby":
return t;
case "shell":
case "sh":
case "zsh":
case "bash":
return t = "shell";
case "sql":
case "sql lite":
case "sqlite":
return e ? t : t = "text/x-sql";
case "mssql":
return e ? t : t = "text/x-mssql";
case "mysql":
return e ? t : t = "text/x-mysql";
case "mariadb":
return e ? t : t = "text/x-mariadb";
case "cassandra":
case "cql":
return e ? t : t = "text/x-cassandra";
case "plsql":
return e ? t : t = "text/x-plsql";
case "stex":
case "tex":
case "latex":
return e ? t : "text/x-stex";
case "tiddlywiki":
case "wiki":
return e ? t : t = "tiddlywiki";
case "vb":
case "visual basic":
case "visualbasic":
case "basic":
return e ? t : t = "vb";
case "vbscript":
case "velocity":
return t;
case "verilog":
return e ? t : t = "text/x-verilog";
case "xquery":
return t;
case "yaml":
case "yml":
return e ? t : "yaml";
case "go":
case "groovy":
case "nginx":
return t;
case "octave":
case "matlab":
return e ? t : "text/x-octave";
case "c":
case "clike":
case "csrc":
return e ? t : t = "text/x-csrc";
case "c++":
case "c++src":
case "cpp":
case "cc":
case "hpp":
case "h++":
case "h":
return e ? t : t = "text/x-c++src";
case "obj-c":
case "objc":
case "objective c":
case "objective-c":
case "objectivec":
return e ? t : t = "text/x-objectivec";
case "text/x-scala":
case "scala":
return e ? t : t = "text/x-scala";
case "csharp":
case "c#":
case "cs":
return e ? t : t = "text/x-csharp";
case "java":
return e ? t : t = "text/x-java";
case "squirrel":
return e ? t : t = "text/x-squirrel";
case "ceylon":
return e ? t : t = "text/x-ceylon";
case "kotlin":
return e ? t : t = "text/x-kotlin";
case "swift":
return t = "swift";
case "r":
case "rlang":
case "r-lang":
return e ? t : t = "text/x-rsrc";
case "d":
case "diff":
case "erlang":
case "http":
case "jade":
return t;
case "rst":
case "restructuredtext":
return t = "rst";
case "rust":
case "jinja2":
return t;
case "aspx":
case "asp":
case "asp.net":
return e ? t : t = "application/x-aspx";
case "jsp":
return e ? t : t = "application/x-jsp";
case "erb":
return e ? t : t = "application/x-erb";
case "ejs":
case "embeddedjs":
case "embedded javaScript":
return e ? t : t = "application/x-ejs";
case "powershell":
case "bat":
case "cmd":
return e ? t : "application/x-powershell";
case "dockerfile":
return e ? t : "text/x-dockerfile";
case "jsx":
case "react":
return e ? t : "text/jsx";
case "tsx":
return e ? t : "text/typescript-jsx";
case "vue.js":
case "vue":
case "vue-template":
return e ? t : "script/x-vue";
case "nsis":
return e ? t : "text/x-nsis";
case "mathematica":
return e ? t : "text/x-mathematica";
case "tiki":
case "tiki wiki":
case "tiki-wiki":
case "tikiwiki":
return "tiki";
case "properties":
case "ini":
return e ? t : "text/x-properties";
case "livescript":
return e ? t : "text/x-livescript";
case "asm":
case "assembly":
case "nasm":
case "gas":
return e ? t : "assembly";
case "toml":
return e ? t : "text/x-toml";
case "sequence":
return "sequence";
case "flow":
case "flowchart":
return "flow";
case "mermaid":
return "mermaid";
case "ocaml":
return e ? t : "text/x-ocaml";
case "f#":
case "fsharp":
return e ? t : "text/x-fsharp";
case "elm":
return e ? t : "text/x-elm";
case "pgp":
case "pgp-keys":
case "pgp-key":
case "pgp-signature":
case "asciiarmor":
case "ascii-armor":
case "ascii armor":
return e ? t : "application/pgp";
case "spreadsheet":
case "excel":
return e ? t : "text/x-spreadsheet";
case "elixir":
return "elixir";
case "cmake":
return e ? t : "text/x-cmake";
case "cypher":
case "cypher-query":
return e ? t : "application/x-cypher-query";
case "dart":
return "dart";
case "django":
return e ? t : "text/x-django";
case "dtd":
case "xml-dtd":
case "xml dtd":
case "xmldtd":
return e ? t : "application/xml-dtd";
case "dylan":
return e ? t : "text/x-dylan";
case "handlebars":
return e ? t : "text/x-handlebars-template";
case "idl":
return e ? t : "text/x-idl";
case "webidl":
case "web-idl":
case "web idl":
return e ? t : "text/x-webidl";
case "yacas":
return e ? t : "text/x-yacas";
case "mbox":
return e ? t : "application/mbox";
case "vhdl":
return e ? t : "text/x-vhdl";
case "julia":
return "julia";
case "haxe":
return e ? t : "text/x-haxe";
case "hxml":
return e ? t : "text/x-hxml";
case "fortran":
return e ? t : "text/x-fortran";
case "protobuf":
return e ? t : "text/x-protobuf";
case "makefile":
return e ? t : "text/x-makefile";
case "tcl":
return e ? t : "text/x-tcl";
case "scheme":
return e ? t : "text/x-scheme";
case "twig":
return e ? t : "text/x-twig";
case "sas":
return e ? t : "text/x-sas";
case "pseudocode":
return e ? t : "text/x-pseudocode";
case "julia":
case "text/x-julia":
case "stylus":
case "cobol":
case "oz":
case "sparql":
case "crystal":
return t;
case "asn.1":
return e ? "ASN.1" : t = "text/x-ttcn-asn";
case "gherkin":
case "smalltalk":
case "turtle":
return t;
default:
return "";
}
},
getCodeMirrorMode: function (t, e, n) {
var i = ((t = (t = t ? t.toLowerCase() : "").replace(/^\s*\.*lang(uage)*-/g, "").replace(/[{}]/g, "").trim()).split(/\s+/) || [t])[0],
r = Obsidian.v(t, n);
return r || t == i || (r = Obsidian.v(i.replace(/(^[.])|(,$)/g, ""), n)), r || (n ? i : e ? null : t);
},
loadingOut: function () {
setTimeout(function () {
$('html, body').removeClass('loading');
setTimeout(function () {
$('.loader').css('z-index', '-1');
}, 600);
}, 500);
}
};
$(function () {
initialMathJax();
var inputArea = document.querySelector("#local-search-input");
if (inputArea) {
inputArea.onclick = function () {
getSearchFile();
this.onclick = null;
};
inputArea.onkeydown = function () {
if (event.keyCode == 13) return false;
};
}
if ($('#post0').length) {
Obsidian.reactToWindowHeight();
}
if (Obsidian.P()) {
$('body').addClass('touch');
}
if ($('#preview').length) {
Obsidian.PS();
$('.pview a').addClass('pviewa');
Obsidian.loadingOut();
} else {
$('#single').css('min-height', window.innerHeight);
Obsidian.loadingOut();
window.addEventListener('popstate', function (e) {
if (e.state) location.href = e.state.u;
});
Obsidian.player();
$('.icon-icon, .image-icon').attr('href', '/');
$('#top').show();
}
(() => {
'use strict';
var refOffset = 0,
articleRefOffset = 0,
articleMenuHeight = 51,
menuHeight = 70,
header = document.querySelector('#header'),
logoImg = document.querySelector('.logo > img');
var handler = () => {
var newOffset = window.scrollY || window.pageYOffset;
if ($('#header').length && !$('.scrollbar').length) {
if (newOffset > menuHeight) {
if (newOffset > refOffset) {
header.classList.remove('animateIn');
header.classList.add('animateOut');
} else {
header.classList.remove('animateOut');
header.classList.add('animateIn');
}
header.style.paddingTop = '20px';
header.style.background = 'rgba(16,14,23,1)';
header.style.borderBottom = '1px solid #201c29';
header.style.boxShadow = '0 0 30px rgba(0, 0, 0, 1)';
refOffset = newOffset;
} else {
if ($(window).width() <= 780) {
header.style.paddingTop = '30px';
} else {
header.style.paddingTop = '70px';
}
header.style.background = 'transparent';
header.style.borderBottom = '0px';
header.style.boxShadow = 'none';
if (!logoImg.classList.contains('spin')) {
logoImg.classList.add('spin');
setTimeout(function () {
logoImg.classList.remove('spin');
}, 2000);
}
}
}
var topHeader = document.querySelector('#top');
var homeIcon = document.querySelector('#home-icon');
if (topHeader && $('.scrollbar').length && !$('.icon-images').hasClass('active')) {
if (newOffset > articleMenuHeight) {
if (newOffset > articleRefOffset) {
topHeader.classList.remove('animateIn');
topHeader.classList.add('animateOut');
$('.subtitle').fadeOut();
} else {
topHeader.classList.remove('animateOut');
topHeader.classList.add('animateIn');
$('.subtitle').fadeIn();
}
articleRefOffset = newOffset;
} else {
$('.subtitle').fadeOut();
if (!homeIcon.classList.contains('spin')) {
homeIcon.classList.add('spin');
setTimeout(function () {
homeIcon.classList.remove('spin');
}, 2000);
}
}
var wt = $(window).scrollTop(),
tw = $('#top').width(),
dh = document.body.scrollHeight,
wh = $(window).height();
var width = tw / (dh - wh) * wt;
$('.scrollbar').width(width);
}
var scrollTop = $(window).scrollTop(),
docHeight = $(document).height(),
winHeight = $(window).height(),
winWidth = $(window).width(),
scrollPercent = (scrollTop) / (docHeight - winHeight),
scrollPercentRounded = Math.round(scrollPercent * 100),
backToTopState = $('#back-to-top').css('display');
$('#back-to-top').find('.percentage').html(scrollPercentRounded + '%');
$('#back-to-top').find('.flow').css('height', scrollPercentRounded + '%');
if (winWidth >= 920) {
if (scrollPercentRounded > 10) {
if (backToTopState === 'none') {
$('#back-to-top').removeClass('fadeOutRight');
$('#back-to-top').addClass('fadeInRight');
$('#back-to-top').css('display', 'block');
}
} else {
if (backToTopState === 'block') {
setTimeout(function () {
$('#back-to-top').css('display', 'none');
}, 400);
$('#back-to-top').removeClass('fadeInRight');
$('#back-to-top').addClass('fadeOutRight');
}
}
}
};
window.addEventListener('scroll', handler, false);
})($);
$(window).on('touchmove', function (e) {
if ($('body').hasClass('mu')) {
e.preventDefault();
}
});
$('body').on('click', function (e) {
var tag = $(e.target).attr('class') || '',
rel = $(e.target).attr('rel') || '',
set,
clone;
// .content > ... > img
if (e.target.nodeName == "IMG" && $(e.target).parents('div.content').length > 0) {
tag = 'pimg';
}
if (!tag && !rel) return;
switch (true) {
case (tag.indexOf('share') != -1):
var shareComponent = $(".share-component-cc");
if (shareComponent.css('opacity') != '1') {
$(".share-component-cc").css('opacity', 1);
} else {
$(".share-component-cc").css('opacity', 0);
}
break;
case (tag.indexOf('icon-top02') != -1):
$("html,body").animate({
scrollTop: 0
}, 300);
break;
// nav menu
case (tag.indexOf('switchmenu') != -1):
window.scrollTo(0, 0);
$('html, body').toggleClass('mu');
var switchMenu = $('.switchmenu');
if (switchMenu.hasClass('icon-menu')) {
switchMenu.removeClass('icon-menu').addClass('icon-cross');
} else {
switchMenu.removeClass('icon-cross').addClass('icon-menu');
}
return false;
// next page
case (tag.indexOf('more') != -1):
tag = $('.more');
if (tag.data('status') == 'loading') {
return false;
}
var num = parseInt(tag.data('page')) || 1;
if (num == 1) {
tag.data('page', 1);
}
if (num >= Pages) {
return;
}
tag.html(tag.attr('data-loading')).data('status', 'loading');
Obsidian.loading();
Obsidian.L(tag.attr('href'), function (data) {
var link = $(data).find('.more').attr('href');
if (link != undefined) {
tag.attr('href', link).html(tag.attr('data-load-more')).data('status', 'loaded');
tag.data('page', parseInt(tag.data('page')) + 1);
} else {
$('#pager').remove();
}
var tempScrollTop = $(window).scrollTop();
$('#primary').append($(data).find('.post'));
$(window).scrollTop(tempScrollTop + 100);
Obsidian.loaded();
$('html,body').animate({
scrollTop: tempScrollTop + 400
}, 500);
document.querySelectorAll('pre code').forEach((block) => {
hljs.highlightBlock(block);
});
Obsidian.setCodeRowWithLang();
if ($('#vcomments').length) {
initValine();
}
}, function () {
tag.html(tag.attr('data-load-more')).data('status', 'loaded');
});
return false;
// home
case (tag.indexOf('icon-home') != -1):
$('.toc').fadeOut(100);
if ($('#preview').hasClass('show')) {
history.back();
} else {
location.href = $('.icon-home').data('url');
}
return false;
// qrcode
case (tag.indexOf('icon-QRcode-o') != -1):
if ($('.icon-scan').hasClass('tg')) {
$('#qr').toggle();
} else {
$('.icon-scan').addClass('tg');
$('#qr').qrcode({
width: 128,
height: 128,
text: location.href
}).toggle();
}
return false;
// audio play
case (tag.indexOf('icon-play') != -1):
$('#audio')[0].play();
$('.icon-play').removeClass('icon-play').addClass('icon-pause');
return false;
// audio pause
case (tag.indexOf('icon-pause') != -1):
$('#audio')[0].pause();
$('.icon-pause').removeClass('icon-pause').addClass('icon-play');
return false;
// history state
case (tag.indexOf('posttitle') != -1):
$('body').removeClass('fixed');
Obsidian.HS($(e.target), 'push');
// initialArticleTyped();
return false;
// history state
case (tag.indexOf('menu-link') != -1):
$('body').removeClass('fixed');
Obsidian.HS($(e.target), 'push');
return false;
// prev, next post
case (rel == 'prev' || rel == 'next'):
var t;
if (rel == 'prev') {
t = $('#prev_next a')[0].text;
} else {
t = $('#prev_next a')[1].text;
}
$(e.target).attr('title', t);
Obsidian.HS($(e.target), 'replace');
return false;
// toc
case (tag.indexOf('toc-text') != -1 ||
tag.indexOf('toc-link') != -1 ||
tag.indexOf('toc-number') != -1):
hash = '';
if (e.target.nodeName == 'SPAN') {
hash = $(e.target).parent().attr('href');
} else {
hash = $(e.target).attr('href');
}
to = $(".content :header").find('[href="' + hash + '"]');
$("html,body").animate({
scrollTop: to.offset().top - 80
}, 300);
return false;
// quick view
case (tag.indexOf('pviewa') != -1):
$('body').removeClass('mu');
setTimeout(function () {
Obsidian.HS($(e.target), 'push');
$('.toc').fadeIn(1000);
}, 300);
return false;
// photoswipe
case (tag.indexOf('pimg') != -1):
var pswpElement = $('.pswp').get(0);
if (pswpElement) {
var items = [];
var index = 0;
var imgs = [];
$('.content img').each(function (i, v) {
// get index
if (e.target.src == v.src) {
index = i;
}
var item = {
src: v.src,
w: v.naturalWidth,
h: v.naturalHeight
};
imgs.push(v);
items.push(item);
});
var options = {
index: index,
shareEl: false,
zoomEl: false,
allowRotationOnUserZoom: true,
history: false,
getThumbBoundsFn: function (index) {
// See Options -> getThumbBoundsFn section of documentation for more info
var thumbnail = imgs[index],
pageYScroll = window.pageYOffset || document.documentElement.scrollTop,
rect = thumbnail.getBoundingClientRect();
return {
x: rect.left,
y: rect.top + pageYScroll,
w: rect.width
};
}
};
var lightBox = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, options);
lightBox.init();
}
return false;
// comment
case -1 != tag.indexOf("comment"):
Obsidian.loading(),
comment = $('#gitalk-container');
var gitalk = new Gitalk({
clientID: comment.data('ci'),
clientSecret: comment.data('cs'),
repo: comment.data('r'),
owner: comment.data('o'),
admin: [comment.data('a')],
id: md5(window.location.pathname),
distractionFreeMode: comment.data('d'),
labels: ['Gitalk']
});
$(".comment").removeClass("link");
gitalk.render('gitalk-container');
Obsidian.loaded();
return false;
case (tag.indexOf('category-list-child') != -1):
tag = $(e.target);
set = $('.set');
clone = $('.clone-element');
var categoryMask = $('.category-mask'),
categoryDisplay = categoryMask.css('display'),
setHeight = set.height();
if (categoryDisplay == 'none') {
tag.parent('.category-list-item').addClass('active');
tag.find(".category-list-item").each(function () {
$(this).addClass('sub-active');
});
clone.append(set.html()).show();
clone.css('top', set.offset().top);
clone.css('left', set.offset().left);
set.empty().css('height', setHeight + 'px');
$('.category-mask').fadeIn(500);
}
return false;
case (tag.indexOf('category-mask') != -1):
set = $('.set');
clone = $('.clone-element');
set.append(clone.html()).css('height', 'auto');
clone.empty().hide();
$('.category-list-item.active').each(function () {
var that = $(this);
setTimeout(function () {
that.removeClass('active');
}, 400);
$(".sub-active").each(function () {
$(this).removeClass('sub-active');
});
});
$('.category-mask').fadeOut(500);
return false;
case (tag.indexOf('search-bar') != -1 || tag.indexOf('search-box-close') != -1):
var searchBox = $('.search-box'),
searchBoxDisplay = $('.search-box').css('display');
if (searchBoxDisplay != 'block') {
$('body').addClass('fixed');
searchBox.fadeIn(400);
} else {
$('body').removeClass('fixed');
searchBox.fadeOut(400);
}
return false;
default:
return true;
}
});
// 是否自动展开评论
comment = $("#gitalk-container");
if (comment.data('ae') == true) {
comment.click();
}
if ($('.article').length) {
Obsidian.tocSpy(200);
buildImgCaption();
Obsidian.initialShare();
}
// Watch window history changes
window.onpopstate = function (event) {
utiliseBgColor();
if ($('.search-box').css('display') == 'block') {
$('body').addClass('fixed');
}
};
utiliseBgColor();
initialTyped();
Obsidian.setCodeRowWithLang();
console.log("%c Github %c", "background:#24272A; color:#73ddd7", "", "https://github.com/TriDiamond/hexo-theme-obsidian");
});