diff --git a/share/pdf2htmlEX.js.in b/share/pdf2htmlEX.js.in index 85b3c84..4c9cf09 100644 --- a/share/pdf2htmlEX.js.in +++ b/share/pdf2htmlEX.js.in @@ -39,10 +39,10 @@ /* The namespace */ (function(pdf2htmlEX){ - /** - * @const - * @struct - */ + /** + * @const + * @struct + */ var CSS_CLASS_NAMES = { page_frame : '@CSS_PAGE_FRAME_CN@', page_content_box : '@CSS_PAGE_CONTENT_BOX_CN@', @@ -67,14 +67,12 @@ 'loading_indicator_cls' : 'loading-indicator', // How many page shall we preload that are below the last visible page 'preload_pages' : 3, - // Smooth zoom is enabled when the number of pages shown is less than the threshold - // Otherwise page content is hidden and redrawn after a delay (function schedule_render). - // 0: disable smooth zoom optimizations (less CPU usage but flickering on zoom) - 'smooth_zoom_threshold' : 4, // how many ms should we wait before actually rendering the pages and after a scroll event 'render_timeout' : 100, // zoom ratio step for each zoom in/out event 'scale_step' : 0.9, + // register global key handler + 'register_key_handler' : true, '__dummy__' : 'no comma' }; @@ -143,30 +141,23 @@ }, show : function(){ if (this.loaded) { - if(Math.abs(this.set_r - this.cur_r) > EPS) { - this.cur_r = this.set_r; - this.$b.css('transform', 'scale('+this.cur_r.toFixed(3)+')'); - } if (! this.shown) { this.$b.addClass('opened'); this.shown = true; } } }, - /** - * @param {boolean=} force_show Force showing the page for smooth rescaling - */ - rescale : function(ratio, force_show) { + rescale : function(ratio) { if(ratio == 0) { this.set_r = this.default_r; } else { this.set_r = ratio; } - if (force_show) - this.show(); // Refresh content - else - this.hide(); // Wait for redraw + if(Math.abs(this.set_r - this.cur_r) > EPS) { + this.cur_r = this.set_r; + this.$b.css('transform', 'scale('+this.cur_r.toFixed(3)+')'); + } this.$p.height(this.h * this.set_r); this.$p.width(this.w * this.set_r); @@ -244,7 +235,8 @@ var _ = this; this.$container.scroll(function(){ _.schedule_render(); }); - //this.register_key_handler(); + if(this.config['register_key_handler']) + this.register_key_handler(); // handle links this.$container.add(this.$outline).on('click', '.'+CSS_CLASS_NAMES.link, this, this.link_handler); @@ -396,13 +388,15 @@ $(window).on('keydown', function keydown(e) { var handled = false; + /* var cmd = (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0) ; - var with_ctrl = (cmd == 9); - var with_alt = (cmd == 2); + */ + var with_ctrl = e.ctrlKey || e.metaKey; + var with_alt = e.altKey; switch (e.keyCode) { case 61: // FF/Mac '=' case 107: // FF '+' and '=' @@ -466,6 +460,7 @@ get_next_page : function() { return undefined; }, get_prev_page : function() { return undefined; }, + // TODO: offsetX/Y is by default the center of container rescale : function (ratio, is_relative, offsetX, offsetY) { if (! offsetX) offsetX = 0; @@ -480,36 +475,19 @@ var old_scale = this.scale; var pl = this.pages; - var prerendering_enabled = false; - if (this.config['smooth_zoom_threshold'] > 0) { - // Immediate rendering optimizations enabled to improve reactiveness while zooming - // Find out which pages are visible - var min_visible, max_visible; - // TODO: page index - min_visible = max_visible = this.page_map[active_page.n]; - while (pl[min_visible] && pl[min_visible].is_visible()) { --min_visible; } - ++ min_visible; - while (pl[max_visible] && pl[max_visible].is_visible()) { ++max_visible; } - -- max_visible; - - // If less then the threshold, enable prerendering on selected pages - if (max_visible - min_visible + 1 < this.config['smooth_zoom_threshold']) - prerendering_enabled = true; - } - // Set new scale - if (is_relative) + if (ratio == 0) { + this.scale = 1; + is_relative = false; + } + else if (is_relative) this.scale *= ratio; else this.scale = ratio; // Rescale pages - for(var i = 0, l = pl.length; i < l; ++i) { - if (prerendering_enabled && i >= min_visible && i <= max_visible) - pl[i].rescale(this.scale, true); // Force immediate refresh - else - pl[i].rescale(this.scale); // Delayed refresh - } + for(var i = 0, l = pl.length; i < l; ++i) + pl[i].rescale(this.scale); // Correct container scroll to keep view aligned while zooming var correction_top = active_page.$p[0].getBoundingClientRect().top - prev_offset.top; @@ -522,7 +500,7 @@ // Scroll the container accordingly to keep alignment to the initial reference this.$container.scrollLeft( this.$container.scrollLeft() + correction_left + offsetX ); - // Delayed rendering for pages not already shown + // some pages' visibility may be toggled, wait for next render() this.schedule_render(); },