Вход Регистрация
Файл: wordpress/wp-includes/js/media-grid.js
Строк: 938
<?php
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
/*globals wp */

/**
 * wp.media.controller.EditAttachmentMetadata
 *
 * A state for editing an attachment's metadata.
 *
 * @class
 * @augments wp.media.controller.State
 * @augments Backbone.Model
 */
var l10n wp.media.view.l10n,
    
EditAttachmentMetadata;

EditAttachmentMetadata wp.media.controller.State.extend({
    
defaults: {
        
id:      'edit-attachment',
        
// Title string passed to the frame's title region view.
        
title:   l10n.attachmentDetails,
        
// Region mode defaults.
        
content'edit-metadata',
        
menu:    false,
        
toolbarfalse,
        
router:  false
    
}
});

module.exports EditAttachmentMetadata;

},{}],
2:[function(require,module,exports){
/*globals wp */

var media wp.media;

media.controller.EditAttachmentMetadata = require( './controllers/edit-attachment-metadata.js' );
media.view.MediaFrame.Manage = require( './views/frame/manage.js' );
media.view.Attachment.Details.TwoColumn = require( './views/attachment/details-two-column.js' );
media.view.MediaFrame.Manage.Router = require( './routers/manage.js' );
media.view.EditImage.Details = require( './views/edit-image-details.js' );
media.view.MediaFrame.EditAttachments = require( './views/frame/edit-attachments.js' );
media.view.SelectModeToggleButton = require( './views/button/select-mode-toggle.js' );
media.view.DeleteSelectedButton = require( './views/button/delete-selected.js' );
media.view.DeleteSelectedPermanentlyButton = require( './views/button/delete-selected-permanently.js' );

},{
"./controllers/edit-attachment-metadata.js":1,"./routers/manage.js":3,"./views/attachment/details-two-column.js":4,"./views/button/delete-selected-permanently.js":5,"./views/button/delete-selected.js":6,"./views/button/select-mode-toggle.js":7,"./views/edit-image-details.js":8,"./views/frame/edit-attachments.js":9,"./views/frame/manage.js":10}],3:[function(require,module,exports){
/*globals wp, Backbone */

/**
 * wp.media.view.MediaFrame.Manage.Router
 *
 * A router for handling the browser history and application state.
 *
 * @class
 * @augments Backbone.Router
 */
var Router Backbone.Router.extend({
    
routes: {
        
'upload.php?item=:slug':    'showItem',
        
'upload.php?search=:query''search'
    
},

    
// Map routes against the page URL
    
baseUrl: function( url ) {
        return 
'upload.php' url;
    },

    
// Respond to the search route by filling the search field and trigggering the input event
    
search: function( query ) {
        
jQuery'#media-search-input' ).valquery ).trigger'input' );
    },

    
// Show the modal with a specific item
    
showItem: function( query ) {
        var 
media wp.media,
            
library media.frame.state().get('library'),
            
item;

        
// Trigger the media frame to open the correct item
        
item library.findWhere( { idparseIntquery10 ) } );
        if ( 
item ) {
            
media.frame.trigger'edit:attachment'item );
        } else {
            
item media.attachmentquery );
            
media.frame.listenToitem'change', function( model ) {
                
media.frame.stopListeningitem );
                
media.frame.trigger'edit:attachment'model );
            } );
            
item.fetch();
        }
    }
});

module.exports Router;

},{}],
4:[function(require,module,exports){
/*globals wp */

/**
 * wp.media.view.Attachment.Details.TwoColumn
 *
 * A similar view to media.view.Attachment.Details
 * for use in the Edit Attachment modal.
 *
 * @class
 * @augments wp.media.view.Attachment.Details
 * @augments wp.media.view.Attachment
 * @augments wp.media.View
 * @augments wp.Backbone.View
 * @augments Backbone.View
 */
var Details wp.media.view.Attachment.Details,
    
TwoColumn;

TwoColumn Details.extend({
    
templatewp.template'attachment-details-two-column' ),

    
editAttachment: function( event ) {
        
event.preventDefault();
        
this.controller.content.mode'edit-image' );
    },

    
/**
     * Noop this from parent class, doesn't apply here.
     */
    
toggleSelectionHandler: function() {},

    
render: function() {
        
Details.prototype.render.applythisarguments );

        
wp.media.mixin.removeAllPlayers();
        
this.$( 'audio, video' ).each( function (ielem) {
            var 
el wp.media.view.MediaDetails.prepareSrcelem );
            new 
window.MediaElementPlayerelwp.media.mixin.mejsSettings );
        } );
    }
});

