| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| |
|
| | (function($) { |
| | var __ = wp.i18n.__; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | var imageEdit = window.imageEdit = { |
| | iasapi : {}, |
| | hold : {}, |
| | postid : '', |
| | _view : false, |
| |
|
| | |
| | |
| | |
| | toggleCropTool: function( postid, nonce, cropButton ) { |
| | var img = $( '#image-preview-' + postid ), |
| | selection = this.iasapi.getSelection(); |
| |
|
| | imageEdit.toggleControls( cropButton ); |
| | var $el = $( cropButton ); |
| | var state = ( $el.attr( 'aria-expanded' ) === 'true' ) ? 'true' : 'false'; |
| | |
| | if ( 'false' === state ) { |
| | |
| | this.iasapi.cancelSelection(); |
| | imageEdit.setDisabled($('.imgedit-crop-clear'), 0); |
| | } else { |
| | imageEdit.setDisabled($('.imgedit-crop-clear'), 1); |
| | |
| | var startX = ( $( '#imgedit-start-x-' + postid ).val() ) ? $('#imgedit-start-x-' + postid).val() : 0; |
| | var startY = ( $( '#imgedit-start-y-' + postid ).val() ) ? $('#imgedit-start-y-' + postid).val() : 0; |
| | var width = ( $( '#imgedit-sel-width-' + postid ).val() ) ? $('#imgedit-sel-width-' + postid).val() : img.innerWidth(); |
| | var height = ( $( '#imgedit-sel-height-' + postid ).val() ) ? $('#imgedit-sel-height-' + postid).val() : img.innerHeight(); |
| | |
| | if ( isNaN( selection.x1 ) ) { |
| | this.setCropSelection( postid, { 'x1': startX, 'y1': startY, 'x2': width, 'y2': height, 'width': width, 'height': height } ); |
| | selection = this.iasapi.getSelection(); |
| | } |
| |
|
| | |
| | if ( 0 === selection.x1 && 0 === selection.y1 && 0 === selection.x2 && 0 === selection.y2 ) { |
| | this.iasapi.setSelection( 0, 0, img.innerWidth(), img.innerHeight(), true ); |
| | this.iasapi.setOptions( { show: true } ); |
| | this.iasapi.update(); |
| | } else { |
| | this.iasapi.setSelection( startX, startY, width, height, true ); |
| | this.iasapi.setOptions( { show: true } ); |
| | this.iasapi.update(); |
| | } |
| | } |
| | }, |
| |
|
| | |
| | |
| | |
| | handleCropToolClick: function( postid, nonce, cropButton ) { |
| |
|
| | if ( cropButton.classList.contains( 'imgedit-crop-clear' ) ) { |
| | this.iasapi.cancelSelection(); |
| | imageEdit.setDisabled($('.imgedit-crop-apply'), 0); |
| |
|
| | $('#imgedit-sel-width-' + postid).val(''); |
| | $('#imgedit-sel-height-' + postid).val(''); |
| | $('#imgedit-start-x-' + postid).val('0'); |
| | $('#imgedit-start-y-' + postid).val('0'); |
| | $('#imgedit-selection-' + postid).val(''); |
| | } else { |
| | |
| | imageEdit.crop( postid, nonce , cropButton ); |
| | } |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | intval : function(f) { |
| | |
| | |
| | |
| | |
| | return f | 0; |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | setDisabled : function( el, s ) { |
| | |
| | |
| | |
| | |
| | |
| | |
| | if ( s ) { |
| | el.removeClass( 'disabled' ).prop( 'disabled', false ); |
| | } else { |
| | el.addClass( 'disabled' ).prop( 'disabled', true ); |
| | } |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | init : function(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(); |
| |
|
| | $('#imgedit-panel-' + postid).on( 'keypress', function(e) { |
| | var nonce = $( '#imgedit-nonce-' + postid ).val(); |
| | if ( e.which === 26 && e.ctrlKey ) { |
| | imageEdit.undo( postid, nonce ); |
| | } |
| |
|
| | if ( e.which === 25 && e.ctrlKey ) { |
| | imageEdit.redo( postid, nonce ); |
| | } |
| | }); |
| |
|
| | $('#imgedit-panel-' + postid).on( 'keypress', 'input[type="text"]', function(e) { |
| | var k = e.keyCode; |
| |
|
| | |
| | if ( 36 < k && k < 41 ) { |
| | $(this).trigger( 'blur' ); |
| | } |
| |
|
| | |
| | if ( 13 === k ) { |
| | e.preventDefault(); |
| | e.stopPropagation(); |
| | return false; |
| | } |
| | }); |
| |
|
| | $( document ).on( 'image-editor-ui-ready', this.focusManager ); |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | toggleEditor: function( postid, toggle, triggerUIReady ) { |
| | var wait = $('#imgedit-wait-' + postid); |
| |
|
| | if ( toggle ) { |
| | wait.fadeIn( 'fast' ); |
| | } else { |
| | wait.fadeOut( 'fast', function() { |
| | if ( triggerUIReady ) { |
| | $( document ).trigger( 'image-editor-ui-ready' ); |
| | } |
| | } ); |
| | } |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | togglePopup : function(el) { |
| | var $el = $( el ); |
| | var $targetEl = $( el ).attr( 'aria-controls' ); |
| | var $target = $( '#' + $targetEl ); |
| | $el |
| | .attr( 'aria-expanded', 'false' === $el.attr( 'aria-expanded' ) ? 'true' : 'false' ); |
| | |
| | $target |
| | .toggleClass( 'imgedit-popup-menu-open' ).slideToggle( 'fast' ).css( { 'z-index' : 200000 } ); |
| | |
| | if ( 'true' === $el.attr( 'aria-expanded' ) ) { |
| | $target.find( 'button' ).first().trigger( 'focus' ); |
| | } |
| |
|
| | return false; |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | monitorPopup : function() { |
| | var $parent = document.querySelector( '.imgedit-rotate-menu-container' ); |
| | var $toggle = document.querySelector( '.imgedit-rotate-menu-container .imgedit-rotate' ); |
| |
|
| | setTimeout( function() { |
| | var $focused = document.activeElement; |
| | var $contains = $parent.contains( $focused ); |
| |
|
| | |
| | if ( $focused && ! $contains ) { |
| | if ( 'true' === $toggle.getAttribute( 'aria-expanded' ) ) { |
| | imageEdit.togglePopup( $toggle ); |
| | } |
| | } |
| | }, 100 ); |
| |
|
| | return false; |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | browsePopup : function(el) { |
| | var $el = $( el ); |
| | var $collection = $( el ).parent( '.imgedit-popup-menu' ).find( 'button' ); |
| | var $index = $collection.index( $el ); |
| | var $prev = $index - 1; |
| | var $next = $index + 1; |
| | var $last = $collection.length; |
| | if ( $prev < 0 ) { |
| | $prev = $last - 1; |
| | } |
| | if ( $next === $last ) { |
| | $next = 0; |
| | } |
| | var $target = false; |
| | if ( event.keyCode === 40 ) { |
| | $target = $collection.get( $next ); |
| | } else if ( event.keyCode === 38 ) { |
| | $target = $collection.get( $prev ); |
| | } |
| | if ( $target ) { |
| | $target.focus(); |
| | event.preventDefault(); |
| | } |
| |
|
| | return false; |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | closePopup : function(el) { |
| | var $parent = $(el).parent( '.imgedit-popup-menu' ); |
| | var $controlledID = $parent.attr( 'id' ); |
| | var $target = $( 'button[aria-controls="' + $controlledID + '"]' ); |
| | $target |
| | .attr( 'aria-expanded', 'false' ).trigger( 'focus' ); |
| | $parent |
| | .toggleClass( 'imgedit-popup-menu-open' ).slideToggle( 'fast' ); |
| |
|
| | return false; |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | toggleHelp : function(el) { |
| | var $el = $( el ); |
| | $el |
| | .attr( 'aria-expanded', 'false' === $el.attr( 'aria-expanded' ) ? 'true' : 'false' ) |
| | .parents( '.imgedit-group-top' ).toggleClass( 'imgedit-help-toggled' ).find( '.imgedit-help' ).slideToggle( 'fast' ); |
| |
|
| | return false; |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | toggleControls : function(el) { |
| | var $el = $( el ); |
| | var $target = $( '#' + $el.attr( 'aria-controls' ) ); |
| | $el |
| | .attr( 'aria-expanded', 'false' === $el.attr( 'aria-expanded' ) ? 'true' : 'false' ); |
| | $target |
| | .parent( '.imgedit-group' ).toggleClass( 'imgedit-panel-active' ); |
| |
|
| | return false; |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | getTarget : function( postid ) { |
| | var element = $( '#imgedit-save-target-' + postid ); |
| |
|
| | if ( element.length ) { |
| | return element.find( 'input[name="imgedit-target-' + postid + '"]:checked' ).val() || 'full'; |
| | } |
| |
|
| | return 'all'; |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | scaleChanged : function( postid, x, el ) { |
| | var w = $('#imgedit-scale-width-' + postid), h = $('#imgedit-scale-height-' + postid), |
| | warn = $('#imgedit-scale-warn-' + postid), w1 = '', h1 = '', |
| | scaleBtn = $('#imgedit-scale-button'); |
| |
|
| | if ( false === this.validateNumeric( el ) ) { |
| | return; |
| | } |
| |
|
| | if ( x ) { |
| | h1 = ( w.val() !== '' ) ? Math.round( w.val() / this.hold.xy_ratio ) : ''; |
| | h.val( h1 ); |
| | } else { |
| | w1 = ( h.val() !== '' ) ? Math.round( h.val() * this.hold.xy_ratio ) : ''; |
| | w.val( w1 ); |
| | } |
| |
|
| | if ( ( h1 && h1 > this.hold.oh ) || ( w1 && w1 > this.hold.ow ) ) { |
| | warn.css('visibility', 'visible'); |
| | scaleBtn.prop('disabled', true); |
| | } else { |
| | warn.css('visibility', 'hidden'); |
| | scaleBtn.prop('disabled', false); |
| | } |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | getSelRatio : function(postid) { |
| | var x = this.hold.w, y = this.hold.h, |
| | X = this.intval( $('#imgedit-crop-width-' + postid).val() ), |
| | Y = this.intval( $('#imgedit-crop-height-' + postid).val() ); |
| |
|
| | if ( X && Y ) { |
| | return X + ':' + Y; |
| | } |
| |
|
| | if ( x && y ) { |
| | return x + ':' + y; |
| | } |
| |
|
| | return '1:1'; |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | filterHistory : function(postid, setSize) { |
| | |
| | var history = $('#imgedit-history-' + postid).val(), pop, n, o, i, op = []; |
| |
|
| | if ( history !== '' ) { |
| | |
| | history = JSON.parse(history); |
| | pop = this.intval( $('#imgedit-undone-' + postid).val() ); |
| | if ( pop > 0 ) { |
| | while ( pop > 0 ) { |
| | history.pop(); |
| | pop--; |
| | } |
| | } |
| |
|
| | |
| | if ( setSize ) { |
| | if ( !history.length ) { |
| | this.hold.w = this.hold.ow; |
| | this.hold.h = this.hold.oh; |
| | return ''; |
| | } |
| |
|
| | |
| | o = history[history.length - 1]; |
| |
|
| | |
| | o = o.c || o.r || o.f || false; |
| |
|
| | if ( o ) { |
| | |
| | this.hold.w = o.fw; |
| | |
| | this.hold.h = o.fh; |
| | } |
| | } |
| |
|
| | |
| | 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 } }; |
| | } else if ( i.hasOwnProperty('r') ) { |
| | op[n] = { 'r': i.r.r }; |
| | } else if ( i.hasOwnProperty('f') ) { |
| | op[n] = { 'f': i.f.f }; |
| | } |
| | } |
| | return JSON.stringify(op); |
| | } |
| | return ''; |
| | }, |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | refreshEditor : function(postid, nonce, callback) { |
| | var t = this, data, img; |
| |
|
| | t.toggleEditor(postid, 1); |
| | data = { |
| | 'action': 'imgedit-preview', |
| | '_ajax_nonce': nonce, |
| | 'postid': postid, |
| | 'history': t.filterHistory(postid, 1), |
| | 'rand': t.intval(Math.random() * 1000000) |
| | }; |
| |
|
| | img = $( '<img id="image-preview-' + postid + '" alt="" />' ) |
| | .on( 'load', { history: data.history }, function( event ) { |
| | var max1, max2, |
| | parent = $( '#imgedit-crop-' + postid ), |
| | t = imageEdit, |
| | historyObj; |
| |
|
| | |
| | if ( '' !== event.data.history ) { |
| | historyObj = JSON.parse( event.data.history ); |
| | |
| | if ( historyObj[historyObj.length - 1].hasOwnProperty( 'c' ) ) { |
| | |
| | |
| | |
| | |
| | t.setDisabled( $( '#image-undo-' + postid) , true ); |
| | |
| | $( '#image-undo-' + postid ).trigger( 'focus' ); |
| | } |
| | } |
| |
|
| | parent.empty().append(img); |
| |
|
| | |
| | max1 = Math.max( t.hold.w, t.hold.h ); |
| | max2 = Math.max( $(img).width(), $(img).height() ); |
| | t.hold.sizer = max1 > max2 ? max2 / max1 : 1; |
| |
|
| | t.initCrop(postid, img, parent); |
| |
|
| | if ( (typeof callback !== 'undefined') && callback !== null ) { |
| | callback(); |
| | } |
| |
|
| | if ( $('#imgedit-history-' + postid).val() && $('#imgedit-undone-' + postid).val() === '0' ) { |
| | $('button.imgedit-submit-btn', '#imgedit-panel-' + postid).prop('disabled', false); |
| | } else { |
| | $('button.imgedit-submit-btn', '#imgedit-panel-' + postid).prop('disabled', true); |
| | } |
| | var successMessage = __( 'Image updated.' ); |
| |
|
| | t.toggleEditor(postid, 0); |
| | wp.a11y.speak( successMessage, 'assertive' ); |
| | }) |
| | .on( 'error', function() { |
| | var errorMessage = __( 'Could not load the preview image. Please reload the page and try again.' ); |
| |
|
| | $( '#imgedit-crop-' + postid ) |
| | .empty() |
| | .append( '<div class="notice notice-error" tabindex="-1" role="alert"><p>' + errorMessage + '</p></div>' ); |
| |
|
| | t.toggleEditor( postid, 0, true ); |
| | wp.a11y.speak( errorMessage, 'assertive' ); |
| | } ) |
| | .attr('src', ajaxurl + '?' + $.param(data)); |
| | }, |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | action : function(postid, nonce, action) { |
| | var t = this, data, w, h, fw, fh; |
| |
|
| | if ( t.notsaved(postid) ) { |
| | return false; |
| | } |
| |
|
| | data = { |
| | 'action': 'image-editor', |
| | '_ajax_nonce': nonce, |
| | 'postid': postid |
| | }; |
| |
|
| | if ( 'scale' === action ) { |
| | w = $('#imgedit-scale-width-' + postid), |
| | h = $('#imgedit-scale-height-' + postid), |
| | fw = t.intval(w.val()), |
| | fh = t.intval(h.val()); |
| |
|
| | if ( fw < 1 ) { |
| | w.trigger( 'focus' ); |
| | return false; |
| | } else if ( fh < 1 ) { |
| | h.trigger( 'focus' ); |
| | return false; |
| | } |
| |
|
| | if ( fw === t.hold.ow || fh === t.hold.oh ) { |
| | return false; |
| | } |
| |
|
| | data['do'] = 'scale'; |
| | data.fwidth = fw; |
| | data.fheight = fh; |
| | } else if ( 'restore' === action ) { |
| | data['do'] = 'restore'; |
| | } else { |
| | return false; |
| | } |
| |
|
| | t.toggleEditor(postid, 1); |
| | $.post( ajaxurl, data, function( response ) { |
| | $( '#image-editor-' + postid ).empty().append( response.data.html ); |
| | t.toggleEditor( postid, 0, true ); |
| | |
| | if ( t._view ) { |
| | t._view.refresh(); |
| | } |
| | } ).done( function( response ) { |
| | |
| | if ( response && response.data.message.msg ) { |
| | wp.a11y.speak( response.data.message.msg ); |
| | return; |
| | } |
| |
|
| | if ( response && response.data.message.error ) { |
| | wp.a11y.speak( response.data.message.error ); |
| | } |
| | } ); |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | save : function(postid, nonce) { |
| | var data, |
| | target = this.getTarget(postid), |
| | history = this.filterHistory(postid, 0), |
| | self = this; |
| |
|
| | if ( '' === history ) { |
| | return false; |
| | } |
| |
|
| | this.toggleEditor(postid, 1); |
| | data = { |
| | 'action': 'image-editor', |
| | '_ajax_nonce': nonce, |
| | 'postid': postid, |
| | 'history': history, |
| | 'target': target, |
| | 'context': $('#image-edit-context').length ? $('#image-edit-context').val() : null, |
| | 'do': 'save' |
| | }; |
| | |
| | $.post( ajaxurl, data, function( response ) { |
| | |
| | if ( response.data.error ) { |
| | $( '#imgedit-response-' + postid ) |
| | .html( '<div class="notice notice-error" tabindex="-1" role="alert"><p>' + response.data.error + '</p></div>' ); |
| |
|
| | imageEdit.close(postid); |
| | wp.a11y.speak( response.data.error ); |
| | return; |
| | } |
| |
|
| | if ( response.data.fw && response.data.fh ) { |
| | $( '#media-dims-' + postid ).html( response.data.fw + ' × ' + response.data.fh ); |
| | } |
| |
|
| | if ( response.data.thumbnail ) { |
| | $( '.thumbnail', '#thumbnail-head-' + postid ).attr( 'src', '' + response.data.thumbnail ); |
| | } |
| |
|
| | if ( response.data.msg ) { |
| | $( '#imgedit-response-' + postid ) |
| | .html( '<div class="notice notice-success" tabindex="-1" role="alert"><p>' + response.data.msg + '</p></div>' ); |
| |
|
| | wp.a11y.speak( response.data.msg ); |
| | } |
| |
|
| | if ( self._view ) { |
| | self._view.save(); |
| | } else { |
| | imageEdit.close(postid); |
| | } |
| | }); |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | open : function( postid, nonce, view ) { |
| | this._view = view; |
| |
|
| | var dfd, data, |
| | elem = $( '#image-editor-' + postid ), |
| | head = $( '#media-head-' + postid ), |
| | btn = $( '#imgedit-open-btn-' + postid ), |
| | spin = btn.siblings( '.spinner' ); |
| |
|
| | |
| | |
| | |
| | |
| | if ( btn.hasClass( 'button-activated' ) ) { |
| | return; |
| | } |
| |
|
| | spin.addClass( 'is-active' ); |
| |
|
| | data = { |
| | 'action': 'image-editor', |
| | '_ajax_nonce': nonce, |
| | 'postid': postid, |
| | 'do': 'open' |
| | }; |
| |
|
| | dfd = $.ajax( { |
| | url: ajaxurl, |
| | type: 'post', |
| | data: data, |
| | beforeSend: function() { |
| | btn.addClass( 'button-activated' ); |
| | } |
| | } ).done( function( response ) { |
| | var errorMessage; |
| |
|
| | if ( '-1' === response ) { |
| | errorMessage = __( 'Could not load the preview image.' ); |
| | elem.html( '<div class="notice notice-error" tabindex="-1" role="alert"><p>' + errorMessage + '</p></div>' ); |
| | } |
| |
|
| | if ( response.data && response.data.html ) { |
| | elem.html( response.data.html ); |
| | } |
| |
|
| | head.fadeOut( 'fast', function() { |
| | elem.fadeIn( 'fast', function() { |
| | if ( errorMessage ) { |
| | $( document ).trigger( 'image-editor-ui-ready' ); |
| | } |
| | } ); |
| | btn.removeClass( 'button-activated' ); |
| | spin.removeClass( 'is-active' ); |
| | } ); |
| | |
| | imageEdit.init( postid ); |
| | } ); |
| |
|
| | return dfd; |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | imgLoaded : function(postid) { |
| | var img = $('#image-preview-' + postid), parent = $('#imgedit-crop-' + postid); |
| |
|
| | |
| | if ( 'undefined' === typeof this.hold.sizer ) { |
| | this.init( postid ); |
| | } |
| |
|
| | this.initCrop(postid, img, parent); |
| | this.setCropSelection( postid, { 'x1': 0, 'y1': 0, 'x2': 0, 'y2': 0, 'width': img.innerWidth(), 'height': img.innerHeight() } ); |
| |
|
| | this.toggleEditor( postid, 0, true ); |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | focusManager: function() { |
| | |
| | |
| | |
| | |
| | |
| | |
| | setTimeout( function() { |
| | var elementToSetFocusTo = $( '.notice[role="alert"]' ); |
| |
|
| | if ( ! elementToSetFocusTo.length ) { |
| | elementToSetFocusTo = $( '.imgedit-wrap' ).find( ':tabbable:first' ); |
| | } |
| |
|
| | elementToSetFocusTo.attr( 'tabindex', '-1' ).trigger( 'focus' ); |
| | }, 100 ); |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | initCrop : function(postid, image, parent) { |
| | 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; |
| |
|
| | |
| | if ( $image.data( 'imgAreaSelect' ) ) { |
| | return; |
| | } |
| |
|
| | t.iasapi = $image.imgAreaSelect({ |
| | parent: parent, |
| | instance: true, |
| | handles: true, |
| | keys: true, |
| | minWidth: 3, |
| | minHeight: 3, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | onInit: function( img ) { |
| | |
| | |
| | $img = $( img ); |
| | $img.next().css( 'position', 'absolute' ) |
| | .nextAll( '.imgareaselect-outer' ).css( 'position', 'absolute' ); |
| | |
| | |
| | |
| | |
| | |
| | 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({ |
| | aspectRatio: ratio |
| | }); |
| | }); |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | onSelectStart: function() { |
| | imageEdit.setDisabled($('#imgedit-crop-sel-' + postid), 1); |
| | imageEdit.setDisabled($('.imgedit-crop-clear'), 1); |
| | imageEdit.setDisabled($('.imgedit-crop-apply'), 1); |
| | }, |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | onSelectEnd: function(img, c) { |
| | imageEdit.setCropSelection(postid, c); |
| | if ( ! $('#imgedit-crop > *').is(':visible') ) { |
| | imageEdit.toggleControls($('.imgedit-crop.button')); |
| | } |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | onSelectChange: function(img, 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) ); |
| | } |
| | }); |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | setCropSelection : function(postid, c) { |
| | var sel; |
| |
|
| | c = c || 0; |
| |
|
| | if ( !c || ( c.width < 3 && c.height < 3 ) ) { |
| | this.setDisabled( $( '.imgedit-crop', '#imgedit-panel-' + postid ), 1 ); |
| | this.setDisabled( $( '#imgedit-crop-sel-' + postid ), 1 ); |
| | $('#imgedit-sel-width-' + postid).val(''); |
| | $('#imgedit-sel-height-' + postid).val(''); |
| | $('#imgedit-start-x-' + postid).val('0'); |
| | $('#imgedit-start-y-' + postid).val('0'); |
| | $('#imgedit-selection-' + postid).val(''); |
| | return false; |
| | } |
| |
|
| | 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) ); |
| | }, |
| |
|
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | close : function(postid, warn) { |
| | warn = warn || false; |
| |
|
| | if ( warn && this.notsaved(postid) ) { |
| | return false; |
| | } |
| |
|
| | this.iasapi = {}; |
| | this.hold = {}; |
| |
|
| | |
| | |
| | if ( this._view ){ |
| | this._view.back(); |
| | } |
| |
|
| | |
| | |
| | else { |
| | $('#image-editor-' + postid).fadeOut('fast', function() { |
| | $( '#media-head-' + postid ).fadeIn( 'fast', function() { |
| | |
| | $( '#imgedit-open-btn-' + postid ).trigger( 'focus' ); |
| | }); |
| | $(this).empty(); |
| | }); |
| | } |
| |
|
| |
|
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | notsaved : function(postid) { |
| | var h = $('#imgedit-history-' + postid).val(), |
| | history = ( h !== '' ) ? JSON.parse(h) : [], |
| | pop = this.intval( $('#imgedit-undone-' + postid).val() ); |
| |
|
| | if ( pop < history.length ) { |
| | if ( confirm( $('#imgedit-leaving-' + postid).text() ) ) { |
| | return false; |
| | } |
| | return true; |
| | } |
| | return false; |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | addStep : function(op, postid, nonce) { |
| | var t = this, elem = $('#imgedit-history-' + postid), |
| | history = ( elem.val() !== '' ) ? JSON.parse( elem.val() ) : [], |
| | undone = $( '#imgedit-undone-' + postid ), |
| | pop = t.intval( undone.val() ); |
| |
|
| | while ( pop > 0 ) { |
| | history.pop(); |
| | pop--; |
| | } |
| | undone.val(0); |
| |
|
| | history.push(op); |
| | elem.val( JSON.stringify(history) ); |
| |
|
| | t.refreshEditor(postid, nonce, function() { |
| | t.setDisabled($('#image-undo-' + postid), true); |
| | t.setDisabled($('#image-redo-' + postid), false); |
| | }); |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | rotate : function(angle, postid, nonce, t) { |
| | if ( $(t).hasClass('disabled') ) { |
| | return false; |
| | } |
| | this.closePopup(t); |
| | this.addStep({ 'r': { 'r': angle, 'fw': this.hold.h, 'fh': this.hold.w }}, postid, nonce); |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | flip : function (axis, postid, nonce, t) { |
| | if ( $(t).hasClass('disabled') ) { |
| | return false; |
| | } |
| | this.closePopup(t); |
| | this.addStep({ 'f': { 'f': axis, 'fw': this.hold.w, 'fh': this.hold.h }}, postid, nonce); |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | crop : function (postid, nonce, t) { |
| | var sel = $('#imgedit-selection-' + postid).val(), |
| | w = this.intval( $('#imgedit-sel-width-' + postid).val() ), |
| | h = this.intval( $('#imgedit-sel-height-' + postid).val() ); |
| |
|
| | if ( $(t).hasClass('disabled') || sel === '' ) { |
| | return false; |
| | } |
| |
|
| | sel = JSON.parse(sel); |
| | if ( sel.w > 0 && sel.h > 0 && w > 0 && h > 0 ) { |
| | sel.fw = w; |
| | sel.fh = h; |
| | this.addStep({ 'c': sel }, postid, nonce); |
| | } |
| |
|
| | |
| | $('#imgedit-sel-width-' + postid).val(''); |
| | $('#imgedit-sel-height-' + postid).val(''); |
| | $('#imgedit-start-x-' + postid).val('0'); |
| | $('#imgedit-start-y-' + postid).val('0'); |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | undo : function (postid, nonce) { |
| | var t = this, button = $('#image-undo-' + postid), elem = $('#imgedit-undone-' + postid), |
| | pop = t.intval( elem.val() ) + 1; |
| |
|
| | if ( button.hasClass('disabled') ) { |
| | return; |
| | } |
| |
|
| | elem.val(pop); |
| | t.refreshEditor(postid, nonce, function() { |
| | var elem = $('#imgedit-history-' + postid), |
| | history = ( elem.val() !== '' ) ? JSON.parse( elem.val() ) : []; |
| |
|
| | t.setDisabled($('#image-redo-' + postid), true); |
| | t.setDisabled(button, pop < history.length); |
| | |
| | if ( history.length === pop ) { |
| | $( '#image-redo-' + postid ).trigger( 'focus' ); |
| | } |
| | }); |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | redo : function(postid, nonce) { |
| | var t = this, button = $('#image-redo-' + postid), elem = $('#imgedit-undone-' + postid), |
| | pop = t.intval( elem.val() ) - 1; |
| |
|
| | if ( button.hasClass('disabled') ) { |
| | return; |
| | } |
| |
|
| | elem.val(pop); |
| | t.refreshEditor(postid, nonce, function() { |
| | t.setDisabled($('#image-undo-' + postid), true); |
| | t.setDisabled(button, pop > 0); |
| | |
| | if ( 0 === pop ) { |
| | $( '#image-undo-' + postid ).trigger( 'focus' ); |
| | } |
| | }); |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | setNumSelection : function( postid, el ) { |
| | var sel, elX = $('#imgedit-sel-width-' + postid), elY = $('#imgedit-sel-height-' + postid), |
| | elX1 = $('#imgedit-start-x-' + postid), elY1 = $('#imgedit-start-y-' + postid), |
| | xS = this.intval( elX1.val() ), yS = this.intval( elY1.val() ), |
| | x = this.intval( elX.val() ), y = this.intval( elY.val() ), |
| | img = $('#image-preview-' + postid), imgh = img.height(), imgw = img.width(), |
| | sizer = this.hold.sizer, x1, y1, x2, y2, ias = this.iasapi; |
| |
|
| | if ( false === this.validateNumeric( el ) ) { |
| | return; |
| | } |
| |
|
| | if ( x < 1 ) { |
| | elX.val(''); |
| | return false; |
| | } |
| |
|
| | if ( y < 1 ) { |
| | elY.val(''); |
| | return false; |
| | } |
| |
|
| | if ( ( ( x && y ) || ( xS && yS ) ) && ( sel = ias.getSelection() ) ) { |
| | x2 = sel.x1 + Math.round( x * sizer ); |
| | y2 = sel.y1 + Math.round( y * sizer ); |
| | x1 = ( xS === sel.x1 ) ? sel.x1 : Math.round( xS * sizer ); |
| | y1 = ( yS === sel.y1 ) ? sel.y1 : Math.round( yS * sizer ); |
| |
|
| | if ( x2 > imgw ) { |
| | x1 = 0; |
| | x2 = imgw; |
| | elX.val( Math.round( x2 / sizer ) ); |
| | } |
| |
|
| | if ( y2 > imgh ) { |
| | y1 = 0; |
| | y2 = imgh; |
| | elY.val( Math.round( y2 / sizer ) ); |
| | } |
| |
|
| | ias.setSelection( x1, y1, x2, y2 ); |
| | ias.update(); |
| | this.setCropSelection(postid, ias.getSelection()); |
| | } |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | round : function(num) { |
| | var s; |
| | num = Math.round(num); |
| |
|
| | if ( this.hold.sizer > 0.6 ) { |
| | return num; |
| | } |
| |
|
| | s = num.toString().slice(-1); |
| |
|
| | if ( '1' === s ) { |
| | return num - 1; |
| | } else if ( '9' === s ) { |
| | return num + 1; |
| | } |
| |
|
| | return num; |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | setRatioSelection : function(postid, n, el) { |
| | var sel, r, x = this.intval( $('#imgedit-crop-width-' + postid).val() ), |
| | y = this.intval( $('#imgedit-crop-height-' + postid).val() ), |
| | h = $('#image-preview-' + postid).height(); |
| |
|
| | if ( false === this.validateNumeric( el ) ) { |
| | this.iasapi.setOptions({ |
| | aspectRatio: null |
| | }); |
| |
|
| | return; |
| | } |
| |
|
| | if ( x && y ) { |
| | this.iasapi.setOptions({ |
| | aspectRatio: x + ':' + y |
| | }); |
| |
|
| | if ( sel = this.iasapi.getSelection(true) ) { |
| | r = Math.ceil( sel.y1 + ( ( sel.x2 - sel.x1 ) / ( x / y ) ) ); |
| |
|
| | if ( r > h ) { |
| | r = h; |
| | var errorMessage = __( 'Selected crop ratio exceeds the boundaries of the image. Try a different ratio.' ); |
| |
|
| | $( '#imgedit-crop-' + postid ) |
| | .prepend( '<div class="notice notice-error" tabindex="-1" role="alert"><p>' + errorMessage + '</p></div>' ); |
| |
|
| | wp.a11y.speak( errorMessage, 'assertive' ); |
| | if ( n ) { |
| | $('#imgedit-crop-height-' + postid).val( '' ); |
| | } else { |
| | $('#imgedit-crop-width-' + postid).val( ''); |
| | } |
| | } else { |
| | var error = $( '#imgedit-crop-' + postid ).find( '.notice-error' ); |
| | if ( 'undefined' !== typeof( error ) ) { |
| | error.remove(); |
| | } |
| | } |
| |
|
| | this.iasapi.setSelection( sel.x1, sel.y1, sel.x2, r ); |
| | this.iasapi.update(); |
| | } |
| | } |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | validateNumeric: function( el ) { |
| | if ( false === this.intval( $( el ).val() ) ) { |
| | $( el ).val( '' ); |
| | return false; |
| | } |
| | } |
| | }; |
| | })(jQuery); |
| |
|