| Current Path : /home/krobertfnz/www/wp-content/themes/nex/vamtam/customizer/lib/assets/js/ |
| Current File : /home/krobertfnz/www/wp-content/themes/nex/vamtam/customizer/lib/assets/js/background.js |
(function( $, undefined ) {
'use strict';
wp.customize.controlConstructor['vamtam-background'] = wp.customize.Control.extend({
ready: function() {
var control = this;
control.setupColor();
// Shortcut so that we don't have to use _.bind every time we add a callback.
_.bindAll( control, 'restoreDefault', 'removeFile', 'openFrame', 'select' );
// Bind events, with delegation to facilitate re-rendering.
control.container.on( 'click keydown', '.upload-button', control.openFrame );
control.container.on( 'click keydown', '.thumbnail-image img', control.openFrame );
control.container.on( 'click keydown', '.default-button', control.restoreDefault );
control.container.on( 'click keydown', '.remove-button', control.removeFile );
control.container.on( 'change', 'select', function() {
var changed = {};
changed[ this.dataset.key ] = this.value;
control.setBackground( changed );
} );
},
setupColor: function() {
var control = this;
var picker = control.container.find('.vamtam-bg-color');
picker.val( control.setting()['background-color'] ).wpColorPicker({
change: function() {
control.setBackground( { 'background-color': picker.val() } );
},
clear: function() {
control.setBackground( { 'background-color': '' } );
},
palettes: false,
});
},
/**
* Open the media modal.
*/
openFrame: function( event ) {
if ( wp.customize.utils.isKeydownButNotEnterEvent( event ) ) {
return;
}
event.preventDefault();
if ( ! this.frame ) {
this.initFrame();
}
this.frame.open();
},
/**
* Create a media modal select frame, and store it so the instance can be reused when needed.
*/
initFrame: function() {
this.frame = wp.media({
button: {
text: this.params.button_labels.frame_button
},
states: [
new wp.media.controller.Library({
title: this.params.button_labels.frame_title,
library: wp.media.query({ type: this.params.mime_type }),
multiple: false,
date: false
})
]
});
// When a file is selected, run a callback.
this.frame.on( 'select', this.select );
},
/**
* Callback handler for when an attachment is selected in the media modal.
* Gets the selected image information, and sets it within the control.
*/
select: function() {
// Get the attachment from the modal frame.
var attachment = this.frame.state().get( 'selection' ).first().toJSON();
// Set the Customizer setting; the callback takes care of rendering.
this.setImage( attachment );
},
/**
* Reset the setting to the default value.
*/
restoreDefault: function( event ) {
if ( wp.customize.utils.isKeydownButNotEnterEvent( event ) ) {
return;
}
event.preventDefault();
this.setImage( this.params.default['background-image'] );
this.setBackground( this.params.default );
},
/**
* Called when the "Remove" link is clicked. Empties the setting.
*
* @param {object} event jQuery Event object
*/
removeFile: function( event ) {
if ( wp.customize.utils.isKeydownButNotEnterEvent( event ) ) {
return;
}
event.preventDefault();
this.setImage( {} );
},
setImage: function( attachment ) {
this.params.bg = _.extend( {}, this.params.bg, { 'background-image': attachment } );
this.setting.set( _.extend( {}, this.setting(), { 'background-image': attachment.url || '' } ) );
this.renderContent(); // Render the control to show the new image
this.setupColor();
},
setBackground: function( new_bg ) {
var old_setting = this.setting.get();
this.params.bg = _.extend( {
'background-repeat': 'no-repeat',
'background-size': 'auto',
'background-attachment': 'fixed',
'background-position': 'left top'
}, this.params.bg, new_bg );
this.setting.set( _.extend( {
'background-repeat': 'no-repeat',
'background-size': 'auto',
'background-attachment': 'fixed',
'background-position': 'left top'
}, old_setting, new_bg ) );
}
});
})( jQuery );