module.exports TwoColumn;

},{}],
5:[function(require,module,exports){
/*globals wp */

/**
 * wp.media.view.DeleteSelectedPermanentlyButton
 *
 * When MEDIA_TRASH is true, a button that handles bulk Delete Permanently logic
 *
 * @class
 * @augments wp.media.view.DeleteSelectedButton
 * @augments wp.media.view.Button
 * @augments wp.media.View
 * @augments wp.Backbone.View
 * @augments Backbone.View
 */
var Button wp.media.view.Button,
    
DeleteSelected wp.media.view.DeleteSelectedButton,
    
DeleteSelectedPermanently;

DeleteSelectedPermanently DeleteSelected.extend({
    
initialize: function() {
        
DeleteSelected.prototype.initialize.applythisarguments );
        
this.listenTothis.controller'select:activate'this.selectActivate );
        
this.listenTothis.controller'select:deactivate'this.selectDeactivate );
    },

    
filterChange: function( model ) {
        
this.canShow = ( 'trash' === model.get'status' ) );
    },

    
selectActivate: function() {
        
this.toggleDisabled();
        
this.$el.toggleClass'hidden', ! this.canShow );
    },

    
selectDeactivate: function() {
        
this.toggleDisabled();
        
this.$el.addClass'hidden' );
    },

    
render: function() {
        
Button.prototype.render.applythisarguments );
        
this.selectActivate();
        return 
this;
    }
});

module.exports DeleteSelectedPermanently;

},{}],
6:[function(require,module,exports){
/*globals wp */

/**
 * wp.media.view.DeleteSelectedButton
 *
 * A button that handles bulk Delete/Trash logic
 *
 * @class
 * @augments wp.media.view.Button
 * @augments wp.media.View
 * @augments wp.Backbone.View
 * @augments Backbone.View
 */
var Button wp.media.view.Button,
    
l10n wp.media.view.l10n,
    
DeleteSelected;

DeleteSelected Button.extend({
    
initialize: function() {
        
Button.prototype.initialize.applythisarguments );
        if ( 
this.options.filters ) {
            
this.listenTothis.options.filters.model'change'this.filterChange );
        }
        
this.listenTothis.controller'selection:toggle'this.toggleDisabled );
    },

    
filterChange: function( model ) {
        if ( 
'trash' === model.get'status' ) ) {
            
this.model.set'text'l10n.untrashSelected );
        } else if ( 
wp.media.view.settings.mediaTrash ) {
            
this.model.set'text'l10n.trashSelected );
        } else {
            
this.model.set'text'l10n.deleteSelected );
        }
    },

    
toggleDisabled: function() {
        
this.model.set'disabled', ! this.controller.state().get'selection' ).length );
    },

    
render: function() {
        
Button.prototype.render.applythisarguments );
        if ( 
this.controller.isModeActive'select' ) ) {
            
this.$el.addClass'delete-selected-button' );
        } else {
            
this.$el.addClass'delete-selected-button hidden' );
        }
        
this.toggleDisabled();
        return 
this;
    }
});

module.exports DeleteSelected;

},{}],
7:[function(require,module,exports){
/*globals wp */

/**
 * wp.media.view.SelectModeToggleButton
 *
 * @class
 * @augments wp.media.view.Button
 * @augments wp.media.View
 * @augments wp.Backbone.View
 * @augments Backbone.View
 */
var Button wp.media.view.Button,
    
l10n wp.media.view.l10n,
    
SelectModeToggle;

SelectModeToggle Button.extend({
    
initialize: function() {
        
Button.prototype.initialize.applythisarguments );
        
this.listenTothis.controller'select:activate select:deactivate'this.toggleBulkEditHandler );
        
this.listenTothis.controller'selection:action:done'this.back );
    },

    
back: function () {
        
this.controller.deactivateMode'select' ).activateMode'edit' );
    },

    
