2012-10-06 02:43:36 +02:00
|
|
|
window.wp = window.wp || {};
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
|
|
|
|
(function($){
|
2012-10-12 18:02:45 +02:00
|
|
|
var Attachment, Attachments, Query, compare, l10n;
|
2012-08-31 22:44:02 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* wp.media( attributes )
|
|
|
|
*
|
|
|
|
* Handles the default media experience. Automatically creates
|
2012-11-09 10:59:36 +01:00
|
|
|
* and opens a media frame, and returns the result.
|
2012-08-31 22:44:02 +02:00
|
|
|
* Does nothing if the controllers do not exist.
|
|
|
|
*
|
|
|
|
* @param {object} attributes The properties passed to the main media controller.
|
|
|
|
* @return {object} A media workflow.
|
|
|
|
*/
|
|
|
|
media = wp.media = function( attributes ) {
|
2012-11-09 10:59:36 +01:00
|
|
|
var MediaFrame = media.view.MediaFrame,
|
|
|
|
frame;
|
|
|
|
|
|
|
|
if ( ! MediaFrame )
|
|
|
|
return;
|
|
|
|
|
|
|
|
attributes = _.defaults( attributes || {}, {
|
|
|
|
frame: 'select'
|
|
|
|
});
|
|
|
|
|
|
|
|
if ( 'select' === attributes.frame && MediaFrame.Select )
|
|
|
|
frame = new MediaFrame.Select( attributes );
|
|
|
|
else if ( 'post' === attributes.frame && MediaFrame.Post )
|
|
|
|
frame = new MediaFrame.Post( attributes );
|
|
|
|
|
|
|
|
delete attributes.frame;
|
2012-11-10 08:51:37 +01:00
|
|
|
// Set the default state.
|
|
|
|
frame.state( frame.options.state );
|
|
|
|
// Render, attach, and open the frame.
|
2012-11-09 10:59:36 +01:00
|
|
|
return frame.render().attach().open();
|
2012-08-31 22:44:02 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
_.extend( media, { model: {}, view: {}, controller: {} });
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
|
2012-10-12 18:02:45 +02:00
|
|
|
// Link any localized strings.
|
|
|
|
l10n = media.model.l10n = _.isUndefined( _wpMediaModelsL10n ) ? {} : _wpMediaModelsL10n;
|
|
|
|
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
/**
|
|
|
|
* ========================================================================
|
|
|
|
* UTILITIES
|
|
|
|
* ========================================================================
|
|
|
|
*/
|
|
|
|
|
2012-09-18 23:42:29 +02:00
|
|
|
/**
|
|
|
|
* A basic comparator.
|
|
|
|
*
|
|
|
|
* @param {mixed} a The primary parameter to compare.
|
|
|
|
* @param {mixed} b The primary parameter to compare.
|
|
|
|
* @param {string} ac The fallback parameter to compare, a's cid.
|
|
|
|
* @param {string} bc The fallback parameter to compare, b's cid.
|
|
|
|
* @return {number} -1: a should come before b.
|
|
|
|
* 0: a and b are of the same rank.
|
|
|
|
* 1: b should come before a.
|
|
|
|
*/
|
|
|
|
compare = function( a, b, ac, bc ) {
|
|
|
|
if ( _.isEqual( a, b ) )
|
|
|
|
return ac === bc ? 0 : (ac > bc ? -1 : 1);
|
|
|
|
else
|
|
|
|
return a > b ? -1 : 1;
|
|
|
|
};
|
|
|
|
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
_.extend( media, {
|
|
|
|
/**
|
|
|
|
* media.template( id )
|
|
|
|
*
|
|
|
|
* Fetches a template by id.
|
|
|
|
*
|
|
|
|
* @param {string} id A string that corresponds to a DOM element with an id prefixed with "tmpl-".
|
|
|
|
* For example, "attachment" maps to "tmpl-attachment".
|
|
|
|
* @return {function} A function that lazily-compiles the template requested.
|
|
|
|
*/
|
|
|
|
template: _.memoize( function( id ) {
|
2012-11-07 09:41:17 +01:00
|
|
|
var compiled,
|
|
|
|
options = {
|
|
|
|
evaluate: /<#([\s\S]+?)#>/g,
|
|
|
|
interpolate: /\{\{\{([\s\S]+?)\}\}\}/g,
|
2012-11-14 22:51:41 +01:00
|
|
|
escape: /\{\{([^\}]+?)\}\}(?!\})/g,
|
|
|
|
variable: 'data'
|
2012-11-07 09:41:17 +01:00
|
|
|
};
|
|
|
|
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
return function( data ) {
|
2012-11-07 09:41:17 +01:00
|
|
|
compiled = compiled || _.template( $( '#tmpl-' + id ).html(), null, options );
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
return compiled( data );
|
|
|
|
};
|
|
|
|
}),
|
|
|
|
|
|
|
|
/**
|
|
|
|
* media.post( [action], [data] )
|
|
|
|
*
|
|
|
|
* Sends a POST request to WordPress.
|
|
|
|
*
|
|
|
|
* @param {string} action The slug of the action to fire in WordPress.
|
|
|
|
* @param {object} data The data to populate $_POST with.
|
|
|
|
* @return {$.promise} A jQuery promise that represents the request.
|
|
|
|
*/
|
|
|
|
post: function( action, data ) {
|
|
|
|
return media.ajax({
|
|
|
|
data: _.isObject( action ) ? action : _.extend( data || {}, { action: action })
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
/**
|
|
|
|
* media.ajax( [action], [options] )
|
|
|
|
*
|
|
|
|
* Sends a POST request to WordPress.
|
|
|
|
*
|
|
|
|
* @param {string} action The slug of the action to fire in WordPress.
|
|
|
|
* @param {object} options The options passed to jQuery.ajax.
|
|
|
|
* @return {$.promise} A jQuery promise that represents the request.
|
|
|
|
*/
|
|
|
|
ajax: function( action, options ) {
|
|
|
|
if ( _.isObject( action ) ) {
|
|
|
|
options = action;
|
|
|
|
} else {
|
|
|
|
options = options || {};
|
|
|
|
options.data = _.extend( options.data || {}, { action: action });
|
|
|
|
}
|
|
|
|
|
|
|
|
options = _.defaults( options || {}, {
|
|
|
|
type: 'POST',
|
|
|
|
url: ajaxurl,
|
|
|
|
context: this
|
|
|
|
});
|
|
|
|
|
|
|
|
return $.Deferred( function( deferred ) {
|
|
|
|
// Transfer success/error callbacks.
|
|
|
|
if ( options.success )
|
|
|
|
deferred.done( options.success );
|
|
|
|
if ( options.error )
|
|
|
|
deferred.fail( options.error );
|
|
|
|
|
|
|
|
delete options.success;
|
|
|
|
delete options.error;
|
|
|
|
|
|
|
|
// Use with PHP's wp_send_json_success() and wp_send_json_error()
|
|
|
|
$.ajax( options ).done( function( response ) {
|
|
|
|
if ( _.isObject( response ) && ! _.isUndefined( response.success ) )
|
|
|
|
deferred[ response.success ? 'resolveWith' : 'rejectWith' ]( this, [response.data] );
|
|
|
|
else
|
|
|
|
deferred.rejectWith( this, [response] );
|
|
|
|
}).fail( function() {
|
|
|
|
deferred.rejectWith( this, arguments );
|
|
|
|
});
|
|
|
|
}).promise();
|
2012-09-26 16:12:54 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
// Scales a set of dimensions to fit within bounding dimensions.
|
|
|
|
fit: function( dimensions ) {
|
|
|
|
var width = dimensions.width,
|
|
|
|
height = dimensions.height,
|
|
|
|
maxWidth = dimensions.maxWidth,
|
|
|
|
maxHeight = dimensions.maxHeight,
|
|
|
|
constraint;
|
|
|
|
|
|
|
|
// Compare ratios between the two values to determine which
|
|
|
|
// max to constrain by. If a max value doesn't exist, then the
|
|
|
|
// opposite side is the constraint.
|
|
|
|
if ( ! _.isUndefined( maxWidth ) && ! _.isUndefined( maxHeight ) ) {
|
|
|
|
constraint = ( width / height > maxWidth / maxHeight ) ? 'width' : 'height';
|
|
|
|
} else if ( _.isUndefined( maxHeight ) ) {
|
|
|
|
constraint = 'width';
|
|
|
|
} else if ( _.isUndefined( maxWidth ) && height > maxHeight ) {
|
|
|
|
constraint = 'height';
|
|
|
|
}
|
|
|
|
|
|
|
|
// If the value of the constrained side is larger than the max,
|
|
|
|
// then scale the values. Otherwise return the originals; they fit.
|
|
|
|
if ( 'width' === constraint && width > maxWidth ) {
|
|
|
|
return {
|
|
|
|
width : maxWidth,
|
2012-10-09 01:20:04 +02:00
|
|
|
height: Math.round( maxWidth * height / width )
|
2012-09-26 16:12:54 +02:00
|
|
|
};
|
|
|
|
} else if ( 'height' === constraint && height > maxHeight ) {
|
|
|
|
return {
|
2012-10-09 01:20:04 +02:00
|
|
|
width : Math.round( maxHeight * width / height ),
|
2012-09-26 16:12:54 +02:00
|
|
|
height: maxHeight
|
|
|
|
};
|
|
|
|
} else {
|
|
|
|
return {
|
|
|
|
width : width,
|
|
|
|
height: height
|
|
|
|
};
|
|
|
|
}
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* ========================================================================
|
|
|
|
* MODELS
|
|
|
|
* ========================================================================
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* wp.media.model.Attachment
|
|
|
|
*/
|
|
|
|
Attachment = media.model.Attachment = Backbone.Model.extend({
|
|
|
|
sync: function( method, model, options ) {
|
2012-10-11 01:32:48 +02:00
|
|
|
// Overload the `read` request so Attachment.fetch() functions correctly.
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
if ( 'read' === method ) {
|
|
|
|
options = options || {};
|
|
|
|
options.context = this;
|
|
|
|
options.data = _.extend( options.data || {}, {
|
|
|
|
action: 'get-attachment',
|
|
|
|
id: this.id
|
|
|
|
});
|
|
|
|
return media.ajax( options );
|
|
|
|
|
2012-10-11 01:32:48 +02:00
|
|
|
// Overload the `update` request so properties can be saved.
|
|
|
|
} else if ( 'update' === method ) {
|
|
|
|
options = options || {};
|
|
|
|
options.context = this;
|
|
|
|
|
|
|
|
// Set the action and ID.
|
|
|
|
options.data = _.extend( options.data || {}, {
|
|
|
|
action: 'save-attachment',
|
2012-10-12 18:02:45 +02:00
|
|
|
id: this.id,
|
|
|
|
nonce: l10n.saveAttachmentNonce
|
2012-10-11 01:32:48 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
// Record the values of the changed attributes.
|
|
|
|
if ( options.changes ) {
|
|
|
|
_.each( options.changes, function( value, key ) {
|
|
|
|
options.changes[ key ] = this.get( key );
|
|
|
|
}, this );
|
|
|
|
|
|
|
|
options.data.changes = options.changes;
|
|
|
|
delete options.changes;
|
|
|
|
}
|
|
|
|
|
|
|
|
return media.ajax( options );
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
parse: function( resp, xhr ) {
|
2012-10-11 01:32:48 +02:00
|
|
|
if ( ! resp )
|
|
|
|
return resp;
|
|
|
|
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
// Convert date strings into Date objects.
|
|
|
|
resp.date = new Date( resp.date );
|
|
|
|
resp.modified = new Date( resp.modified );
|
|
|
|
return resp;
|
2012-11-11 02:26:42 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
saveCompat: function( data, options ) {
|
|
|
|
var model = this;
|
|
|
|
|
|
|
|
return media.post( 'save-attachment-compat', _.defaults({
|
|
|
|
id: this.id,
|
|
|
|
nonce: l10n.saveAttachmentNonce
|
|
|
|
}, data ) ).done( function( resp, status, xhr ) {
|
|
|
|
model.set( model.parse( resp, xhr ), options );
|
|
|
|
});
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
}
|
|
|
|
}, {
|
|
|
|
create: function( attrs ) {
|
|
|
|
return Attachments.all.push( attrs );
|
|
|
|
},
|
|
|
|
|
|
|
|
get: _.memoize( function( id, attachment ) {
|
|
|
|
return Attachments.all.push( attachment || { id: id } );
|
|
|
|
})
|
|
|
|
});
|
|
|
|
|
|
|
|
/**
|
|
|
|
* wp.media.model.Attachments
|
|
|
|
*/
|
|
|
|
Attachments = media.model.Attachments = Backbone.Collection.extend({
|
|
|
|
model: Attachment,
|
|
|
|
|
|
|
|
initialize: function( models, options ) {
|
|
|
|
options = options || {};
|
|
|
|
|
2012-09-18 23:42:29 +02:00
|
|
|
this.props = new Backbone.Model();
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
this.filters = options.filters || {};
|
|
|
|
|
2012-09-18 23:42:29 +02:00
|
|
|
// Bind default `change` events to the `props` model.
|
|
|
|
this.props.on( 'change:order', this._changeOrder, this );
|
|
|
|
this.props.on( 'change:orderby', this._changeOrderby, this );
|
|
|
|
this.props.on( 'change:query', this._changeQuery, this );
|
|
|
|
this.props.on( 'change:search', this._changeSearch, this );
|
2012-09-26 22:50:13 +02:00
|
|
|
this.props.on( 'change:type', this._changeType, this );
|
2012-09-18 23:42:29 +02:00
|
|
|
|
|
|
|
// Set the `props` model and fill the default property values.
|
Use the new media modal to insert galleries into TinyMCE and the text editor.
'''Galleries'''
* Gallery insertion from the new media modal (into TinyMCE, the text editor, etc).
* Gallery previews in TinyMCE now use the `wp.mce.views` API.
* Disables the TinyMCE `wpgallery` plugin.
* Gallery previews consist of the first image of the gallery and the appearance of a stack. This will later be fleshed out to include more images/functionality (including editing the gallery, gallery properties, and showing the number of images in the gallery).
* Multiple galleries can be added to a single post.
* The gallery MCE view provides a bridge between the `wp.shortcode` and `Attachments` representation of a gallery, which allows the existing collection to persist when a gallery is initially created (preventing a request to the server for the query).
'''Shortcodes'''
* Renames `wp.shortcode.Match` to `wp.shortcode` to better expose the shortcode constructor.
* The `wp.shortcode` constructor now accepts an object of options instead of a `wp.shortcode.regexp()` match.
* A `wp.shortcode` instance can be created from a `wp.shortcode.regexp()` match by calling `wp.shortcode.fromMatch( match )`.
* Adds `wp.shortcode.string()`, which takes a set of shortcode parameters and converts them into a string.* Renames `wp.shortcode.prototype.text()` to `wp.shortcode.prototype.string()`.
* Adds an additional capture group to `wp.shortcode.regexp()` that records whether or not the shortcode has a closing tag. This allows us to improve the accuracy of the syntax used when transforming a shortcode object back into a string.
'''Media Models'''
* Prevents media `Query` models from observing the central `Attachments.all` object when query args without corresponding filters are set (otherwise, queries quickly amass false positives).
* Adds `post__in`, `post__not_in`, and `post_parent` as acceptable JS attachment `Query` args.
* `Attachments.more()` always returns a `$.promise` object.
see #21390, #21809, #21812, #21815, #21817.
git-svn-id: http://core.svn.wordpress.org/trunk@22120 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-10-05 06:23:59 +02:00
|
|
|
this.props.set( _.defaults( options.props || {} ) );
|
2012-09-18 23:42:29 +02:00
|
|
|
|
|
|
|
// Observe another `Attachments` collection if one is provided.
|
2012-08-31 20:38:32 +02:00
|
|
|
if ( options.observe )
|
|
|
|
this.observe( options.observe );
|
2012-09-18 23:42:29 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
// Automatically sort the collection when the order changes.
|
|
|
|
_changeOrder: function( model, order ) {
|
|
|
|
if ( this.comparator )
|
|
|
|
this.sort();
|
|
|
|
},
|
|
|
|
|
|
|
|
// Set the default comparator only when the `orderby` property is set.
|
|
|
|
_changeOrderby: function( model, orderby ) {
|
|
|
|
// If a different comparator is defined, bail.
|
|
|
|
if ( this.comparator && this.comparator !== Attachments.comparator )
|
|
|
|
return;
|
|
|
|
|
Use the new media modal to insert galleries into TinyMCE and the text editor.
'''Galleries'''
* Gallery insertion from the new media modal (into TinyMCE, the text editor, etc).
* Gallery previews in TinyMCE now use the `wp.mce.views` API.
* Disables the TinyMCE `wpgallery` plugin.
* Gallery previews consist of the first image of the gallery and the appearance of a stack. This will later be fleshed out to include more images/functionality (including editing the gallery, gallery properties, and showing the number of images in the gallery).
* Multiple galleries can be added to a single post.
* The gallery MCE view provides a bridge between the `wp.shortcode` and `Attachments` representation of a gallery, which allows the existing collection to persist when a gallery is initially created (preventing a request to the server for the query).
'''Shortcodes'''
* Renames `wp.shortcode.Match` to `wp.shortcode` to better expose the shortcode constructor.
* The `wp.shortcode` constructor now accepts an object of options instead of a `wp.shortcode.regexp()` match.
* A `wp.shortcode` instance can be created from a `wp.shortcode.regexp()` match by calling `wp.shortcode.fromMatch( match )`.
* Adds `wp.shortcode.string()`, which takes a set of shortcode parameters and converts them into a string.* Renames `wp.shortcode.prototype.text()` to `wp.shortcode.prototype.string()`.
* Adds an additional capture group to `wp.shortcode.regexp()` that records whether or not the shortcode has a closing tag. This allows us to improve the accuracy of the syntax used when transforming a shortcode object back into a string.
'''Media Models'''
* Prevents media `Query` models from observing the central `Attachments.all` object when query args without corresponding filters are set (otherwise, queries quickly amass false positives).
* Adds `post__in`, `post__not_in`, and `post_parent` as acceptable JS attachment `Query` args.
* `Attachments.more()` always returns a `$.promise` object.
see #21390, #21809, #21812, #21815, #21817.
git-svn-id: http://core.svn.wordpress.org/trunk@22120 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-10-05 06:23:59 +02:00
|
|
|
if ( orderby && 'post__in' !== orderby )
|
2012-09-18 23:42:29 +02:00
|
|
|
this.comparator = Attachments.comparator;
|
|
|
|
else
|
|
|
|
delete this.comparator;
|
|
|
|
},
|
|
|
|
|
|
|
|
// If the `query` property is set to true, query the server using
|
|
|
|
// the `props` values, and sync the results to this collection.
|
|
|
|
_changeQuery: function( model, query ) {
|
|
|
|
if ( query ) {
|
|
|
|
this.props.on( 'change', this._requery, this );
|
|
|
|
this._requery();
|
|
|
|
} else {
|
|
|
|
this.props.off( 'change', this._requery, this );
|
|
|
|
}
|
|
|
|
},
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
|
2012-09-26 22:50:13 +02:00
|
|
|
_changeFilteredProp: function( prop, model, term ) {
|
2012-09-18 23:42:29 +02:00
|
|
|
// Bail if we're currently searching for the same term.
|
2012-09-26 22:50:13 +02:00
|
|
|
if ( this.props.get( prop ) === term )
|
2012-09-18 23:42:29 +02:00
|
|
|
return;
|
|
|
|
|
2012-09-26 22:50:13 +02:00
|
|
|
if ( term && ! this.filters[ prop ] )
|
|
|
|
this.filters[ prop ] = Attachments.filters[ prop ];
|
|
|
|
else if ( ! term && this.filters[ prop ] === Attachments.filters[ prop ] )
|
|
|
|
delete this.filters[ prop ];
|
2012-09-18 23:42:29 +02:00
|
|
|
|
|
|
|
// If no `Attachments` model is provided to source the searches
|
|
|
|
// from, then automatically generate a source from the existing
|
|
|
|
// models.
|
|
|
|
if ( ! this.props.get('source') )
|
|
|
|
this.props.set( 'source', new Attachments( this.models ) );
|
|
|
|
|
|
|
|
this.reset( this.props.get('source').filter( this.validator ) );
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
},
|
|
|
|
|
2012-09-26 22:50:13 +02:00
|
|
|
_changeSearch: function( model, term ) {
|
|
|
|
return this._changeFilteredProp( 'search', model, term );
|
|
|
|
},
|
|
|
|
|
|
|
|
_changeType: function( model, term ) {
|
|
|
|
return this._changeFilteredProp( 'type', model, term );
|
|
|
|
},
|
|
|
|
|
2012-08-31 20:38:32 +02:00
|
|
|
validator: function( attachment ) {
|
2012-09-18 23:42:29 +02:00
|
|
|
return _.all( this.filters, function( filter, key ) {
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
return !! filter.call( this, attachment );
|
|
|
|
}, this );
|
|
|
|
},
|
|
|
|
|
2012-08-31 20:38:32 +02:00
|
|
|
validate: function( attachment, options ) {
|
|
|
|
return this[ this.validator( attachment ) ? 'add' : 'remove' ]( attachment, options );
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
},
|
|
|
|
|
2012-08-31 20:38:32 +02:00
|
|
|
observe: function( attachments ) {
|
|
|
|
attachments.on( 'add change', this.validate, this );
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
},
|
|
|
|
|
2012-08-31 20:38:32 +02:00
|
|
|
unobserve: function( attachments ) {
|
|
|
|
attachments.off( 'add change', this.validate, this );
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
mirror: function( attachments ) {
|
|
|
|
if ( this.mirroring && this.mirroring === attachments )
|
|
|
|
return;
|
|
|
|
|
|
|
|
this.unmirror();
|
|
|
|
this.mirroring = attachments;
|
|
|
|
this.reset( attachments.models );
|
|
|
|
attachments.on( 'add', this._mirrorAdd, this );
|
|
|
|
attachments.on( 'remove', this._mirrorRemove, this );
|
|
|
|
attachments.on( 'reset', this._mirrorReset, this );
|
|
|
|
},
|
|
|
|
|
|
|
|
unmirror: function() {
|
|
|
|
if ( ! this.mirroring )
|
|
|
|
return;
|
|
|
|
|
|
|
|
this.mirroring.off( 'add', this._mirrorAdd, this );
|
|
|
|
this.mirroring.off( 'remove', this._mirrorRemove, this );
|
|
|
|
this.mirroring.off( 'reset', this._mirrorReset, this );
|
|
|
|
delete this.mirroring;
|
|
|
|
},
|
|
|
|
|
|
|
|
_mirrorAdd: function( attachment, attachments, options ) {
|
|
|
|
this.add( attachment, { at: options.index });
|
|
|
|
},
|
|
|
|
|
|
|
|
_mirrorRemove: function( attachment ) {
|
|
|
|
this.remove( attachment );
|
|
|
|
},
|
|
|
|
|
|
|
|
_mirrorReset: function( attachments ) {
|
|
|
|
this.reset( attachments.models );
|
|
|
|
},
|
|
|
|
|
|
|
|
more: function( options ) {
|
|
|
|
if ( this.mirroring && this.mirroring.more )
|
|
|
|
return this.mirroring.more( options );
|
Use the new media modal to insert galleries into TinyMCE and the text editor.
'''Galleries'''
* Gallery insertion from the new media modal (into TinyMCE, the text editor, etc).
* Gallery previews in TinyMCE now use the `wp.mce.views` API.
* Disables the TinyMCE `wpgallery` plugin.
* Gallery previews consist of the first image of the gallery and the appearance of a stack. This will later be fleshed out to include more images/functionality (including editing the gallery, gallery properties, and showing the number of images in the gallery).
* Multiple galleries can be added to a single post.
* The gallery MCE view provides a bridge between the `wp.shortcode` and `Attachments` representation of a gallery, which allows the existing collection to persist when a gallery is initially created (preventing a request to the server for the query).
'''Shortcodes'''
* Renames `wp.shortcode.Match` to `wp.shortcode` to better expose the shortcode constructor.
* The `wp.shortcode` constructor now accepts an object of options instead of a `wp.shortcode.regexp()` match.
* A `wp.shortcode` instance can be created from a `wp.shortcode.regexp()` match by calling `wp.shortcode.fromMatch( match )`.
* Adds `wp.shortcode.string()`, which takes a set of shortcode parameters and converts them into a string.* Renames `wp.shortcode.prototype.text()` to `wp.shortcode.prototype.string()`.
* Adds an additional capture group to `wp.shortcode.regexp()` that records whether or not the shortcode has a closing tag. This allows us to improve the accuracy of the syntax used when transforming a shortcode object back into a string.
'''Media Models'''
* Prevents media `Query` models from observing the central `Attachments.all` object when query args without corresponding filters are set (otherwise, queries quickly amass false positives).
* Adds `post__in`, `post__not_in`, and `post_parent` as acceptable JS attachment `Query` args.
* `Attachments.more()` always returns a `$.promise` object.
see #21390, #21809, #21812, #21815, #21817.
git-svn-id: http://core.svn.wordpress.org/trunk@22120 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-10-05 06:23:59 +02:00
|
|
|
return $.Deferred().resolve().promise();
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
parse: function( resp, xhr ) {
|
|
|
|
return _.map( resp, function( attrs ) {
|
|
|
|
var attachment = Attachment.get( attrs.id );
|
|
|
|
return attachment.set( attachment.parse( attrs, xhr ) );
|
|
|
|
});
|
2012-09-18 23:42:29 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
_requery: function() {
|
|
|
|
if ( this.props.get('query') )
|
|
|
|
this.mirror( Query.get( this.props.toJSON() ) );
|
|
|
|
}
|
|
|
|
}, {
|
|
|
|
comparator: function( a, b ) {
|
|
|
|
var key = this.props.get('orderby'),
|
Use the new media modal to insert galleries into TinyMCE and the text editor.
'''Galleries'''
* Gallery insertion from the new media modal (into TinyMCE, the text editor, etc).
* Gallery previews in TinyMCE now use the `wp.mce.views` API.
* Disables the TinyMCE `wpgallery` plugin.
* Gallery previews consist of the first image of the gallery and the appearance of a stack. This will later be fleshed out to include more images/functionality (including editing the gallery, gallery properties, and showing the number of images in the gallery).
* Multiple galleries can be added to a single post.
* The gallery MCE view provides a bridge between the `wp.shortcode` and `Attachments` representation of a gallery, which allows the existing collection to persist when a gallery is initially created (preventing a request to the server for the query).
'''Shortcodes'''
* Renames `wp.shortcode.Match` to `wp.shortcode` to better expose the shortcode constructor.
* The `wp.shortcode` constructor now accepts an object of options instead of a `wp.shortcode.regexp()` match.
* A `wp.shortcode` instance can be created from a `wp.shortcode.regexp()` match by calling `wp.shortcode.fromMatch( match )`.
* Adds `wp.shortcode.string()`, which takes a set of shortcode parameters and converts them into a string.* Renames `wp.shortcode.prototype.text()` to `wp.shortcode.prototype.string()`.
* Adds an additional capture group to `wp.shortcode.regexp()` that records whether or not the shortcode has a closing tag. This allows us to improve the accuracy of the syntax used when transforming a shortcode object back into a string.
'''Media Models'''
* Prevents media `Query` models from observing the central `Attachments.all` object when query args without corresponding filters are set (otherwise, queries quickly amass false positives).
* Adds `post__in`, `post__not_in`, and `post_parent` as acceptable JS attachment `Query` args.
* `Attachments.more()` always returns a `$.promise` object.
see #21390, #21809, #21812, #21815, #21817.
git-svn-id: http://core.svn.wordpress.org/trunk@22120 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-10-05 06:23:59 +02:00
|
|
|
order = this.props.get('order') || 'DESC',
|
2012-09-18 23:42:29 +02:00
|
|
|
ac = a.cid,
|
|
|
|
bc = b.cid;
|
|
|
|
|
|
|
|
a = a.get( key );
|
|
|
|
b = b.get( key );
|
|
|
|
|
|
|
|
if ( 'date' === key || 'modified' === key ) {
|
|
|
|
a = a || new Date();
|
|
|
|
b = b || new Date();
|
|
|
|
}
|
|
|
|
|
|
|
|
return ( 'DESC' === order ) ? compare( a, b, ac, bc ) : compare( b, a, bc, ac );
|
|
|
|
},
|
|
|
|
|
|
|
|
filters: {
|
|
|
|
// Note that this client-side searching is *not* equivalent
|
|
|
|
// to our server-side searching.
|
|
|
|
search: function( attachment ) {
|
2012-09-26 17:13:22 +02:00
|
|
|
if ( ! this.props.get('search') )
|
2012-09-18 23:42:29 +02:00
|
|
|
return true;
|
|
|
|
|
|
|
|
return _.any(['title','filename','description','caption','name'], function( key ) {
|
|
|
|
var value = attachment.get( key );
|
2012-09-26 17:13:22 +02:00
|
|
|
return value && -1 !== value.search( this.props.get('search') );
|
2012-09-18 23:42:29 +02:00
|
|
|
}, this );
|
2012-09-26 22:50:13 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
type: function( attachment ) {
|
|
|
|
var type = this.props.get('type');
|
|
|
|
if ( ! type )
|
|
|
|
return true;
|
|
|
|
|
|
|
|
return -1 !== type.indexOf( attachment.get('type') );
|
2012-09-18 23:42:29 +02:00
|
|
|
}
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
Attachments.all = new Attachments();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* wp.media.query
|
|
|
|
*/
|
2012-09-18 23:42:29 +02:00
|
|
|
media.query = function( props ) {
|
|
|
|
return new Attachments( null, {
|
|
|
|
props: _.extend( _.defaults( props || {}, { orderby: 'date' } ), { query: true } )
|
|
|
|
});
|
|
|
|
};
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* wp.media.model.Query
|
|
|
|
*
|
|
|
|
* A set of attachments that corresponds to a set of consecutively paged
|
|
|
|
* queries on the server.
|
|
|
|
*
|
|
|
|
* Note: Do NOT change this.args after the query has been initialized.
|
|
|
|
* Things will break.
|
|
|
|
*/
|
|
|
|
Query = media.model.Query = Attachments.extend({
|
|
|
|
initialize: function( models, options ) {
|
Use the new media modal to insert galleries into TinyMCE and the text editor.
'''Galleries'''
* Gallery insertion from the new media modal (into TinyMCE, the text editor, etc).
* Gallery previews in TinyMCE now use the `wp.mce.views` API.
* Disables the TinyMCE `wpgallery` plugin.
* Gallery previews consist of the first image of the gallery and the appearance of a stack. This will later be fleshed out to include more images/functionality (including editing the gallery, gallery properties, and showing the number of images in the gallery).
* Multiple galleries can be added to a single post.
* The gallery MCE view provides a bridge between the `wp.shortcode` and `Attachments` representation of a gallery, which allows the existing collection to persist when a gallery is initially created (preventing a request to the server for the query).
'''Shortcodes'''
* Renames `wp.shortcode.Match` to `wp.shortcode` to better expose the shortcode constructor.
* The `wp.shortcode` constructor now accepts an object of options instead of a `wp.shortcode.regexp()` match.
* A `wp.shortcode` instance can be created from a `wp.shortcode.regexp()` match by calling `wp.shortcode.fromMatch( match )`.
* Adds `wp.shortcode.string()`, which takes a set of shortcode parameters and converts them into a string.* Renames `wp.shortcode.prototype.text()` to `wp.shortcode.prototype.string()`.
* Adds an additional capture group to `wp.shortcode.regexp()` that records whether or not the shortcode has a closing tag. This allows us to improve the accuracy of the syntax used when transforming a shortcode object back into a string.
'''Media Models'''
* Prevents media `Query` models from observing the central `Attachments.all` object when query args without corresponding filters are set (otherwise, queries quickly amass false positives).
* Adds `post__in`, `post__not_in`, and `post_parent` as acceptable JS attachment `Query` args.
* `Attachments.more()` always returns a `$.promise` object.
see #21390, #21809, #21812, #21815, #21817.
git-svn-id: http://core.svn.wordpress.org/trunk@22120 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-10-05 06:23:59 +02:00
|
|
|
var allowed;
|
|
|
|
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
options = options || {};
|
|
|
|
Attachments.prototype.initialize.apply( this, arguments );
|
|
|
|
|
2012-09-18 23:42:29 +02:00
|
|
|
this.args = options.args;
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
this.hasMore = true;
|
|
|
|
this.created = new Date();
|
|
|
|
|
|
|
|
this.filters.order = function( attachment ) {
|
2012-09-18 23:42:29 +02:00
|
|
|
if ( ! this.comparator )
|
|
|
|
return true;
|
|
|
|
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
// We want any items that can be placed before the last
|
|
|
|
// item in the set. If we add any items after the last
|
|
|
|
// item, then we can't guarantee the set is complete.
|
|
|
|
if ( this.length ) {
|
|
|
|
return 1 !== this.comparator( attachment, this.last() );
|
|
|
|
|
|
|
|
// Handle the case where there are no items yet and
|
|
|
|
// we're sorting for recent items. In that case, we want
|
|
|
|
// changes that occurred after we created the query.
|
2012-09-18 23:42:29 +02:00
|
|
|
} else if ( 'DESC' === this.args.order && ( 'date' === this.args.orderby || 'modified' === this.args.orderby ) ) {
|
|
|
|
return attachment.get( this.args.orderby ) >= this.created;
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// Otherwise, we don't want any items yet.
|
|
|
|
return false;
|
|
|
|
};
|
|
|
|
|
Use the new media modal to insert galleries into TinyMCE and the text editor.
'''Galleries'''
* Gallery insertion from the new media modal (into TinyMCE, the text editor, etc).
* Gallery previews in TinyMCE now use the `wp.mce.views` API.
* Disables the TinyMCE `wpgallery` plugin.
* Gallery previews consist of the first image of the gallery and the appearance of a stack. This will later be fleshed out to include more images/functionality (including editing the gallery, gallery properties, and showing the number of images in the gallery).
* Multiple galleries can be added to a single post.
* The gallery MCE view provides a bridge between the `wp.shortcode` and `Attachments` representation of a gallery, which allows the existing collection to persist when a gallery is initially created (preventing a request to the server for the query).
'''Shortcodes'''
* Renames `wp.shortcode.Match` to `wp.shortcode` to better expose the shortcode constructor.
* The `wp.shortcode` constructor now accepts an object of options instead of a `wp.shortcode.regexp()` match.
* A `wp.shortcode` instance can be created from a `wp.shortcode.regexp()` match by calling `wp.shortcode.fromMatch( match )`.
* Adds `wp.shortcode.string()`, which takes a set of shortcode parameters and converts them into a string.* Renames `wp.shortcode.prototype.text()` to `wp.shortcode.prototype.string()`.
* Adds an additional capture group to `wp.shortcode.regexp()` that records whether or not the shortcode has a closing tag. This allows us to improve the accuracy of the syntax used when transforming a shortcode object back into a string.
'''Media Models'''
* Prevents media `Query` models from observing the central `Attachments.all` object when query args without corresponding filters are set (otherwise, queries quickly amass false positives).
* Adds `post__in`, `post__not_in`, and `post_parent` as acceptable JS attachment `Query` args.
* `Attachments.more()` always returns a `$.promise` object.
see #21390, #21809, #21812, #21815, #21817.
git-svn-id: http://core.svn.wordpress.org/trunk@22120 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-10-05 06:23:59 +02:00
|
|
|
// Observe the central `Attachments.all` model to watch for new
|
|
|
|
// matches for the query.
|
|
|
|
//
|
|
|
|
// Only observe when a limited number of query args are set. There
|
|
|
|
// are no filters for other properties, so observing will result in
|
|
|
|
// false positives in those queries.
|
|
|
|
allowed = [ 's', 'order', 'orderby', 'posts_per_page', 'post_mime_type' ];
|
2012-10-10 00:55:49 +02:00
|
|
|
if ( _( this.args ).chain().keys().difference( allowed ).isEmpty().value() )
|
Use the new media modal to insert galleries into TinyMCE and the text editor.
'''Galleries'''
* Gallery insertion from the new media modal (into TinyMCE, the text editor, etc).
* Gallery previews in TinyMCE now use the `wp.mce.views` API.
* Disables the TinyMCE `wpgallery` plugin.
* Gallery previews consist of the first image of the gallery and the appearance of a stack. This will later be fleshed out to include more images/functionality (including editing the gallery, gallery properties, and showing the number of images in the gallery).
* Multiple galleries can be added to a single post.
* The gallery MCE view provides a bridge between the `wp.shortcode` and `Attachments` representation of a gallery, which allows the existing collection to persist when a gallery is initially created (preventing a request to the server for the query).
'''Shortcodes'''
* Renames `wp.shortcode.Match` to `wp.shortcode` to better expose the shortcode constructor.
* The `wp.shortcode` constructor now accepts an object of options instead of a `wp.shortcode.regexp()` match.
* A `wp.shortcode` instance can be created from a `wp.shortcode.regexp()` match by calling `wp.shortcode.fromMatch( match )`.
* Adds `wp.shortcode.string()`, which takes a set of shortcode parameters and converts them into a string.* Renames `wp.shortcode.prototype.text()` to `wp.shortcode.prototype.string()`.
* Adds an additional capture group to `wp.shortcode.regexp()` that records whether or not the shortcode has a closing tag. This allows us to improve the accuracy of the syntax used when transforming a shortcode object back into a string.
'''Media Models'''
* Prevents media `Query` models from observing the central `Attachments.all` object when query args without corresponding filters are set (otherwise, queries quickly amass false positives).
* Adds `post__in`, `post__not_in`, and `post_parent` as acceptable JS attachment `Query` args.
* `Attachments.more()` always returns a `$.promise` object.
see #21390, #21809, #21812, #21815, #21817.
git-svn-id: http://core.svn.wordpress.org/trunk@22120 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-10-05 06:23:59 +02:00
|
|
|
this.observe( Attachments.all );
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
more: function( options ) {
|
|
|
|
var query = this;
|
|
|
|
|
2012-11-07 21:14:41 +01:00
|
|
|
if ( this._more && 'pending' === this._more.state() )
|
|
|
|
return this._more;
|
|
|
|
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
if ( ! this.hasMore )
|
Use the new media modal to insert galleries into TinyMCE and the text editor.
'''Galleries'''
* Gallery insertion from the new media modal (into TinyMCE, the text editor, etc).
* Gallery previews in TinyMCE now use the `wp.mce.views` API.
* Disables the TinyMCE `wpgallery` plugin.
* Gallery previews consist of the first image of the gallery and the appearance of a stack. This will later be fleshed out to include more images/functionality (including editing the gallery, gallery properties, and showing the number of images in the gallery).
* Multiple galleries can be added to a single post.
* The gallery MCE view provides a bridge between the `wp.shortcode` and `Attachments` representation of a gallery, which allows the existing collection to persist when a gallery is initially created (preventing a request to the server for the query).
'''Shortcodes'''
* Renames `wp.shortcode.Match` to `wp.shortcode` to better expose the shortcode constructor.
* The `wp.shortcode` constructor now accepts an object of options instead of a `wp.shortcode.regexp()` match.
* A `wp.shortcode` instance can be created from a `wp.shortcode.regexp()` match by calling `wp.shortcode.fromMatch( match )`.
* Adds `wp.shortcode.string()`, which takes a set of shortcode parameters and converts them into a string.* Renames `wp.shortcode.prototype.text()` to `wp.shortcode.prototype.string()`.
* Adds an additional capture group to `wp.shortcode.regexp()` that records whether or not the shortcode has a closing tag. This allows us to improve the accuracy of the syntax used when transforming a shortcode object back into a string.
'''Media Models'''
* Prevents media `Query` models from observing the central `Attachments.all` object when query args without corresponding filters are set (otherwise, queries quickly amass false positives).
* Adds `post__in`, `post__not_in`, and `post_parent` as acceptable JS attachment `Query` args.
* `Attachments.more()` always returns a `$.promise` object.
see #21390, #21809, #21812, #21815, #21817.
git-svn-id: http://core.svn.wordpress.org/trunk@22120 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-10-05 06:23:59 +02:00
|
|
|
return $.Deferred().resolve().promise();
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
|
|
|
|
options = options || {};
|
|
|
|
options.add = true;
|
|
|
|
|
2012-11-07 21:14:41 +01:00
|
|
|
return this._more = this.fetch( options ).done( function( resp ) {
|
Use the new media modal to insert galleries into TinyMCE and the text editor.
'''Galleries'''
* Gallery insertion from the new media modal (into TinyMCE, the text editor, etc).
* Gallery previews in TinyMCE now use the `wp.mce.views` API.
* Disables the TinyMCE `wpgallery` plugin.
* Gallery previews consist of the first image of the gallery and the appearance of a stack. This will later be fleshed out to include more images/functionality (including editing the gallery, gallery properties, and showing the number of images in the gallery).
* Multiple galleries can be added to a single post.
* The gallery MCE view provides a bridge between the `wp.shortcode` and `Attachments` representation of a gallery, which allows the existing collection to persist when a gallery is initially created (preventing a request to the server for the query).
'''Shortcodes'''
* Renames `wp.shortcode.Match` to `wp.shortcode` to better expose the shortcode constructor.
* The `wp.shortcode` constructor now accepts an object of options instead of a `wp.shortcode.regexp()` match.
* A `wp.shortcode` instance can be created from a `wp.shortcode.regexp()` match by calling `wp.shortcode.fromMatch( match )`.
* Adds `wp.shortcode.string()`, which takes a set of shortcode parameters and converts them into a string.* Renames `wp.shortcode.prototype.text()` to `wp.shortcode.prototype.string()`.
* Adds an additional capture group to `wp.shortcode.regexp()` that records whether or not the shortcode has a closing tag. This allows us to improve the accuracy of the syntax used when transforming a shortcode object back into a string.
'''Media Models'''
* Prevents media `Query` models from observing the central `Attachments.all` object when query args without corresponding filters are set (otherwise, queries quickly amass false positives).
* Adds `post__in`, `post__not_in`, and `post_parent` as acceptable JS attachment `Query` args.
* `Attachments.more()` always returns a `$.promise` object.
see #21390, #21809, #21812, #21815, #21817.
git-svn-id: http://core.svn.wordpress.org/trunk@22120 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-10-05 06:23:59 +02:00
|
|
|
if ( _.isEmpty( resp ) || -1 === this.args.posts_per_page || resp.length < this.args.posts_per_page )
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
query.hasMore = false;
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
sync: function( method, model, options ) {
|
|
|
|
var fallback;
|
|
|
|
|
|
|
|
// Overload the read method so Attachment.fetch() functions correctly.
|
|
|
|
if ( 'read' === method ) {
|
|
|
|
options = options || {};
|
|
|
|
options.context = this;
|
|
|
|
options.data = _.extend( options.data || {}, {
|
|
|
|
action: 'query-attachments'
|
|
|
|
});
|
|
|
|
|
|
|
|
// Clone the args so manipulation is non-destructive.
|
|
|
|
args = _.clone( this.args );
|
|
|
|
|
|
|
|
// Determine which page to query.
|
Use the new media modal to insert galleries into TinyMCE and the text editor.
'''Galleries'''
* Gallery insertion from the new media modal (into TinyMCE, the text editor, etc).
* Gallery previews in TinyMCE now use the `wp.mce.views` API.
* Disables the TinyMCE `wpgallery` plugin.
* Gallery previews consist of the first image of the gallery and the appearance of a stack. This will later be fleshed out to include more images/functionality (including editing the gallery, gallery properties, and showing the number of images in the gallery).
* Multiple galleries can be added to a single post.
* The gallery MCE view provides a bridge between the `wp.shortcode` and `Attachments` representation of a gallery, which allows the existing collection to persist when a gallery is initially created (preventing a request to the server for the query).
'''Shortcodes'''
* Renames `wp.shortcode.Match` to `wp.shortcode` to better expose the shortcode constructor.
* The `wp.shortcode` constructor now accepts an object of options instead of a `wp.shortcode.regexp()` match.
* A `wp.shortcode` instance can be created from a `wp.shortcode.regexp()` match by calling `wp.shortcode.fromMatch( match )`.
* Adds `wp.shortcode.string()`, which takes a set of shortcode parameters and converts them into a string.* Renames `wp.shortcode.prototype.text()` to `wp.shortcode.prototype.string()`.
* Adds an additional capture group to `wp.shortcode.regexp()` that records whether or not the shortcode has a closing tag. This allows us to improve the accuracy of the syntax used when transforming a shortcode object back into a string.
'''Media Models'''
* Prevents media `Query` models from observing the central `Attachments.all` object when query args without corresponding filters are set (otherwise, queries quickly amass false positives).
* Adds `post__in`, `post__not_in`, and `post_parent` as acceptable JS attachment `Query` args.
* `Attachments.more()` always returns a `$.promise` object.
see #21390, #21809, #21812, #21815, #21817.
git-svn-id: http://core.svn.wordpress.org/trunk@22120 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-10-05 06:23:59 +02:00
|
|
|
if ( -1 !== args.posts_per_page )
|
|
|
|
args.paged = Math.floor( this.length / args.posts_per_page ) + 1;
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
|
|
|
|
options.data.query = args;
|
|
|
|
return media.ajax( options );
|
|
|
|
|
|
|
|
// Otherwise, fall back to Backbone.sync()
|
|
|
|
} else {
|
|
|
|
fallback = Attachments.prototype.sync ? Attachments.prototype : Backbone;
|
|
|
|
return fallback.sync.apply( this, arguments );
|
|
|
|
}
|
2012-09-18 23:42:29 +02:00
|
|
|
}
|
|
|
|
}, {
|
2012-09-19 00:19:05 +02:00
|
|
|
defaultProps: {
|
2012-09-19 03:10:17 +02:00
|
|
|
orderby: 'date',
|
|
|
|
order: 'DESC'
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
},
|
|
|
|
|
2012-09-19 00:19:05 +02:00
|
|
|
defaultArgs: {
|
|
|
|
posts_per_page: 40
|
|
|
|
},
|
|
|
|
|
2012-09-18 23:42:29 +02:00
|
|
|
orderby: {
|
Use the new media modal to insert galleries into TinyMCE and the text editor.
'''Galleries'''
* Gallery insertion from the new media modal (into TinyMCE, the text editor, etc).
* Gallery previews in TinyMCE now use the `wp.mce.views` API.
* Disables the TinyMCE `wpgallery` plugin.
* Gallery previews consist of the first image of the gallery and the appearance of a stack. This will later be fleshed out to include more images/functionality (including editing the gallery, gallery properties, and showing the number of images in the gallery).
* Multiple galleries can be added to a single post.
* The gallery MCE view provides a bridge between the `wp.shortcode` and `Attachments` representation of a gallery, which allows the existing collection to persist when a gallery is initially created (preventing a request to the server for the query).
'''Shortcodes'''
* Renames `wp.shortcode.Match` to `wp.shortcode` to better expose the shortcode constructor.
* The `wp.shortcode` constructor now accepts an object of options instead of a `wp.shortcode.regexp()` match.
* A `wp.shortcode` instance can be created from a `wp.shortcode.regexp()` match by calling `wp.shortcode.fromMatch( match )`.
* Adds `wp.shortcode.string()`, which takes a set of shortcode parameters and converts them into a string.* Renames `wp.shortcode.prototype.text()` to `wp.shortcode.prototype.string()`.
* Adds an additional capture group to `wp.shortcode.regexp()` that records whether or not the shortcode has a closing tag. This allows us to improve the accuracy of the syntax used when transforming a shortcode object back into a string.
'''Media Models'''
* Prevents media `Query` models from observing the central `Attachments.all` object when query args without corresponding filters are set (otherwise, queries quickly amass false positives).
* Adds `post__in`, `post__not_in`, and `post_parent` as acceptable JS attachment `Query` args.
* `Attachments.more()` always returns a `$.promise` object.
see #21390, #21809, #21812, #21815, #21817.
git-svn-id: http://core.svn.wordpress.org/trunk@22120 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-10-05 06:23:59 +02:00
|
|
|
allowed: [ 'name', 'author', 'date', 'title', 'modified', 'uploadedTo', 'id', 'post__in' ],
|
2012-09-19 00:19:05 +02:00
|
|
|
valuemap: {
|
2012-09-18 23:42:29 +02:00
|
|
|
'id': 'ID',
|
|
|
|
'uploadedTo': 'parent'
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
propmap: {
|
Use the new media modal to insert galleries into TinyMCE and the text editor.
'''Galleries'''
* Gallery insertion from the new media modal (into TinyMCE, the text editor, etc).
* Gallery previews in TinyMCE now use the `wp.mce.views` API.
* Disables the TinyMCE `wpgallery` plugin.
* Gallery previews consist of the first image of the gallery and the appearance of a stack. This will later be fleshed out to include more images/functionality (including editing the gallery, gallery properties, and showing the number of images in the gallery).
* Multiple galleries can be added to a single post.
* The gallery MCE view provides a bridge between the `wp.shortcode` and `Attachments` representation of a gallery, which allows the existing collection to persist when a gallery is initially created (preventing a request to the server for the query).
'''Shortcodes'''
* Renames `wp.shortcode.Match` to `wp.shortcode` to better expose the shortcode constructor.
* The `wp.shortcode` constructor now accepts an object of options instead of a `wp.shortcode.regexp()` match.
* A `wp.shortcode` instance can be created from a `wp.shortcode.regexp()` match by calling `wp.shortcode.fromMatch( match )`.
* Adds `wp.shortcode.string()`, which takes a set of shortcode parameters and converts them into a string.* Renames `wp.shortcode.prototype.text()` to `wp.shortcode.prototype.string()`.
* Adds an additional capture group to `wp.shortcode.regexp()` that records whether or not the shortcode has a closing tag. This allows us to improve the accuracy of the syntax used when transforming a shortcode object back into a string.
'''Media Models'''
* Prevents media `Query` models from observing the central `Attachments.all` object when query args without corresponding filters are set (otherwise, queries quickly amass false positives).
* Adds `post__in`, `post__not_in`, and `post_parent` as acceptable JS attachment `Query` args.
* `Attachments.more()` always returns a `$.promise` object.
see #21390, #21809, #21812, #21815, #21817.
git-svn-id: http://core.svn.wordpress.org/trunk@22120 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-10-05 06:23:59 +02:00
|
|
|
'search': 's',
|
|
|
|
'type': 'post_mime_type',
|
|
|
|
'parent': 'post_parent',
|
|
|
|
'perPage': 'posts_per_page'
|
2012-09-18 23:42:29 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
// Caches query objects so queries can be easily reused.
|
|
|
|
get: (function(){
|
|
|
|
var queries = [];
|
|
|
|
|
|
|
|
return function( props, options ) {
|
|
|
|
var args = {},
|
|
|
|
orderby = Query.orderby,
|
2012-09-19 00:19:05 +02:00
|
|
|
defaults = Query.defaultProps,
|
2012-09-18 23:42:29 +02:00
|
|
|
query;
|
|
|
|
|
2012-09-19 00:19:05 +02:00
|
|
|
// Remove the `query` property. This isn't linked to a query,
|
|
|
|
// this *is* the query.
|
|
|
|
delete props.query;
|
|
|
|
|
|
|
|
// Fill default args.
|
|
|
|
_.defaults( props, defaults );
|
|
|
|
|
|
|
|
// Normalize the order.
|
|
|
|
props.order = props.order.toUpperCase();
|
|
|
|
if ( 'DESC' !== props.order && 'ASC' !== props.order )
|
|
|
|
props.order = defaults.order.toUpperCase();
|
|
|
|
|
|
|
|
// Ensure we have a valid orderby value.
|
|
|
|
if ( ! _.contains( orderby.allowed, props.orderby ) )
|
|
|
|
props.orderby = defaults.orderby;
|
|
|
|
|
|
|
|
// Generate the query `args` object.
|
2012-09-18 23:42:29 +02:00
|
|
|
// Correct any differing property names.
|
|
|
|
_.each( props, function( value, prop ) {
|
|
|
|
args[ Query.propmap[ prop ] || prop ] = value;
|
|
|
|
});
|
|
|
|
|
2012-09-19 00:19:05 +02:00
|
|
|
// Fill any other default query args.
|
|
|
|
_.defaults( args, Query.defaultArgs );
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
|
2012-09-19 00:19:05 +02:00
|
|
|
// `props.orderby` does not always map directly to `args.orderby`.
|
2012-09-18 23:42:29 +02:00
|
|
|
// Substitute exceptions specified in orderby.keymap.
|
2012-09-19 00:19:05 +02:00
|
|
|
args.orderby = orderby.valuemap[ props.orderby ] || props.orderby;
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
|
2012-09-19 00:19:05 +02:00
|
|
|
// Search the query cache for matches.
|
2012-09-18 23:42:29 +02:00
|
|
|
query = _.find( queries, function( query ) {
|
|
|
|
return _.isEqual( query.args, args );
|
|
|
|
});
|
|
|
|
|
|
|
|
// Otherwise, create a new query and add it to the cache.
|
|
|
|
if ( ! query ) {
|
2012-09-19 00:19:05 +02:00
|
|
|
query = new Query( [], _.extend( options || {}, {
|
|
|
|
props: props,
|
|
|
|
args: args
|
|
|
|
} ) );
|
2012-09-18 23:42:29 +02:00
|
|
|
queries.push( query );
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
}
|
|
|
|
|
2012-09-18 23:42:29 +02:00
|
|
|
return query;
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
};
|
|
|
|
}())
|
|
|
|
});
|
|
|
|
|
2012-10-29 16:13:02 +01:00
|
|
|
/**
|
|
|
|
* wp.media.model.Selection
|
|
|
|
*
|
|
|
|
* Used to manage a selection of attachments in the views.
|
|
|
|
*/
|
|
|
|
media.model.Selection = Attachments.extend({
|
|
|
|
initialize: function( models, options ) {
|
|
|
|
Attachments.prototype.initialize.apply( this, arguments );
|
|
|
|
this.multiple = options && options.multiple;
|
2012-10-31 00:15:16 +01:00
|
|
|
|
|
|
|
// Refresh the `single` model whenever the selection changes.
|
|
|
|
// Binds `single` instead of using the context argument to ensure
|
|
|
|
// it receives no parameters.
|
|
|
|
this.on( 'add remove reset', _.bind( this.single, this ) );
|
2012-10-29 16:13:02 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
// Override the selection's add method.
|
|
|
|
// If the workflow does not support multiple
|
|
|
|
// selected attachments, reset the selection.
|
|
|
|
add: function( models, options ) {
|
|
|
|
if ( ! this.multiple ) {
|
2012-11-09 10:47:12 +01:00
|
|
|
models = _.isArray( models ) && models.length ? _.first( models ) : models;
|
2012-10-29 16:13:02 +01:00
|
|
|
this.clear( options );
|
|
|
|
}
|
|
|
|
|
|
|
|
return Attachments.prototype.add.call( this, models, options );
|
|
|
|
},
|
|
|
|
|
|
|
|
// Removes all models from the selection.
|
|
|
|
clear: function( options ) {
|
2012-10-31 00:15:16 +01:00
|
|
|
this.remove( this.models, options ).single();
|
|
|
|
return this;
|
2012-10-29 16:13:02 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
// Override the selection's reset method.
|
|
|
|
// Always direct items through add and remove,
|
|
|
|
// as we need them to fire.
|
|
|
|
reset: function( models, options ) {
|
2012-10-31 00:15:16 +01:00
|
|
|
this.clear( options ).add( models, options ).single();
|
|
|
|
return this;
|
2012-10-29 16:13:02 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
// Create selection.has, which determines if a model
|
|
|
|
// exists in the collection based on cid and id,
|
|
|
|
// instead of direct comparison.
|
|
|
|
has: function( attachment ) {
|
|
|
|
return !! ( this.getByCid( attachment.cid ) || this.get( attachment.id ) );
|
2012-10-31 00:15:16 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
single: function( model ) {
|
|
|
|
var previous = this._single;
|
|
|
|
|
|
|
|
// If a `model` is provided, use it as the single model.
|
|
|
|
if ( model )
|
|
|
|
this._single = model;
|
|
|
|
|
|
|
|
// If the single model isn't in the selection, remove it.
|
|
|
|
if ( this._single && ! this.has( this._single ) )
|
|
|
|
delete this._single;
|
|
|
|
|
|
|
|
this._single = this._single || this.last();
|
|
|
|
|
|
|
|
// If single has changed, fire an event.
|
|
|
|
if ( this._single !== previous ) {
|
|
|
|
if ( this._single )
|
|
|
|
this._single.trigger( 'selection:single', this._single, this );
|
|
|
|
if ( previous )
|
|
|
|
previous.trigger( 'selection:unsingle', previous, this );
|
|
|
|
}
|
|
|
|
|
|
|
|
// Return the single model, or the last model as a fallback.
|
|
|
|
return this._single;
|
2012-10-29 16:13:02 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2012-11-08 16:32:40 +01:00
|
|
|
/**
|
|
|
|
* wp.media.model.Composite
|
|
|
|
*
|
|
|
|
* Creates a model that can simultaneously pull from two or more collections.
|
|
|
|
*/
|
|
|
|
media.model.Composite = Attachments.extend({
|
|
|
|
initialize: function( models, options ) {
|
|
|
|
this.observe( this, { silent: true });
|
|
|
|
Attachments.prototype.initialize.apply( this, arguments );
|
|
|
|
},
|
|
|
|
|
|
|
|
evaluate: function( attachment, options ) {
|
|
|
|
var valid = this.validator( attachment ),
|
|
|
|
hasAttachment = !! this.getByCid( attachment.cid );
|
|
|
|
|
|
|
|
if ( ! valid && hasAttachment ) {
|
|
|
|
this.remove( attachment, options );
|
|
|
|
} else if ( valid && ! hasAttachment ) {
|
|
|
|
this.add( attachment, options );
|
|
|
|
|
|
|
|
// If we haven't been silenced, resort the collection.
|
|
|
|
if ( this.comparator && ( ! options || ! options.silent ) )
|
|
|
|
this.sort({ silent: true });
|
|
|
|
}
|
|
|
|
|
|
|
|
return this;
|
|
|
|
},
|
|
|
|
|
|
|
|
validator: function() {
|
|
|
|
return true;
|
|
|
|
},
|
|
|
|
|
|
|
|
evaluateAll: function( attachments, options ) {
|
|
|
|
_.each( attachments.models, function( attachment ) {
|
|
|
|
this.evaluate( attachment, { silent: true });
|
|
|
|
}, this );
|
|
|
|
|
|
|
|
if ( this.comparator )
|
|
|
|
this.sort( options );
|
|
|
|
return this;
|
|
|
|
},
|
|
|
|
|
|
|
|
observe: function( attachments, options ) {
|
|
|
|
var silent = options && options.silent;
|
2012-11-09 02:23:20 +01:00
|
|
|
this.observers = this.observers || [];
|
|
|
|
this.observers.push( attachments );
|
2012-11-08 16:32:40 +01:00
|
|
|
|
|
|
|
attachments.on( 'add remove', silent ? this._evaluateSilentHandler : this._evaluateHandler, this );
|
|
|
|
attachments.on( 'reset', silent ? this._evaluateAllSilentHandler : this._evaluateAllHandler, this );
|
|
|
|
|
|
|
|
this.evaluateAll( attachments, options );
|
2012-11-09 02:23:20 +01:00
|
|
|
return this;
|
2012-11-08 16:32:40 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
unobserve: function( attachments ) {
|
2012-11-09 02:23:20 +01:00
|
|
|
if ( attachments ) {
|
|
|
|
attachments.off( null, null, this );
|
|
|
|
this.observers = _.without( this.observers, attachments );
|
|
|
|
|
|
|
|
} else {
|
|
|
|
_.each( this.observers, function( attachments ) {
|
|
|
|
attachments.off( null, null, this );
|
|
|
|
}, this );
|
|
|
|
delete this.observers;
|
|
|
|
}
|
|
|
|
|
|
|
|
return this;
|
2012-11-08 16:32:40 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
_evaluateHandler: function( attachment, attachments, options ) {
|
|
|
|
return this.evaluate( attachment, options );
|
|
|
|
},
|
|
|
|
|
|
|
|
_evaluateAllHandler: function( attachments, options ) {
|
|
|
|
return this.evaluateAll( attachments, options );
|
|
|
|
},
|
|
|
|
|
|
|
|
_evaluateSilentHandler: function( attachment, attachments, options ) {
|
|
|
|
return this.evaluate( attachment, _.defaults({ silent: true }, options ) );
|
|
|
|
},
|
|
|
|
|
|
|
|
_evaluateAllSilentHandler: function( attachments, options ) {
|
|
|
|
return this.evaluateAll( attachments, _.defaults({ silent: true }, options ) );
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
Add new media workflow scripts, styles, and templates.
Please note that this commit does not integrate media into the existing UI. If you would like to see the new UI, navigate to the post editor and run the following in your browser's Javascript console:
new wp.media.controller.Workflow().render().modal.open();
The Javascript is broken up into two files, with the slugs media-models and media-views.
* media-models: The models are UI agnostic, and can be used independent of the views. If you'd like to create custom UIs, this is the script for you.
* media-views: This is the Media Experience. The views (and controllers) depend on the models (which are listed as a dependency and will automatically be included thanks to wp_enqueue_script). The views also require the media templates, media-view styles, and the plupload bridge settings. Perhaps we should create a function to include the whole shebang, but in the meantime...
To include media-views in the admin, run the following PHP in or after 'admin_enqueue_scripts':
wp_enqueue_script( 'media-views' );
wp_enqueue_style( 'media-views' );
wp_plupload_default_settings();
add_action( 'admin_footer', 'wp_print_media_templates' );
see #21390.
git-svn-id: http://core.svn.wordpress.org/trunk@21683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-31 06:54:23 +02:00
|
|
|
}(jQuery));
|