Tpt has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/90710


Change subject: Replace jquery.panZoom by a lighter zoom widget
......................................................................

Replace jquery.panZoom by a lighter zoom widget

Change-Id: Ief9cf4bdab04a2f5c44510615dfd6e7481a65f06
---
M ProofreadPage.php
D modules/jquery/jquery.panZoom.js
A modules/jquery/jquery.prpZoom.js
M modules/page/ext.proofreadpage.page.css
M modules/page/ext.proofreadpage.page.edit.js
5 files changed, 177 insertions(+), 521 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/ProofreadPage 
refs/changes/10/90710/1

diff --git a/ProofreadPage.php b/ProofreadPage.php
index cc1c187..7b579b1 100644
--- a/ProofreadPage.php
+++ b/ProofreadPage.php
@@ -103,9 +103,9 @@
        'remoteExtPath' => 'ProofreadPage/modules'
 );
 $wgResourceModules += array(
-       'jquery.panZoom' => $prpResourceTemplate + array(
-               'scripts' => 'jquery/jquery.panZoom.js',
-               'dependencies' => array( 'jquery.ui.draggable' )
+       'jquery.prpZoom' => $prpResourceTemplate + array(
+               'scripts' => 'jquery/jquery.prpZoom.js',
+               'dependencies' => array( 'jquery.ui.widget', 
'jquery.ui.draggable' )
        ),
        'ext.proofreadpage.base' => $prpResourceTemplate + array(
                'styles'  => 'ext.proofreadpage.base.css',
@@ -113,12 +113,12 @@
        'ext.proofreadpage.page' => $prpResourceTemplate + array(
                'styles'  => 'page/ext.proofreadpage.page.css',
                'scripts' => 'page/ext.proofreadpage.page.js',
-               'dependencies' => array( 'ext.proofreadpage.base', 
'jquery.panZoom' )
+               'dependencies' => array( 'ext.proofreadpage.base' )
        ),
        'ext.proofreadpage.page.edit' => $prpResourceTemplate + array(
                'styles'  => 'page/ext.proofreadpage.page.edit.css',
                'scripts' => 'page/ext.proofreadpage.page.edit.js',
-               'dependencies' => array( 'ext.proofreadpage.page', 
'mediawiki.user' ),
+               'dependencies' => array( 'ext.proofreadpage.page', 
'jquery.prpZoom', 'mediawiki.user' ),
                'messages' => array(
                        'proofreadpage_quality0_category',
                        'proofreadpage_quality1_category',
diff --git a/modules/jquery/jquery.panZoom.js b/modules/jquery/jquery.panZoom.js
deleted file mode 100644
index 7e64786..0000000
--- a/modules/jquery/jquery.panZoom.js
+++ /dev/null
@@ -1,497 +0,0 @@
-/*
- * jQuery PanZoom Plugin
- * Pan and zoom an image within a parent div.
- *
- * version: 0.10.0
- * @requires jQuery v1.4.2 or later (earlier probably work, but untested so 
far)
- *
- * Copyright (c) 2011 Ben Lumley
- * Examples and documentation at: https://github.com/benlumley/jQuery-PanZoom
- *
- * Dual licensed under the MIT and GPL licenses:
- *   http://www.opensource.org/licenses/mit-license.php
- *   http://www.gnu.org/licenses/gpl.html
-*/
-
-( function( $ ) {
-       'use strict';
-
-       $.fn.panZoom = function( method ) {
-
-               if ( methods[method] ) {
-                       return methods[ method ].apply( this, 
Array.prototype.slice.call( arguments, 1 ) );
-               } else if ( typeof method === 'object' || ! method ) {
-                       return methods.init.apply( this, arguments );
-               } else {
-               $.error( 'Method ' +  method + ' does not exist' );
-               }
-
-       };
-
-       $.fn.panZoom.defaults = {
-               zoomIn            : false,
-               zoomOut           : false,
-               panUp             : false,
-               panDown           : false,
-               panLeft           : false,
-               panRight          : false,
-               fit               : false,
-               destroy           : false,
-               out_x1            : false,
-               out_y1            : false,
-               out_x2            : false,
-               out_y2            : false,
-               min_width         : 400,
-               min_height        : 600,
-               zoom_step         : 3,
-               pan_step          : 3,
-               debug             : false,
-               directedit        : false,
-               aspect            : true,
-               factor            : 1,
-               animate           : true,
-               animate_duration  : 200,
-               animate_easing    : 'linear',
-               double_click      : true,
-               mousewheel        : true,
-               mousewheel_delta  : 1,
-               draggable         : true,
-               clickandhold      : true
-       };
-
-       var settings = {};
-
-       var methods = {
-               'init': function ( options ) {
-                       $.extend( settings, $.fn.panZoom.defaults, options );
-                       setupCSS.apply( this );
-                       setupData.apply( this );
-                       setupBindings.apply( this );
-                       methods.readPosition.apply( this );
-               },
-
-               'destroy': function () {
-                       var data = this.data( 'panZoom' );
-                       data.bound_elements.unbind( '.panZoom' );
-                       if (settings.draggable && typeof( this.draggable) == 
'function')  {
-                               this.draggable( 'destroy' );
-                       }
-                       this.removeData( 'panZoom' );
-               },
-
-               'loadImage': function () {
-                       var data = this.data( 'panZoom' );
-                       loadTargetDimensions.apply( this );
-                       methods.updatePosition.apply( this );
-                       if ( data.last_image != null && data.last_image != 
this.attr( 'src' ) ) {
-                               methods.fit.apply( this );
-                       }
-                       data.last_image = this.attr( 'src' );
-                       data.loaded = true;
-               },
-
-               'readPosition': function () {
-                       var data = this.data( 'panZoom' );
-                       if ( settings.out_x1 ) { data.position.x1 = 
settings.out_x1.val()*settings.factor }
-                       if ( settings.out_y1 ) { data.position.y1 = 
settings.out_y1.val()*settings.factor }
-                       if ( settings.out_x2 ) { data.position.x2 = 
settings.out_x2.val()*settings.factor }
-                       if ( settings.out_y2 ) { data.position.y2 = 
settings.out_y2.val()*settings.factor }
-                       methods.updatePosition.apply(this);
-               },
-
-               'updatePosition': function() {
-                       validatePosition.apply( this );
-                       writePosition.apply( this );
-                       applyPosition.apply( this );
-               },
-
-               'fit': function () {
-                       var data = this.data( 'panZoom' );
-                       data.position.x1 = 0;
-                       data.position.y1 = 0;
-                       data.position.x2 = data.viewport_dimensions.x;
-                       data.position.y2 = data.viewport_dimensions.y;
-                       methods.updatePosition.apply( this );
-               },
-
-               'fitWidth': function() {
-                       var data = this.data( 'panZoom' );
-                       var parent = data.target_element.parent();
-                       data.position.x1 = 0;
-                       data.position.y1 = 0;
-                       data.position.x2 = parent.width();
-                       data.position.y2 = data.position.y2 * 
(data.target_dimensions.y / data.target_dimensions.x);
-                       methods.updatePosition.apply( this );
-
-                       parent.height( data.position.y2 );
-               },
-
-               'zoomIn': function ( steps ) {
-                       var data = this.data( 'panZoom' );
-                       if ( typeof( steps ) == 'undefined' ) {
-                               var steps = getStepDimensions.apply( this );
-                       }
-                       data.position.x1 = data.position.x1*1 - steps.zoom.x;
-                       data.position.x2 = data.position.x2*1 + steps.zoom.x;
-                       data.position.y1 = data.position.y1*1 - steps.zoom.y;
-                       data.position.y2 = data.position.y2*1 + steps.zoom.y;
-                       methods.updatePosition.apply( this );
-               },
-
-               'zoomOut': function ( steps ) {
-                       var data = this.data( 'panZoom' );
-                       if ( typeof(steps) == 'undefined' ) {
-                               var steps = getStepDimensions.apply( this );
-                       }
-                       data.position.x1 = data.position.x1*1 + steps.zoom.x;
-                       data.position.x2 = data.position.x2*1 - steps.zoom.x;
-                       data.position.y1 = data.position.y1*1 + steps.zoom.y;
-                       data.position.y2 = data.position.y2*1 - steps.zoom.y;
-                       methods.updatePosition.apply( this );
-               },
-
-               'panUp': function () {
-                       var data = this.data( 'panZoom' );
-                       var steps = getStepDimensions.apply( this );
-                       data.position.y1 -= steps.pan.y;
-                       data.position.y2 -= steps.pan.y;
-                       methods.updatePosition.apply( this );
-               },
-
-               'panDown': function () {
-                       var data = this.data( 'panZoom' );
-                       var steps = getStepDimensions.apply( this );
-                       data.position.y1 = data.position.y1*1 + steps.pan.y;
-                       data.position.y2 = data.position.y2*1 + steps.pan.y;
-                       methods.updatePosition.apply( this );
-               },
-
-               'panLeft': function () {
-                       var data = this.data( 'panZoom' );
-                       var steps = getStepDimensions.apply( this );
-                       data.position.x1 -= steps.pan.x;
-                       data.position.x2 -= steps.pan.x;
-                       methods.updatePosition.apply( this );
-               },
-
-               'panRight': function () {
-                       var data = this.data( 'panZoom' );
-                       var steps = getStepDimensions.apply( this );
-                       data.position.x1 = data.position.x1*1 + steps.pan.x;
-                       data.position.x2 = data.position.x2*1 + steps.pan.x;
-                       methods.updatePosition.apply( this );
-               },
-
-               'mouseWheel': function ( delta ) {
-                       // first calculate how much to zoom in/out
-                       var steps = getStepDimensions.apply( this );
-                       steps.zoom.x = steps.zoom.x * ( Math.abs( delta ) / 
settings.mousewheel_delta );
-                       steps.zoom.y = steps.zoom.y * ( Math.abs( delta ) / 
settings.mousewheel_delta );
-
-                       // then do it
-                       if ( delta > 0 ) {
-                               methods.zoomIn.apply( this, [steps] );
-                       } else if ( delta < 0 ) {
-                               methods.zoomOut.apply( this, [steps] );
-                       }
-               },
-
-               'dragComplete': function() {
-                       var data = this.data( 'panZoom' );
-                       data.position.x1 = this.position().left;
-                       data.position.y1 = this.position().top;
-                       data.position.x2 = this.position().left*1 + 
this.width();
-                       data.position.y2 = this.position().top*1 + 
this.height();
-                       mrthods.updatePosition.apply( this );
-               },
-
-               'mouseDown': function ( action ) {
-                       methods[action].apply( this );
-
-                       if ( settings.clickandhold ) {
-                               var data = this.data( 'panZoom' );
-                               methods.mouseUp.apply( this );
-                               data.mousedown_interval = window.setInterval( 
function ( that, action ) {
-                                       that.panZoom( action );
-                               }, settings.animate_duration, this, action );
-                       }
-               },
-
-               'mouseUp': function() {
-                       var data = this.data( 'panZoom' );
-                       window.clearInterval( data.mousedown_interval );
-               }
-
-       }
-
-       function setupBindings() {
-
-               var eventData = { target: this }
-               var data = this.data( 'panZoom' );
-
-               // bind up controls
-               if ( settings.zoomIn ) {
-                       settings.zoomIn.bind( 'mousedown.panZoom', eventData, 
function( event ) {
-                               event.preventDefault(); 
event.data.target.panZoom( 'mouseDown', 'zoomIn' );
-                       }).bind( 'mouseleave.panZoom mouseup.panZoom', 
eventData, function( event ) {
-                               event.preventDefault(); 
event.data.target.panZoom( 'mouseUp' );
-                       }).bind( 'click.panZoom', function ( event ) { 
event.preventDefault() } );
-                       data.bound_elements = 
data.bound_elements.add(settings.zoomIn);
-               }
-
-               if (settings.zoomOut) {
-                       settings.zoomOut.bind( 'mousedown.panZoom', eventData, 
function( event ) {
-                               event.preventDefault(); 
event.data.target.panZoom( 'mouseDown', 'zoomOut' );
-                       }).bind('mouseleave.panZoom mouseup.panZoom', 
eventData, function( event ) {
-                               event.preventDefault(); 
event.data.target.panZoom( 'mouseUp' );
-                       }).bind('click.panZoom', function (event) { 
event.preventDefault() } );
-                       data.bound_elements = 
data.bound_elements.add(settings.zoomOut);
-               }
-
-               if (settings.panUp) {
-                       settings.panUp.bind('mousedown.panZoom', eventData, 
function(event) {
-                               event.preventDefault(); 
event.data.target.panZoom('mouseDown', 'panUp');
-                       }).bind('mouseleave.panZoom mouseup.panZoom', 
eventData, function(event) {
-                               event.preventDefault(); 
event.data.target.panZoom('mouseUp');
-                       }).bind('click.panZoom', function (event) { 
event.preventDefault() } );
-                       data.bound_elements = 
data.bound_elements.add(settings.panUp);
-               }
-
-               if (settings.panDown) {
-                       settings.panDown.bind('mousedown.panZoom', eventData, 
function(event) {
-                               event.preventDefault(); 
event.data.target.panZoom('mouseDown', 'panDown');
-                       }).bind('mouseleave.panZoom mouseup.panZoom', 
eventData, function(event) {
-                               event.preventDefault(); 
event.data.target.panZoom('mouseUp');
-                       }).bind('click.panZoom', function (event) { 
event.preventDefault() } );
-                       data.bound_elements = 
data.bound_elements.add(settings.panDown);
-               }
-
-               if (settings.panLeft) {
-                       settings.panLeft.bind('mousedown.panZoom', eventData, 
function(event) {
-                               event.preventDefault(); 
event.data.target.panZoom('mouseDown', 'panLeft');
-                       }).bind('mouseleave.panZoom mouseup.panZoom', 
eventData, function(event) {
-                               event.preventDefault(); 
event.data.target.panZoom('mouseUp');
-                       }).bind('click.panZoom', function (event) { 
event.preventDefault() } );
-                       data.bound_elements = 
data.bound_elements.add(settings.panLeft);
-               }
-
-               if (settings.panRight) {
-                       settings.panRight.bind('mousedown.panZoom', eventData, 
function(event) {
-                               event.preventDefault(); 
event.data.target.panZoom('mouseDown', 'panRight');
-                       }).bind('mouseleave.panZoom mouseup.panZoom', 
eventData, function(event) {
-                               event.preventDefault(); 
event.data.target.panZoom('mouseUp');
-                       }).bind('click.panZoom', function (event) { 
event.preventDefault() } );
-                       data.bound_elements = 
data.bound_elements.add(settings.panRight);
-               }
-
-               if (settings.fit) {
-                       settings.fit.bind('click.panZoom', eventData, 
function(event) { event.preventDefault(); event.data.target.panZoom('fit'); } );
-                       data.bound_elements = 
data.bound_elements.add(settings.fit);
-               }
-
-               if (settings.destroy) {
-                       settings.destroy.bind('click.panZoom', eventData, 
function(event) { event.preventDefault(); event.data.target.panZoom('destroy'); 
} );
-                       data.bound_elements = 
data.bound_elements.add(settings.destroy);
-               }
-
-               // double click
-               if (settings.double_click) {
-                       this.bind('dblclick.panZoom', eventData, 
function(event) { event.data.target.panZoom('zoomIn') } );
-                       // no need to record in bound elements array - gets 
done anyway when imageload is bound
-               }
-
-               // mousewheel
-               if (settings.mousewheel && typeof(this.mousewheel) == 
'function') {
-                       this.parent().bind('mousewheel.panZoom', 
function(event, delta) { event.preventDefault(); 
$(this).find('img').panZoom('mouseWheel', delta) } );
-                       data.bound_elements = 
data.bound_elements.add(this.parent());
-               } else if (settings.mousewheel) {
-                //   alert('Mousewheel requires jquery-mousewheel by Brandon 
Aaron (https://github.com/brandonaaron/jquery-mousewheel) - please include it 
or disable mousewheel to remove this warning.')
-               }
-
-               // direct form input
-               if (settings.directedit) {
-                       
$(settings.out_x1).add(settings.out_y1).add(settings.out_x2).add(settings.out_y2).bind('change.panZoom
 blur.panZoom', eventData, function(event) { 
event.data.target.panZoom('readPosition') } );
-                       data.bound_elements = 
data.bound_elements.add($(settings.out_x1).add(settings.out_y1).add(settings.out_x2).add(settings.out_y2));
-               }
-
-               if (settings.draggable && typeof(this.draggable) == 'function') 
{
-                       this.draggable({
-                               stop: function () { 
$(this).panZoom('dragComplete'); }
-                       });
-               } else if (settings.draggable) {
-                       console.log('Draggable requires jQuery UI - please 
include jQuery UI or disable draggable to remove this warning.');
-               }
-
-               // image load
-               $(this).bind('load.panZoom', eventData, function (event) { 
event.data.target.panZoom('loadImage') })
-               data.bound_elements = data.bound_elements.add(this);
-
-       }
-
-       function setupData() {
-               this.data('panZoom', {
-                       target_element: this,
-                       target_dimensions: { x: null, y: null },
-                       viewport_element: this.parent(),
-                       viewport_dimensions: { x: this.parent().width(), y: 
this.parent().height() },
-                       position: { x1: null, y1: null, x2: null, y2: null },
-                       last_image: null,
-                       loaded: false,
-                       mousewheel_delta: 0,
-                       mousedown_interval: false,
-                       bound_elements: $()
-               });
-               if (settings.debug) {
-                       console.log(this.data('panZoom'));
-               }
-       }
-
-       function setupCSS() {
-               if (this.parent().css('position') == 'static') {
-                       this.parent().css('position', 'relative');
-               }
-               if (settings.draggable) {
-                       this.css({
-                               'cursor': 'move'
-                       });
-               }
-       }
-
-       function validatePosition() {
-               var data = this.data('panZoom');
-               // if dimensions are too small...
-               if ( data.position.x2 - data.position.x1 < 
settings.min_width/settings.factor || data.position.y2 - data.position.y1 < 
settings.min_height/settings.factor ) {
-                       // and second co-ords are zero (IE: no dims set), fit 
image
-                       if (data.position.x2 == 0 || data.position.y2 == 0) {
-                               methods.fit.apply(this);
-                       }
-                       // otherwise, backout a bit
-                       else {
-                               if (data.position.x2 - data.position.x1 < 
settings.min_width/settings.factor) {
-                                       data.position.x2 = 
data.position.x1*1+settings.min_width/settings.factor;
-                               }
-                               if (data.position.y2 - data.position.y1 < 
settings.min_height/settings.factor) {
-                                       data.position.y2 = 
data.position.y1*1+settings.min_height/settings.factor;
-                               }
-                       }
-               }
-
-               if (settings.aspect) {
-                       var target = data.target_dimensions.ratio;
-                       var current = getCurrentAspectRatio.apply(this)
-                       if (current > target) {
-                               var new_width = getHeight.apply(this) * target;
-                               var diff = getWidth.apply(this) - new_width;
-                               data.position.x2 = data.position.x2*1 - diff;
-                       } else if (current < target) {
-                               var new_height = getWidth.apply(this) / target;
-                               diff = getHeight.apply(this) - new_height;
-                               data.position.y2 = data.position.y2*1 - diff;
-                       }
-               }
-
-       }
-
-       var properties = {};
-
-       function applyPosition() {
-               var data = this.data('panZoom');
-
-               var width = getWidth.apply(this);
-               var height = getHeight.apply(this);
-               var left_offset = getLeftOffset.apply(this);
-               var top_offset = getTopOffset.apply(this);
-
-               properties = {
-                       'top': Math.round(top_offset),
-                       'left': Math.round(left_offset),
-                       'width': Math.round(width),
-                       'height': Math.round(height)
-               }
-
-               if (data.loaded && settings.animate) {
-                       applyAnimate.apply(this, [ properties ]);
-               } else {
-                       applyCSS.apply(this, [ properties ]);
-               }
-
-               if (settings.debug) {
-                       console.log('--');
-                       console.log('width:' + width);
-                       console.log('height:' + height);
-                       console.log('left:' + left_offset);
-                       console.log('top:' + top_offset);
-               }
-       }
-
-       function applyCSS() {
-               this.css( properties );
-       }
-
-       function applyAnimate() {
-               this.stop().animate( properties , settings.animate_duration, 
settings.animate_easing);
-       }
-
-       function getWidth() {
-               var data = this.data('panZoom');
-               var width = (data.position.x2 - data.position.x1);
-               return width;
-       }
-
-       function getLeftOffset() {
-               var data = this.data('panZoom');
-               return data.position.x1;
-       }
-
-       function getHeight() {
-               var data = this.data('panZoom');
-               var height = (data.position.y2 - data.position.y1);
-               return height;
-       }
-
-       function getTopOffset() {
-               var data = this.data('panZoom');
-               var top_offset = data.position.y1;
-               return top_offset;
-       }
-
-       function getCurrentAspectRatio() {
-               return (getWidth.apply(this) / getHeight.apply(this));
-       }
-
-       function writePosition() {
-               var data = this.data('panZoom');
-               if (settings.out_x1) { 
settings.out_x1.val(Math.round(data.position.x1 / settings.factor)) }
-               if (settings.out_y1) { 
settings.out_y1.val(Math.round(data.position.y1 / settings.factor)) }
-               if (settings.out_x2) { 
settings.out_x2.val(Math.round(data.position.x2 / settings.factor)) }
-               if (settings.out_y2) { 
settings.out_y2.val(Math.round(data.position.y2 / settings.factor)) }
-       }
-
-       function getStepDimensions() {
-               var data = this.data('panZoom');
-               var ret = {
-                       zoom: {
-                               x: (settings.zoom_step/100 * 
data.viewport_dimensions.x),
-                               y: (settings.zoom_step/100 * 
data.viewport_dimensions.y)
-                       },
-                       pan: {
-                               x: (settings.pan_step/100 * 
data.viewport_dimensions.x),
-                               y: (settings.pan_step/100 * 
data.viewport_dimensions.y)
-                       }
-               }
-               return ret;
-       }
-
-       function loadTargetDimensions() {
-               var data = this.data('panZoom');
-               var img = document.createElement('img');
-               img.src = this.attr('src');
-               img.id = "jqpz-temp";
-               $('body').append(img);
-               data.target_dimensions.x = $('#jqpz-temp').width();
-               data.target_dimensions.y = $('#jqpz-temp').height();
-               $('#jqpz-temp').remove();
-               data.target_dimensions.ratio = data.target_dimensions.x / 
data.target_dimensions.y;
-       }
-
-})( jQuery );
diff --git a/modules/jquery/jquery.prpZoom.js b/modules/jquery/jquery.prpZoom.js
new file mode 100644
index 0000000..a596734
--- /dev/null
+++ b/modules/jquery/jquery.prpZoom.js
@@ -0,0 +1,153 @@
+/*
+ * jQuery PrpZoom Plugin
+ * Image zoom library
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+( function( $ ) {
+       'use strict';
+
+       $.widget( 'mw.prpZoom', {
+
+               options: {
+                       zoomStep: 3,
+                       moveStep: 3,
+                       animationDuration: 200
+               },
+
+               default: {
+                       width: 0,
+                       height: 0
+               },
+
+               zoomStep: {
+                       width: 0,
+                       height: 0
+               },
+
+               moveStep: {
+                       width: 0,
+                       height: 0
+               },
+
+               _getPosition: function() {
+                       var position = this.element.position();
+                       position.width = this.element.width();
+                       position.height = this.element.height();
+                       return position;
+               },
+
+               _applyPosition: function( position ) {
+                       this.element.animate( {
+                               top: Math.round( position.top ),
+                               left: Math.round( position.left ),
+                               width: Math.round( position.width ),
+                               height: Math.round( position.height )
+                       }, this.options.animationDuration );
+               },
+
+               _create: function() {
+                       //config params
+                       this.default = {
+                               width: this.element.width(),
+                               height: this.element.height()
+                       };
+                       this.zoomStep = {
+                               width: this.options.zoomStep * 
this.default.width / 100,
+                               height: this.options.zoomStep * 
this.default.height / 100
+                       };
+                       this.moveStep = {
+                               width: this.options.moveStep * 
this.default.width / 100,
+                               height: this.options.moveStep * 
this.default.height / 100
+                       };
+
+                       //setup area
+                       this.element.parent().css( {
+                               position: 'relative',
+                               overflow: 'auto',
+                               height: this.default.height,
+                               cursor: 'move'
+                       } );
+
+                       this.element.css( {
+                               position: 'absolute'
+                       } ).draggable( {
+                               scroll: true
+                       } );
+
+                       this.reset();
+               },
+
+               reset: function() {
+                       this._applyPosition( {
+                               top: 0,
+                               left: 0,
+                               width: this.default.width,
+                               height: this.default.height
+                       } );
+               },
+
+               zoomIn: function() {
+                       var position = this._getPosition();
+                       position.left -= this.zoomStep.width;
+                       position.top -= this.zoomStep.height;
+                       position.width += 2 * this.zoomStep.width;
+                       position.height += 2 * this.zoomStep.height;
+                       this._applyPosition( position );
+               },
+
+               zoomOut: function() {
+                       var position = this._getPosition();
+                       position.left += this.zoomStep.width;
+                       position.top += this.zoomStep.height;
+                       position.width -= 2 * this.zoomStep.width;
+                       position.height -= 2 * this.zoomStep.height;
+                       this._applyPosition( position );
+               },
+
+               moveLeft: function () {
+                       var position = this._getPosition();
+                       position.left -= this.moveStep.width;
+                       this._applyPosition( position );
+               },
+
+               moveRight: function () {
+                       var position = this._getPosition();
+                       position.left += this.moveStep.width;
+                       this._applyPosition( position );
+               },
+
+               moveUp: function () {
+                       var position = this._getPosition();
+                       position.top -= this.moveStep.height;
+                       this._applyPosition( position );
+               },
+
+               moveDown: function () {
+                       var position = this._getPosition();
+                       position.top += this.moveStep.height;
+                       this._applyPosition( position );
+               },
+
+               destroy: function() {
+                       this.reset();
+                       this.draggable( 'destroy' );
+                       $.Widget.prototype.destroy.call( this );
+               }
+       } );
+
+} ) ( jQuery );
\ No newline at end of file
diff --git a/modules/page/ext.proofreadpage.page.css 
b/modules/page/ext.proofreadpage.page.css
index 8a7c86d..a3795da 100644
--- a/modules/page/ext.proofreadpage.page.css
+++ b/modules/page/ext.proofreadpage.page.css
@@ -9,8 +9,6 @@
 .prp-page-image {
        float: right;
        width: 49%;
-       position: relative;
-       overflow: auto;
 }
 
 .prp-page-image img {
diff --git a/modules/page/ext.proofreadpage.page.edit.js 
b/modules/page/ext.proofreadpage.page.edit.js
index db4d1d6..52d5b73 100644
--- a/modules/page/ext.proofreadpage.page.edit.js
+++ b/modules/page/ext.proofreadpage.page.edit.js
@@ -48,7 +48,7 @@
                                                action: {
                                                        type: 'callback',
                                                        execute: function() {
-                                                               $( '#editform 
.prp-page-image img' ).panZoom( 'zoomIn' );
+                                                               $( '#editform 
.prp-page-image img' ).prpZoom( 'zoomIn' );
                                                        }
                                                }
                                        },
@@ -59,7 +59,7 @@
                                                action: {
                                                        type: 'callback',
                                                        execute: function() {
-                                                               $( '#editform 
.prp-page-image img' ).panZoom( 'zoomOut' );
+                                                               $( '#editform 
.prp-page-image img' ).prpZoom( 'zoomOut' );
                                                        }
                                                }
                                        },
@@ -70,51 +70,51 @@
                                                action: {
                                                        type: 'callback',
                                                        execute: function() {
-                                                               $( '#editform 
.prp-page-image img' ).panZoom( 'fitWidth' );
+                                                               $( '#editform 
.prp-page-image img' ).prpZoom( 'reset' );
                                                        }
                                                }
                                        },
-                                       'pan-up': {
+                                       'move-up': {
                                                labelMsg: 
'proofreadpage-button-pan-up-label',
                                                type: 'button',
                                                icon: iconPath + 
'Button_pan_up.png',
                                                action: {
                                                        type: 'callback',
                                                        execute: function() {
-                                                               $( '#editform 
.prp-page-image img' ).panZoom( 'panUp' );
+                                                               $( '#editform 
.prp-page-image img' ).prpZoom( 'moveUp' );
                                                        }
                                                }
                                        },
-                                       'pan-down': {
+                                       'move-down': {
                                                labelMsg: 
'proofreadpage-button-pan-down-label',
                                                type: 'button',
                                                icon: iconPath + 
'Button_pan_down.png',
                                                action: {
                                                        type: 'callback',
                                                        execute: function() {
-                                                               $( '#editform 
.prp-page-image img' ).panZoom( 'panDown' );
+                                                               $( '#editform 
.prp-page-image img' ).prpZoom( 'moveDown' );
                                                        }
                                                }
                                        },
-                                       'pan-left': {
+                                       'move-left': {
                                                labelMsg: 
'proofreadpage-button-pan-left-label',
                                                type: 'button',
                                                icon: iconPath + 
'Button_pan_left.png',
                                                action: {
                                                        type: 'callback',
                                                        execute: function() {
-                                                               $( '#editform 
.prp-page-image img' ).panZoom( 'panLeft' );
+                                                               $( '#editform 
.prp-page-image img' ).prpZoom( 'moveLeft' );
                                                        }
                                                }
                                        },
-                                       'pan-right': {
+                                       'move-right': {
                                                labelMsg: 
'proofreadpage-button-pan-right-label',
                                                type: 'button',
                                                icon: iconPath + 
'Button_pan_right.png',
                                                action: {
                                                        type: 'callback',
                                                        execute: function() {
-                                                               $( '#editform 
.prp-page-image img' ).panZoom( 'panRight' );
+                                                               $( '#editform 
.prp-page-image img' ).prpZoom( 'moveRight' );
                                                        }
                                                }
                                        }
@@ -189,22 +189,24 @@
         * Init the zoom system
         */
        function initZoom() {
-               var $image = $( '.prp-page-image img' );
+               var $image = $( '#editform .prp-page-image img' );
                if( $image.length === 0 ) {
                        return;
                }
-               mw.loader.using( 'jquery.panZoom', function() {
-                       $image.panZoom();
-                       $image.panZoom( 'loadImage' );
-                       $image.panZoom( 'fitWidth' );
+               mw.loader.using( 'jquery.prpZoom', function() {
+                       $image.prpZoom();
                } );
        }
 
        $( document ).ready( function() {
                setupPreferences();
                setupPageQuality();
-               initZoom();
                addButtons();
        } );
 
+       //zoom should be init after the page is rendered
+       $( window ).load( function() {
+               initZoom();
+       } );
+
 } ( mediaWiki, jQuery ) );
\ No newline at end of file

-- 
To view, visit https://gerrit.wikimedia.org/r/90710
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ief9cf4bdab04a2f5c44510615dfd6e7481a65f06
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/ProofreadPage
Gerrit-Branch: pagePagesRefactoring
Gerrit-Owner: Tpt <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to