// PLUGIN_INFO//{{{
var PLUGIN_INFO =
    {NAME}
    simple takahashi-method presentation tool
    hogelog
    0.1
    2.0a1
    2.0a1
    ... and ...
.
start :presentation.
     ]]>
;
//}}}
(function() {
    plugins.presentation = {};
    let keys = [
        ['', 'next page', function() nextPage()],
        ['', '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:(.+)(?:\r\n|[\r\n])/.test(text)) {
            doc.body.style.backgroundImage = RegExp.$1;
            doc.body.style.backgroundRepeat = 'repeat';
        }
        return text.replace(/(?::.+(?:\r\n|[\r\n]))+/g, '')
                   .split('----')
                   .map(function(txt) txt.replace(/^(?:\r\n|[\r\n])|(?:\r\n|[\r\n])$/g, ''));
    }
    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.body.appendChild(doc.createElement('div'));
        head.style.textAlign = 'right';
        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) {
            start();
        },
        {
            argCount: '0',
        }); //}}}
})();
// vim: fdm=marker sw=4 ts=4 et: