mirror of
https://github.com/amix/vimrc
synced 2025-07-10 03:25:00 +08:00
add Previm and window management
This commit is contained in:
File diff suppressed because one or more lines are too long
6
sources_non_forked/previm/preview/js/lib/marked.min.js
vendored
Normal file
6
sources_non_forked/previm/preview/js/lib/marked.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
25
sources_non_forked/previm/preview/js/lib/mermaid.min.js
vendored
Normal file
25
sources_non_forked/previm/preview/js/lib/mermaid.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1285
sources_non_forked/previm/preview/js/lib/textile.js
Normal file
1285
sources_non_forked/previm/preview/js/lib/textile.js
Normal file
File diff suppressed because it is too large
Load Diff
119
sources_non_forked/previm/preview/js/previm.js
Normal file
119
sources_non_forked/previm/preview/js/previm.js
Normal file
@ -0,0 +1,119 @@
|
||||
'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);
|
Reference in New Issue
Block a user