click: function() {
        
Button.prototype.click.applythisarguments );
        if ( 
this.controller.isModeActive'select' ) ) {
            
this.back();
        } else {
            
this.controller.deactivateMode'edit' ).activateMode'select' );
        }
    },

    
render: function() {
        
Button.prototype.render.applythisarguments );
        
this.$el.addClass'select-mode-toggle-button' );
        return 
this;
    },

    
toggleBulkEditHandler: function() {
        var 
toolbar this.controller.content.get().toolbarchildren;

        
children toolbar.$( '.media-toolbar-secondary > *, .media-toolbar-primary > *' );

        
// TODO: the Frame should be doing all of this.
        
if ( this.controller.isModeActive'select' ) ) {
            
this.model.set'text'l10n.cancelSelection );
            
children.not'.media-button' ).hide();
            
this.$el.show();
            
toolbar.$( '.delete-selected-button' ).removeClass'hidden' );
        } else {
            
this.model.set'text'l10n.bulkSelect );
            
this.controller.content.get().$el.removeClass'fixed' );
            
toolbar.$el.css'width''' );
            
toolbar.$( '.delete-selected-button' ).addClass'hidden' );
            
children.not'.spinner, .media-button' ).show();
            
this.controller.state().get'selection' ).reset();
        }
    }
});

module.exports SelectModeToggle;

},{}],
8:[function(require,module,exports){
/*globals wp, _ */

/**
 * wp.media.view.EditImage.Details
 *
 * @class
 * @augments wp.media.view.EditImage
 * @augments wp.media.View
 * @augments wp.Backbone.View
 * @augments Backbone.View
 */
var View wp.media.View,
    
EditImage wp.media.view.EditImage,
    
Details;

Details EditImage.extend({
    
initialize: function( options ) {
        
this.editor window.imageEdit;
        
this.frame options.frame;
        
this.controller options.controller;
        
View.prototype.initialize.applythisarguments );
    },

    
back: function() {
        
this.frame.content.mode'edit-metadata' );
    },

    
save: function() {
        
this.model.fetch().done_.bind( function() {
            
this.frame.content.mode'edit-metadata' );
        }, 
this ) );
    }
});

module.exports Details;

},{}],
9:[function(require,module,exports){
/*globals wp, _, jQuery */

/**
 * wp.media.view.MediaFrame.EditAttachments
 *
 * A frame for editing the details of a specific media item.
 *
 * Opens in a modal by default.
 *
 * Requires an attachment model to be passed in the options hash under `model`.
 *
 * @class
 * @augments wp.media.view.Frame
 * @augments wp.media.View
 * @augments wp.Backbone.View
 * @augments Backbone.View
 * @mixes wp.media.controller.StateMachine
 */
var Frame wp.media.view.Frame,
    
MediaFrame wp.media.view.MediaFrame,

    $ = 
jQuery,
    
EditAttachments;

EditAttachments MediaFrame.extend({

    
className'edit-attachment-frame',
    
template:  wp.template'edit-attachment-frame' ),
    
regions:   [ 'title''content' ],

    
events: {
        
'click .left':  'previousMediaItem',
        
'click .right''nextMediaItem'
    
},

    
initialize: function() {
        
Frame.prototype.initialize.applythisarguments );

        
_.defaultsthis.options, {
            
modaltrue,
            
state'edit-attachment'
        
});

        
this.controller this.options.controller;
        
this.gridRouter this.controller.gridRouter;
        
this.library this.options.library;

        if ( 
this.options.model ) {
            
this.model this.options.model;
        }

        
this.bindHandlers();
        
this.createStates();
        
this.createModal();

        
this.title.mode'default' );
        
this.toggleNav();
    },

    
bindHandlers: function() {
        
// Bind default title creation.
        
this.on'title:create:default'this.createTitlethis );

        
// Close the modal if the attachment is deleted.
        
this.listenTothis.model'change:status destroy'this.closethis );

        
this.on'content:create:edit-metadata'this.editMetadataModethis );
        
this.on'content:create:edit-image'this.editImageModethis );
        
this.on'content:render:edit-image'this.editImageModeRenderthis );
        
this.on'close'this.detach );
    },

    
