2024-02-26 15:18:09 -05:00
|
|
|
/**
|
|
|
|
* Handle the site icon setting in options-general.php.
|
|
|
|
*
|
|
|
|
* @since 6.5.0
|
|
|
|
* @output wp-admin/js/site-icon.js
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* global jQuery, wp */
|
|
|
|
|
|
|
|
( function ( $ ) {
|
|
|
|
var $chooseButton = $( '#choose-from-library-button' ),
|
|
|
|
$iconPreview = $( '#site-icon-preview' ),
|
|
|
|
$browserIconPreview = $( '#browser-icon-preview' ),
|
|
|
|
$appIconPreview = $( '#app-icon-preview' ),
|
|
|
|
$hiddenDataField = $( '#site_icon_hidden_field' ),
|
|
|
|
$removeButton = $( '#js-remove-site-icon' ),
|
|
|
|
frame;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Calculate image selection options based on the attachment dimensions.
|
|
|
|
*
|
|
|
|
* @since 6.5.0
|
|
|
|
*
|
|
|
|
* @param {Object} attachment The attachment object representing the image.
|
|
|
|
* @return {Object} The image selection options.
|
|
|
|
*/
|
|
|
|
function calculateImageSelectOptions( attachment ) {
|
|
|
|
var realWidth = attachment.get( 'width' ),
|
General: Add an option to configure the site icon in general settings.
This restores the site icon setting to its original home on the settings page where it lives with the title and tagline.
The base for this code was originally added in [32994] and then removed in [33329]. The majority of the modification to that version are to remove the no-js pieces and make the workflow completely inline rather than putting the cropping on a separate page.
Additionally, since image crops rely on the ability to upload an image, this setting is gated by the `upload_files` capability.
Follow-up to: [32994], [33329].
Props jorbin, audrasjb, mukesh27, joedolson, afercia, kebbet, swissspidy, obenland, jameskoster, kjellr, andraganescu, stacimc, mikeschroder, h71, krupajnanda, huzaifaalmesbah.
Fixes #54370.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@57602
git-svn-id: http://core.svn.wordpress.org/trunk@57103 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-12 16:57:09 -05:00
|
|
|
realHeight = attachment.get( 'height' ),
|
|
|
|
xInit = 512,
|
|
|
|
yInit = 512,
|
|
|
|
ratio = xInit / yInit,
|
2024-02-26 15:18:09 -05:00
|
|
|
xImg = xInit,
|
|
|
|
yImg = yInit,
|
|
|
|
x1,
|
|
|
|
y1,
|
|
|
|
imgSelectOptions;
|
General: Add an option to configure the site icon in general settings.
This restores the site icon setting to its original home on the settings page where it lives with the title and tagline.
The base for this code was originally added in [32994] and then removed in [33329]. The majority of the modification to that version are to remove the no-js pieces and make the workflow completely inline rather than putting the cropping on a separate page.
Additionally, since image crops rely on the ability to upload an image, this setting is gated by the `upload_files` capability.
Follow-up to: [32994], [33329].
Props jorbin, audrasjb, mukesh27, joedolson, afercia, kebbet, swissspidy, obenland, jameskoster, kjellr, andraganescu, stacimc, mikeschroder, h71, krupajnanda, huzaifaalmesbah.
Fixes #54370.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@57602
git-svn-id: http://core.svn.wordpress.org/trunk@57103 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-12 16:57:09 -05:00
|
|
|
|
|
|
|
if ( realWidth / realHeight > ratio ) {
|
|
|
|
yInit = realHeight;
|
|
|
|
xInit = yInit * ratio;
|
|
|
|
} else {
|
|
|
|
xInit = realWidth;
|
|
|
|
yInit = xInit / ratio;
|
|
|
|
}
|
|
|
|
|
|
|
|
x1 = ( realWidth - xInit ) / 2;
|
|
|
|
y1 = ( realHeight - yInit ) / 2;
|
|
|
|
|
|
|
|
imgSelectOptions = {
|
|
|
|
aspectRatio: xInit + ':' + yInit,
|
|
|
|
handles: true,
|
|
|
|
keys: true,
|
|
|
|
instance: true,
|
|
|
|
persistent: true,
|
|
|
|
imageWidth: realWidth,
|
|
|
|
imageHeight: realHeight,
|
|
|
|
minWidth: xImg > xInit ? xInit : xImg,
|
|
|
|
minHeight: yImg > yInit ? yInit : yImg,
|
|
|
|
x1: x1,
|
|
|
|
y1: y1,
|
|
|
|
x2: xInit + x1,
|
2024-02-26 15:18:09 -05:00
|
|
|
y2: yInit + y1,
|
General: Add an option to configure the site icon in general settings.
This restores the site icon setting to its original home on the settings page where it lives with the title and tagline.
The base for this code was originally added in [32994] and then removed in [33329]. The majority of the modification to that version are to remove the no-js pieces and make the workflow completely inline rather than putting the cropping on a separate page.
Additionally, since image crops rely on the ability to upload an image, this setting is gated by the `upload_files` capability.
Follow-up to: [32994], [33329].
Props jorbin, audrasjb, mukesh27, joedolson, afercia, kebbet, swissspidy, obenland, jameskoster, kjellr, andraganescu, stacimc, mikeschroder, h71, krupajnanda, huzaifaalmesbah.
Fixes #54370.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@57602
git-svn-id: http://core.svn.wordpress.org/trunk@57103 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-12 16:57:09 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
return imgSelectOptions;
|
|
|
|
}
|
|
|
|
|
2024-02-26 15:18:09 -05:00
|
|
|
/**
|
|
|
|
* Initializes the media frame for selecting or cropping an image.
|
|
|
|
*
|
|
|
|
* @since 6.5.0
|
|
|
|
*/
|
|
|
|
$chooseButton.on( 'click', function () {
|
|
|
|
var $el = $( this );
|
|
|
|
|
|
|
|
// Create the media frame.
|
|
|
|
frame = wp.media( {
|
|
|
|
button: {
|
|
|
|
// Set the text of the button.
|
|
|
|
text: $el.data( 'update' ),
|
|
|
|
|
|
|
|
// Don't close, we might need to crop.
|
|
|
|
close: false,
|
|
|
|
},
|
|
|
|
states: [
|
|
|
|
new wp.media.controller.Library( {
|
|
|
|
title: $el.data( 'choose-text' ),
|
|
|
|
library: wp.media.query( { type: 'image' } ),
|
|
|
|
date: false,
|
|
|
|
suggestedWidth: $el.data( 'size' ),
|
|
|
|
suggestedHeight: $el.data( 'size' ),
|
|
|
|
} ),
|
|
|
|
new wp.media.controller.SiteIconCropper( {
|
|
|
|
control: {
|
|
|
|
params: {
|
|
|
|
width: $el.data( 'size' ),
|
|
|
|
height: $el.data( 'size' ),
|
General: Add an option to configure the site icon in general settings.
This restores the site icon setting to its original home on the settings page where it lives with the title and tagline.
The base for this code was originally added in [32994] and then removed in [33329]. The majority of the modification to that version are to remove the no-js pieces and make the workflow completely inline rather than putting the cropping on a separate page.
Additionally, since image crops rely on the ability to upload an image, this setting is gated by the `upload_files` capability.
Follow-up to: [32994], [33329].
Props jorbin, audrasjb, mukesh27, joedolson, afercia, kebbet, swissspidy, obenland, jameskoster, kjellr, andraganescu, stacimc, mikeschroder, h71, krupajnanda, huzaifaalmesbah.
Fixes #54370.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@57602
git-svn-id: http://core.svn.wordpress.org/trunk@57103 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-12 16:57:09 -05:00
|
|
|
},
|
2024-02-26 15:18:09 -05:00
|
|
|
},
|
|
|
|
imgSelectOptions: calculateImageSelectOptions,
|
|
|
|
} ),
|
|
|
|
],
|
|
|
|
} );
|
|
|
|
|
|
|
|
frame.on( 'cropped', function ( attachment ) {
|
|
|
|
$hiddenDataField.val( attachment.id );
|
|
|
|
switchToUpdate( attachment );
|
|
|
|
frame.close();
|
|
|
|
|
|
|
|
// Start over with a frame that is so fresh and so clean clean.
|
|
|
|
frame = null;
|
|
|
|
} );
|
|
|
|
|
|
|
|
// When an image is selected, run a callback.
|
|
|
|
frame.on( 'select', function () {
|
|
|
|
// Grab the selected attachment.
|
|
|
|
var attachment = frame.state().get( 'selection' ).first();
|
|
|
|
|
|
|
|
if (
|
|
|
|
attachment.attributes.height === $el.data( 'size' ) &&
|
|
|
|
$el.data( 'size' ) === attachment.attributes.width
|
|
|
|
) {
|
|
|
|
switchToUpdate( attachment.attributes );
|
General: Add an option to configure the site icon in general settings.
This restores the site icon setting to its original home on the settings page where it lives with the title and tagline.
The base for this code was originally added in [32994] and then removed in [33329]. The majority of the modification to that version are to remove the no-js pieces and make the workflow completely inline rather than putting the cropping on a separate page.
Additionally, since image crops rely on the ability to upload an image, this setting is gated by the `upload_files` capability.
Follow-up to: [32994], [33329].
Props jorbin, audrasjb, mukesh27, joedolson, afercia, kebbet, swissspidy, obenland, jameskoster, kjellr, andraganescu, stacimc, mikeschroder, h71, krupajnanda, huzaifaalmesbah.
Fixes #54370.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@57602
git-svn-id: http://core.svn.wordpress.org/trunk@57103 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-12 16:57:09 -05:00
|
|
|
frame.close();
|
2024-02-26 15:18:09 -05:00
|
|
|
|
|
|
|
// Set the value of the hidden input to the attachment id.
|
|
|
|
$hiddenDataField.val( attachment.id );
|
|
|
|
} else {
|
|
|
|
frame.setState( 'cropper' );
|
|
|
|
}
|
|
|
|
} );
|
|
|
|
|
|
|
|
frame.open();
|
|
|
|
} );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Update the UI when a site icon is selected.
|
|
|
|
*
|
|
|
|
* @since 6.5.0
|
|
|
|
*
|
|
|
|
* @param {array} attributes The attributes for the attachment.
|
|
|
|
*/
|
|
|
|
function switchToUpdate( attributes ) {
|
|
|
|
var i18nAppAlternativeString, i18nBrowserAlternativeString;
|
|
|
|
|
|
|
|
if ( attributes.alt ) {
|
|
|
|
i18nAppAlternativeString = wp.i18n.sprintf(
|
|
|
|
/* translators: %s: The selected image alt text. */
|
|
|
|
wp.i18n.__( 'App icon preview: Current image: %s' ),
|
|
|
|
attributes.alt
|
|
|
|
);
|
|
|
|
i18nBrowserAlternativeString = wp.i18n.sprintf(
|
|
|
|
/* translators: %s: The selected image alt text. */
|
|
|
|
wp.i18n.__( 'Browser icon preview: Current image: %s' ),
|
|
|
|
attributes.alt
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
i18nAppAlternativeString = wp.i18n.sprintf(
|
|
|
|
/* translators: %s: The selected image filename. */
|
|
|
|
wp.i18n.__(
|
|
|
|
'App icon preview: The current image has no alternative text. The file name is: %s'
|
|
|
|
),
|
|
|
|
attributes.filename
|
|
|
|
);
|
|
|
|
i18nBrowserAlternativeString = wp.i18n.sprintf(
|
|
|
|
/* translators: %s: The selected image filename. */
|
|
|
|
wp.i18n.__(
|
|
|
|
'Browser icon preview: The current image has no alternative text. The file name is: %s'
|
|
|
|
),
|
|
|
|
attributes.filename
|
|
|
|
);
|
General: Add an option to configure the site icon in general settings.
This restores the site icon setting to its original home on the settings page where it lives with the title and tagline.
The base for this code was originally added in [32994] and then removed in [33329]. The majority of the modification to that version are to remove the no-js pieces and make the workflow completely inline rather than putting the cropping on a separate page.
Additionally, since image crops rely on the ability to upload an image, this setting is gated by the `upload_files` capability.
Follow-up to: [32994], [33329].
Props jorbin, audrasjb, mukesh27, joedolson, afercia, kebbet, swissspidy, obenland, jameskoster, kjellr, andraganescu, stacimc, mikeschroder, h71, krupajnanda, huzaifaalmesbah.
Fixes #54370.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@57602
git-svn-id: http://core.svn.wordpress.org/trunk@57103 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-12 16:57:09 -05:00
|
|
|
}
|
|
|
|
|
2024-02-26 15:18:09 -05:00
|
|
|
// Set site-icon-img src and alternative text to app icon preview.
|
|
|
|
$appIconPreview.attr( {
|
|
|
|
src: attributes.url,
|
|
|
|
alt: i18nAppAlternativeString,
|
|
|
|
} );
|
|
|
|
|
|
|
|
// Set site-icon-img src and alternative text to browser preview.
|
|
|
|
$browserIconPreview.attr( {
|
|
|
|
src: attributes.url,
|
|
|
|
alt: i18nBrowserAlternativeString,
|
|
|
|
} );
|
|
|
|
|
|
|
|
// Remove hidden class from icon preview div and remove button.
|
|
|
|
$iconPreview.removeClass( 'hidden' );
|
|
|
|
$removeButton.removeClass( 'hidden' );
|
|
|
|
|
2024-08-23 18:47:16 -04:00
|
|
|
// Set the global CSS variable for --site-icon-url to the selected image URL.
|
|
|
|
document.documentElement.style.setProperty(
|
|
|
|
'--site-icon-url',
|
|
|
|
'url(' + attributes.url + ')'
|
|
|
|
);
|
|
|
|
|
2024-02-26 15:18:09 -05:00
|
|
|
// If the choose button is not in the update state, swap the classes.
|
|
|
|
if ( $chooseButton.attr( 'data-state' ) !== '1' ) {
|
|
|
|
$chooseButton.attr( {
|
|
|
|
class: $chooseButton.attr( 'data-alt-classes' ),
|
|
|
|
'data-alt-classes': $chooseButton.attr( 'class' ),
|
|
|
|
'data-state': '1',
|
|
|
|
} );
|
|
|
|
}
|
|
|
|
|
|
|
|
// Swap the text of the choose button.
|
|
|
|
$chooseButton.text( $chooseButton.attr( 'data-update-text' ) );
|
General: Add an option to configure the site icon in general settings.
This restores the site icon setting to its original home on the settings page where it lives with the title and tagline.
The base for this code was originally added in [32994] and then removed in [33329]. The majority of the modification to that version are to remove the no-js pieces and make the workflow completely inline rather than putting the cropping on a separate page.
Additionally, since image crops rely on the ability to upload an image, this setting is gated by the `upload_files` capability.
Follow-up to: [32994], [33329].
Props jorbin, audrasjb, mukesh27, joedolson, afercia, kebbet, swissspidy, obenland, jameskoster, kjellr, andraganescu, stacimc, mikeschroder, h71, krupajnanda, huzaifaalmesbah.
Fixes #54370.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@57602
git-svn-id: http://core.svn.wordpress.org/trunk@57103 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-12 16:57:09 -05:00
|
|
|
}
|
|
|
|
|
2024-02-26 15:18:09 -05:00
|
|
|
/**
|
|
|
|
* Handles the click event of the remove button.
|
|
|
|
*
|
|
|
|
* @since 6.5.0
|
|
|
|
*/
|
|
|
|
$removeButton.on( 'click', function () {
|
|
|
|
$hiddenDataField.val( 'false' );
|
General: Add an option to configure the site icon in general settings.
This restores the site icon setting to its original home on the settings page where it lives with the title and tagline.
The base for this code was originally added in [32994] and then removed in [33329]. The majority of the modification to that version are to remove the no-js pieces and make the workflow completely inline rather than putting the cropping on a separate page.
Additionally, since image crops rely on the ability to upload an image, this setting is gated by the `upload_files` capability.
Follow-up to: [32994], [33329].
Props jorbin, audrasjb, mukesh27, joedolson, afercia, kebbet, swissspidy, obenland, jameskoster, kjellr, andraganescu, stacimc, mikeschroder, h71, krupajnanda, huzaifaalmesbah.
Fixes #54370.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@57602
git-svn-id: http://core.svn.wordpress.org/trunk@57103 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-12 16:57:09 -05:00
|
|
|
$( this ).toggleClass( 'hidden' );
|
2024-02-26 15:18:09 -05:00
|
|
|
$iconPreview.toggleClass( 'hidden' );
|
|
|
|
$browserIconPreview.attr( {
|
|
|
|
src: '',
|
|
|
|
alt: '',
|
|
|
|
} );
|
|
|
|
$appIconPreview.attr( {
|
|
|
|
src: '',
|
|
|
|
alt: '',
|
|
|
|
} );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Resets state to the button, for correct visual style and state.
|
|
|
|
* Updates the text of the button.
|
|
|
|
* Sets focus state to the button.
|
|
|
|
*/
|
|
|
|
$chooseButton
|
|
|
|
.attr( {
|
|
|
|
class: $chooseButton.attr( 'data-alt-classes' ),
|
|
|
|
'data-alt-classes': $chooseButton.attr( 'class' ),
|
|
|
|
'data-state': '',
|
|
|
|
} )
|
|
|
|
.text( $chooseButton.attr( 'data-choose-text' ) )
|
|
|
|
.trigger( 'focus' );
|
|
|
|
} );
|
|
|
|
} )( jQuery );
|