diff --git a/PDFjs/main.css b/PDFjs/main.css index 8ede8dc..beaef2a 100644 --- a/PDFjs/main.css +++ b/PDFjs/main.css @@ -29,5 +29,19 @@ */ .ApplicationPDFjsWindow gui-container { - background : #fff; + overflow: auto; + padding-top: 6px; + padding-bottom: 6px; + position: absolute; + top: 32px; + right: 0; + bottom: 32px; + left: 0; + text-align: center; + background-color: #888; + background-image: url(texture.png); +} +.ApplicationPDFjsWindow canvas { + text-align: center; + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); } diff --git a/PDFjs/main.js b/PDFjs/main.js index f390e9f..542b522 100644 --- a/PDFjs/main.js +++ b/PDFjs/main.js @@ -57,6 +57,7 @@ ApplicationPDFjsWindow.prototype.init = function(wmRef, app, scheme) { var root = DefaultApplicationWindow.prototype.init.apply(this, arguments); var self = this; + // Load and set up scheme (GUI) here scheme.render(this, 'PDFWindow', root); @@ -73,6 +74,24 @@ scheme.find(this, 'Out').on('click', function() { self.zoomOut(); }); + scheme.find(this, 'Print').on('click', function() { + self.printDocument(); + }); + scheme.find(this, 'First').on('click', function() { + self.firstPage(); + }); + scheme.find(this, 'Last').on('click', function() { + self.lastPage(); + }); + scheme.find(this, 'pageNumber').on('enter', function() { + self.changePage(); + }); + scheme.find(this, 'Fullscreen').on('click', function() { + self.fullScreenMode(); + }); + document.getElementById('canvas').addEventListener('wheel', function(){ + self.pageScroll(); + }); return root; }; @@ -93,22 +112,23 @@ } var container = this._scheme.find(this, 'Content').$element; - Utils.$empty(container); + //Utils.$empty(container); this.pageIndex = pageNum; - var statustext = Utils.format('Page {0}/{1} - {2}%', this.pageIndex, this.pageCount, this.currentScale*100); + var statustext = Utils.format(' - {0}%', this.currentScale*100); + var pageNumber = Utils.format('{0}/{1}', this.pageIndex, this.pageCount); this._scheme.find(this, 'Statusbar').set('value', statustext); + this._scheme.find(this, 'pageNumber').set('value', pageNumber); this.pdf.getPage(this.pageIndex).then(function getPageHelloWorld(page) { var scale = self.currentScale; var viewport = page.getViewport(scale); - var canvas = document.createElement('canvas'); + var canvas = document.getElementById('canvas'); var context = canvas.getContext('2d'); canvas.height = viewport.height; canvas.width = viewport.width; - - container.appendChild(canvas); + context.clearRect(0, 0, viewport.width, viewport.height); var renderContext = { canvasContext: context, @@ -137,12 +157,65 @@ } this.page(this.pageIndex); }; + + ApplicationPDFjsWindow.prototype.printDocument = function() { + var canvas = document.getElementById("canvas"); + var img = canvas.toDataURL("image/png"); + window.frames["print_frame"].document.body.innerHTML= ''; + window.frames["print_frame"].window.focus(); + window.frames["print_frame"].window.print(); + }; + + ApplicationPDFjsWindow.prototype.firstPage = function() { + this.page(1); + }; + + ApplicationPDFjsWindow.prototype.lastPage = function() { + this.page(this.pageCount); + }; + + ApplicationPDFjsWindow.prototype.changePage = function() { + var pageNumber = Number(this._scheme.find(this, 'pageNumber').get('value')); + if ( Math.floor(pageNumber) == pageNumber && pageNumber > 0 ) { + if( pageNumber <= this.pageCount ) { + this.page(pageNumber); + } else { + API.createDialog('Alert', { + message: 'The page number \''+ pageNumber +'\' you inputted cannot be found in this document.' + }, null, this); + var _pageNumber = Utils.format('{0}/{1}', this.pageIndex, this.pageCount); + this._scheme.find(this, 'pageNumber').set('value', _pageNumber); + } + } else { + var _pageNumber = Utils.format('{0}/{1}', this.pageIndex, this.pageCount); + this._scheme.find(this, 'pageNumber').set('value', _pageNumber); + } + }; + + ApplicationPDFjsWindow.prototype.fullScreenMode = function() { + var content = document.getElementById("canvas"); + screenfull.request(content); + }; + + ApplicationPDFjsWindow.prototype.pageScroll = function() { + var delta = 0; + if (!event) + event = window.event; + if (event.wheelDelta) { + delta = event.wheelDelta/120; + } else if (event.detail) { + delta = -event.detail/3; + } + console.log(delta); + if ( delta > 0 ) this.page(this.pageIndex-1); + else this.page(this.pageIndex+1); + }; ApplicationPDFjsWindow.prototype.showFile = function(file, result) { var self = this; var container = this._scheme.find(this, 'Content').$element; - Utils.$empty(container); + //Utils.$empty(container); this.pageCount = 0; this.pageIndex = 0; diff --git a/PDFjs/metadata.json b/PDFjs/metadata.json index d9a2c60..526f28f 100644 --- a/PDFjs/metadata.json +++ b/PDFjs/metadata.json @@ -16,6 +16,7 @@ }, "preload": [ {"src": "vendor/pdf.js/build/pdf.js", "type": "javascript"}, + {"src": "vendor/fullscreen.js/screenfull.min.js", "type": "javascript"}, {"src": "main.js", "type": "javascript"}, {"src": "main.css", "type": "stylesheet"} ] diff --git a/PDFjs/scheme.html b/PDFjs/scheme.html index ac9cc03..e2caff5 100644 --- a/PDFjs/scheme.html +++ b/PDFjs/scheme.html @@ -1,4 +1,4 @@ - + @@ -18,11 +18,17 @@ + + + - + + + + @@ -30,15 +36,19 @@ + - + + 0 + - + + diff --git a/PDFjs/vendor/fullscreen.js/screenfull.min.js b/PDFjs/vendor/fullscreen.js/screenfull.min.js new file mode 100644 index 0000000..b342d1a --- /dev/null +++ b/PDFjs/vendor/fullscreen.js/screenfull.min.js @@ -0,0 +1,6 @@ +/*! +* screenfull +* v3.0.0 - 2015-11-24 +* (c) Sindre Sorhus; MIT License +*/ +!function(){"use strict";var a="undefined"!=typeof module&&module.exports,b="undefined"!=typeof Element&&"ALLOW_KEYBOARD_INPUT"in Element,c=function(){for(var a,b,c=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],d=0,e=c.length,f={};e>d;d++)if(a=c[d],a&&a[1]in document){for(d=0,b=a.length;b>d;d++)f[c[0][d]]=a[d];return f}return!1}(),d={request:function(a){var d=c.requestFullscreen;a=a||document.documentElement,/5\.1[\.\d]* Safari/.test(navigator.userAgent)?a[d]():a[d](b&&Element.ALLOW_KEYBOARD_INPUT)},exit:function(){document[c.exitFullscreen]()},toggle:function(a){this.isFullscreen?this.exit():this.request(a)},raw:c};return c?(Object.defineProperties(d,{isFullscreen:{get:function(){return Boolean(document[c.fullscreenElement])}},element:{enumerable:!0,get:function(){return document[c.fullscreenElement]}},enabled:{enumerable:!0,get:function(){return Boolean(document[c.fullscreenEnabled])}}}),void(a?module.exports=d:window.screenfull=d)):void(a?module.exports=!1:window.screenfull=!1)}(); \ No newline at end of file diff --git a/PDFjs/vendor/pdf.js b/PDFjs/vendor/pdf.js index 8623421..a0a6e6d 160000 --- a/PDFjs/vendor/pdf.js +++ b/PDFjs/vendor/pdf.js @@ -1 +1 @@ -Subproject commit 862342189fb1911395d0cc43db083726203c4a88 +Subproject commit a0a6e6d688bd43c0ba680025702d1b7228f4c89c