createModal: function() {
        
// Initialize modal container view.
        
if ( this.options.modal ) {
            
this.modal = new wp.media.view.Modal({
                
controllerthis,
                
title:      this.options.title
            
});

            
this.modal.on'open'_.bind( function () {
                $( 
'body' ).on'keydown.media-modal'_.bindthis.keyEventthis ) );
            }, 
this ) );

            
// Completely destroy the modal DOM element when closing it.
            
this.modal.on'close'_.bind( function() {
                
this.modal.remove();
                $( 
'body' ).off'keydown.media-modal' ); /* remove the keydown event */
                // Restore the original focus item if possible
                
$( 'li.attachment[data-id="' this.model.get'id' ) +'"]' ).focus();
                
this.resetRoute();
            }, 
this ) );

            
// Set this frame as the modal's content.
            
this.modal.contentthis );
            
this.modal.open();
        }
    },

    
/**
     * Add the default states to the frame.
     */
    
createStates: function() {
        
this.states.add([
            new 
wp.media.controller.EditAttachmentMetadata( { modelthis.model } )
        ]);
    },

    
/**
     * Content region rendering callback for the `edit-metadata` mode.
     *
     * @param {Object} contentRegion Basic object with a `view` property, which
     *                               should be set with the proper region view.
     */
    
editMetadataMode: function( contentRegion ) {
        
contentRegion.view = new wp.media.view.Attachment.Details.TwoColumn({
            
controllerthis,
            
model:      this.model
        
});

        
/**
         * Attach a subview to display fields added via the
         * `attachment_fields_to_edit` filter.
         */
        
contentRegion.view.views.set'.attachment-compat', new wp.media.view.AttachmentCompat({
            
controllerthis,
            
model:      this.model
        
}) );

        
// Update browser url when navigating media details
        
if ( this.model ) {
            
this.gridRouter.navigatethis.gridRouter.baseUrl'?item=' this.model.id ) );
        }
    },

    
/**
     * Render the EditImage view into the frame's content region.
     *
     * @param {Object} contentRegion Basic object with a `view` property, which
     *                               should be set with the proper region view.
     */
    
editImageMode: function( contentRegion ) {
        var 
editImageController = new wp.media.controller.EditImage( {
            
modelthis.model,
            
framethis
        
} );
        
// Noop some methods.
        
editImageController._toolbar = function() {};
        
editImageController._router = function() {};
        
editImageController._menu = function() {};

        
contentRegion.view = new wp.media.view.EditImage.Details( {
            
modelthis.model,
            
framethis,
            
controllereditImageController
        
} );
    },

    
editImageModeRender: function( view ) {
        
view.on'ready'view.loadEditor );
    },

    
toggleNav: function() {
        
this.$('.left').toggleClass'disabled', ! this.hasPrevious() );
        
this.$('.right').toggleClass'disabled', ! this.hasNext() );
    },

    
/**
     * Rerender the view.
     */
    
rerender: function() {
        
// Only rerender the `content` region.
        
if ( this.content.mode() !== 'edit-metadata' ) {
            
this.content.mode'edit-metadata' );
        } else {
            
this.content.render();
        }

        
this.toggleNav();
    },

    
/**
     * Click handler to switch to the previous media item.
     */
    
previousMediaItem: function() {
        if ( ! 
this.hasPrevious() ) {
            
this.$( '.left' ).blur();
            return;
        }
        
this.model this.library.atthis.getCurrentIndex() - );
        
this.rerender();
        
this.$( '.left' ).focus();
    },

    
/**
     * Click handler to switch to the next media item.
     */
    
nextMediaItem: function() {
        if ( ! 
this.hasNext() ) {
            
this.$( '.right' ).blur();
            return;
        }
        
this.model this.library.atthis.getCurrentIndex() + );
        
this.rerender();
        
this.$( '.right' ).focus();
    },

    
getCurrentIndex: function() {
        return 
this.library.indexOfthis.model );
    },

    
hasNext: function() {
        return ( 
this.getCurrentIndex() + ) < this.library.length;
    },

    
hasPrevious: function() {
        return ( 
this.getCurrentIndex() - ) > -1;
    },
    
/**
     * Respond to the keyboard events: right arrow, left arrow, except when
     * focus is in a textarea or input field.
     */
    
