/
home
/
desid573
/
public_html
/
magicride.ng
/
wp-admin
/
js
/
/home/desid573/public_html/magicride.ng/wp-admin/js
mkdir
upload
Name
Size
Mode
Actions
widgets/
-
0755
rm
accordion.js
2953
0644
edit
dl
rm
accordion.min.js
830
0644
edit
dl
rm
code-editor.js
11587
0644
edit
dl
rm
code-editor.min.js
3069
0644
edit
dl
rm
color-picker.js
9823
0644
edit
dl
rm
color-picker.min.js
3486
0644
edit
dl
rm
comment.js
2795
0644
edit
dl
rm
comment.min.js
1230
0644
edit
dl
rm
common.js
42764
0644
edit
dl
rm
common.min.js
15219
0644
edit
dl
rm
custom-background.js
3426
0644
edit
dl
rm
custom-background.min.js
1162
0644
edit
dl
rm
custom-header.js
2019
0644
edit
dl
rm
customize-controls.js
290802
0644
edit
dl
rm
customize-controls.min.js
110748
0644
edit
dl
rm
customize-nav-menus.js
109010
0644
edit
dl
rm
customize-nav-menus.min.js
45975
0644
edit
dl
rm
customize-widgets.js
71489
0644
edit
dl
rm
customize-widgets.min.js
27966
0644
edit
dl
rm
dashboard.js
18858
0644
edit
dl
rm
dashboard.min.js
6615
0644
edit
dl
rm
edit-comments.js
29270
0644
edit
dl
rm
edit-comments.min.js
15044
0644
edit
dl
rm
editor-expand.js
42631
0644
edit
dl
rm
editor-expand.min.js
13416
0644
edit
dl
rm
editor.js
45313
0644
edit
dl
rm
editor.min.js
13192
0644
edit
dl
rm
farbtastic.js
7689
0644
edit
dl
rm
gallery.js
5638
0644
edit
dl
rm
gallery.min.js
3801
0644
edit
dl
rm
image-edit.js
29294
0644
edit
dl
rm
image-edit.min.js
10070
0644
edit
dl
rm
inline-edit-post.js
16307
0644
edit
dl
rm
inline-edit-post.min.js
7284
0644
edit
dl
rm
inline-edit-tax.js
7701
0644
edit
dl
rm
inline-edit-tax.min.js
2871
0644
edit
dl
rm
iris.min.js
23608
0644
edit
dl
rm
language-chooser.js
873
0644
edit
dl
rm
language-chooser.min.js
374
0644
edit
dl
rm
link.js
3875
0644
edit
dl
rm
link.min.js
1635
0644
edit
dl
rm
media-gallery.js
1306
0644
edit
dl
rm
media-gallery.min.js
578
0644
edit
dl
rm
media-upload.js
3463
0644
edit
dl
rm
media-upload.min.js
1112
0644
edit
dl
rm
media.js
5227
0644
edit
dl
rm
media.min.js
1867
0644
edit
dl
rm
nav-menu.js
42482
0644
edit
dl
rm
nav-menu.min.js
20949
0644
edit
dl
rm
password-strength-meter.js
3173
0644
edit
dl
rm
password-strength-meter.min.js
731
0644
edit
dl
rm
plugin-install.js
7017
0644
edit
dl
rm
plugin-install.min.js
2353
0644
edit
dl
rm
post.js
37407
0644
edit
dl
rm
post.min.js
18027
0644
edit
dl
rm
postbox.js
11765
0644
edit
dl
rm
postbox.min.js
4144
0644
edit
dl
rm
revisions.js
33790
0644
edit
dl
rm
revisions.min.js
17840
0644
edit
dl
rm
set-post-thumbnail.js
841
0644
edit
dl
rm
set-post-thumbnail.min.js
533
0644
edit
dl
rm
site-health.js
8626
0644
edit
dl
rm
site-health.min.js
4663
0644
edit
dl
rm
svg-painter.js
5522
0644
edit
dl
rm
svg-painter.min.js
2337
0644
edit
dl
rm
tags-box.js
11040
0644
edit
dl
rm
tags-box.min.js
3025
0644
edit
dl
rm
tags-suggest.js
5440
0644
edit
dl
rm
tags-suggest.min.js
2194
0644
edit
dl
rm
tags.js
4346
0644
edit
dl
rm
tags.min.js
1655
0644
edit
dl
rm
theme-plugin-editor.js
24676
0644
edit
dl
rm
theme-plugin-editor.min.js
11201
0644
edit
dl
rm
theme.js
54392
0644
edit
dl
rm
theme.min.js
26462
0644
edit
dl
rm
updates.js
80573
0644
edit
dl
rm
updates.min.js
35629
0644
edit
dl
rm
user-profile.js
12252
0644
edit
dl
rm
user-profile.min.js
6238
0644
edit
dl
rm
user-suggest.js
2317
0644
edit
dl
rm
user-suggest.min.js
657
0644
edit
dl
rm
widgets.js
22876
0644
edit
dl
rm
widgets.min.js
12395
0644
edit
dl
rm
word-count.js
7690
0644
edit
dl
rm
word-count.min.js
1500
0644
edit
dl
rm
wp-fullscreen-stub.js
678
0644
edit
dl
rm
wp-fullscreen-stub.min.js
326
0644
edit
dl
rm
xfn.js
7710
0644
edit
dl
rm
xfn.min.js
3352
0644
edit
dl
rm
Edit:
/home/desid573/public_html/magicride.ng/wp-admin/js/image-edit.js
(29294B)
/** * The functions necessary for editing images. * * @since 2.9.0 * @output wp-admin/js/image-edit.js */ /* global imageEditL10n, ajaxurl, confirm */ (function($) { /** * Contains all the methods to initialise and control the image editor. * * @namespace imageEdit */ var imageEdit = window.imageEdit = { iasapi : {}, hold : {}, postid : '', _view : false, /** * Handle crop tool clicks. */ handleCropToolClick: function( postid, nonce, cropButton ) { var img = $( '#image-preview-' + postid ), selection = this.iasapi.getSelection(); // Ensure selection is available, otherwise reset to full image. if ( isNaN( selection.x1 ) ) { this.setCropSelection( postid, { 'x1': 0, 'y1': 0, 'x2': img.innerWidth(), 'y2': img.innerHeight(), 'width': img.innerWidth(), 'height': img.innerHeight() } ); selection = this.iasapi.getSelection(); } // If we don't already have a selection, select the entire image. 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 { // Otherwise, perform the crop. imageEdit.crop( postid, nonce , cropButton ); } }, /** * Converts a value to an integer. * * @memberof imageEdit * @since 2.9.0 * * @param {number} f The float value that should be converted. * * @return {number} The integer representation from the float value. */ intval : function(f) { /* * Bitwise OR operator: one of the obscure ways to truncate floating point figures, * worth reminding JavaScript doesn't have a distinct "integer" type. */ return f | 0; }, /** * Adds the disabled attribute and class to a single form element or a field set. * * @memberof imageEdit * @since 2.9.0 * * @param {jQuery} el The element that should be modified. * @param {bool|number} s The state for the element. If set to true * the element is disabled, * otherwise the element is enabled. * The function is sometimes called with a 0 or 1 * instead of true or false. * * @returns {void} */ setDisabled : function( el, s ) { /* * `el` can be a single form element or a fieldset. Before #28864, the disabled state on * some text fields was handled targeting $('input', el). Now we need to handle the * disabled state on buttons too so we can just target `el` regardless if it's a single * element or a fieldset because when a fieldset is disabled, its descendants are disabled too. */ if ( s ) { el.removeClass( 'disabled' ).prop( 'disabled', false ); } else { el.addClass( 'disabled' ).prop( 'disabled', true ); } }, /** * Initializes the image editor. * * @memberof imageEdit * @since 2.9.0 * * @param {number} postid The post id. * * @returns {void} */ 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(); $('input[type="text"]', '#imgedit-panel-' + postid).keypress(function(e) { var k = e.keyCode; // Key codes 37 thru 40 are the arrow keys. if ( 36 < k && k < 41 ) { $(this).blur(); } // The key code 13 is the enter key. if ( 13 === k ) { e.preventDefault(); e.stopPropagation(); return false; } }); }, /** * Toggles the wait/load icon in the editor. * * @memberof imageEdit * @since 2.9.0 * * @param {number} postid The post id. * @param {number} toggle Is 0 or 1, fades the icon in then 1 and out when 0. * * @returns {void} */ toggleEditor : function(postid, toggle) { var wait = $('#imgedit-wait-' + postid); if ( toggle ) { wait.fadeIn( 'fast' ); } else { wait.fadeOut('fast'); } }, /** * Shows or hides the image edit help box. * * @memberof imageEdit * @since 2.9.0 * * @param {HTMLElement} el The element to create the help window in. * * @returns {boolean} Always returns 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; }, /** * Gets the value from the image edit target. * * The image edit target contains the image sizes where the (possible) changes * have to be applied to. * * @memberof imageEdit * @since 2.9.0 * * @param {number} postid The post id. * * @returns {string} The value from the imagedit-save-target input field when available, * or 'full' when not available. */ getTarget : function(postid) { return $('input[name="imgedit-target-' + postid + '"]:checked', '#imgedit-save-target-' + postid).val() || 'full'; }, /** * Recalculates the height or width and keeps the original aspect ratio. * * If the original image size is exceeded a red exclamation mark is shown. * * @memberof imageEdit * @since 2.9.0 * * @param {number} postid The current post id. * @param {number} x Is 0 when it applies the y-axis * and 1 when applicable for the x-axis. * @param {jQuery} el Element. * * @returns {void} */ scaleChanged : function( postid, x, el ) { var w = $('#imgedit-scale-width-' + postid), h = $('#imgedit-scale-height-' + postid), warn = $('#imgedit-scale-warn-' + postid), w1 = '', h1 = ''; 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'); } else { warn.css('visibility', 'hidden'); } }, /** * Gets the selected aspect ratio. * * @memberof imageEdit * @since 2.9.0 * * @param {number} postid The post id. * * @returns {string} The aspect ratio. */ 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'; }, /** * Removes the last action from the image edit history. * The history consist of (edit) actions performed on the image. * * @memberof imageEdit * @since 2.9.0 * * @param {number} postid The post id. * @param {number} setSize 0 or 1, when 1 the image resets to its original size. * * @returns {string} JSON string containing the history or an empty string if no history exists. */ filterHistory : function(postid, setSize) { // Apply undo state to history. var history = $('#imgedit-history-' + postid).val(), pop, n, o, i, op = []; if ( history !== '' ) { // Read the JSON string with the image edit history. history = JSON.parse(history); pop = this.intval( $('#imgedit-undone-' + postid).val() ); if ( pop > 0 ) { while ( pop > 0 ) { history.pop(); pop--; } } // Reset size to it's original state. if ( setSize ) { if ( !history.length ) { this.hold.w = this.hold.ow; this.hold.h = this.hold.oh; return ''; } // Restore original 'o'. o = history[history.length - 1]; // c = 'crop', r = 'rotate', f = 'flip' o = o.c || o.r || o.f || false; if ( o ) { // fw = Full image width this.hold.w = o.fw; // fh = Full image height this.hold.h = o.fh; } } // Filter the last step/action from the history. 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 ''; }, /** * Binds the necessary events to the image. * * When the image source is reloaded the image will be reloaded. * * @memberof imageEdit * @since 2.9.0 * * @param {number} postid The post id. * @param {string} nonce The nonce to verify the request. * @param {function} callback Function to execute when the image is loaded. * * @returns {void} */ 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; // Checks if there already is some image-edit history. if ( '' !== event.data.history ) { historyObj = JSON.parse( event.data.history ); // If last executed action in history is a crop action. if ( historyObj[historyObj.length - 1].hasOwnProperty( 'c' ) ) { /* * A crop action has completed and the crop button gets disabled * ensure the undo button is enabled. */ t.setDisabled( $( '#image-undo-' + postid) , true ); // Move focus to the undo button to avoid a focus loss. $( '#image-undo-' + postid ).focus(); } } parent.empty().append(img); // w, h are the new full size dims 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' ) { $('input.imgedit-submit-btn', '#imgedit-panel-' + postid).removeAttr('disabled'); } else { $('input.imgedit-submit-btn', '#imgedit-panel-' + postid).prop('disabled', true); } t.toggleEditor(postid, 0); }) .on('error', function() { $('#imgedit-crop-' + postid).empty().append('<div class="error"><p>' + imageEditL10n.error + '</p></div>'); t.toggleEditor(postid, 0); }) .attr('src', ajaxurl + '?' + $.param(data)); }, /** * Performs an image edit action. * * @memberof imageEdit * @since 2.9.0 * * @param {number} postid The post id. * @param {string} nonce The nonce to verify the request. * @param {string} action The action to perform on the image. * The possible actions are: "scale" and "restore". * * @returns {boolean|void} Executes a post request that refreshes the page * when the action is performed. * Returns false if a invalid action is given, * or when the action cannot be performed. */ 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.focus(); return false; } else if ( fh < 1 ) { h.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(r) { $('#image-editor-' + postid).empty().append(r); t.toggleEditor(postid, 0); // refresh the attachment model so that changes propagate if ( t._view ) { t._view.refresh(); } }); }, /** * Stores the changes that are made to the image. * * @memberof imageEdit * @since 2.9.0 * * @param {number} postid The post id to get the image from the database. * @param {string} nonce The nonce to verify the request. * * @returns {boolean|void} If the actions are successfully saved a response message is shown. * Returns false if there is no image editing history, * thus there are not edit-actions performed on the image. */ 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 the image edit data to the backend. $.post(ajaxurl, data, function(r) { // Read the response. var ret = JSON.parse(r); // If a response is returned, close the editor and show an error. if ( ret.error ) { $('#imgedit-response-' + postid).html('<div class="error"><p>' + ret.error + '</p></div>'); imageEdit.close(postid); return; } if ( ret.fw && ret.fh ) { $('#media-dims-' + postid).html( ret.fw + ' × ' + ret.fh ); } if ( ret.thumbnail ) { $('.thumbnail', '#thumbnail-head-' + postid).attr('src', ''+ret.thumbnail); } if ( ret.msg ) { $('#imgedit-response-' + postid).html('<div class="updated"><p>' + ret.msg + '</p></div>'); } if ( self._view ) { self._view.save(); } else { imageEdit.close(postid); } }); }, /** * Creates the image edit window. * * @memberof imageEdit * @since 2.9.0 * * @param {number} postid The post id for the image. * @param {string} nonce The nonce to verify the request. * @param {object} view The image editor view to be used for the editing. * * @returns {void|promise} Either returns void if the button was already activated * or returns an instance of the image editor, wrapped in a promise. */ 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'); /* * Instead of disabling the button, which causes a focus loss and makes screen * readers announce "unavailable", return if the button was already clicked. */ 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( html ) { elem.html( html ); head.fadeOut('fast', function(){ elem.fadeIn('fast'); btn.removeClass( 'button-activated' ); spin.removeClass( 'is-active' ); }); // Initialise the Image Editor now that everything is ready. imageEdit.init( postid ); }); return dfd; }, /** * Initializes the cropping tool and sets a default cropping selection. * * @memberof imageEdit * @since 2.9.0 * * @param {number} postid The post id. * * @returns {void} */ imgLoaded : function(postid) { var img = $('#image-preview-' + postid), parent = $('#imgedit-crop-' + postid); // Ensure init has run even when directly loaded. 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); // Editor is ready, move focus to the first focusable element. $( '.imgedit-wrap .imgedit-help-toggle' ).eq( 0 ).focus(); }, /** * Initializes the cropping tool. * * @memberof imageEdit * @since 2.9.0 * * @param {number} postid The post id. * @param {HTMLElement} image The preview image. * @param {HTMLElement} parent The preview image container. * * @returns {void} */ initCrop : function(postid, image, parent) { var t = this, selW = $('#imgedit-sel-width-' + postid), selH = $('#imgedit-sel-height-' + postid), $img; t.iasapi = $(image).imgAreaSelect({ parent: parent, instance: true, handles: true, keys: true, minWidth: 3, minHeight: 3, /** * Sets the CSS styles and binds events for locking the aspect ratio. * * @ignore * * @param {jQuery} img The preview image. */ onInit: function( img ) { // Ensure that the imgAreaSelect wrapper elements are position:absolute. // (even if we're in a position:fixed modal) $img = $( img ); $img.next().css( 'position', 'absolute' ) .nextAll( '.imgareaselect-outer' ).css( 'position', 'absolute' ); /** * Binds mouse down event to the cropping container. * * @returns {void} */ 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 }); }); }, /** * Event triggered when starting a selection. * * @ignore * * @returns {void} */ onSelectStart: function() { imageEdit.setDisabled($('#imgedit-crop-sel-' + postid), 1); }, /** * Event triggered when the selection is ended. * * @ignore * * @param {object} img jQuery object representing the image. * @param {object} c The selection. * * @returns {object} */ onSelectEnd: function(img, c) { imageEdit.setCropSelection(postid, c); }, /** * Event triggered when the selection changes. * * @ignore * * @param {object} img jQuery object representing the image. * @param {object} c The selection. * * @returns {void} */ onSelectChange: function(img, c) { var sizer = imageEdit.hold.sizer; selW.val( imageEdit.round(c.width / sizer) ); selH.val( imageEdit.round(c.height / sizer) ); } }); }, /** * Stores the current crop selection. * * @memberof imageEdit * @since 2.9.0 * * @param {number} postid The post id. * @param {object} c The selection. * * @returns {boolean} */ 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-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) ); }, /** * Closes the image editor. * * @memberof imageEdit * @since 2.9.0 * * @param {number} postid The post id. * @param {bool} warn Warning message. * * @returns {void|bool} Returns false if there is a warning. */ close : function(postid, warn) { warn = warn || false; if ( warn && this.notsaved(postid) ) { return false; } this.iasapi = {}; this.hold = {}; // If we've loaded the editor in the context of a Media Modal, then switch to the previous view, // whatever that might have been. if ( this._view ){ this._view.back(); } // In case we are not accessing the image editor in the context of a View, close the editor the old-skool way else { $('#image-editor-' + postid).fadeOut('fast', function() { $( '#media-head-' + postid ).fadeIn( 'fast', function() { // Move focus back to the Edit Image button. Runs also when saving. $( '#imgedit-open-btn-' + postid ).focus(); }); $(this).empty(); }); } }, /** * Checks if the image edit history is saved. * * @memberof imageEdit * @since 2.9.0 * * @param {number} postid The post id. * * @returns {boolean} Returns true if the history is not saved. */ 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).html() ) ) { return false; } return true; } return false; }, /** * Adds an image edit action to the history. * * @memberof imageEdit * @since 2.9.0 * * @param {object} op The original position. * @param {number} postid The post id. * @param {string} nonce The nonce. * * @returns {void} */ 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); // reset 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); }); }, /** * Rotates the image. * * @memberof imageEdit * @since 2.9.0 * * @param {string} angle The angle the image is rotated with. * @param {number} postid The post id. * @param {string} nonce The nonce. * @param {object} t The target element. * * @returns {boolean} */ rotate : function(angle, postid, nonce, t) { if ( $(t).hasClass('disabled') ) { return false; } this.addStep({ 'r': { 'r': angle, 'fw': this.hold.h, 'fh': this.hold.w }}, postid, nonce); }, /** * Flips the image. * * @memberof imageEdit * @since 2.9.0 * * @param {number} axis The axle the image is flipped on. * @param {number} postid The post id. * @param {string} nonce The nonce. * @param {object} t The target element. * * @returns {boolean} */ flip : function (axis, postid, nonce, t) { if ( $(t).hasClass('disabled') ) { return false; } this.addStep({ 'f': { 'f': axis, 'fw': this.hold.w, 'fh': this.hold.h }}, postid, nonce); }, /** * Crops the image. * * @memberof imageEdit * @since 2.9.0 * * @param {number} postid The post id. * @param {string} nonce The nonce. * @param {object} t The target object. * * @returns {void|boolean} Returns false if the crop button is disabled. */ 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); } }, /** * Undoes an image edit action. * * @memberof imageEdit * @since 2.9.0 * * @param {number} postid The post id. * @param {string} nonce The nonce. * * @returns {void|false} Returns false if the undo button is disabled. */ 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); // When undo gets disabled, move focus to the redo button to avoid a focus loss. if ( history.length === pop ) { $( '#image-redo-' + postid ).focus(); } }); }, /** * Reverts a undo action. * * @memberof imageEdit * @since 2.9.0 * * @param {number} postid The post id. * @param {string} nonce The nonce. * * @returns {void} */ 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); // When redo gets disabled, move focus to the undo button to avoid a focus loss. if ( 0 === pop ) { $( '#image-undo-' + postid ).focus(); } }); }, /** * Sets the selection for the height and width in pixels. * * @memberof imageEdit * @since 2.9.0 * * @param {number} postid The post id. * @param {jQuery} el The element containing the values. * * @returns {void|boolean} Returns false when the x or y value is lower than 1, * void when the value is not numeric or when the operation * is successful. */ setNumSelection : function( postid, el ) { var sel, elX = $('#imgedit-sel-width-' + postid), elY = $('#imgedit-sel-height-' + postid), 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 && ( sel = ias.getSelection() ) ) { x2 = sel.x1 + Math.round( x * sizer ); y2 = sel.y1 + Math.round( y * sizer ); x1 = sel.x1; y1 = sel.y1; 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()); } }, /** * Rounds a number to a whole. * * @memberof imageEdit * @since 2.9.0 * * @param {number} num The number. * * @returns {number} The number rounded to a whole number. */ 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; }, /** * Sets a locked aspect ratio for the selection. * * @memberof imageEdit * @since 2.9.0 * * @param {number} postid The post id. * @param {number} n The ratio to set. * @param {jQuery} el The element containing the values. * * @returns {void} */ 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 ) ) { 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; if ( n ) { $('#imgedit-crop-height-' + postid).val(''); } else { $('#imgedit-crop-width-' + postid).val(''); } } this.iasapi.setSelection( sel.x1, sel.y1, sel.x2, r ); this.iasapi.update(); } } }, /** * Validates if a value in a jQuery.HTMLElement is numeric. * * @memberof imageEdit * @since 4.6 * * @param {jQuery} el The html element. * * @returns {void|boolean} Returns false if the value is not numeric, * void when it is. */ validateNumeric: function( el ) { if ( ! this.intval( $( el ).val() ) ) { $( el ).val( '' ); return false; } } }; })(jQuery);
Save
cmd:
run