]> _ Git - fluidbook-html5.git/commitdiff
(no commit message)
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 3 Sep 2013 16:41:30 +0000 (16:41 +0000)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 3 Sep 2013 16:41:30 +0000 (16:41 +0000)
js/libs/fluidbook/fluidbook.desktop.js
js/libs/fluidbook/fluidbook.nav.js
js/libs/modernizr/tests.js
js/libs/screenfull.js [new file with mode: 0644]

index 6ba6aaf3837a1dbfd8833f29ad45e3ba359567aa..986387fb43ee251b59af4baa9155a5a1114dfa49 100644 (file)
@@ -38,11 +38,18 @@ FluidbookDesktop.prototype = {
                        })
                }
        },
-       clickZoom: function(e) {
+       clickZoom: function(e, way) {
+               if (way == undefined) {
+                       if (this.desktopScale == 1) {
+                               way = 'in';
+                       } else {
+                               way = 'out';
+                       }
+               }
                var newScale;
-               if (this.desktopScale == 1) {
+               if (way == 'in') {
                        newScale = (this.fluidbook.datas.zoom / 100) / this.fluidbook.resize.bookScale;
-               } else {
+               } else if (way == 'out') {
                        newScale = 1;
                }
                this.updateDesktopScale(newScale);
index e61180eff1c0cc21de5a20a3e52b9c8716bf962f..156633ddb53fc15d2a536a044228e5d985c004c7 100644 (file)
@@ -1,7 +1,6 @@
 function FluidbookNav(fluidbook) {
        this.fluidbook = fluidbook;
        this._dimensions = this.fluidbook.datas.iconsDimensions;
-
        this.setNav();
 }
 
@@ -122,6 +121,25 @@ FluidbookNav.prototype = {
                                }
                        } else if (icon == 'help') {
                                this.addLink('nav-help', '#', 'help', '');
+                       } else if (icon == 'zoom' && !this.fluidbook.support.isMobile) {
+                               this.addLink('nav-zoomin', '#', 'zoomin', 'zoom in');
+                               this.addLink('nav-zoomout', '#', 'zoomout', 'zoom out');
+
+                               $("#zoomin").click(function(e) {
+                                       $this.fluidbook.desktop.clickZoom(e, 'in');
+                                       return false;
+                               });
+
+                               $("#zoomout").click(function() {
+                                       $this.fluidbook.desktop.clickZoom(e, 'out');
+                                       return false;
+                               });
+                       } else if (icon == 'fullscreen' && Modernizr.fullscreen) {
+                               this.addLink('nav-fullscreen', '#', 'fullscreen', 'switch between fullscreen and normal');
+                               $("#fullscreen").click(function() {
+                                       screenfull.toggle();
+                                       return false;
+                               })
                        }
                }
 
@@ -135,7 +153,6 @@ FluidbookNav.prototype = {
        },
        addMultilangLink: function(langs) {
                var l = '<a id="locales" help="!Select language" href="#/locales"></a>';
-
                var flag = this.fluidbook.l10n.getActiveFlag();
                if (flag === false) {
                        return;
@@ -146,15 +163,12 @@ FluidbookNav.prototype = {
        },
        setSearch: function() {
                var $this = this;
-
                var res = '<form action="#" id="searchForm" method="post">';
                res += '<input type="text" id="q" name="q" type="search" value="" placeholder="' + this.fluidbook.l10n.__('search') + '" autocorrect="off" autocomplete="off" autocapitalize="off" />';
                res += this.getLink('interface-search', '#', 'submitSearch');
                res += '<div id="searchHints"></div>';
                res += '</form>';
-
                $("#search").append(res);
-
                $("#submitSearch").click(function() {
                        $("#searchForm").submit();
                        return false;
@@ -169,9 +183,7 @@ FluidbookNav.prototype = {
                        window.location.hash = '/search/' + q;
                        return false;
                });
-
                $("#q").keyup(searchHints);
-
                $(document).on('click', ".hint", function() {
                        var e = $("#q").val().split(' ');
                        e.pop();
@@ -186,7 +198,6 @@ FluidbookNav.prototype = {
                                $this.fluidbook.hideSearchHints();
                        }, 250);
                });
-
                $("#nav").append($("#search"));
        },
        setAfterSearch: function() {
@@ -196,9 +207,7 @@ FluidbookNav.prototype = {
 
                var res = this.getLink('interface-previous', '#', 'previous', '', 'hidden');
                res += this.getLink('interface-next', '#', 'next');
-
                $('#interface').append(res);
-
                $(document).on('click', '#next', goNextPage);
                $(document).on('click', '#previous', goPreviousPage);
        }
index b4bf8894a69ec39f4921556ba83654b80b5e99b3..eda053c465fd34a2dd1b8148caa03bd24516357b 100644 (file)
@@ -17,16 +17,24 @@ Modernizr.addTest('csstransformspreserve3d', function() {
 });
 
 Modernizr.addTest('ftouch', function() {
-    var bool;
+       var bool;
 
-    if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch || ('onmsgesturechange' in window)) {
-        bool = true;
-    } else {
-        var query = ['@media (',Modernizr._prefixes.join('touch-enabled),('),'heartz',')','{#modernizr{top:9px;position:absolute}}'].join('');
-        Modernizr.testStyles(query, function( node ) {
-            bool = node.offsetTop === 9;
-        });
-    }
+       if (('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch || ('onmsgesturechange' in window)) {
+               bool = true;
+       } else {
+               var query = ['@media (', Modernizr._prefixes.join('touch-enabled),('), 'heartz', ')', '{#modernizr{top:9px;position:absolute}}'].join('');
+               Modernizr.testStyles(query, function(node) {
+                       bool = node.offsetTop === 9;
+               });
+       }
+
+       return bool;
+});
 
-    return bool;
+Modernizr.addTest('fullscreen',function(){
+     for(var i = 0; i < Modernizr._domPrefixes.length; i++) {
+        if( document[Modernizr._domPrefixes[i].toLowerCase() + 'CancelFullScreen'])
+            return true;
+     }
+     return !!document['cancelFullScreen'] || false;
 });
\ No newline at end of file
diff --git a/js/libs/screenfull.js b/js/libs/screenfull.js
new file mode 100644 (file)
index 0000000..f8b2c49
--- /dev/null
@@ -0,0 +1,128 @@
+/*global Element */
+(function (window, document) {
+       'use strict';
+
+       var keyboardAllowed = typeof Element !== 'undefined' && 'ALLOW_KEYBOARD_INPUT' in Element, // IE6 throws without typeof check
+
+               fn = (function () {
+                       var val, valLength;
+                       var fnMap = [
+                               [
+                                       'requestFullscreen',
+                                       'exitFullscreen',
+                                       'fullscreenElement',
+                                       'fullscreenEnabled',
+                                       'fullscreenchange',
+                                       'fullscreenerror'
+                               ],
+                               // new WebKit
+                               [
+                                       'webkitRequestFullscreen',
+                                       'webkitExitFullscreen',
+                                       'webkitFullscreenElement',
+                                       'webkitFullscreenEnabled',
+                                       'webkitfullscreenchange',
+                                       'webkitfullscreenerror'
+
+                               ],
+                               // old WebKit (Safari 5.1)
+                               [
+                                       'webkitRequestFullScreen',
+                                       'webkitCancelFullScreen',
+                                       'webkitCurrentFullScreenElement',
+                                       'webkitCancelFullScreen',
+                                       'webkitfullscreenchange',
+                                       'webkitfullscreenerror'
+
+                               ],
+                               [
+                                       'mozRequestFullScreen',
+                                       'mozCancelFullScreen',
+                                       'mozFullScreenElement',
+                                       'mozFullScreenEnabled',
+                                       'mozfullscreenchange',
+                                       'mozfullscreenerror'
+                               ]
+                       ];
+                       var i = 0;
+                       var l = fnMap.length;
+                       var ret = {};
+
+                       for (; i < l; i++) {
+                               val = fnMap[i];
+                               if (val && val[1] in document) {
+                                       for (i = 0, valLength = val.length; i < valLength; i++) {
+                                               ret[fnMap[0][i]] = val[i];
+                                       }
+                                       return ret;
+                               }
+                       }
+                       return false;
+               })(),
+
+               screenfull = {
+                       request: function (elem) {
+                               var request = fn.requestFullscreen;
+
+                               elem = elem || document.documentElement;
+
+                               // Work around Safari 5.1 bug: reports support for
+                               // keyboard in fullscreen even though it doesn't.
+                               // Browser sniffing, since the alternative with
+                               // setTimeout is even worse.
+                               if (/5\.1[\.\d]* Safari/.test(navigator.userAgent)) {
+                                       elem[request]();
+                               } else {
+                                       elem[request](keyboardAllowed && Element.ALLOW_KEYBOARD_INPUT);
+                               }
+                       },
+                       exit: function () {
+                               document[fn.exitFullscreen]();
+                       },
+                       toggle: function (elem) {
+                               if (this.isFullscreen) {
+                                       this.exit();
+                               } else {
+                                       this.request(elem);
+                               }
+                       },
+                       onchange: function () {},
+                       onerror: function () {},
+                       raw: fn
+               };
+
+       if (!fn) {
+               return window.screenfull = false;
+       }
+
+       Object.defineProperties(screenfull, {
+               isFullscreen: {
+                       get: function () {
+                               return !!document[fn.fullscreenElement];
+                       }
+               },
+               element: {
+                       enumerable: true,
+                       get: function () {
+                               return document[fn.fullscreenElement];
+                       }
+               },
+               enabled: {
+                       enumerable: true,
+                       get: function () {
+                               // Coerce to boolean in case of old WebKit
+                               return !!document[fn.fullscreenEnabled];
+                       }
+               }
+       });
+
+       document.addEventListener(fn.fullscreenchange, function (e) {
+               screenfull.onchange.call(screenfull, e);
+       });
+
+       document.addEventListener(fn.fullscreenerror, function (e) {
+               screenfull.onerror.call(screenfull, e);
+       });
+
+       window.screenfull = screenfull;
+})(window, document);