keyEvent: function( event ) {
        if ( ( 
'INPUT' === event.target.nodeName || 'TEXTAREA' === event.target.nodeName ) && ! ( event.target.readOnly || event.target.disabled ) ) {
            return;
        }

        
// The right arrow key
        
if ( 39 === event.keyCode ) {
            
this.nextMediaItem();
        }
        
// The left arrow key
        
if ( 37 === event.keyCode ) {
            
this.previousMediaItem();
        }
    },

    
resetRoute: function() {
        
this.gridRouter.navigatethis.gridRouter.baseUrl'' ) );
    }
});

module.exports EditAttachments;

},{}],
10:[function(require,module,exports){
/*globals wp, _, Backbone */

/**
 * wp.media.view.MediaFrame.Manage
 *
 * A generic management frame workflow.
 *
 * Used in the media grid view.
 *
 * @class
 * @augments wp.media.view.MediaFrame
 * @augments wp.media.view.Frame
 * @augments wp.media.View
 * @augments wp.Backbone.View
 * @augments Backbone.View
 * @mixes wp.media.controller.StateMachine
 */
var MediaFrame wp.media.view.MediaFrame,
    
Library wp.media.controller.Library,

    $ = 
Backbone.$,
    
Manage;

Manage MediaFrame.extend({
    
/**
     * @global wp.Uploader
     */
    
initialize: function() {
        
_.defaultsthis.options, {
            
title:     '',
            
modal:     false,
            
selection: [],
            
library:   {}, // Options hash for the query to the media library.
            
multiple:  'add',
            
state:     'library',
            
uploader:  true,
            
mode:      [ 'grid''edit' ]
        });

        
this.$body = $( document.body );
        
this.$window = $( window );
        
this.$adminBar = $( '#wpadminbar' );
        
this.$window.on'scroll resize'_.debounce_.bindthis.fixPositionthis ), 15 ) );
        $( 
document ).on'click''.add-new-h2'_.bindthis.addNewClickHandlerthis ) );

        
// Ensure core and media grid view UI is enabled.
        
this.$el.addClass('wp-core-ui');

        
// Force the uploader off if the upload limit has been exceeded or
        // if the browser isn't supported.
        
if ( wp.Uploader.limitExceeded || ! wp.Uploader.browser.supported ) {
            
this.options.uploader false;
        }

        
// Initialize a window-wide uploader.
        
if ( this.options.uploader ) {
            
this.uploader = new wp.media.view.UploaderWindow({
                
controllerthis,
                
uploader: {
                    
dropzone:  document.body,
                    
containerdocument.body
                
}
            }).
render();
            
this.uploader.ready();
            $(
'body').appendthis.uploader.el );

            
this.options.uploader false;
        }

        
this.gridRouter = new wp.media.view.MediaFrame.Manage.Router();

        
// Call 'initialize' directly on the parent class.
        
MediaFrame.prototype.initialize.applythisarguments );

        
// Append the frame view directly the supplied container.
        
this.$el.appendTothis.options.container );

        
this.createStates();
        
this.bindRegionModeHandlers();
        
this.render();
        
this.bindSearchHandler();
    },

    
bindSearchHandler: function() {
        var 
search this.$( '#media-search-input' ),
            
currentSearch this.options.container.data'search' ),
            
searchView this.browserView.toolbar.get'search' ).$el,
            
listMode this.$( '.view-list' ),

            
input  _.debounce( function (e) {
                var 
val = $( e.currentTarget ).val(),
                    
url '';

                if ( 
val ) {
                    
url += '?search=' val;
                }
                
this.gridRouter.navigatethis.gridRouter.baseUrlurl ) );
            }, 
1000 );

        
// Update the URL when entering search string (at most once per second)
        
search.on'input'_.bindinputthis ) );
        
searchView.valcurrentSearch ).trigger'input' );

        
this.gridRouter.on'route:search', function () {
            var 
href window.location.href;
            if ( 
href.indexOf'mode=' ) > -) {
                
href href.replace( /mode=[^&]+/g'mode=list' );
            } else {
                
href += href.indexOf'?' ) > -'&mode=list' '?mode=list';
            }
            
href href.replace'search=''s=' );
            
listMode.prop'href'href );
        } );
    },

    
/**
     * Create the default states for the frame.
     */
    
