PDF Embedder - Version 2.8

Version Description

Internal code refactoring. Added note that 'page turning arrows' are now available in the premium versions.

Download this release

Release Info

Developer danlester
Plugin Icon 128x128 PDF Embedder
Version 2.8
Comparing to
See all releases

Code changes from version 2.7.5 to 2.8

core/core_pdf_embedder.php CHANGED
@@ -26,7 +26,7 @@ class core_pdf_embedder {
26
 
27
  wp_enqueue_script( 'pdfemb_pdf_js' );
28
 
29
- wp_enqueue_style( 'pdfemb_embed_pdf_css', $this->my_plugin_url().'css/pdfemb-embed-pdf.css' );
30
  }
31
  }
32
 
@@ -140,8 +140,8 @@ class core_pdf_embedder {
140
  $height = 'max';
141
  }
142
 
143
- $toolbar = isset($atts['toolbar']) && in_array($atts['toolbar'], array('top', 'bottom', 'both')) ? $atts['toolbar'] : $options['pdfemb_toolbar'];
144
- if (!in_array($toolbar, array('top', 'bottom', 'both'))) {
145
  $toolbar = 'bottom';
146
  }
147
 
@@ -212,7 +212,7 @@ class core_pdf_embedder {
212
  public function pdfemb_options_do_page() {
213
 
214
  wp_enqueue_script( 'pdfemb_admin_js', $this->my_plugin_url().'js/admin/pdfemb-admin.js', array('jquery') );
215
- wp_enqueue_style( 'pdfemb_admin_css', $this->my_plugin_url().'css/pdfemb-admin.css' );
216
 
217
  $submit_page = is_multisite() ? 'edit.php?action='.$this->get_options_menuname() : 'options.php';
218
 
@@ -311,6 +311,7 @@ class core_pdf_embedder {
311
  <option value="top" <?php echo $options['pdfemb_toolbar'] == 'top' ? 'selected' : ''; ?>><?php esc_html_e('Top', 'pdf-embedder'); ?></option>
312
  <option value="bottom" <?php echo $options['pdfemb_toolbar'] == 'bottom' ? 'selected' : ''; ?>><?php esc_html_e('Bottom', 'pdf-embedder'); ?></option>
313
  <option value="both" <?php echo $options['pdfemb_toolbar'] == 'both' ? 'selected' : ''; ?>><?php esc_html_e('Both', 'pdf-embedder'); ?></option>
 
314
  </select>
315
  <br class="clear" />
316
  <br class="clear" />
@@ -340,6 +341,10 @@ class core_pdf_embedder {
340
  <?php
341
  }
342
 
 
 
 
 
343
  protected function pdfemb_mainsection_extra() {
344
  // Override in Basic and Commercial
345
  }
@@ -392,7 +397,7 @@ class core_pdf_embedder {
392
  );
393
  }
394
 
395
- if (isset($input['pdfemb_toolbar']) && in_array($input['pdfemb_toolbar'], array('top', 'bottom', 'both'))) {
396
  $newinput['pdfemb_toolbar'] = $input['pdfemb_toolbar'];
397
  }
398
  else {
@@ -537,7 +542,7 @@ class core_pdf_embedder {
537
 
538
  add_filter( 'attachment_fields_to_edit', array($this, 'pdfemb_attachment_fields_to_edit'), 10, 2 );
539
 
540
- wp_enqueue_style( 'pdfemb_admin_other_css', $this->my_plugin_url().'css/pdfemb-admin-other.css' );
541
  }
542
 
543
  // Override in Basic and Commercial
26
 
27
  wp_enqueue_script( 'pdfemb_pdf_js' );
28
 
29
+ wp_enqueue_style( 'pdfemb_embed_pdf_css', $this->my_plugin_url().'css/pdfemb-embed-pdf.css', array(), $this->PLUGIN_VERSION );
30
  }
31
  }
32
 
140
  $height = 'max';
141
  }
142
 
143
+ $toolbar = isset($atts['toolbar']) && in_array($atts['toolbar'], array('top', 'bottom', 'both', 'none')) ? $atts['toolbar'] : $options['pdfemb_toolbar'];
144
+ if (!in_array($toolbar, array('top', 'bottom', 'both', 'none'))) {
145
  $toolbar = 'bottom';
146
  }
147
 
212
  public function pdfemb_options_do_page() {
213
 
214
  wp_enqueue_script( 'pdfemb_admin_js', $this->my_plugin_url().'js/admin/pdfemb-admin.js', array('jquery') );
215
+ wp_enqueue_style( 'pdfemb_admin_css', $this->my_plugin_url().'css/pdfemb-admin.css', array(), $this->PLUGIN_VERSION );
216
 
217
  $submit_page = is_multisite() ? 'edit.php?action='.$this->get_options_menuname() : 'options.php';
218
 
311
  <option value="top" <?php echo $options['pdfemb_toolbar'] == 'top' ? 'selected' : ''; ?>><?php esc_html_e('Top', 'pdf-embedder'); ?></option>
312
  <option value="bottom" <?php echo $options['pdfemb_toolbar'] == 'bottom' ? 'selected' : ''; ?>><?php esc_html_e('Bottom', 'pdf-embedder'); ?></option>
313
  <option value="both" <?php echo $options['pdfemb_toolbar'] == 'both' ? 'selected' : ''; ?>><?php esc_html_e('Both', 'pdf-embedder'); ?></option>
314
+ <?php $this->no_toolbar_option($options); ?>
315
  </select>
316
  <br class="clear" />
317
  <br class="clear" />
341
  <?php
342
  }
343
 
344
+ protected function no_toolbar_option($options) {
345
+ // Override in commercial
346
+ }
347
+
348
  protected function pdfemb_mainsection_extra() {
349
  // Override in Basic and Commercial
350
  }
397
  );
398
  }
399
 
400
+ if (isset($input['pdfemb_toolbar']) && in_array($input['pdfemb_toolbar'], array('top', 'bottom', 'both', 'none'))) {
401
  $newinput['pdfemb_toolbar'] = $input['pdfemb_toolbar'];
402
  }
403
  else {
542
 
543
  add_filter( 'attachment_fields_to_edit', array($this, 'pdfemb_attachment_fields_to_edit'), 10, 2 );
544
 
545
+ wp_enqueue_style( 'pdfemb_admin_other_css', $this->my_plugin_url().'css/pdfemb-admin-other.css', array(), $this->PLUGIN_VERSION );
546
  }
