mirror of
https://github.com/amix/vimrc
synced 2025-02-28 14:12:51 +08:00
120 lines
3.8 KiB
JavaScript
120 lines
3.8 KiB
JavaScript
'use strict';
|
|
|
|
(function(_doc, _win) {
|
|
var REFRESH_INTERVAL = 1000;
|
|
var marked_renderer = new marked.Renderer();
|
|
var defaultCodeBlockRenderer = marked_renderer.code;
|
|
|
|
marked_renderer.code = function (code, language) {
|
|
if(language === 'mermaid'){
|
|
return '<div class="mermaid">' + code + '</div>';
|
|
} else {
|
|
return defaultCodeBlockRenderer.apply(this, arguments);
|
|
}
|
|
};
|
|
|
|
function transform(filetype, content) {
|
|
if(hasTargetFileType(filetype, ['markdown', 'mkd'])) {
|
|
return marked(content, { renderer: marked_renderer });
|
|
} else if(hasTargetFileType(filetype, ['rst'])) {
|
|
// It has already been converted by rst2html.py
|
|
return content;
|
|
} else if(hasTargetFileType(filetype, ['textile'])) {
|
|
return textile(content);
|
|
}
|
|
return 'Sorry. It is a filetype(' + filetype + ') that is not support<br /><br />' + content;
|
|
}
|
|
|
|
function hasTargetFileType(filetype, targetList) {
|
|
var ftlist = filetype.split('.');
|
|
for(var i=0;i<ftlist.length; i++) {
|
|
if(targetList.indexOf(ftlist[i]) > -1){
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// NOTE: Experimental
|
|
// ここで動的にpageYOffsetを取得すると画像表示前の高さになってしまう
|
|
// そのため明示的にpageYOffsetを受け取るようにしている
|
|
function autoScroll(id, pageYOffset) {
|
|
var relaxed = 0.95;
|
|
var obj = document.getElementById(id);
|
|
if((_doc.documentElement.clientHeight + pageYOffset) / _doc.body.clientHeight > relaxed) {
|
|
obj.scrollTop = obj.scrollHeight;
|
|
} else {
|
|
obj.scrollTop = pageYOffset;
|
|
}
|
|
}
|
|
|
|
function style_header() {
|
|
if (typeof isShowHeader === 'function') {
|
|
var style = isShowHeader() ? '' : 'none';
|
|
_doc.getElementById('header').style.display = style;
|
|
}
|
|
}
|
|
|
|
function loadPreview() {
|
|
var needReload = false;
|
|
// These functions are defined as the file generated dynamically.
|
|
// generator-file: preview/autoload/previm.vim
|
|
// generated-file: preview/js/previm-function.js
|
|
if (typeof getFileName === 'function') {
|
|
if (_doc.getElementById('markdown-file-name').innerHTML !== getFileName()) {
|
|
_doc.getElementById('markdown-file-name').innerHTML = getFileName();
|
|
needReload = true;
|
|
}
|
|
} else {
|
|
needReload = true;
|
|
}
|
|
if (typeof getLastModified === 'function') {
|
|
if (_doc.getElementById('last-modified').innerHTML !== getLastModified()) {
|
|
_doc.getElementById('last-modified').innerHTML = getLastModified();
|
|
needReload = true;
|
|
}
|
|
} else {
|
|
needReload = true;
|
|
}
|
|
if (needReload && (typeof getContent === 'function') && (typeof getFileType === 'function')) {
|
|
var beforePageYOffset = _win.pageYOffset;
|
|
_doc.getElementById('preview').innerHTML = transform(getFileType(), getContent());
|
|
|
|
mermaid.init();
|
|
Array.prototype.forEach.call(_doc.querySelectorAll('pre code'), hljs.highlightBlock);
|
|
autoScroll('body', beforePageYOffset);
|
|
style_header();
|
|
}
|
|
}
|
|
|
|
_win.setInterval(function() {
|
|
var script = _doc.createElement('script');
|
|
|
|
script.type = 'text/javascript';
|
|
script.src = 'js/previm-function.js?t=' + new Date().getTime();
|
|
|
|
_addEventListener(script, 'load', (function() {
|
|
loadPreview();
|
|
_win.setTimeout(function() {
|
|
script.parentNode.removeChild(script);
|
|
}, 160);
|
|
})());
|
|
|
|
_doc.getElementsByTagName('head')[0].appendChild(script);
|
|
|
|
}, REFRESH_INTERVAL);
|
|
|
|
function _addEventListener(target, type, listener) {
|
|
if (target.addEventListener) {
|
|
target.addEventListener(type, listener, false);
|
|
} else if (target.attachEvent) {
|
|
// for IE6 - IE8
|
|
target.attachEvent('on' + type, function() { listener.apply(target, arguments); });
|
|
} else {
|
|
// do nothing
|
|
}
|
|
}
|
|
|
|
loadPreview();
|
|
})(document, window);
|