createStates: function() {
        var 
options this.options;

        if ( 
this.options.states ) {
            return;
        }

        
// Add the default states.
        
this.states.add([
            new 
Library({
                
library:            wp.media.queryoptions.library ),
                
multiple:           options.multiple,
                
title:              options.title,
                
content:            'browse',
                
toolbar:            'select',
                
contentUserSettingfalse,
                
filterable:         'all',
                
autoSelect:         false
            
})
        ]);
    },

    
/**
     * Bind region mode activation events to proper handlers.
     */
    
bindRegionModeHandlers: function() {
        
this.on'content:create:browse'this.browseContentthis );

        
// Handle a frame-level event for editing an attachment.
        
this.on'edit:attachment'this.openEditAttachmentModalthis );

        
this.on'select:activate'this.bindKeydownthis );
        
this.on'select:deactivate'this.unbindKeydownthis );
    },

    
handleKeydown: function( ) {
        if ( 
27 === e.which ) {
            
e.preventDefault();
            
this.deactivateMode'select' ).activateMode'edit' );
        }
    },

    
bindKeydown: function() {
        
this.$body.on'keydown.select'_.bindthis.handleKeydownthis ) );
    },

    
unbindKeydown: function() {
        
this.$body.off'keydown.select' );
    },

    
fixPosition: function() {
        var 
$browser$toolbar;
        if ( ! 
this.isModeActive'select' ) ) {
            return;
        }

        
$browser this.$('.attachments-browser');
        
$toolbar $browser.find('.media-toolbar');

        
// Offset doesn't appear to take top margin into account, hence +16
        
if ( ( $browser.offset().top 16 ) < this.$window.scrollTop() + this.$adminBar.height() ) {
            
$browser.addClass'fixed' );
            
$toolbar.css('width'$browser.width() + 'px');
        } else {
            
$browser.removeClass'fixed' );
            
$toolbar.css('width''');
        }
    },

    
/**
     * Click handler for the `Add New` button.
     */
    
addNewClickHandler: function( event ) {
        
event.preventDefault();
        
this.trigger'toggle:upload:attachment' );
    },

    
/**
     * Open the Edit Attachment modal.
     */
    
openEditAttachmentModal: function( model ) {
        
// Create a new EditAttachment frame, passing along the library and the attachment model.
        
wp.media( {
            
frame:       'edit-attachments',
            
controller:  this,
            
library:     this.state().get('library'),
            
model:       model
        
} );
    },

    
/**
     * Create an attachments browser view within the content region.
     *
     * @param {Object} contentRegion Basic object with a `view` property, which
     *                               should be set with the proper region view.
     * @this wp.media.controller.Region
     */
    
browseContent: function( contentRegion ) {
        var 
state this.state();

        
// Browse our library of attachments.
        
this.browserView contentRegion.view = new wp.media.view.AttachmentsBrowser({
            
controllerthis,
            
collectionstate.get('library'),
            
selection:  state.get('selection'),
            
model:      state,
            
sortable:   state.get('sortable'),
            
search:     state.get('searchable'),
            
filters:    state.get('filterable'),
            
date:       state.get('date'),
            
display:    state.get('displaySettings'),
            
dragInfo:   state.get('dragInfo'),
            
sidebar:    'errors',

            
suggestedWidth:  state.get('suggestedWidth'),
            
suggestedHeightstate.get('suggestedHeight'),

            
AttachmentViewstate.get('AttachmentView'),

            
scrollElementdocument
        
});
        
this.browserView.on'ready'_.bindthis.bindDeferredthis ) );

        
this.errors wp.Uploader.errors;
        
this.errors.on'add remove reset'this.sidebarVisibilitythis );
    },

    
sidebarVisibility: function() {
        
this.browserView.$( '.media-sidebar' ).toggle( !! this.errors.length );
    },

    
bindDeferred: function() {
        if ( ! 
this.browserView.dfd ) {
            return;
        }
        
this.browserView.dfd.done_.bindthis.startHistorythis ) );
    },

    
startHistory: function() {
        
// Verify pushState support and activate
        
if ( window.history && window.history.pushState ) {
            
Backbone.history.start( {
                
rootwindow._wpMediaGridSettings.adminUrl,
                
pushStatetrue
            
} );
        }
    }
});

module.exports Manage;

},{}]},{},[
2]);
?>
Онлайн: 2
Реклама