1
0
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:
Max Alcala
2016-02-23 14:35:43 -06:00
parent f3143286d3
commit 14bf4d01c6
45 changed files with 3967 additions and 77 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View 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);