📄 Viewing: admin-page-foogallery-extensions-modal.js
/**
* Coming soon!
*/
// Extension Details view
// Set ups a modal overlay with the expanded extension data
FOOGALLERY.view.Details = wp.Backbone.View.extend({
// Wrap extension data on a div.extension element
className: 'extension-overlay',
events: {
'click': 'collapse',
'click .delete-extension': 'deleteExtension',
'click .left': 'previousExtension',
'click .right': 'nextExtension'
},
// The HTML template for the extension overlay
html: extensions.template( 'extension-single' ),
render: function() {
var data = this.model.toJSON();
this.$el.html( this.html( data ) );
// Renders active extension styles
this.activeExtension();
// Set up navigation events
this.navigation();
// Checks screenshot size
this.screenshotCheck( this.$el );
// Contain "tabbing" inside the overlay
this.containFocus( this.$el );
},
// Adds a class to the currently active extension
// and to the overlay in detailed view mode
activeExtension: function() {
// Check the model has the active property
this.$el.toggleClass( 'active', this.model.get( 'active' ) );
},
// Keeps :focus within the extension details elements
containFocus: function( $el ) {
var $target;
// Move focus to the primary action
_.delay( function() {
$( '.extension-wrap a.button-primary:visible' ).focus();
}, 500 );
$el.on( 'keydown.wp-extensions', function( event ) {
// Tab key
if ( event.which === 9 ) {
$target = $( event.target );
// Keep focus within the overlay by making the last link on extension actions
// switch focus to button.left on tabbing and vice versa
if ( $target.is( 'button.left' ) && event.shiftKey ) {
$el.find( '.extension-actions a:last-child' ).focus();
event.preventDefault();
} else if ( $target.is( '.extension-actions a:last-child' ) ) {
$el.find( 'button.left' ).focus();
event.preventDefault();
}
}
});
},
// Single extension overlay screen
// It's shown when clicking a extension
collapse: function( event ) {
var self = this,
scroll;
event = event || window.event;
// Prevent collapsing detailed view when there is only one extension available
if ( extensions.data.extensions.length === 1 ) {
return;
}
// Detect if the click is inside the overlay
// and don't close it unless the target was
// the div.back button
if ( $( event.target ).is( '.extension-backdrop' ) || $( event.target ).is( '.close' ) || event.keyCode === 27 ) {
// Add a temporary closing class while overlay fades out
$( 'body' ).addClass( 'closing-overlay' );
// With a quick fade out animation
this.$el.fadeOut( 130, function() {
// Clicking outside the modal box closes the overlay
$( 'body' ).removeClass( 'closing-overlay' );
// Handle event cleanup
self.closeOverlay();
// Get scroll position to avoid jumping to the top
scroll = document.body.scrollTop;
// Clean the url structure
extensions.router.navigate( extensions.router.baseUrl( '' ) );
// Restore scroll position
document.body.scrollTop = scroll;
// Return focus to the extension div
if ( extensions.focusedExtension ) {
extensions.focusedExtension.focus();
}
});
}
},
// Handles .disabled classes for next/previous buttons
navigation: function() {
// Disable Left/Right when at the start or end of the collection
if ( this.model.cid === this.model.collection.at(0).cid ) {
this.$el.find( '.left' ).addClass( 'disabled' );
}
if ( this.model.cid === this.model.collection.at( this.model.collection.length - 1 ).cid ) {
this.$el.find( '.right' ).addClass( 'disabled' );
}
},
// Performs the actions to effectively close
// the extension details overlay
closeOverlay: function() {
$( 'body' ).removeClass( 'extension-overlay-open' );
this.remove();
this.unbind();
this.trigger( 'extension:collapse' );
},
nextExtension: function() {
var self = this;
self.trigger( 'extension:next', self.model.cid );
return false;
},
previousExtension: function() {
var self = this;
self.trigger( 'extension:previous', self.model.cid );
return false;
},
// Checks if the extension screenshot is the old 300px width version
// and adds a corresponding class if it's true
screenshotCheck: function( el ) {
var screenshot, image;
screenshot = el.find( '.screenshot img' );
image = new Image();
image.src = screenshot.attr( 'src' );
// Width check
if ( image.width && image.width <= 300 ) {
el.addClass( 'small-screenshot' );
}
}
});
🌑 DarkStealth — WP Plugin Edition
Directory: /home/httpd/html/matrixmodels.com/public_html/wp-content/plugins/foogallery/js