diff options
author | Aaron Jorbin <jorbin@git.wordpress.org> | 2024-06-25 15:30:57 +0000 |
---|---|---|
committer | Aaron Jorbin <jorbin@git.wordpress.org> | 2024-06-25 15:30:57 +0000 |
commit | b340c16ab116330414d2fbcb2e736398af8b565c (patch) | |
tree | eb0d30ed1cfb8bd9f03af51a97fc2f5f5e2536ff /src/js | |
parent | 353618209527b1872cc6789ef98c949898446fd0 (diff) | |
download | wordpress-b340c16ab116330414d2fbcb2e736398af8b565c.tar.gz wordpress-b340c16ab116330414d2fbcb2e736398af8b565c.zip |
Media: unfix admin image cropping calculations.
[58456] introduced some failures to the automated test system that indicate this fix is incomplete.
See #32282.
Props hellofromtonya, audrasjb, andrewserong, kevin940726, oglekler.
git-svn-id: https://develop.svn.wordpress.org/trunk@58571 602fd350-edb4-49c9-b593-d223f7449a82
Diffstat (limited to 'src/js')
-rw-r--r-- | src/js/_enqueues/lib/image-edit.js | 110 |
1 files changed, 29 insertions, 81 deletions
diff --git a/src/js/_enqueues/lib/image-edit.js b/src/js/_enqueues/lib/image-edit.js index 4e17e5626a..b41e93f55d 100644 --- a/src/js/_enqueues/lib/image-edit.js +++ b/src/js/_enqueues/lib/image-edit.js @@ -143,12 +143,17 @@ * @return {void} */ init : function(postid) { - var t = this, old = $('#image-editor-' + t.postid); + var t = this, old = $('#image-editor-' + t.postid), + x = t.intval( $('#imgedit-x-' + postid).val() ), + y = t.intval( $('#imgedit-y-' + postid).val() ); if ( t.postid !== postid && old.length ) { t.close(t.postid); } + t.hold.w = t.hold.ow = x; + t.hold.h = t.hold.oh = y; + t.hold.xy_ratio = x / y; t.hold.sizer = parseFloat( $('#imgedit-sizer-' + postid).val() ); t.postid = postid; $('#imgedit-response-' + postid).empty(); @@ -184,29 +189,6 @@ }, /** - * Calculate the image size and save it to memory. - * - * @since 6.6.0 - * - * @memberof imageEdit - * - * @param {number} postid The post ID. - * - * @return {void} - */ - calculateImgSize: function( postid ) { - var t = this, - x = t.intval( $( '#imgedit-x-' + postid ).val() ), - y = t.intval( $( '#imgedit-y-' + postid ).val() ); - - t.hold.w = t.hold.ow = x; - t.hold.h = t.hold.oh = y; - t.hold.xy_ratio = x / y; - t.hold.sizer = parseFloat( $( '#imgedit-sizer-' + postid ).val() ); - t.currentCropSelection = null; - }, - - /** * Toggles the wait/load icon in the editor. * * @since 2.9.0 @@ -543,7 +525,7 @@ for ( n in history ) { i = history[n]; if ( i.hasOwnProperty('c') ) { - op[n] = { 'c': { 'x': i.c.x, 'y': i.c.y, 'w': i.c.w, 'h': i.c.h, 'r': i.c.r } }; + op[n] = { 'c': { 'x': i.c.x, 'y': i.c.y, 'w': i.c.w, 'h': i.c.h } }; } else if ( i.hasOwnProperty('r') ) { op[n] = { 'r': i.r.r }; } else if ( i.hasOwnProperty('f') ) { @@ -878,7 +860,6 @@ if ( 'undefined' === typeof this.hold.sizer ) { this.init( postid ); } - this.calculateImgSize( postid ); this.initCrop(postid, img, parent); this.setCropSelection( postid, { 'x1': 0, 'y1': 0, 'x2': 0, 'y2': 0, 'width': img.innerWidth(), 'height': img.innerHeight() } ); @@ -928,6 +909,8 @@ var t = this, selW = $('#imgedit-sel-width-' + postid), selH = $('#imgedit-sel-height-' + postid), + selX = $('#imgedit-start-x-' + postid), + selY = $('#imgedit-start-y-' + postid), $image = $( image ), $img; @@ -962,16 +945,13 @@ * * @return {void} */ - parent.children().on( 'mousedown touchstart', function(e) { - var ratio = false, - sel = t.iasapi.getSelection(), - cx = t.intval( $( '#imgedit-crop-width-' + postid ).val() ), - cy = t.intval( $( '#imgedit-crop-height-' + postid ).val() ); - - if ( cx && cy ) { - ratio = t.getSelRatio( postid ); - } else if ( e.shiftKey && sel && sel.width && sel.height ) { - ratio = sel.width + ':' + sel.height; + parent.children().on( 'mousedown, touchstart', function(e){ + var ratio = false, sel, defRatio; + + if ( e.shiftKey ) { + sel = t.iasapi.getSelection(); + defRatio = t.getSelRatio(postid); + ratio = ( sel && sel.width && sel.height ) ? sel.width + ':' + sel.height : defRatio; } t.iasapi.setOptions({ @@ -1020,17 +1000,11 @@ * @return {void} */ onSelectChange: function(img, c) { - var sizer = imageEdit.hold.sizer, - oldSel = imageEdit.currentCropSelection; - - if ( oldSel != null && oldSel.width == c.width && oldSel.height == c.height ) { - return; - } - - selW.val( Math.min( imageEdit.hold.w, imageEdit.round( c.width / sizer ) ) ); - selH.val( Math.min( imageEdit.hold.h, imageEdit.round( c.height / sizer ) ) ); - - t.currentCropSelection = c; + var sizer = imageEdit.hold.sizer; + selW.val( imageEdit.round(c.width / sizer) ); + selH.val( imageEdit.round(c.height / sizer) ); + selX.val( imageEdit.round(c.x1 / sizer) ); + selY.val( imageEdit.round(c.y1 / sizer) ); } }); }, @@ -1048,11 +1022,7 @@ * @return {boolean} */ setCropSelection : function(postid, c) { - var sel, - selW = $( '#imgedit-sel-width-' + postid ), - selH = $( '#imgedit-sel-height-' + postid ), - sizer = this.hold.sizer, - hold = this.hold; + var sel; c = c || 0; @@ -1067,15 +1037,7 @@ return false; } - // adjust the selection within the bounds of the image on 100% scale - var excessW = hold.w - ( Math.round( c.x1 / sizer ) + parseInt( selW.val() ) ); - var excessH = hold.h - ( Math.round( c.y1 / sizer ) + parseInt( selH.val() ) ); - var x = Math.round( c.x1 / sizer ) + Math.min( 0, excessW ); - var y = Math.round( c.y1 / sizer ) + Math.min( 0, excessH ); - - // use 100% scaling to prevent rounding errors - sel = { 'r': 1, 'x': x, 'y': y, 'w': selW.val(), 'h': selH.val() }; - + sel = { 'x': c.x1, 'y': c.y1, 'w': c.width, 'h': c.height }; this.setDisabled($('.imgedit-crop', '#imgedit-panel-' + postid), 1); $('#imgedit-selection-' + postid).val( JSON.stringify(sel) ); }, @@ -1203,11 +1165,6 @@ } this.closePopup(t); this.addStep({ 'r': { 'r': angle, 'fw': this.hold.h, 'fh': this.hold.w }}, postid, nonce); - - // Clear the selection fields after rotating. - $( '#imgedit-sel-width-' + postid ).val( '' ); - $( '#imgedit-sel-height-' + postid ).val( '' ); - this.currentCropSelection = null; }, /** @@ -1230,11 +1187,6 @@ } this.closePopup(t); this.addStep({ 'f': { 'f': axis, 'fw': this.hold.w, 'fh': this.hold.h }}, postid, nonce); - - // Clear the selection fields after flipping. - $( '#imgedit-sel-width-' + postid ).val( '' ); - $( '#imgedit-sel-height-' + postid ).val( '' ); - this.currentCropSelection = null; }, /** @@ -1267,11 +1219,10 @@ } // Clear the selection fields after cropping. - $( '#imgedit-sel-width-' + postid ).val( '' ); - $( '#imgedit-sel-height-' + postid ).val( '' ); - $( '#imgedit-start-x-' + postid ).val( '0' ); - $( '#imgedit-start-y-' + postid ).val( '0' ); - this.currentCropSelection = null; + $('#imgedit-sel-width-' + postid).val(''); + $('#imgedit-sel-height-' + postid).val(''); + $('#imgedit-start-x-' + postid).val('0'); + $('#imgedit-start-y-' + postid).val('0'); }, /** @@ -1361,8 +1312,6 @@ img = $('#image-preview-' + postid), imgh = img.height(), imgw = img.width(), sizer = this.hold.sizer, x1, y1, x2, y2, ias = this.iasapi; - this.currentCropSelection = null; - if ( false === this.validateNumeric( el ) ) { return; } @@ -1386,19 +1335,18 @@ if ( x2 > imgw ) { x1 = 0; x2 = imgw; - elX.val( Math.min( this.hold.w, Math.round( x2 / sizer ) ) ); + elX.val( Math.round( x2 / sizer ) ); } if ( y2 > imgh ) { y1 = 0; y2 = imgh; - elY.val( Math.min( this.hold.h, Math.round( y2 / sizer ) ) ); + elY.val( Math.round( y2 / sizer ) ); } ias.setSelection( x1, y1, x2, y2 ); ias.update(); this.setCropSelection(postid, ias.getSelection()); - this.currentCropSelection = ias.getSelection(); } }, |