diff options
author | hogelog | 2008-12-21 05:40:07 +0000 |
---|---|---|
committer | hogelog | 2008-12-21 05:40:07 +0000 |
commit | 5c43a3f1f2a188003f40827aa2f19f88cc1941fc (patch) | |
tree | 76b6f4f3ead828be07bf89f3649f9b83d2c735bc /takahashiPresentation.js | |
parent | 61ffc41c7713df2364fe653bde03d910d130b2e4 (diff) | |
download | vimperator-plugins-5c43a3f1f2a188003f40827aa2f19f88cc1941fc.tar.bz2 |
* add takahashiPresentation.js: takahashi-method presentation tool.
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27142 d0d07461-0603-4401-acd4-de1884942a52
Diffstat (limited to 'takahashiPresentation.js')
-rw-r--r-- | takahashiPresentation.js | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/takahashiPresentation.js b/takahashiPresentation.js new file mode 100644 index 0000000..a0c613b --- /dev/null +++ b/takahashiPresentation.js @@ -0,0 +1,111 @@ +// PLUGIN_INFO//{{{ +var PLUGIN_INFO = +<VimperatorPlugin> + <name>{NAME}</name> + <description>simple takahashi-method presentation tool</description> + <author mail="konbu.komuro@gmail.com" homepage="http://d.hatena.ne.jp/hogelog/">hogelog</author> + <version>0.1</version> + <minVersion>2.0a1</minVersion> + <maxVersion>2.0a1</maxVersion> + <detail><![CDATA[ + +== COMMANDS == +presentation: + start presentation +== HOWTO == +open html file includes <pre id="page">...</pre> and <div id="text">...</pre>. +start :presentation. + ]]></detail> +</VimperatorPlugin>; +//}}} +(function() { + plugins.presentation = {}; + let keys = [ + ['<Right>', 'next page', function() nextPage()], + ['<Left>', 'prev page', function() prevPage()], + ['^', 'first page', function() loadPage(0)], + ['$', 'last page', function() loadPage(pages.length-1)], + ['.', 'last page', function(count) loadPage(count?count-1:0), {flags: Mappings.flags.COUNT}], + ]; + let win; + let doc; + let pages = []; + let curpage = 0; + let pre; + let div; + let fontSize = 18.0; + + function addKeys() { + keys.forEach(function([key, desc, action, extra]) + mappings.addUserMap([modes.NORMAL], [key], desc, action, extra)); + } + function fitPage() { + if(pre.innerHTML=='') return; + pre.style.display = 'inline'; + let parentWidth = pre.parentNode.offsetWidth; + let parentHeight = pre.parentNode.offsetHeight; + let width = pre.offsetWidth; + let height = pre.offsetHeight; + let preRatio = width/height; + let winRatio = parentWidth/parentHeight; + if(preRatio>winRatio) { + fontSize *= 0.9*(parentWidth-10)/width; + } else { + fontSize *= 0.9*(parentHeight-10)/height; + } + pre.style.fontSize = fontSize+'px'; + pre.style.display = 'block'; + } + function loadPage(page) { + let text = pages[page]; + pre.innerHTML = text; + head.innerHTML = (page+1)+'/'+pages.length; + fitPage(); + } + function nextPage() { + curpage = curpage>=pages.length-1 ? 0 : curpage+1; + loadPage(curpage); + } + function prevPage() { + curpage = curpage<=0 ? pages.length-1 : curpage-1; + loadPage(curpage); + } + function parsePages(text) { + if(/:backgroundImage:(.+)\n/.test(text)) { + doc.body.style.backgroundImage = RegExp.$1; + doc.body.style.backgroundRepeat = 'repeat'; + } + text = text.replace(/:.+\n/g, ''); + return text.split('----').map(function(txt) txt.replace(/^\n/, '').replace(/\n$/, '')); + } + function start() { + options.fullscreen = true; + options.guioptions = ""; + win = window.content; + doc = win.document; + let text = buffer.evaluateXPath('//div[@id="text"]').snapshotItem(0); + pages = parsePages(text.innerHTML); + addKeys(); + + div = doc.createElement('div'); + head = doc.createElement('div'); + head.style.textAlign = 'right'; + doc.body.appendChild(head); + + pre = buffer.evaluateXPath('//pre[@id="page"]').snapshotItem(0); + pre.style.fontSize = fontSize+'px'; + pre.style.margin = '0px'; + + loadPage(0); + } + + commands.add(['presentation'], 'start presentation', //{{{ + function(args) { + stop(); + }, + { + argCount: '0', + }); //}}} + +})(); +// vim: fdm=marker sw=4 ts=4 et: |