547
 
548
  // Override in Basic and Commercial
css/pdfemb-embed-pdf.css CHANGED
@@ -376,3 +376,55 @@ input.pdfemb-page-num {
376
  .pdfembAnnotationLayer .strikeoutAnnotation {
377
  cursor: pointer;
378
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
376
  .pdfembAnnotationLayer .strikeoutAnnotation {
377
  cursor: pointer;
378
  }
379
+
380
+ .pdfemb-pageturner {
381
+ padding: 0px;
382
+ margin: 0px;
383
+ border: none;
384
+ z-index: 8;
385
+ position: absolute;
386
+
387
+ width: 64px;
388
+ min-height: 96px;
389
+ height: 100%;
390
+
391
+ opacity: 0;
392
+ background-color: lightgray;
393
+ }
394
+
395
+ .pdfemb-pageturner-bottomright {
396
+ bottom: 0px;
397
+ right: 0px;
398
+ }
399
+
400
+ .pdfemb-pageturner-bottomright.pdfemb-pageturner-arrow {
401
+ background-image: url('../img/ptrightarrow.png');
402
+ background-position: right center;
403
+ background-repeat: no-repeat;
404
+
405
+ cursor: pointer;
406
+ opacity: 0.6;
407
+
408
+ transition: opacity 0.45s ease-in-out;
409
+ -moz-transition: opacity 0.45s ease-in-out;
410
+ -webkit-transition: opacity 0.45s ease-in-out;
411
+ }
412
+
413
+ .pdfemb-pageturner-bottomleft {
414
+ bottom: 0px;
415
+ left: 0px;
416
+ }
417
+
418
+ .pdfemb-pageturner-bottomleft.pdfemb-pageturner-arrow {
419
+ background-image: url('../img/ptleftarrow.png');
420
+ background-position: left center;
421
+ background-repeat: no-repeat;
422
+
423
+ opacity: 0.6;
424
+
425
+ cursor: pointer;
426
+
427
+ transition: opacity 0.45s ease-in-out;
428
+ -moz-transition: opacity 0.45s ease-in-out;
429
+ -webkit-transition: opacity 0.45s ease-in-out;
430
+ }
img/ptleftarrow.png ADDED
Binary file
img/ptrightarrow.png ADDED
Binary file
img/toolbarButton-pageDown.png CHANGED
Binary file
img/toolbarButton-pageUp.png CHANGED
Binary file
js/all-pdfemb-basic.min.js CHANGED
@@ -6,18 +6,19 @@ this.element.scrollTop;this.clientXStart=a.clientX;this.clientYStart=a.clientY;t
6
  this.element.scrollTop;this.element.scrollTop=this.scrollTopStart-40*a;this.overlay.parentNode||document.body.appendChild(this.overlay)},_endPan:function(){this.element.removeEventListener("scroll",this._endPan,!0);this.document.removeEventListener("mousemove",this._onmousemove,!0);this.document.removeEventListener("mouseup",this._endPan,!0);this.overlay.parentNode&&this.overlay.parentNode.removeChild(this.overlay)}};var h;["webkitM","mozM","msM","oM","m"].some(function(a){a+="atches";a in document.documentElement&&
7
  (h=a);a+="Selector";a in document.documentElement&&(h=a);return h});var a=!document.documentMode||9<document.documentMode,d=window.chrome,b=d&&(d.webstore||d.app),e=/Apple/.test(navigator.vendor)&&/Version\/([6-9]\d*|[1-5]\d+)/.test(navigator.userAgent);return c}();function pdfembGetPDF(c,h){h(c,!1)}function pdfembWantMobile(c,h,a,d){return!1}function pdfembMakeMobile(c,h,a){}function pdfembAddMoreToolbar(c,h,a){}function pdfembPremiumJumpToTop(c){};jQuery(document).ready(function(c){var h=function(){var a=document.createElement("canvas").getContext("2d");return(window.devicePixelRatio||1)/(a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||a.backingStorePixelRatio||1)}();createHiDPICanvas=function(a,c,b){b||(b=h);var e=document.createElement("canvas");e.width=a*b;e.height=c*b;e.style.width=a+"px";e.style.height=c+"px";e.getContext("2d").setTransform(b,0,0,b,0,0);return e};c.fn.pdfEmbedder=
8
  function(){this.each(function(a,d){var b,e=c(d);if(e.is("a")){var f=e.data();b=c("<div></div>",{"class":e.attr("class"),style:e.attr("style")});b.data(c.extend({"pdf-url":e.attr("href")},f));e.replaceWith(b)}else b=e;b.append(c("<div></div>",{"class":"pdfemb-loadingmsg"}).append(document.createTextNode(pdfemb_trans.objectL10n.loading)));"on"==b.data("disablerightclick")&&b.bind("contextmenu",function(a){a.preventDefault()});var h=function(a,e){b.empty().append(c("<div></div>",{"class":"pdfemb-inner-div"}).append(c("<canvas></canvas>",
9
- {"class":"pdfemb-the-canvas"})));b.data("pdfDoc",a);var d=b.data("toolbar");"bottom"!=d&&c.fn.pdfEmbedder.addToolbar(b,!0,"on"==b.data("toolbar-fixed"),e);"top"!=d&&c.fn.pdfEmbedder.addToolbar(b,!1,"on"==b.data("toolbar-fixed"),e);b.on("pdfembGotopage",function(a,d){d>b.data("pdfDoc").numPages||0>=d||b.data("pagenum")==d||(b.data("pagenum",d),c.fn.pdfEmbedder.queueRenderPage(b,d),pdfembPremiumJumpToTop(b))});b.on("pdfembGotoHash",function(a,d){if(d.dest){dest=d.dest;var e;"string"===typeof dest?(destString=
10
- dest,e=b.data("pdfDoc").getDestination(dest)):e=Promise.resolve(dest);e.then(function(a){a instanceof Array&&!(1>a.length)&&b.data("pdfDoc").getPageIndex(a[0]).then(function(a){a+=1;a>b.data("pdfDoc").numPages||0>=a||b.data("pagenum")==a||(b.data("pagenum",a),c.fn.pdfEmbedder.queueRenderPage(b,a),pdfembPremiumJumpToTop(b))})})}});b.on("pdfembGotoAction",function(a,d){var e=b.data("pagenum"),f=e;switch(d){case "GoBack":--f;break;case "GoForward":++f;break;case "NextPage":++f;break;case "PrevPage":--f;
11
- break;case "LastPage":f=b.data("pdfDoc").numPages;break;case "FirstPage":f=1}f==e||f>b.data("pdfDoc").numPages||0>=f||(b.data("pagenum",f),c.fn.pdfEmbedder.queueRenderPage(b,f))});b.data("pageCount",a.numPages);(!b.data("pagenum")||1>b.data("pagenum")||b.data("pagenum")>a.numPages)&&b.data("pagenum",1);b.data("showIsSecure",e);b.data("pageNumPending",null);d="on"==b.data("fullScreen")?parseInt(b.data("startfpzoom")):parseInt(b.data("startzoom"));if(isNaN(d)||20>d||500<d)d=100;b.data("zoom",d);100!=
12
- d&&b.find("span.pdfemb-zoom").text(d+"%");c.fn.pdfEmbedder.renderPage(b,b.data("pagenum"));b.find("span.pdfemb-page-count").text(a.numPages);d=new pdfembGrabToPan({element:b.find("div.pdfemb-inner-div")[0]});b.data("grabtopan",d);c(window).resize(function(){setTimeout(function(){c.fn.pdfEmbedder.queueRenderPage(b,b.data("pagenum"))},100)})},e=function(a,d){null===a?b.empty().append(c("<div></div>",{"class":"pdfemb-errormsg"}).append(msgnode=c("<span></span>").append(document.createTextNode("Failed to load and decrypt PDF")))):
13
- PDFJS.getDocument(a).then(function(a){h(a,d)},function(a){var d=document.createTextNode(a.message);"UnexpectedResponseException"==a.name&&0==a.status&&(d=c("<span></span>").append(document.createTextNode(pdfemb_trans.objectL10n.domainerror+" ")).append(c('<a href="https://wp-pdf.com/troubleshooting/#unexpected" target="_blank">'+pdfemb_trans.objectL10n.clickhereinfo+"</a>")));b.empty().append(c("<div></div>",{"class":"pdfemb-errormsg"}).append(d))})};b.data("pdfDoc")?h(b.data("pdfDoc"),b.data("showIsSecure")):
14
- (f=b.data("pdf-url"),pdfembGetPDF(f,e))});return this};c.fn.pdfEmbedder.annotationsLayerFactory="undefined"!=typeof pdfembPremiumAnnotationsLayerFactory?new pdfembPremiumAnnotationsLayerFactory:{createAnnotationsLayerBuilder:function(a,c){return null}};c.fn.pdfEmbedder.checkForResize=function(a){var d=c(window).height(),b=c(window).width(),e=a.data("checked-window-height"),f=a.data("checked-window-width");if(!e||!f)a.data("checked-window-height",d),a.data("checked-window-width",b);else if(e!=d||f!=
15
- b)c.fn.pdfEmbedder.queueRenderPage(a,a.data("pagenum")),a.data("checked-window-height",d),a.data("checked-window-width",b);"true"!=a.data("fullScreenClosed")&&setTimeout(function(){c.fn.pdfEmbedder.checkForResize(a)},1E3)};c.fn.pdfEmbedder.renderPage=function(a,d,b){a.data("pageRendering",!0);a.data("pdfDoc").getPage(d).then(function(e){var f=a.find(".pdfemb-the-canvas"),y=null,r=null,u=null,v=null;b&&(u=f.width(),v=f.height(),r=f[0].getContext("2d"),y=r.getImageData(0,0,u*h,v*h));var n,g=e.getViewport(1),
16
- l=g.width,m=g.height;if(0>=l||0>=m)a.empty().append(document.createTextNode(pdfemb_trans.objectL10n.widthheightinvalid));else{var q=a.parent().width(),g=l,p=m;if("max"==a.data("width"))g=q;else if("auto"==a.data("width"))g=l;else if(g=parseInt(a.data("width"),10),isNaN(g)||0>=g)g=q;0>=g&&(g=l);g>q&&0<q&&(g=q);n=g/l;var p=m*n,w=a.find("div.pdfemb-toolbar-fixed"),t=(q=pdfembWantMobile(c,a,g,k))?0:w.length,k=parseInt(a.data("height"),10);if(isNaN(k)||0>=k||k>p)k="auto"==a.data("height")?a.parent().height()-
17
- t*w.height():p;var g=Math.floor(g),p=Math.floor(p),x=100,l=g,m=p,A=0,B=0;q||(x=a.data("zoom"),l=g*x/100,m=p*x/100,l<g&&(A=(g-l)/2),m<k&&(B=(k-m)/2));var C=e.getViewport(n*x/100);g!=a.width()&&a.width(g);a.height()!=k&&a.height(k+t*w.height());n=a.find("div.pdfemb-inner-div");var E=n[0].scrollLeft,z=n[0].scrollTop;n.width(g);n.height(k);w=w.filter(".pdfemb-toolbar-top");0<t&&n.css("top",w.height());f[0].width=l*h;f[0].height=m*h;f.css("width",l);f.css("height",m);f.css("left",A).css("top",B);(l>g||
18
- m>p||m>k)&&!q?(k=a.data("fromZoom"),t=a.data("toZoom"),0<k&&0<t&&(z+=p/2,n.scrollLeft((E+g/2)*t/k-g/2),n.scrollTop(z*t/k-p/2)),a.data("grabtopan").activate()):("on"==a.data("fullScreen")?a.data("grabtopan").activate():a.data("grabtopan").deactivate(),a.find("div.pdfemb-inner-div").scrollLeft(0).scrollTop(0));a.data("fromZoom",0).data("toZoom",0);pdfembMakeMobile(c,q,a);if(b)a.data("pagenum",d),a.data("pageRendering",!1),f=c("<canvas>").attr("width",y.width).attr("height",y.height)[0],f.getContext("2d").putImageData(y,
19
- 0,0),r.scale(l/u,m/v),r.drawImage(f,0,0);else{var D=f[0].getContext("2d");e.render({canvasContext:D,viewport:C,transform:[h,0,0,h,0,0]}).promise.then(function(){"function"==typeof pdfembPremiumPreRenderCanvas&&c.isArray(pdfemb_trans.watermark_map)&&0<pdfemb_trans.watermark_map.length&&(-1==a.data("pdf-url").search("/?pdfemb-serveurl=")||"undefined"!=typeof pdfemb_trans.watermark_evenpagesonly&&pdfemb_trans.watermark_evenpagesonly&&0!=d%2||pdfembPremiumPreRenderCanvas(c,D,pdfemb_trans.watermark_map,
20
- x));a.data("pagenum",d);a.data("pageRendering",!1);a.find("div.pdfemb-toolbar .pdfemb-page-num").each(function(a,b){var e=c(b);e.is("span")?e.text(d):e.val(d)});d<a.data("pageCount")?a.find(".pdfemb-next").removeAttr("disabled").removeClass("pdfemb-btndisabled"):a.find(".pdfemb-next").attr("disabled","disabled").addClass("pdfemb-btndisabled");1<d?a.find(".pdfemb-prev").removeAttr("disabled").removeClass("pdfemb-btndisabled"):a.find(".pdfemb-prev").attr("disabled","disabled").addClass("pdfemb-btndisabled");
 
21
  var b=c.fn.pdfEmbedder.annotationsLayerFactory.createAnnotationsLayerBuilder(a.find("div.pdfemb-inner-div")[0],e);null!=b&&(a.find("div.pdfembAnnotationLayer").remove(),b.setupAnnotations(C,a.data("newwindow")));null!==a.data("pageNumPending")&&(c.fn.pdfEmbedder.renderPage(a,a.data("pageNumPending")),a.data("pageNumPending",null))})}}})};c.fn.pdfEmbedder.queueRenderPage=function(a,d,b){a.data("pageRendering")?a.data("pageNumPending",d):c.fn.pdfEmbedder.renderPage(a,d,b)};c.fn.pdfEmbedder.goFullScreen=
22
  function(a){a=c('<div class="pdfemb-fs-window"></div>');c(document.body).append(a)};c.fn.pdfEmbedder.changeZoom=function(a,d){var b=a.data("zoom"),e=b+d;a.data("zoom",e);a.find("span.pdfemb-zoom").text(e+"%");c.fn.pdfEmbedder.queueRenderPage(a,a.data("pagenum"));a.data("fromZoom",b).data("toZoom",e)};c.fn.pdfEmbedder.magnifyZoom=function(a,d){var b=a.data("zoom"),e=Math.floor(b*d);20>e&&(e=20);500<e&&(e=500);a.data("zoom",e);a.find("span.pdfemb-zoom").text(e+"%");c.fn.pdfEmbedder.queueRenderPage(a,
23
  a.data("pagenum"),!0);a.data("fromZoom",b).data("toZoom",e)};c.fn.pdfEmbedder.addToolbar=function(a,d,b,e){var f=c("<div></div>",{"class":"pdfemb-toolbar pdfemb-toolbar"+(b?"-fixed":"-hover")+" "+(d?" pdfemb-toolbar-top":"pdfemb-toolbar-bottom")}),h=c('<button class="pdfemb-prev" title="'+pdfemb_trans.objectL10n.prev+'" type="button"></button>');f.append(h);var r=c('<button class="pdfemb-next" title="'+pdfemb_trans.objectL10n.next+'" type="button"></button>');f.append(r);f.append(c('<div class="pdfemb-page-area">'+
6
  this.element.scrollTop;this.element.scrollTop=this.scrollTopStart-40*a;this.overlay.parentNode||document.body.appendChild(this.overlay)},_endPan:function(){this.element.removeEventListener("scroll",this._endPan,!0);this.document.removeEventListener("mousemove",this._onmousemove,!0);this.document.removeEventListener("mouseup",this._endPan,!0);this.overlay.parentNode&&this.overlay.parentNode.removeChild(this.overlay)}};var h;["webkitM","mozM","msM","oM","m"].some(function(a){a+="atches";a in document.documentElement&&
7
  (h=a);a+="Selector";a in document.documentElement&&(h=a);return h});var a=!document.documentMode||9<document.documentMode,d=window.chrome,b=d&&(d.webstore||d.app),e=/Apple/.test(navigator.vendor)&&/Version\/([6-9]\d*|[1-5]\d+)/.test(navigator.userAgent);return c}();function pdfembGetPDF(c,h){h(c,!1)}function pdfembWantMobile(c,h,a,d){return!1}function pdfembMakeMobile(c,h,a){}function pdfembAddMoreToolbar(c,h,a){}function pdfembPremiumJumpToTop(c){};jQuery(document).ready(function(c){var h=function(){var a=document.createElement("canvas").getContext("2d");return(window.devicePixelRatio||1)/(a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||a.backingStorePixelRatio||1)}();createHiDPICanvas=function(a,c,b){b||(b=h);var e=document.createElement("canvas");e.width=a*b;e.height=c*b;e.style.width=a+"px";e.style.height=c+"px";e.getContext("2d").setTransform(b,0,0,b,0,0);return e};c.fn.pdfEmbedder=
8
  function(){this.each(function(a,d){var b,e=c(d);if(e.is("a")){var f=e.data();b=c("<div></div>",{"class":e.attr("class"),style:e.attr("style")});b.data(c.extend({"pdf-url":e.attr("href")},f));e.replaceWith(b)}else b=e;b.append(c("<div></div>",{"class":"pdfemb-loadingmsg"}).append(document.createTextNode(pdfemb_trans.objectL10n.loading)));"on"==b.data("disablerightclick")&&b.bind("contextmenu",function(a){a.preventDefault()});var h=function(a,e){b.empty().append(c("<div></div>",{"class":"pdfemb-inner-div"}).append(c("<canvas></canvas>",
9
+ {"class":"pdfemb-the-canvas"})));b.data("pdfDoc",a);var d=b.data("toolbar");"top"!=d&&"both"!=d||c.fn.pdfEmbedder.addToolbar(b,!0,"on"==b.data("toolbar-fixed"),e);"bottom"!=d&&"both"!=d||c.fn.pdfEmbedder.addToolbar(b,!1,"on"==b.data("toolbar-fixed"),e);b.on("pdfembGotopage",function(a,d){d>b.data("pdfDoc").numPages||0>=d||b.data("pagenum")==d||(b.data("pagenum",d),c.fn.pdfEmbedder.queueRenderPage(b,d),pdfembPremiumJumpToTop(b))});b.on("pdfembGotoHash",function(a,d){if(d.dest){dest=d.dest;var e;"string"===
10
+ typeof dest?(destString=dest,e=b.data("pdfDoc").getDestination(dest)):e=Promise.resolve(dest);e.then(function(a){a instanceof Array&&!(1>a.length)&&b.data("pdfDoc").getPageIndex(a[0]).then(function(a){a+=1;a>b.data("pdfDoc").numPages||0>=a||b.data("pagenum")==a||(b.data("pagenum",a),c.fn.pdfEmbedder.queueRenderPage(b,a),pdfembPremiumJumpToTop(b))})})}});b.on("pdfembGotoAction",function(a,d){var e=b.data("pagenum"),f=e;switch(d){case "GoBack":--f;break;case "GoForward":++f;break;case "NextPage":++f;
11
+ break;case "PrevPage":--f;break;case "LastPage":f=b.data("pdfDoc").numPages;break;case "FirstPage":f=1}f==e||f>b.data("pdfDoc").numPages||0>=f||(b.data("pagenum",f),c.fn.pdfEmbedder.queueRenderPage(b,f))});"function"==typeof pdfembAddPageTurners&&"on"==b.data("pageturners")&&pdfembAddPageTurners(b);b.data("pageCount",a.numPages);(!b.data("pagenum")||1>b.data("pagenum")||b.data("pagenum")>a.numPages)&&b.data("pagenum",1);b.data("showIsSecure",e);b.data("pageNumPending",null);d="on"==b.data("fullScreen")?
12
+ parseInt(b.data("startfpzoom")):parseInt(b.data("startzoom"));if(isNaN(d)||20>d||500<d)d=100;b.data("zoom",d);100!=d&&b.find("span.pdfemb-zoom").text(d+"%");c.fn.pdfEmbedder.renderPage(b,b.data("pagenum"));b.find("span.pdfemb-page-count").text(a.numPages);d=new pdfembGrabToPan({element:b.find("div.pdfemb-inner-div")[0]});b.data("grabtopan",d);c(window).resize(function(){setTimeout(function(){c.fn.pdfEmbedder.queueRenderPage(b,b.data("pagenum"))},100)})},e=function(a,d){null===a?b.empty().append(c("<div></div>",
13
+ {"class":"pdfemb-errormsg"}).append(msgnode=c("<span></span>").append(document.createTextNode("Failed to load and decrypt PDF")))):PDFJS.getDocument(a).then(function(a){h(a,d)},function(a){var d=document.createTextNode(a.message);"UnexpectedResponseException"==a.name&&0==a.status&&(d=c("<span></span>").append(document.createTextNode(pdfemb_trans.objectL10n.domainerror+" ")).append(c('<a href="https://wp-pdf.com/troubleshooting/#unexpected" target="_blank">'+pdfemb_trans.objectL10n.clickhereinfo+"</a>")));
14
+ b.empty().append(c("<div></div>",{"class":"pdfemb-errormsg"}).append(d))})};b.data("pdfDoc")?h(b.data("pdfDoc"),b.data("showIsSecure")):(f=b.data("pdf-url"),pdfembGetPDF(f,e))});return this};c.fn.pdfEmbedder.annotationsLayerFactory="undefined"!=typeof pdfembPremiumAnnotationsLayerFactory?new pdfembPremiumAnnotationsLayerFactory:{createAnnotationsLayerBuilder:function(a,c){return null}};c.fn.pdfEmbedder.checkForResize=function(a){var d=c(window).height(),b=c(window).width(),e=a.data("checked-window-height"),
15
+ f=a.data("checked-window-width");if(!e||!f)a.data("checked-window-height",d),a.data("checked-window-width",b);else if(e!=d||f!=b)c.fn.pdfEmbedder.queueRenderPage(a,a.data("pagenum")),a.data("checked-window-height",d),a.data("checked-window-width",b);"true"!=a.data("fullScreenClosed")&&setTimeout(function(){c.fn.pdfEmbedder.checkForResize(a)},1E3)};c.fn.pdfEmbedder.renderPage=function(a,d,b){a.data("pageRendering",!0);a.data("pdfDoc").getPage(d).then(function(e){var f=a.find(".pdfemb-the-canvas"),
16
+ y=null,r=null,u=null,v=null;b&&(u=f.width(),v=f.height(),r=f[0].getContext("2d"),y=r.getImageData(0,0,u*h,v*h));var n,g=e.getViewport(1),l=g.width,m=g.height;if(0>=l||0>=m)a.empty().append(document.createTextNode(pdfemb_trans.objectL10n.widthheightinvalid));else{var q=a.parent().width(),g=l,p=m;if("max"==a.data("width"))g=q;else if("auto"==a.data("width"))g=l;else if(g=parseInt(a.data("width"),10),isNaN(g)||0>=g)g=q;0>=g&&(g=l);g>q&&0<q&&(g=q);n=g/l;var p=m*n,w=a.find("div.pdfemb-toolbar-fixed"),
17
+ t=(q=pdfembWantMobile(c,a,g,k))?0:w.length,k=parseInt(a.data("height"),10);if(isNaN(k)||0>=k||k>p)k="auto"==a.data("height")?a.parent().height()-t*w.height():p;var g=Math.floor(g),p=Math.floor(p),x=100,l=g,m=p,A=0,B=0;q||(x=a.data("zoom"),l=g*x/100,m=p*x/100,l<g&&(A=(g-l)/2),m<k&&(B=(k-m)/2));var C=e.getViewport(n*x/100);g!=a.width()&&a.width(g);a.height()!=k&&a.height(k+t*w.height());n=a.find("div.pdfemb-inner-div");var E=n[0].scrollLeft,z=n[0].scrollTop;n.width(g);n.height(k);w=w.filter(".pdfemb-toolbar-top");
18
+ 0<t&&n.css("top",w.height());f[0].width=l*h;f[0].height=m*h;f.css("width",l);f.css("height",m);f.css("left",A).css("top",B);(l>g||m>p||m>k)&&!q?(k=a.data("fromZoom"),t=a.data("toZoom"),0<k&&0<t&&(z+=p/2,n.scrollLeft((E+g/2)*t/k-g/2),n.scrollTop(z*t/k-p/2)),a.data("grabtopan").activate()):("on"==a.data("fullScreen")?a.data("grabtopan").activate():a.data("grabtopan").deactivate(),a.find("div.pdfemb-inner-div").scrollLeft(0).scrollTop(0));a.data("fromZoom",0).data("toZoom",0);pdfembMakeMobile(c,q,a);
19
+ if(b)a.data("pagenum",d),a.data("pageRendering",!1),f=c("<canvas>").attr("width",y.width).attr("height",y.height)[0],f.getContext("2d").putImageData(y,0,0),r.scale(l/u,m/v),r.drawImage(f,0,0);else{var D=f[0].getContext("2d");e.render({canvasContext:D,viewport:C,transform:[h,0,0,h,0,0]}).promise.then(function(){"function"==typeof pdfembPremiumPreRenderCanvas&&c.isArray(pdfemb_trans.watermark_map)&&0<pdfemb_trans.watermark_map.length&&(-1==a.data("pdf-url").search("/?pdfemb-serveurl=")||"undefined"!=
20
+ typeof pdfemb_trans.watermark_evenpagesonly&&pdfemb_trans.watermark_evenpagesonly&&0!=d%2||pdfembPremiumPreRenderCanvas(c,D,pdfemb_trans.watermark_map,x));a.data("pagenum",d);a.data("pageRendering",!1);a.find("div.pdfemb-toolbar .pdfemb-page-num").each(function(a,b){var e=c(b);e.is("span")?e.text(d):e.val(d)});d<a.data("pageCount")?(a.find(".pdfemb-next").removeAttr("disabled").removeClass("pdfemb-btndisabled"),a.find(".pdfemb-pageturner-bottomright").removeClass("pdfemb-pageturner-disabled")):(a.find(".pdfemb-next").attr("disabled",
21
+ "disabled").addClass("pdfemb-btndisabled"),a.find(".pdfemb-pageturner-bottomright").addClass("pdfemb-pageturner-disabled").removeClass("pdfemb-pageturner-arrow"));1<d?(a.find(".pdfemb-prev").removeAttr("disabled").removeClass("pdfemb-btndisabled"),a.find(".pdfemb-pageturner-bottomleft").removeClass("pdfemb-pageturner-disabled")):(a.find(".pdfemb-prev").attr("disabled","disabled").addClass("pdfemb-btndisabled"),a.find(".pdfemb-pageturner-bottomleft").addClass("pdfemb-pageturner-disabled").removeClass("pdfemb-pageturner-arrow"));
22
  var b=c.fn.pdfEmbedder.annotationsLayerFactory.createAnnotationsLayerBuilder(a.find("div.pdfemb-inner-div")[0],e);null!=b&&(a.find("div.pdfembAnnotationLayer").remove(),b.setupAnnotations(C,a.data("newwindow")));null!==a.data("pageNumPending")&&(c.fn.pdfEmbedder.renderPage(a,a.data("pageNumPending")),a.data("pageNumPending",null))})}}})};c.fn.pdfEmbedder.queueRenderPage=function(a,d,b){a.data("pageRendering")?a.data("pageNumPending",d):c.fn.pdfEmbedder.renderPage(a,d,b)};c.fn.pdfEmbedder.goFullScreen=
23
  function(a){a=c('<div class="pdfemb-fs-window"></div>');c(document.body).append(a)};c.fn.pdfEmbedder.changeZoom=function(a,d){var b=a.data("zoom"),e=b+d;a.data("zoom",e);a.find("span.pdfemb-zoom").text(e+"%");c.fn.pdfEmbedder.queueRenderPage(a,a.data("pagenum"));a.data("fromZoom",b).data("toZoom",e)};c.fn.pdfEmbedder.magnifyZoom=function(a,d){var b=a.data("zoom"),e=Math.floor(b*d);20>e&&(e=20);500<e&&(e=500);a.data("zoom",e);a.find("span.pdfemb-zoom").text(e+"%");c.fn.pdfEmbedder.queueRenderPage(a,
24
  a.data("pagenum"),!0);a.data("fromZoom",b).data("toZoom",e)};c.fn.pdfEmbedder.addToolbar=function(a,d,b,e){var f=c("<div></div>",{"class":"pdfemb-toolbar pdfemb-toolbar"+(b?"-fixed":"-hover")+" "+(d?" pdfemb-toolbar-top":"pdfemb-toolbar-bottom")}),h=c('<button class="pdfemb-prev" title="'+pdfemb_trans.objectL10n.prev+'" type="button"></button>');f.append(h);var r=c('<button class="pdfemb-next" title="'+pdfemb_trans.objectL10n.next+'" type="button"></button>');f.append(r);f.append(c('<div class="pdfemb-page-area">'+
js/pdfemb-embed-pdf.js CHANGED
@@ -72,11 +72,11 @@ jQuery(document).ready(function ($) {
72
 
73
  var toolbar_location = divContainer.data('toolbar');
74
 
75
- if (toolbar_location != 'bottom') {
76
  $.fn.pdfEmbedder.addToolbar(divContainer, true, divContainer.data('toolbar-fixed') == 'on', showIsSecure);
77
  }
78
 
79
- if (toolbar_location != 'top') {
80
  $.fn.pdfEmbedder.addToolbar(divContainer, false, divContainer.data('toolbar-fixed') == 'on', showIsSecure);
81
  }
82
 
@@ -168,6 +168,10 @@ jQuery(document).ready(function ($) {
168
 
169
  });
170
 
 
 
 
 
171
  // Initial/first page rendering
172
 
173
  divContainer.data('pageCount', pdfDoc_.numPages);
@@ -520,16 +524,20 @@ jQuery(document).ready(function ($) {
520
 
521
  if (pageNum < divContainer.data("pageCount")) {
522
  divContainer.find('.pdfemb-next').removeAttr('disabled').removeClass('pdfemb-btndisabled');
 
523
  }
524
  else {
525
  divContainer.find('.pdfemb-next').attr('disabled','disabled').addClass('pdfemb-btndisabled');
 
526
  }
527
 
528
  if (pageNum > 1) {
529
  divContainer.find('.pdfemb-prev').removeAttr('disabled').removeClass('pdfemb-btndisabled');
 
530
  }
531
  else {
532
  divContainer.find('.pdfemb-prev').attr('disabled','disabled').addClass('pdfemb-btndisabled');
 
533
  }
534
 
535
  // Do annotations layer
72
 
73
  var toolbar_location = divContainer.data('toolbar');
74
 
75
+ if (toolbar_location == 'top' || toolbar_location == 'both') {
76
  $.fn.pdfEmbedder.addToolbar(divContainer, true, divContainer.data('toolbar-fixed') == 'on', showIsSecure);
77
  }
78
 
79
+ if (toolbar_location == 'bottom' || toolbar_location == 'both') {
80
  $.fn.pdfEmbedder.addToolbar(divContainer, false, divContainer.data('toolbar-fixed') == 'on', showIsSecure);
81
  }
82
 
168
 
169
  });
170
 
171
+ if (typeof(pdfembAddPageTurners) == 'function' && divContainer.data('pageturners') == 'on') {
172
+ pdfembAddPageTurners(divContainer);
173
+ }
174
+
175
  // Initial/first page rendering
176
 
177
  divContainer.data('pageCount', pdfDoc_.numPages);
524
 
525
  if (pageNum < divContainer.data("pageCount")) {
526
  divContainer.find('.pdfemb-next').removeAttr('disabled').removeClass('pdfemb-btndisabled');
527
+ divContainer.find('.pdfemb-pageturner-bottomright').removeClass('pdfemb-pageturner-disabled');
528
  }
529
  else {
530
  divContainer.find('.pdfemb-next').attr('disabled','disabled').addClass('pdfemb-btndisabled');
531
+ divContainer.find('.pdfemb-pageturner-bottomright').addClass('pdfemb-pageturner-disabled').removeClass('pdfemb-pageturner-arrow');
532
  }
533
 
534
  if (pageNum > 1) {
535
  divContainer.find('.pdfemb-prev').removeAttr('disabled').removeClass('pdfemb-btndisabled');
536
+ divContainer.find('.pdfemb-pageturner-bottomleft').removeClass('pdfemb-pageturner-disabled');
537
  }
538
  else {
539
  divContainer.find('.pdfemb-prev').attr('disabled','disabled').addClass('pdfemb-btndisabled');
540
+ divContainer.find('.pdfemb-pageturner-bottomleft').addClass('pdfemb-pageturner-disabled').removeClass('pdfemb-pageturner-arrow');
541
  }
542
 
543
  // Do annotations layer
pdf_embedder.php CHANGED
@@ -4,7 +4,7 @@
4
  * Plugin Name: PDF Embedder
5
  * Plugin URI: http://wp-pdf.com/
6
  * Description: Embed PDFs straight into your posts and pages, with flexible width and height. No third-party services required.
7
- * Version: 2.7.5
8
  * Author: Dan Lester
9
  * Author URI: http://wp-pdf.com/
10
  * License: GPL3
@@ -15,7 +15,7 @@ require_once( plugin_dir_path(__FILE__).'/core/core_pdf_embedder.php' );
15
 
16
  class pdfemb_basic_pdf_embedder extends core_pdf_embedder {
17
 
18
- protected $PLUGIN_VERSION = '2.7.5';
19
 
20
  protected function useminified() {
21
  /* using-minified */ return true;
@@ -48,18 +48,18 @@ class pdfemb_basic_pdf_embedder extends core_pdf_embedder {
48
 
49
  public function pdfemb_wp_enqueue_scripts() {
50
  if (!$this->useminified()) {
51
- wp_register_script( 'pdfemb_versionspecific_pdf_js', $this->my_plugin_url().'js/pdfemb-basic.js', array('jquery'));
52
- wp_register_script( 'pdfemb_grabtopan_js', $this->my_plugin_url().'js/grabtopan-basic.js', array('jquery'));
53
- wp_register_script( 'pdfemb_embed_pdf_js', $this->my_plugin_url().'js/pdfemb-embed-pdf.js', array('pdfemb_versionspecific_pdf_js', 'pdfemb_grabtopan_js', 'jquery') );
54
  }
55
  else {
56
- wp_register_script( 'pdfemb_embed_pdf_js', $this->my_plugin_url().'js/all-pdfemb-basic.min.js', array('jquery') );
57
  }
58
 
59
  wp_localize_script( 'pdfemb_embed_pdf_js', 'pdfemb_trans', $this->get_translation_array() );
60
 
61
- wp_register_script( 'pdfemb_compat_js', $this->my_plugin_url().'js/pdfjs/compatibility'.($this->useminified() ? '.min' : '').'.js');
62
- wp_register_script( 'pdfemb_pdf_js', $this->my_plugin_url().'js/pdfjs/pdf'.($this->useminified() ? '.min' : '').'.js', array('pdfemb_compat_js'));
63
  }
64
 
65
  protected function get_extra_js_name() {
@@ -82,9 +82,9 @@ class pdfemb_basic_pdf_embedder extends core_pdf_embedder {
82
 
83
  <br class="clear" />
84
 
85
- <label for="pdfemb_tracking" class="textinput"><?php esc_html_e('Track Views/Downloads', 'pdf-embedder'); ?></label>
86
  <span>
87
- <label for="pdfemb_tracking" class="checkbox plain"><?php esc_html_e('Count number of views and downloads', 'pdf-embedder'); ?></label>
88
  </span>
89
 
90
  <br class="clear" />
@@ -94,6 +94,14 @@ class pdfemb_basic_pdf_embedder extends core_pdf_embedder {
94
  <label for="pdfemb_newwindow" class="checkbox plain"><?php esc_html_e('Open links in a new browser tab/window', 'pdf-embedder'); ?></label>
95
  </span>
96
 
 
 
 
 
 
 
 
 
97
  <br class="clear" />
98
 
99
  <label for="pdfemb_scrolltotop" class="textinput"><?php esc_html_e('Scroll to Top', 'pdf-embedder'); ?></label>
@@ -141,7 +149,8 @@ class pdfemb_basic_pdf_embedder extends core_pdf_embedder {
141
  <li>Mobile Friendly</li>
142
  <li>Download Button</li>
143
  <li>Full screen button</li>
144
- <li>Working Hyperlinks</li>
 
145
  <li>Jump to page number</li>
146
  <li>Track views and downloads</li>
147
  <li>Remove link to wp-pdf.com</li>
4
  * Plugin Name: PDF Embedder
5
  * Plugin URI: http://wp-pdf.com/
6
  * Description: Embed PDFs straight into your posts and pages, with flexible width and height. No third-party services required.
7
+ * Version: 2.8
8
  * Author: Dan Lester
9
  * Author URI: http://wp-pdf.com/
10
  * License: GPL3
15
 
16
  class pdfemb_basic_pdf_embedder extends core_pdf_embedder {
17
 
18
+ protected $PLUGIN_VERSION = '2.8';
19
 
20
  protected function useminified() {
21
  /* using-minified */ return true;
48
 
49
  public function pdfemb_wp_enqueue_scripts() {
50
  if (!$this->useminified()) {
51
+ wp_register_script( 'pdfemb_versionspecific_pdf_js', $this->my_plugin_url().'js/pdfemb-basic.js', array('jquery'), $this->PLUGIN_VERSION);
52
+ wp_register_script( 'pdfemb_grabtopan_js', $this->my_plugin_url().'js/grabtopan-basic.js', array('jquery'), $this->PLUGIN_VERSION);
53
+ wp_register_script( 'pdfemb_embed_pdf_js', $this->my_plugin_url().'js/pdfemb-embed-pdf.js', array('pdfemb_versionspecific_pdf_js', 'pdfemb_grabtopan_js', 'jquery'), $this->PLUGIN_VERSION );
54
  }
55
  else {
56
+ wp_register_script( 'pdfemb_embed_pdf_js', $this->my_plugin_url().'js/all-pdfemb-basic.min.js', array('jquery'), $this->PLUGIN_VERSION );
57
  }
58
 
59
  wp_localize_script( 'pdfemb_embed_pdf_js', 'pdfemb_trans', $this->get_translation_array() );
60
 
61
+ wp_register_script( 'pdfemb_compat_js', $this->my_plugin_url().'js/pdfjs/compatibility'.($this->useminified() ? '.min' : '').'.js', array(), $this->PLUGIN_VERSION);
62
+ wp_register_script( 'pdfemb_pdf_js', $this->my_plugin_url().'js/pdfjs/pdf'.($this->useminified() ? '.min' : '').'.js', array('pdfemb_compat_js'), $this->PLUGIN_VERSION);
63
  }
64
 
65
  protected function get_extra_js_name() {
82
 
83
  <br class="clear" />
84
 
85
+ <label for="pdfemb_pageturners" class="textinput"><?php esc_html_e('Page Turners', 'pdf-embedder'); ?></label>
86
  <span>
87
+ <label for="pdfemb_pageturners" class="checkbox plain"><?php esc_html_e('Page turner arrows when hovering over edges of PDF', 'pdf-embedder'); ?></label>
88
  </span>
89
 
90
  <br class="clear" />
94
  <label for="pdfemb_newwindow" class="checkbox plain"><?php esc_html_e('Open links in a new browser tab/window', 'pdf-embedder'); ?></label>
95
  </span>
96
 
97
+
98
+ <br class="clear" />
99
+
100
+ <label for="pdfemb_tracking" class="textinput"><?php esc_html_e('Track Views/Downloads', 'pdf-embedder'); ?></label>
101
+ <span>
102
+ <label for="pdfemb_tracking" class="checkbox plain"><?php esc_html_e('Count number of views and downloads', 'pdf-embedder'); ?></label>
103
+ </span>
104
+
105
  <br class="clear" />
106
 
107
  <label for="pdfemb_scrolltotop" class="textinput"><?php esc_html_e('Scroll to Top', 'pdf-embedder'); ?></label>
149
  <li>Mobile Friendly</li>
150
  <li>Download Button</li>
151
  <li>Full screen button</li>
152
+ <li>Working Hyperlinks</li>
153
+ <li>Page Turners</li>
154
  <li>Jump to page number</li>
155
  <li>Track views and downloads</li>
156
  <li>Remove link to wp-pdf.com</li>
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: danlester
3
  Tags: doc, docx, pdf, office, powerpoint, google, document, embed, intranet
4
  Requires at least: 3.5
5
- Tested up to: 4.6
6
- Stable tag: 2.7.5
7
  License: GPLv3
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
@@ -26,8 +26,11 @@ Hyperlinks in your PDF will only be clickable in the Premium versions.
26
 
27
  **Now translation-ready!** Please contribute your translations.
28
 
29
- French translation contributed by Thierry Gaillou of [JDFitForme](http://www.jdfitforme.fr/)
30
- Spanish translation contributed by Armando Landois of [LANDOIS Diseño](https://landois.com/)
 
 
 
31
 
32
 
33
  = Usage =
@@ -45,6 +48,7 @@ To override your site-wide defaults on an individual embed, see the [Plugin Inst
45
  > **Extra Premium Features**
46
  >
47
  > * Download button in the toolbar.
 
48
  > * Hyperlinks are fully functional.
49
  > * Full screen mode.
50
  > * Edit page number to jump straight to page.
@@ -171,6 +175,10 @@ the Plugins section of your Wordpress admin
171
 
172
  == Changelog ==
173
 
 
 
 
 
174
  = 2.7.5 =
175
 
176
  Fix for a small number of PDFs rendering as smaller than expected on some high resolution screens.
2
  Contributors: danlester
3
  Tags: doc, docx, pdf, office, powerpoint, google, document, embed, intranet
4
  Requires at least: 3.5
5
+ Tested up to: 4.7
6
+ Stable tag: 2.8
7
  License: GPLv3
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
26
 
27
  **Now translation-ready!** Please contribute your translations.
28
 
29
+ Persian translation by Mostafa Safarian of [سئو](http://www.greenseo.ir/)
30
+
31
+ French translation by Thierry Gaillou of [JDFitForme](http://www.jdfitforme.fr/)
32
+
33
+ Spanish translation by Armando Landois of [LANDOIS Diseño](https://landois.com/)
34
 
35
 
36
  = Usage =
48
  > **Extra Premium Features**
49
  >
50
  > * Download button in the toolbar.
51
+ > * Continuous scroll between pages.
52
  > * Hyperlinks are fully functional.
53
  > * Full screen mode.
54
  > * Edit page number to jump straight to page.
175
 
176
  == Changelog ==
177
 
178
+ = 2.8 =
179
+
180
+ Internal code refactoring. Added note that 'page turning arrows' are now available in the premium versions.
181
+
182
  = 2.7.5 =
183
 
184
  Fix for a small number of PDFs rendering as smaller than expected on some high resolution screens.