From 1e114265672bb648375e8d5cd4d71c31b39503fe Mon Sep 17 00:00:00 2001 From: anekos Date: Sun, 16 Oct 2011 00:45:34 +0900 Subject: フルスクリーン切り替えコマンド追加 --- slideshare.js | 137 +++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 87 insertions(+), 50 deletions(-) (limited to 'slideshare.js') diff --git a/slideshare.js b/slideshare.js index 11059aa..fd34022 100644 --- a/slideshare.js +++ b/slideshare.js @@ -35,7 +35,7 @@ THE POSSIBILITY OF SUCH DAMAGE. // INFO {{{ let INFO = <> - :Slideshare prev

Go previous page.

+ + :slideshare-fullscreen + :Slideshare fullscreen +

Toggle fullscreen.

+
:Slideshare prev

前のページに移動

+ + :slideshare-fullscreen + :Slideshare fullscreen +

フルスクリーン切り換え

+
; // }}} @@ -81,80 +91,106 @@ let INFO = (function () { + function makeStyleToggler (myStyle, e) { + let originalStyle = e.getAttribute('style') || ''; + return function () { + if (e.__anekos_style_override) { + e.setAttribute('style', originalStyle); + delete e.__anekos_style_override; + } else { + e.setAttribute('style', originalStyle + myStyle.toString()); + e.__anekos_style_override = true; + } + } + } + + function makeFullscreenToggler (doc, main) { + const hiddenStyle = 'display: none !important'; + + let styleTogglers = Array.slice(doc.querySelectorAll('object')).map(makeStyleToggler.bind(null, hiddenStyle)); + + return function (callback) { + main(); + styleTogglers.forEach(function (f) f()); + setTimeout(function () { + if (callback) + callback(); + }, 1000); + }; + } + function HTML5Slideshare (doc, callback) { let win = doc.defaultView; let player = win.player; - doc.querySelector('.btnFullScreen').click(); + let toggleFullscreen = + makeFullscreenToggler( + doc, + let (isFullscreen = false) + function () { + doc.querySelector(isFullscreen ? '.btnLeaveFullScreen' : '.btnFullScreen').click(); + isFullscreen ^= true; + } + ); + + toggleFullscreen( + function () { + callback({ + next: function () { + player.play(this.current + 1); + }, - callback({ - next: function () { - player.play(this.current + 1); - }, + previous: function () { + if (this.current > 1) + player.play(this.current - 1); + }, - previous: function () { - if (this.current > 1) - player.play(this.current - 1); - }, + toggleFullscreen: function () { + toggleFullscreen(); + }, - get current () player.controller.currentPosition - }); + get current () player.controller.currentPosition + }); + } + ); } function FlashSlideshare (doc, callback) { let player = doc.querySelector('#player'); - let include = doc.querySelector('#h-flashplayer-inclusions').textContent; - let pp = player.parentNode; - doc.body.appendChild(pp); + const fullScreenStyle = <>; - let cs = doc.body.children; - for (var i = cs.length - 1; i >=0; i--) - if (cs[i] !== pp) - cs[i].style.display = 'none'; + styleTogglers.push(); - doc.defaultView.eval(include); + let toggleFullscreen = makeFullscreenToggler(doc, makeStyleToggler(fullScreenStyle, player)); - setTimeout( + toggleFullscreen( function () { - player = doc.querySelector('#player'); - player.setAttribute( - 'style', - player.getAttribute('style') + <> - ); - - pp.setAttribute( - 'style', - pp.getAttribute('style') + <> - ); - callback({ next: function () { - player.next(); + this.player.next(); }, previous: function () { - player.previous(); + this.player.previous(); }, + toggleFullscreen: function () { + toggleFullscreen(); + }, + + get player () doc.querySelector('#player'), + get current () player.controller.currentPosition }); - }, - 100 + } ); } @@ -186,6 +222,7 @@ let INFO = subCommands: [ new Command(['n[ext]'], 'Go next page', function () Slideshare(function () this.next())), new Command(['p[rev]'], 'Go previous page', function () Slideshare(function () this.previous())), + new Command(['f[ullscreen]'], 'Toggle fullscrenn', function () Slideshare(function () this.toggleFullscreen())), ] }, true -- cgit v1.2.3