2013-11-20 18:07:10 -05:00
|
|
|
/* global _wpMediaModelsL10n:false */
|
2012-10-05 20:43:36 -04: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 00:54:23 -04:00
|
|
|
|
|
|
|
(function($){
|
2014-01-28 16:17:12 -05:00
|
|
|
var Attachment, Attachments, Query, PostImage, compare, l10n, media;
|
2012-08-31 16:44:02 -04:00
|
|
|
|
|
|
|
/**
|
2014-06-06 10:13:17 -04:00
|
|
|
* Create and return a media frame.
|
2012-08-31 16:44:02 -04:00
|
|
|
*
|
|
|
|
* Handles the default media experience. Automatically creates
|
2012-11-09 04:59:36 -05:00
|
|
|
* and opens a media frame, and returns the result.
|
2012-08-31 16:44:02 -04:00
|
|
|
* Does nothing if the controllers do not exist.
|
|
|
|
*
|
|
|
|
* @param {object} attributes The properties passed to the main media controller.
|
2014-01-20 18:40:11 -05:00
|
|
|
* @return {wp.media.view.MediaFrame} A media workflow.
|
2012-08-31 16:44:02 -04:00
|
|
|
*/
|
|
|
|
media = wp.media = function( attributes ) {
|
2012-11-09 04:59:36 -05:00
|
|
|
var MediaFrame = media.view.MediaFrame,
|
|
|
|
frame;
|
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! MediaFrame ) {
|
2012-11-09 04:59:36 -05:00
|
|
|
return;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-11-09 04:59:36 -05:00
|
|
|
|
|
|
|
attributes = _.defaults( attributes || {}, {
|
|
|
|
frame: 'select'
|
|
|
|
});
|
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( 'select' === attributes.frame && MediaFrame.Select ) {
|
2012-11-09 04:59:36 -05:00
|
|
|
frame = new MediaFrame.Select( attributes );
|
2014-01-20 18:40:11 -05:00
|
|
|
} else if ( 'post' === attributes.frame && MediaFrame.Post ) {
|
2012-11-09 04:59:36 -05:00
|
|
|
frame = new MediaFrame.Post( attributes );
|
2014-06-05 18:01:18 -04:00
|
|
|
} else if ( 'manage' === attributes.frame && MediaFrame.Manage ) {
|
2014-06-06 10:13:17 -04:00
|
|
|
frame = new MediaFrame.Manage( attributes );
|
2014-01-28 16:17:12 -05:00
|
|
|
} else if ( 'image' === attributes.frame && MediaFrame.ImageDetails ) {
|
|
|
|
frame = new MediaFrame.ImageDetails( attributes );
|
2014-03-05 10:06:14 -05:00
|
|
|
} else if ( 'audio' === attributes.frame && MediaFrame.AudioDetails ) {
|
|
|
|
frame = new MediaFrame.AudioDetails( attributes );
|
|
|
|
} else if ( 'video' === attributes.frame && MediaFrame.VideoDetails ) {
|
|
|
|
frame = new MediaFrame.VideoDetails( attributes );
|
2014-07-10 15:39:14 -04:00
|
|
|
} else if ( 'edit-attachments' === attributes.frame && MediaFrame.EditAttachments ) {
|
|
|
|
frame = new MediaFrame.EditAttachments( attributes );
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-11-09 04:59:36 -05:00
|
|
|
|
|
|
|
delete attributes.frame;
|
2012-12-02 21:38:10 -05:00
|
|
|
|
2014-03-19 01:31:15 -04:00
|
|
|
media.frame = frame;
|
|
|
|
|
2012-12-02 21:38:10 -05:00
|
|
|
return frame;
|
2012-08-31 16:44:02 -04:00
|
|
|
};
|
|
|
|
|
2012-12-06 00:06:49 -05:00
|
|
|
_.extend( media, { model: {}, view: {}, controller: {}, frames: {} });
|
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 00:54:23 -04:00
|
|
|
|
2012-10-12 12:02:45 -04:00
|
|
|
// Link any localized strings.
|
2012-11-19 20:48:37 -05:00
|
|
|
l10n = media.model.l10n = typeof _wpMediaModelsL10n === 'undefined' ? {} : _wpMediaModelsL10n;
|
2012-10-12 12:02:45 -04:00
|
|
|
|
2012-11-21 11:46:32 -05:00
|
|
|
// Link any settings.
|
|
|
|
media.model.settings = l10n.settings || {};
|
|
|
|
delete l10n.settings;
|
|
|
|
|
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 00:54:23 -04:00
|
|
|
/**
|
|
|
|
* ========================================================================
|
|
|
|
* UTILITIES
|
|
|
|
* ========================================================================
|
|
|
|
*/
|
|
|
|
|
2012-09-18 17:42:29 -04:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* A basic equality comparator for Backbone models.
|
|
|
|
*
|
|
|
|
* Used to order models within a collection - @see wp.media.model.Attachments.comparator().
|
2012-09-18 17:42:29 -04:00
|
|
|
*
|
|
|
|
* @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 ) {
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( _.isEqual( a, b ) ) {
|
2012-09-18 17:42:29 -04:00
|
|
|
return ac === bc ? 0 : (ac > bc ? -1 : 1);
|
2014-01-20 18:40:11 -05:00
|
|
|
} else {
|
2012-09-18 17:42:29 -04:00
|
|
|
return a > b ? -1 : 1;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-09-18 17:42:29 -04: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 00:54:23 -04:00
|
|
|
_.extend( media, {
|
|
|
|
/**
|
|
|
|
* media.template( id )
|
|
|
|
*
|
2014-11-05 14:39:22 -05:00
|
|
|
* Fetch a JavaScript template for an id, and return a templating function for it.
|
|
|
|
*
|
2013-05-26 02:58:01 -04:00
|
|
|
* See wp.template() in `wp-includes/js/wp-util.js`.
|
2014-01-25 02:39:11 -05:00
|
|
|
*
|
|
|
|
* @borrows wp.template as template
|
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 00:54:23 -04:00
|
|
|
*/
|
2013-05-26 01:55:49 -04:00
|
|
|
template: wp.template,
|
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 00:54:23 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* media.post( [action], [data] )
|
|
|
|
*
|
|
|
|
* Sends a POST request to WordPress.
|
2013-07-10 20:20:36 -04:00
|
|
|
* See wp.ajax.post() in `wp-includes/js/wp-util.js`.
|
2014-01-25 02:39:11 -05:00
|
|
|
*
|
|
|
|
* @borrows wp.ajax.post as post
|
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 00:54:23 -04:00
|
|
|
*/
|
2013-07-10 20:20:36 -04:00
|
|
|
post: wp.ajax.post,
|
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 00:54:23 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* media.ajax( [action], [options] )
|
|
|
|
*
|
2013-05-26 02:58:01 -04:00
|
|
|
* Sends an XHR request to WordPress.
|
2013-07-10 20:20:36 -04:00
|
|
|
* See wp.ajax.send() in `wp-includes/js/wp-util.js`.
|
2014-01-25 02:39:11 -05:00
|
|
|
*
|
|
|
|
* @borrows wp.ajax.send as ajax
|
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 00:54:23 -04:00
|
|
|
*/
|
2013-07-10 20:20:36 -04:00
|
|
|
ajax: wp.ajax.send,
|
2012-09-26 10:12:54 -04:00
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
|
|
|
* Scales a set of dimensions to fit within bounding dimensions.
|
|
|
|
*
|
|
|
|
* @param {Object} dimensions
|
|
|
|
* @returns {Object}
|
|
|
|
*/
|
2012-09-26 10:12:54 -04:00
|
|
|
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-08 19:20:04 -04:00
|
|
|
height: Math.round( maxWidth * height / width )
|
2012-09-26 10:12:54 -04:00
|
|
|
};
|
|
|
|
} else if ( 'height' === constraint && height > maxHeight ) {
|
|
|
|
return {
|
2012-10-08 19:20:04 -04:00
|
|
|
width : Math.round( maxHeight * width / height ),
|
2012-09-26 10:12:54 -04:00
|
|
|
height: maxHeight
|
|
|
|
};
|
|
|
|
} else {
|
|
|
|
return {
|
|
|
|
width : width,
|
|
|
|
height: height
|
|
|
|
};
|
|
|
|
}
|
2012-11-22 04:32:21 -05:00
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
|
|
|
* Truncates a string by injecting an ellipsis into the middle.
|
|
|
|
* Useful for filenames.
|
|
|
|
*
|
|
|
|
* @param {String} string
|
|
|
|
* @param {Number} [length=30]
|
|
|
|
* @param {String} [replacement=…]
|
2014-01-25 03:56:12 -05:00
|
|
|
* @returns {String} The string, unless length is greater than string.length.
|
2014-01-20 18:40:11 -05:00
|
|
|
*/
|
2012-11-22 04:32:21 -05:00
|
|
|
truncate: function( string, length, replacement ) {
|
|
|
|
length = length || 30;
|
|
|
|
replacement = replacement || '…';
|
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( string.length <= length ) {
|
2012-11-22 04:32:21 -05:00
|
|
|
return string;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-11-22 04:32:21 -05:00
|
|
|
|
|
|
|
return string.substr( 0, length / 2 ) + replacement + string.substr( -1 * length / 2 );
|
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 00:54:23 -04:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
/**
|
|
|
|
* ========================================================================
|
|
|
|
* MODELS
|
|
|
|
* ========================================================================
|
|
|
|
*/
|
2013-11-20 18:07:10 -05:00
|
|
|
/**
|
|
|
|
* wp.media.attachment
|
2014-01-20 18:40:11 -05:00
|
|
|
*
|
|
|
|
* @static
|
2014-01-25 03:56:12 -05:00
|
|
|
* @param {String} id A string used to identify a model.
|
2014-01-20 18:40:11 -05:00
|
|
|
* @returns {wp.media.model.Attachment}
|
2013-11-20 18:07:10 -05:00
|
|
|
*/
|
|
|
|
media.attachment = function( id ) {
|
2012-12-06 00:06:49 -05:00
|
|
|
return Attachment.get( id );
|
2013-11-20 18:07:10 -05:00
|
|
|
};
|
2012-12-06 00:06:49 -05: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 00:54:23 -04:00
|
|
|
/**
|
|
|
|
* wp.media.model.Attachment
|
2014-01-20 18:40:11 -05:00
|
|
|
*
|
2014-11-05 14:39:22 -05:00
|
|
|
* @class
|
2014-01-20 18:40:11 -05:00
|
|
|
* @augments 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 00:54:23 -04:00
|
|
|
*/
|
|
|
|
Attachment = media.model.Attachment = Backbone.Model.extend({
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-01-21 12:37:12 -05:00
|
|
|
* Triggered when attachment details change
|
2014-01-25 02:39:11 -05:00
|
|
|
* Overrides Backbone.Model.sync
|
2014-01-21 12:37:12 -05:00
|
|
|
*
|
2014-01-20 18:40:11 -05:00
|
|
|
* @param {string} method
|
2014-01-21 12:37:12 -05:00
|
|
|
* @param {wp.media.model.Attachment} model
|
2014-01-20 18:40:11 -05:00
|
|
|
* @param {Object} [options={}]
|
2014-01-21 12:37:12 -05:00
|
|
|
*
|
2014-01-20 18:40:11 -05:00
|
|
|
* @returns {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 00:54:23 -04:00
|
|
|
sync: function( method, model, options ) {
|
2012-11-27 10:50:59 -05:00
|
|
|
// If the attachment does not yet have an `id`, return an instantly
|
|
|
|
// rejected promise. Otherwise, all of our requests will fail.
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( _.isUndefined( this.id ) ) {
|
2012-12-04 13:33:51 -05:00
|
|
|
return $.Deferred().rejectWith( this ).promise();
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-11-27 10:50:59 -05:00
|
|
|
|
2012-10-10 19:32:48 -04: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 00:54:23 -04: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-10 19:32:48 -04:00
|
|
|
// Overload the `update` request so properties can be saved.
|
|
|
|
} else if ( 'update' === method ) {
|
2012-12-04 13:33:51 -05:00
|
|
|
// If we do not have the necessary nonce, fail immeditately.
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! this.get('nonces') || ! this.get('nonces').update ) {
|
2012-12-04 13:33:51 -05:00
|
|
|
return $.Deferred().rejectWith( this ).promise();
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-12-02 21:38:10 -05:00
|
|
|
|
2012-10-10 19:32:48 -04:00
|
|
|
options = options || {};
|
|
|
|
options.context = this;
|
|
|
|
|
|
|
|
// Set the action and ID.
|
|
|
|
options.data = _.extend( options.data || {}, {
|
2012-11-27 09:58:08 -05:00
|
|
|
action: 'save-attachment',
|
|
|
|
id: this.id,
|
2012-11-27 10:50:59 -05:00
|
|
|
nonce: this.get('nonces').update,
|
2012-12-03 02:17:10 -05:00
|
|
|
post_id: media.model.settings.post.id
|
2012-10-10 19:32:48 -04:00
|
|
|
});
|
|
|
|
|
|
|
|
// Record the values of the changed attributes.
|
2013-03-03 02:04:06 -05:00
|
|
|
if ( model.hasChanged() ) {
|
|
|
|
options.data.changes = {};
|
2012-10-10 19:32:48 -04:00
|
|
|
|
2013-03-03 02:04:06 -05:00
|
|
|
_.each( model.changed, function( value, key ) {
|
|
|
|
options.data.changes[ key ] = this.get( key );
|
|
|
|
}, this );
|
2012-10-10 19:32:48 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
return media.ajax( options );
|
2012-11-27 10:50:59 -05:00
|
|
|
|
|
|
|
// Overload the `delete` request so attachments can be removed.
|
|
|
|
// This will permanently delete an attachment.
|
|
|
|
} else if ( 'delete' === method ) {
|
|
|
|
options = options || {};
|
2012-12-04 21:31:41 -05:00
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! options.wait ) {
|
2012-12-04 21:31:41 -05:00
|
|
|
this.destroyed = true;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-12-04 21:31:41 -05:00
|
|
|
|
2012-11-27 10:50:59 -05:00
|
|
|
options.context = this;
|
|
|
|
options.data = _.extend( options.data || {}, {
|
|
|
|
action: 'delete-post',
|
|
|
|
id: this.id,
|
|
|
|
_wpnonce: this.get('nonces')['delete']
|
|
|
|
});
|
2012-12-04 21:31:41 -05:00
|
|
|
|
|
|
|
return media.ajax( options ).done( function() {
|
|
|
|
this.destroyed = true;
|
|
|
|
}).fail( function() {
|
|
|
|
this.destroyed = false;
|
|
|
|
});
|
2013-03-03 02:04:06 -05:00
|
|
|
|
|
|
|
// Otherwise, fall back to `Backbone.sync()`.
|
|
|
|
} else {
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
|
|
|
* Call `sync` directly on Backbone.Model
|
|
|
|
*/
|
2013-03-03 02:04:06 -05:00
|
|
|
return Backbone.Model.prototype.sync.apply( this, arguments );
|
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 00:54:23 -04:00
|
|
|
}
|
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-01-21 12:37:12 -05:00
|
|
|
* Convert date strings into Date objects.
|
|
|
|
*
|
2014-01-25 02:39:11 -05:00
|
|
|
* @param {Object} resp The raw response object, typically returned by fetch()
|
|
|
|
* @returns {Object} The modified response object, which is the attributes hash
|
|
|
|
* to be set on the model.
|
2014-01-20 18:40:11 -05:00
|
|
|
*/
|
2013-11-20 18:07:10 -05:00
|
|
|
parse: function( resp ) {
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! resp ) {
|
2012-10-10 19:32:48 -04:00
|
|
|
return resp;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-10-10 19:32:48 -04: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 00:54:23 -04:00
|
|
|
resp.date = new Date( resp.date );
|
|
|
|
resp.modified = new Date( resp.modified );
|
|
|
|
return resp;
|
2012-11-10 20:26:42 -05:00
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-01-25 02:39:11 -05:00
|
|
|
* @param {Object} data The properties to be saved.
|
|
|
|
* @param {Object} options Sync options. e.g. patch, wait, success, error.
|
2014-01-21 12:37:12 -05:00
|
|
|
*
|
|
|
|
* @this Backbone.Model
|
|
|
|
*
|
2014-01-20 18:40:11 -05:00
|
|
|
* @returns {Promise}
|
|
|
|
*/
|
2012-11-10 20:26:42 -05:00
|
|
|
saveCompat: function( data, options ) {
|
|
|
|
var model = this;
|
|
|
|
|
2012-12-04 13:33:51 -05:00
|
|
|
// If we do not have the necessary nonce, fail immeditately.
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! this.get('nonces') || ! this.get('nonces').update ) {
|
2012-12-04 13:33:51 -05:00
|
|
|
return $.Deferred().rejectWith( this ).promise();
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-12-04 13:33:51 -05:00
|
|
|
|
2012-11-10 20:26:42 -05:00
|
|
|
return media.post( 'save-attachment-compat', _.defaults({
|
2012-11-27 09:58:08 -05:00
|
|
|
id: this.id,
|
2012-11-27 10:50:59 -05:00
|
|
|
nonce: this.get('nonces').update,
|
2012-12-03 02:17:10 -05:00
|
|
|
post_id: media.model.settings.post.id
|
2012-11-10 20:26:42 -05:00
|
|
|
}, 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 00:54:23 -04:00
|
|
|
}
|
|
|
|
}, {
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* Create a new model on the static 'all' attachments collection and return it.
|
2014-01-25 03:56:12 -05:00
|
|
|
*
|
2014-01-25 02:39:11 -05:00
|
|
|
* @static
|
2014-01-20 18:40:11 -05:00
|
|
|
* @param {Object} attrs
|
|
|
|
* @returns {wp.media.model.Attachment}
|
|
|
|
*/
|
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 00:54:23 -04:00
|
|
|
create: function( attrs ) {
|
|
|
|
return Attachments.all.push( attrs );
|
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* Create a new model on the static 'all' attachments collection and return it.
|
|
|
|
*
|
|
|
|
* If this function has already been called for the id,
|
|
|
|
* it returns the specified attachment.
|
2014-01-25 03:56:12 -05:00
|
|
|
*
|
2014-01-25 02:39:11 -05:00
|
|
|
* @static
|
2014-01-25 03:56:12 -05:00
|
|
|
* @param {string} id A string used to identify a model.
|
2014-01-21 12:37:12 -05:00
|
|
|
* @param {Backbone.Model|undefined} attachment
|
2014-01-20 18:40:11 -05:00
|
|
|
* @returns {wp.media.model.Attachment}
|
|
|
|
*/
|
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 00:54:23 -04:00
|
|
|
get: _.memoize( function( id, attachment ) {
|
|
|
|
return Attachments.all.push( attachment || { id: id } );
|
|
|
|
})
|
|
|
|
});
|
|
|
|
|
2014-01-28 16:17:12 -05:00
|
|
|
/**
|
2014-01-28 18:21:13 -05:00
|
|
|
* wp.media.model.PostImage
|
2014-01-28 16:17:12 -05:00
|
|
|
*
|
2014-11-05 14:39:22 -05:00
|
|
|
* An instance of an image that's been embedded into a post.
|
|
|
|
*
|
|
|
|
* Used in the embedded image attachment display settings modal - @see wp.media.view.MediaFrame.ImageDetails.
|
|
|
|
*
|
|
|
|
* @class
|
2014-01-28 16:17:12 -05:00
|
|
|
* @augments Backbone.Model
|
2014-11-05 14:39:22 -05:00
|
|
|
*
|
|
|
|
* @param {int} [attributes] Initial model attributes.
|
|
|
|
* @param {int} [attributes.attachment_id] ID of the attachment.
|
2014-01-28 16:17:12 -05:00
|
|
|
**/
|
|
|
|
PostImage = media.model.PostImage = Backbone.Model.extend({
|
|
|
|
|
|
|
|
initialize: function( attributes ) {
|
|
|
|
this.attachment = false;
|
|
|
|
|
|
|
|
if ( attributes.attachment_id ) {
|
2014-01-28 18:21:13 -05:00
|
|
|
this.attachment = Attachment.get( attributes.attachment_id );
|
2014-04-13 00:02:15 -04:00
|
|
|
if ( this.attachment.get( 'url' ) ) {
|
|
|
|
this.dfd = $.Deferred();
|
|
|
|
this.dfd.resolve();
|
|
|
|
} else {
|
|
|
|
this.dfd = this.attachment.fetch();
|
|
|
|
}
|
2014-01-28 16:17:12 -05:00
|
|
|
this.bindAttachmentListeners();
|
|
|
|
}
|
|
|
|
|
|
|
|
// keep url in sync with changes to the type of link
|
|
|
|
this.on( 'change:link', this.updateLinkUrl, this );
|
|
|
|
this.on( 'change:size', this.updateSize, this );
|
|
|
|
|
|
|
|
this.setLinkTypeFromUrl();
|
2014-04-03 21:49:15 -04:00
|
|
|
this.setAspectRatio();
|
2014-04-02 23:21:15 -04:00
|
|
|
|
|
|
|
this.set( 'originalUrl', attributes.url );
|
2014-01-28 16:17:12 -05:00
|
|
|
},
|
|
|
|
|
|
|
|
bindAttachmentListeners: function() {
|
|
|
|
this.listenTo( this.attachment, 'sync', this.setLinkTypeFromUrl );
|
2014-04-03 21:49:15 -04:00
|
|
|
this.listenTo( this.attachment, 'sync', this.setAspectRatio );
|
2014-03-06 17:55:14 -05:00
|
|
|
this.listenTo( this.attachment, 'change', this.updateSize );
|
2014-01-28 16:17:12 -05:00
|
|
|
},
|
|
|
|
|
|
|
|
changeAttachment: function( attachment, props ) {
|
|
|
|
this.stopListening( this.attachment );
|
|
|
|
this.attachment = attachment;
|
|
|
|
this.bindAttachmentListeners();
|
|
|
|
|
|
|
|
this.set( 'attachment_id', this.attachment.get( 'id' ) );
|
|
|
|
this.set( 'caption', this.attachment.get( 'caption' ) );
|
|
|
|
this.set( 'alt', this.attachment.get( 'alt' ) );
|
|
|
|
this.set( 'size', props.get( 'size' ) );
|
|
|
|
this.set( 'align', props.get( 'align' ) );
|
|
|
|
this.set( 'link', props.get( 'link' ) );
|
|
|
|
this.updateLinkUrl();
|
|
|
|
this.updateSize();
|
|
|
|
},
|
|
|
|
|
|
|
|
setLinkTypeFromUrl: function() {
|
|
|
|
var linkUrl = this.get( 'linkUrl' ),
|
|
|
|
type;
|
|
|
|
|
|
|
|
if ( ! linkUrl ) {
|
|
|
|
this.set( 'link', 'none' );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// default to custom if there is a linkUrl
|
|
|
|
type = 'custom';
|
|
|
|
|
|
|
|
if ( this.attachment ) {
|
|
|
|
if ( this.attachment.get( 'url' ) === linkUrl ) {
|
|
|
|
type = 'file';
|
|
|
|
} else if ( this.attachment.get( 'link' ) === linkUrl ) {
|
|
|
|
type = 'post';
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if ( this.get( 'url' ) === linkUrl ) {
|
|
|
|
type = 'file';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
this.set( 'link', type );
|
|
|
|
},
|
|
|
|
|
|
|
|
updateLinkUrl: function() {
|
|
|
|
var link = this.get( 'link' ),
|
|
|
|
url;
|
|
|
|
|
|
|
|
switch( link ) {
|
|
|
|
case 'file':
|
|
|
|
if ( this.attachment ) {
|
|
|
|
url = this.attachment.get( 'url' );
|
|
|
|
} else {
|
|
|
|
url = this.get( 'url' );
|
|
|
|
}
|
|
|
|
this.set( 'linkUrl', url );
|
|
|
|
break;
|
|
|
|
case 'post':
|
|
|
|
this.set( 'linkUrl', this.attachment.get( 'link' ) );
|
|
|
|
break;
|
|
|
|
case 'none':
|
|
|
|
this.set( 'linkUrl', '' );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
updateSize: function() {
|
|
|
|
var size;
|
|
|
|
|
|
|
|
if ( ! this.attachment ) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2014-04-02 23:21:15 -04:00
|
|
|
if ( this.get( 'size' ) === 'custom' ) {
|
|
|
|
this.set( 'width', this.get( 'customWidth' ) );
|
|
|
|
this.set( 'height', this.get( 'customHeight' ) );
|
|
|
|
this.set( 'url', this.get( 'originalUrl' ) );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2014-01-28 16:17:12 -05:00
|
|
|
size = this.attachment.get( 'sizes' )[ this.get( 'size' ) ];
|
2014-03-24 15:01:15 -04:00
|
|
|
|
|
|
|
if ( ! size ) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2014-01-28 16:17:12 -05:00
|
|
|
this.set( 'url', size.url );
|
|
|
|
this.set( 'width', size.width );
|
|
|
|
this.set( 'height', size.height );
|
2014-04-03 21:49:15 -04:00
|
|
|
},
|
|
|
|
|
|
|
|
setAspectRatio: function() {
|
|
|
|
var full;
|
|
|
|
|
2014-04-04 14:01:17 -04:00
|
|
|
if ( this.attachment && this.attachment.get( 'sizes' ) ) {
|
2014-04-03 21:49:15 -04:00
|
|
|
full = this.attachment.get( 'sizes' ).full;
|
|
|
|
|
|
|
|
if ( full ) {
|
|
|
|
this.set( 'aspectRatio', full.width / full.height );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
this.set( 'aspectRatio', this.get( 'customWidth' ) / this.get( 'customHeight' ) );
|
2014-01-28 16:17:12 -05: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 00:54:23 -04:00
|
|
|
/**
|
|
|
|
* wp.media.model.Attachments
|
2014-01-20 18:40:11 -05:00
|
|
|
*
|
2014-11-05 14:39:22 -05:00
|
|
|
* A collection of attachments.
|
|
|
|
*
|
|
|
|
* This collection has no persistence with the server without supplying
|
|
|
|
* 'options.props.query = true', which will mirror the collection
|
|
|
|
* to an Attachments Query collection - @see wp.media.model.Attachments.mirror().
|
|
|
|
*
|
|
|
|
* @class
|
2014-01-20 18:40:11 -05:00
|
|
|
* @augments Backbone.Collection
|
2014-11-05 14:39:22 -05:00
|
|
|
*
|
|
|
|
* @param {array} [models] Models to initialize with the collection.
|
|
|
|
* @param {object} [options] Options hash for the collection.
|
|
|
|
* @param {string} [options.props] Options hash for the initial query properties.
|
|
|
|
* @param {string} [options.props.order] Initial order (ASC or DESC) for the collection.
|
|
|
|
* @param {string} [options.props.orderby] Initial attribute key to order the collection by.
|
|
|
|
* @param {string} [options.props.query] Whether the collection is linked to an attachments query.
|
|
|
|
* @param {string} [options.observe]
|
|
|
|
* @param {string} [options.filters]
|
|
|
|
*
|
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 00:54:23 -04:00
|
|
|
*/
|
|
|
|
Attachments = media.model.Attachments = Backbone.Collection.extend({
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
|
|
|
* @type {wp.media.model.Attachment}
|
|
|
|
*/
|
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 00:54:23 -04:00
|
|
|
model: Attachment,
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-01-25 03:56:12 -05:00
|
|
|
* @param {Array} [models=[]] Array of models used to populate the collection.
|
2014-01-20 18:40:11 -05:00
|
|
|
* @param {Object} [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 00:54:23 -04:00
|
|
|
initialize: function( models, options ) {
|
|
|
|
options = options || {};
|
|
|
|
|
2012-09-18 17:42:29 -04: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 00:54:23 -04:00
|
|
|
this.filters = options.filters || {};
|
|
|
|
|
2012-09-18 17:42:29 -04:00
|
|
|
// Bind default `change` events to the `props` model.
|
2012-11-30 10:11:44 -05:00
|
|
|
this.props.on( 'change', this._changeFilteredProps, this );
|
|
|
|
|
2012-09-18 17:42:29 -04:00
|
|
|
this.props.on( 'change:order', this._changeOrder, this );
|
|
|
|
this.props.on( 'change:orderby', this._changeOrderby, this );
|
|
|
|
this.props.on( 'change:query', this._changeQuery, this );
|
|
|
|
|
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 00:23:59 -04:00
|
|
|
this.props.set( _.defaults( options.props || {} ) );
|
2012-09-18 17:42:29 -04:00
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( options.observe ) {
|
2012-08-31 14:38:32 -04:00
|
|
|
this.observe( options.observe );
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-09-18 17:42:29 -04:00
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* Sort the collection when the order attribute changes.
|
2014-01-20 18:40:11 -05:00
|
|
|
*
|
|
|
|
* @access private
|
|
|
|
*/
|
2013-11-20 18:07:10 -05:00
|
|
|
_changeOrder: function() {
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( this.comparator ) {
|
2012-09-18 17:42:29 -04:00
|
|
|
this.sort();
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-09-18 17:42:29 -04:00
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
|
|
|
* Set the default comparator only when the `orderby` property is set.
|
|
|
|
*
|
|
|
|
* @access private
|
|
|
|
*
|
|
|
|
* @param {Backbone.Model} model
|
|
|
|
* @param {string} orderby
|
|
|
|
*/
|
2012-09-18 17:42:29 -04:00
|
|
|
_changeOrderby: function( model, orderby ) {
|
|
|
|
// If a different comparator is defined, bail.
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( this.comparator && this.comparator !== Attachments.comparator ) {
|
2012-09-18 17:42:29 -04:00
|
|
|
return;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-09-18 17:42:29 -04:00
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( orderby && 'post__in' !== orderby ) {
|
2012-09-18 17:42:29 -04:00
|
|
|
this.comparator = Attachments.comparator;
|
2014-01-20 18:40:11 -05:00
|
|
|
} else {
|
2012-09-18 17:42:29 -04:00
|
|
|
delete this.comparator;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-09-18 17:42:29 -04:00
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
|
|
|
* If the `query` property is set to true, query the server using
|
|
|
|
* the `props` values, and sync the results to this collection.
|
|
|
|
*
|
|
|
|
* @access private
|
|
|
|
*
|
|
|
|
* @param {Backbone.Model} model
|
|
|
|
* @param {Boolean} query
|
|
|
|
*/
|
2012-09-18 17:42:29 -04:00
|
|
|
_changeQuery: function( model, query ) {
|
|
|
|
if ( query ) {
|
|
|
|
this.props.on( 'change', this._requery, this );
|
|
|
|
this._requery();
|
|
|
|
} else {
|
|
|
|
this.props.off( 'change', this._requery, this );
|
|
|
|
}
|
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
|
|
|
* @access private
|
|
|
|
*
|
|
|
|
* @param {Backbone.Model} model
|
|
|
|
*/
|
2013-11-20 18:07:10 -05:00
|
|
|
_changeFilteredProps: function( model ) {
|
2012-11-21 03:09:28 -05:00
|
|
|
// If this is a query, updating the collection will be handled by
|
|
|
|
// `this._requery()`.
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( this.props.get('query') ) {
|
2012-09-18 17:42:29 -04:00
|
|
|
return;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-09-18 17:42:29 -04:00
|
|
|
|
2013-03-03 02:04:06 -05:00
|
|
|
var changed = _.chain( model.changed ).map( function( t, prop ) {
|
2012-11-30 10:11:44 -05:00
|
|
|
var filter = Attachments.filters[ prop ],
|
|
|
|
term = model.get( prop );
|
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! filter ) {
|
2012-11-30 10:11:44 -05:00
|
|
|
return;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-11-30 10:11:44 -05:00
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( term && ! this.filters[ prop ] ) {
|
2012-11-30 10:11:44 -05:00
|
|
|
this.filters[ prop ] = filter;
|
2014-01-20 18:40:11 -05:00
|
|
|
} else if ( ! term && this.filters[ prop ] === filter ) {
|
2012-11-30 10:11:44 -05:00
|
|
|
delete this.filters[ prop ];
|
2014-01-20 18:40:11 -05:00
|
|
|
} else {
|
2012-11-30 10:11:44 -05:00
|
|
|
return;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-11-30 10:11:44 -05:00
|
|
|
|
|
|
|
// Record the change.
|
|
|
|
return true;
|
|
|
|
}, this ).any().value();
|
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! changed ) {
|
2012-11-30 10:11:44 -05:00
|
|
|
return;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-09-18 17:42:29 -04:00
|
|
|
|
|
|
|
// If no `Attachments` model is provided to source the searches
|
|
|
|
// from, then automatically generate a source from the existing
|
|
|
|
// models.
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! this._source ) {
|
2012-11-21 03:09:28 -05:00
|
|
|
this._source = new Attachments( this.models );
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-09-18 17:42:29 -04:00
|
|
|
|
2012-11-21 03:09:28 -05:00
|
|
|
this.reset( this._source.filter( this.validator, 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 00:54:23 -04:00
|
|
|
},
|
|
|
|
|
2012-12-04 21:31:41 -05:00
|
|
|
validateDestroyed: false,
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* Checks whether an attachment is valid.
|
|
|
|
*
|
2014-01-20 18:40:11 -05:00
|
|
|
* @param {wp.media.model.Attachment} attachment
|
|
|
|
* @returns {Boolean}
|
|
|
|
*/
|
2012-08-31 14:38:32 -04:00
|
|
|
validator: function( attachment ) {
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! this.validateDestroyed && attachment.destroyed ) {
|
2012-12-04 21:31:41 -05:00
|
|
|
return false;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2013-11-20 18:07:10 -05:00
|
|
|
return _.all( this.filters, function( filter ) {
|
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 00:54:23 -04:00
|
|
|
return !! filter.call( this, attachment );
|
|
|
|
}, this );
|
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* Add or remove an attachment to the collection depending on its validity.
|
|
|
|
*
|
2014-01-20 18:40:11 -05:00
|
|
|
* @param {wp.media.model.Attachment} attachment
|
|
|
|
* @param {Object} options
|
|
|
|
* @returns {wp.media.model.Attachments} Returns itself to allow chaining
|
|
|
|
*/
|
2012-08-31 14:38:32 -04:00
|
|
|
validate: function( attachment, options ) {
|
2012-11-18 21:43:10 -05:00
|
|
|
var valid = this.validator( attachment ),
|
2013-03-03 02:04:06 -05:00
|
|
|
hasAttachment = !! this.get( attachment.cid );
|
2012-11-18 21:43:10 -05:00
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! valid && hasAttachment ) {
|
2012-11-18 21:43:10 -05:00
|
|
|
this.remove( attachment, options );
|
2014-01-20 18:40:11 -05:00
|
|
|
} else if ( valid && ! hasAttachment ) {
|
2012-11-18 21:43:10 -05:00
|
|
|
this.add( attachment, options );
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-11-18 21:43:10 -05:00
|
|
|
|
|
|
|
return this;
|
|
|
|
},
|
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* Add or remove all attachments from another collection depending on each one's validity.
|
|
|
|
*
|
2014-01-21 12:37:12 -05:00
|
|
|
* @param {wp.media.model.Attachments} attachments
|
2014-01-20 18:40:11 -05:00
|
|
|
* @param {object} [options={}]
|
2014-01-25 03:56:12 -05:00
|
|
|
*
|
|
|
|
* @fires wp.media.model.Attachments#reset
|
|
|
|
*
|
2014-01-20 18:40:11 -05:00
|
|
|
* @returns {wp.media.model.Attachments} Returns itself to allow chaining
|
|
|
|
*/
|
2012-11-21 06:35:30 -05:00
|
|
|
validateAll: function( attachments, options ) {
|
|
|
|
options = options || {};
|
|
|
|
|
2012-11-18 21:43:10 -05:00
|
|
|
_.each( attachments.models, function( attachment ) {
|
|
|
|
this.validate( attachment, { silent: true });
|
|
|
|
}, this );
|
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! options.silent ) {
|
2012-11-21 06:35:30 -05:00
|
|
|
this.trigger( 'reset', this, options );
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-11-18 21:43:10 -05:00
|
|
|
return 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 00:54:23 -04:00
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* Start observing another attachments collection change events
|
|
|
|
* and replicate them on this collection.
|
|
|
|
*
|
|
|
|
* @param {wp.media.model.Attachments} The attachments collection to observe.
|
|
|
|
* @returns {wp.media.model.Attachments} Returns itself to allow chaining.
|
2014-01-20 18:40:11 -05:00
|
|
|
*/
|
2012-08-31 14:38:32 -04:00
|
|
|
observe: function( attachments ) {
|
2012-11-18 21:43:10 -05:00
|
|
|
this.observers = this.observers || [];
|
|
|
|
this.observers.push( attachments );
|
|
|
|
|
|
|
|
attachments.on( 'add change remove', this._validateHandler, this );
|
|
|
|
attachments.on( 'reset', this._validateAllHandler, this );
|
|
|
|
this.validateAll( attachments );
|
|
|
|
return 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 00:54:23 -04:00
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* Stop replicating collection change events from another attachments collection.
|
|
|
|
*
|
|
|
|
* @param {wp.media.model.Attachments} The attachments collection to stop observing.
|
2014-01-20 18:40:11 -05:00
|
|
|
* @returns {wp.media.model.Attachments} Returns itself to allow chaining
|
|
|
|
*/
|
2012-08-31 14:38:32 -04:00
|
|
|
unobserve: function( attachments ) {
|
2012-11-18 21:43:10 -05: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;
|
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
|
|
|
* @access private
|
|
|
|
*
|
2014-01-21 12:37:12 -05:00
|
|
|
* @param {wp.media.model.Attachments} attachment
|
|
|
|
* @param {wp.media.model.Attachments} attachments
|
2014-01-20 18:40:11 -05:00
|
|
|
* @param {Object} options
|
2014-01-21 12:37:12 -05:00
|
|
|
*
|
2014-01-20 18:40:11 -05:00
|
|
|
* @returns {wp.media.model.Attachments} Returns itself to allow chaining
|
|
|
|
*/
|
2012-11-18 21:43:10 -05:00
|
|
|
_validateHandler: function( attachment, attachments, options ) {
|
2012-11-21 06:35:30 -05:00
|
|
|
// If we're not mirroring this `attachments` collection,
|
|
|
|
// only retain the `silent` option.
|
|
|
|
options = attachments === this.mirroring ? options : {
|
|
|
|
silent: options && options.silent
|
|
|
|
};
|
|
|
|
|
2012-11-18 21:43:10 -05:00
|
|
|
return this.validate( attachment, options );
|
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
|
|
|
* @access private
|
|
|
|
*
|
2014-01-21 12:37:12 -05:00
|
|
|
* @param {wp.media.model.Attachments} attachments
|
2014-01-20 18:40:11 -05:00
|
|
|
* @param {Object} options
|
|
|
|
* @returns {wp.media.model.Attachments} Returns itself to allow chaining
|
|
|
|
*/
|
2012-11-18 21:43:10 -05:00
|
|
|
_validateAllHandler: function( attachments, options ) {
|
2012-11-19 01:43:01 -05:00
|
|
|
return this.validateAll( attachments, 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 00:54:23 -04:00
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* Start mirroring another attachments collection, clearing out any models already
|
|
|
|
* in the collection.
|
|
|
|
*
|
|
|
|
* @param {wp.media.model.Attachments} The attachments collection to mirror.
|
2014-01-20 18:40:11 -05:00
|
|
|
* @returns {wp.media.model.Attachments} Returns itself to allow chaining
|
|
|
|
*/
|
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 00:54:23 -04:00
|
|
|
mirror: function( attachments ) {
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( this.mirroring && this.mirroring === attachments ) {
|
2012-11-21 07:53:02 -05:00
|
|
|
return this;
|
2014-01-20 18:40:11 -05: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 00:54:23 -04:00
|
|
|
|
|
|
|
this.unmirror();
|
|
|
|
this.mirroring = attachments;
|
2012-11-21 06:35:30 -05:00
|
|
|
|
|
|
|
// Clear the collection silently. A `reset` event will be fired
|
|
|
|
// when `observe()` calls `validateAll()`.
|
|
|
|
this.reset( [], { silent: true } );
|
|
|
|
this.observe( attachments );
|
2012-11-21 07:11:38 -05:00
|
|
|
|
|
|
|
return 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 00:54:23 -04:00
|
|
|
},
|
2014-11-05 14:39:22 -05:00
|
|
|
/**
|
|
|
|
* Stop mirroring another attachments collection.
|
|
|
|
*/
|
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 00:54:23 -04:00
|
|
|
unmirror: function() {
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! this.mirroring ) {
|
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 00:54:23 -04:00
|
|
|
return;
|
2014-01-20 18:40:11 -05: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 00:54:23 -04:00
|
|
|
|
2012-11-21 06:35:30 -05:00
|
|
|
this.unobserve( this.mirroring );
|
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 00:54:23 -04:00
|
|
|
delete this.mirroring;
|
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* Retrive more attachments from the server for the collection.
|
|
|
|
*
|
|
|
|
* Only works if the collection is mirroring a Query Attachments collection,
|
|
|
|
* and forwards to its `more` method. This collection class doesn't have
|
|
|
|
* server persistence by itself.
|
|
|
|
*
|
|
|
|
* @param {object} options
|
2014-01-20 18:40:11 -05:00
|
|
|
* @returns {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 00:54:23 -04:00
|
|
|
more: function( options ) {
|
2012-11-30 11:41:38 -05:00
|
|
|
var deferred = $.Deferred(),
|
|
|
|
mirroring = this.mirroring,
|
|
|
|
attachments = this;
|
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! mirroring || ! mirroring.more ) {
|
2012-11-30 11:41:38 -05:00
|
|
|
return deferred.resolveWith( this ).promise();
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-11-30 11:41:38 -05:00
|
|
|
// If we're mirroring another collection, forward `more` to
|
|
|
|
// the mirrored collection. Account for a race condition by
|
|
|
|
// checking if we're still mirroring that collection when
|
|
|
|
// the request resolves.
|
|
|
|
mirroring.more( options ).done( function() {
|
|
|
|
if ( this === attachments.mirroring )
|
|
|
|
deferred.resolveWith( this );
|
|
|
|
});
|
|
|
|
|
|
|
|
return deferred.promise();
|
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* Whether there are more attachments that haven't been sync'd from the server
|
|
|
|
* that match the collection's query.
|
|
|
|
*
|
|
|
|
* Only works if the collection is mirroring a Query Attachments collection,
|
|
|
|
* and forwards to its `hasMore` method. This collection class doesn't have
|
|
|
|
* server persistence by itself.
|
|
|
|
*
|
|
|
|
* @returns {boolean}
|
2014-01-20 18:40:11 -05:00
|
|
|
*/
|
2012-11-30 11:41:38 -05:00
|
|
|
hasMore: function() {
|
|
|
|
return this.mirroring ? this.mirroring.hasMore() : false;
|
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 00:54:23 -04:00
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* A custom AJAX-response parser.
|
|
|
|
*
|
|
|
|
* See trac ticket #24753
|
2014-01-25 02:39:11 -05:00
|
|
|
*
|
|
|
|
* @param {Object|Array} resp The raw response Object/Array.
|
|
|
|
* @param {Object} xhr
|
|
|
|
* @returns {Array} The array of model attributes to be added to the collection
|
2014-01-20 18:40:11 -05:00
|
|
|
*/
|
2013-07-22 18:24:33 -04:00
|
|
|
parse: function( resp, xhr ) {
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! _.isArray( resp ) ) {
|
2013-07-22 18:24:33 -04:00
|
|
|
resp = [resp];
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2013-07-22 18:24:33 -04:00
|
|
|
|
|
|
|
return _.map( resp, function( attrs ) {
|
2013-07-27 03:09:05 -04:00
|
|
|
var id, attachment, newAttributes;
|
|
|
|
|
2013-07-22 18:24:33 -04:00
|
|
|
if ( attrs instanceof Backbone.Model ) {
|
|
|
|
id = attrs.get( 'id' );
|
|
|
|
attrs = attrs.attributes;
|
|
|
|
} else {
|
|
|
|
id = attrs.id;
|
|
|
|
}
|
|
|
|
|
2013-07-27 03:09:05 -04:00
|
|
|
attachment = Attachment.get( id );
|
|
|
|
newAttributes = attachment.parse( attrs, xhr );
|
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! _.isEqual( attachment.attributes, newAttributes ) ) {
|
2013-07-27 03:09:05 -04:00
|
|
|
attachment.set( newAttributes );
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2013-07-22 18:24:33 -04:00
|
|
|
|
|
|
|
return attachment;
|
|
|
|
});
|
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* If the collection is a query, create and mirror an Attachments Query collection.
|
|
|
|
*
|
2014-01-20 18:40:11 -05:00
|
|
|
* @access private
|
|
|
|
*/
|
2014-08-15 15:00:16 -04:00
|
|
|
_requery: function( refresh ) {
|
Media Grid, support `MEDIA_TRASH`:
* Add a setting to `_wpMediaViewsL10n.settings`: `mediaTrash`
* In the attachment edit modal, properly toggle between Trash/Untrash
* In `media.view.Attachment`, add a method for `untrashAttachment`
* When creating the grid toolbar, switch the setting order of subviews so that `media.view.DeleteSelectedButton` can listen to the instance of `media.view.AttachmentFilters.All` to update the text in its UI.
* Add a new filter to `media.view.AttachmentFilters.All`, `trash`, when `settings.mediaTrash` is true
* Allow the cached queries in `Query.get()` to be flushed when race conditions exist and collections need to be refreshed. This is currently only being used when `MEDIA_TRASH` is set, to refresh the filtered/mirrored collections related to `all`, `trash`, and any already queried filter.
* Cleanup the bootstrapping of `media.view.MediaFrame.Manage`
* Allow `wp_ajax_query_attachments()` to return items from the trash when `MEDIA_TRASH` is `true`
* Allow `wp_ajax_save_attachment()` to set `post_status` when `MEDIA_TRASH` is `true`. It allows `wp_delete_post()` to be called, which will trash the attachment instead of deleting when the flag is set.
Props koop for the knowledge sharing and thought partnership.
See #29145.
Built from https://develop.svn.wordpress.org/trunk@29490
git-svn-id: http://core.svn.wordpress.org/trunk@29268 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-08-14 14:31:19 -04:00
|
|
|
var props;
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( this.props.get('query') ) {
|
Media Grid, support `MEDIA_TRASH`:
* Add a setting to `_wpMediaViewsL10n.settings`: `mediaTrash`
* In the attachment edit modal, properly toggle between Trash/Untrash
* In `media.view.Attachment`, add a method for `untrashAttachment`
* When creating the grid toolbar, switch the setting order of subviews so that `media.view.DeleteSelectedButton` can listen to the instance of `media.view.AttachmentFilters.All` to update the text in its UI.
* Add a new filter to `media.view.AttachmentFilters.All`, `trash`, when `settings.mediaTrash` is true
* Allow the cached queries in `Query.get()` to be flushed when race conditions exist and collections need to be refreshed. This is currently only being used when `MEDIA_TRASH` is set, to refresh the filtered/mirrored collections related to `all`, `trash`, and any already queried filter.
* Cleanup the bootstrapping of `media.view.MediaFrame.Manage`
* Allow `wp_ajax_query_attachments()` to return items from the trash when `MEDIA_TRASH` is `true`
* Allow `wp_ajax_save_attachment()` to set `post_status` when `MEDIA_TRASH` is `true`. It allows `wp_delete_post()` to be called, which will trash the attachment instead of deleting when the flag is set.
Props koop for the knowledge sharing and thought partnership.
See #29145.
Built from https://develop.svn.wordpress.org/trunk@29490
git-svn-id: http://core.svn.wordpress.org/trunk@29268 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-08-14 14:31:19 -04:00
|
|
|
props = this.props.toJSON();
|
2014-08-18 00:08:15 -04:00
|
|
|
props.cache = ( true !== refresh );
|
Media Grid, support `MEDIA_TRASH`:
* Add a setting to `_wpMediaViewsL10n.settings`: `mediaTrash`
* In the attachment edit modal, properly toggle between Trash/Untrash
* In `media.view.Attachment`, add a method for `untrashAttachment`
* When creating the grid toolbar, switch the setting order of subviews so that `media.view.DeleteSelectedButton` can listen to the instance of `media.view.AttachmentFilters.All` to update the text in its UI.
* Add a new filter to `media.view.AttachmentFilters.All`, `trash`, when `settings.mediaTrash` is true
* Allow the cached queries in `Query.get()` to be flushed when race conditions exist and collections need to be refreshed. This is currently only being used when `MEDIA_TRASH` is set, to refresh the filtered/mirrored collections related to `all`, `trash`, and any already queried filter.
* Cleanup the bootstrapping of `media.view.MediaFrame.Manage`
* Allow `wp_ajax_query_attachments()` to return items from the trash when `MEDIA_TRASH` is `true`
* Allow `wp_ajax_save_attachment()` to set `post_status` when `MEDIA_TRASH` is `true`. It allows `wp_delete_post()` to be called, which will trash the attachment instead of deleting when the flag is set.
Props koop for the knowledge sharing and thought partnership.
See #29145.
Built from https://develop.svn.wordpress.org/trunk@29490
git-svn-id: http://core.svn.wordpress.org/trunk@29268 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-08-14 14:31:19 -04:00
|
|
|
this.mirror( Query.get( props ) );
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-12-02 11:06:31 -05:00
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
|
|
|
* If this collection is sorted by `menuOrder`, recalculates and saves
|
|
|
|
* the menu order to the database.
|
|
|
|
*
|
|
|
|
* @returns {undefined|Promise}
|
|
|
|
*/
|
2012-12-02 11:06:31 -05:00
|
|
|
saveMenuOrder: function() {
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( 'menuOrder' !== this.props.get('orderby') ) {
|
2012-12-02 11:06:31 -05:00
|
|
|
return;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-12-02 11:06:31 -05:00
|
|
|
|
|
|
|
// Removes any uploading attachments, updates each attachment's
|
|
|
|
// menu order, and returns an object with an { id: menuOrder }
|
|
|
|
// mapping to pass to the request.
|
|
|
|
var attachments = this.chain().filter( function( attachment ) {
|
|
|
|
return ! _.isUndefined( attachment.id );
|
|
|
|
}).map( function( attachment, index ) {
|
|
|
|
// Indices start at 1.
|
|
|
|
index = index + 1;
|
|
|
|
attachment.set( 'menuOrder', index );
|
|
|
|
return [ attachment.id, index ];
|
|
|
|
}).object().value();
|
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( _.isEmpty( attachments ) ) {
|
2012-12-02 11:06:31 -05:00
|
|
|
return;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-12-02 11:06:31 -05:00
|
|
|
|
|
|
|
return media.post( 'save-attachment-order', {
|
2012-12-03 02:17:10 -05:00
|
|
|
nonce: media.model.settings.post.nonce,
|
|
|
|
post_id: media.model.settings.post.id,
|
2012-12-02 11:06:31 -05:00
|
|
|
attachments: attachments
|
|
|
|
});
|
2012-09-18 17:42:29 -04:00
|
|
|
}
|
|
|
|
}, {
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* A function to compare two attachment models in an attachments collection.
|
|
|
|
*
|
|
|
|
* Used as the default comparator for instances of wp.media.model.Attachments
|
|
|
|
* and its subclasses. @see wp.media.model.Attachments._changeOrderby().
|
|
|
|
*
|
2014-01-25 02:39:11 -05:00
|
|
|
* @static
|
2014-01-25 03:56:12 -05:00
|
|
|
*
|
2014-01-20 18:40:11 -05:00
|
|
|
* @param {Backbone.Model} a
|
|
|
|
* @param {Backbone.Model} b
|
|
|
|
* @param {Object} options
|
2014-01-25 03:56:12 -05:00
|
|
|
* @returns {Number} -1 if the first model should come before the second,
|
|
|
|
* 0 if they are of the same rank and
|
|
|
|
* 1 if the first model should come after.
|
2014-01-20 18:40:11 -05:00
|
|
|
*/
|
2012-11-30 10:11:44 -05:00
|
|
|
comparator: function( a, b, options ) {
|
2012-09-18 17:42:29 -04:00
|
|
|
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 00:23:59 -04:00
|
|
|
order = this.props.get('order') || 'DESC',
|
2012-09-18 17:42:29 -04: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();
|
|
|
|
}
|
|
|
|
|
2012-11-30 10:11:44 -05:00
|
|
|
// If `options.ties` is set, don't enforce the `cid` tiebreaker.
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( options && options.ties ) {
|
2012-11-30 10:11:44 -05:00
|
|
|
ac = bc = null;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-11-30 10:11:44 -05:00
|
|
|
|
2012-09-18 17:42:29 -04:00
|
|
|
return ( 'DESC' === order ) ? compare( a, b, ac, bc ) : compare( b, a, bc, ac );
|
|
|
|
},
|
2014-01-25 02:39:11 -05:00
|
|
|
/**
|
|
|
|
* @namespace
|
|
|
|
*/
|
2012-09-18 17:42:29 -04:00
|
|
|
filters: {
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-01-25 02:39:11 -05:00
|
|
|
* @static
|
2014-01-20 18:40:11 -05:00
|
|
|
* Note that this client-side searching is *not* equivalent
|
|
|
|
* to our server-side searching.
|
|
|
|
*
|
|
|
|
* @param {wp.media.model.Attachment} attachment
|
2014-01-25 02:39:11 -05:00
|
|
|
*
|
|
|
|
* @this wp.media.model.Attachments
|
|
|
|
*
|
2014-01-20 18:40:11 -05:00
|
|
|
* @returns {Boolean}
|
|
|
|
*/
|
2012-09-18 17:42:29 -04:00
|
|
|
search: function( attachment ) {
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! this.props.get('search') ) {
|
2012-09-18 17:42:29 -04:00
|
|
|
return true;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-09-18 17:42:29 -04:00
|
|
|
|
|
|
|
return _.any(['title','filename','description','caption','name'], function( key ) {
|
|
|
|
var value = attachment.get( key );
|
2012-09-26 11:13:22 -04:00
|
|
|
return value && -1 !== value.search( this.props.get('search') );
|
2012-09-18 17:42:29 -04:00
|
|
|
}, this );
|
2012-09-26 16:50:13 -04:00
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-01-25 02:39:11 -05:00
|
|
|
* @static
|
2014-01-20 18:40:11 -05:00
|
|
|
* @param {wp.media.model.Attachment} attachment
|
2014-01-25 02:39:11 -05:00
|
|
|
*
|
|
|
|
* @this wp.media.model.Attachments
|
|
|
|
*
|
2014-01-20 18:40:11 -05:00
|
|
|
* @returns {Boolean}
|
|
|
|
*/
|
2012-09-26 16:50:13 -04:00
|
|
|
type: function( attachment ) {
|
|
|
|
var type = this.props.get('type');
|
2012-11-30 10:11:44 -05:00
|
|
|
return ! type || -1 !== type.indexOf( attachment.get('type') );
|
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-01-25 02:39:11 -05:00
|
|
|
* @static
|
2014-01-20 18:40:11 -05:00
|
|
|
* @param {wp.media.model.Attachment} attachment
|
2014-01-25 02:39:11 -05:00
|
|
|
*
|
|
|
|
* @this wp.media.model.Attachments
|
|
|
|
*
|
2014-01-20 18:40:11 -05:00
|
|
|
* @returns {Boolean}
|
|
|
|
*/
|
2012-11-30 10:11:44 -05:00
|
|
|
uploadedTo: function( attachment ) {
|
|
|
|
var uploadedTo = this.props.get('uploadedTo');
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( _.isUndefined( uploadedTo ) ) {
|
2012-09-26 16:50:13 -04:00
|
|
|
return true;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-09-26 16:50:13 -04:00
|
|
|
|
2012-11-30 10:11:44 -05:00
|
|
|
return uploadedTo === attachment.get('uploadedTo');
|
Media Grid, support `MEDIA_TRASH`:
* Add a setting to `_wpMediaViewsL10n.settings`: `mediaTrash`
* In the attachment edit modal, properly toggle between Trash/Untrash
* In `media.view.Attachment`, add a method for `untrashAttachment`
* When creating the grid toolbar, switch the setting order of subviews so that `media.view.DeleteSelectedButton` can listen to the instance of `media.view.AttachmentFilters.All` to update the text in its UI.
* Add a new filter to `media.view.AttachmentFilters.All`, `trash`, when `settings.mediaTrash` is true
* Allow the cached queries in `Query.get()` to be flushed when race conditions exist and collections need to be refreshed. This is currently only being used when `MEDIA_TRASH` is set, to refresh the filtered/mirrored collections related to `all`, `trash`, and any already queried filter.
* Cleanup the bootstrapping of `media.view.MediaFrame.Manage`
* Allow `wp_ajax_query_attachments()` to return items from the trash when `MEDIA_TRASH` is `true`
* Allow `wp_ajax_save_attachment()` to set `post_status` when `MEDIA_TRASH` is `true`. It allows `wp_delete_post()` to be called, which will trash the attachment instead of deleting when the flag is set.
Props koop for the knowledge sharing and thought partnership.
See #29145.
Built from https://develop.svn.wordpress.org/trunk@29490
git-svn-id: http://core.svn.wordpress.org/trunk@29268 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-08-14 14:31:19 -04:00
|
|
|
},
|
|
|
|
/**
|
|
|
|
* @static
|
|
|
|
* @param {wp.media.model.Attachment} attachment
|
|
|
|
*
|
|
|
|
* @this wp.media.model.Attachments
|
|
|
|
*
|
|
|
|
* @returns {Boolean}
|
|
|
|
*/
|
|
|
|
status: function( attachment ) {
|
|
|
|
var status = this.props.get('status');
|
|
|
|
if ( _.isUndefined( status ) ) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
return status === attachment.get('status');
|
2012-09-18 17:42:29 -04: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 00:54:23 -04:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* A collection of all attachments that have been fetched from the server.
|
|
|
|
*
|
2014-01-25 02:39:11 -05:00
|
|
|
* @static
|
2014-01-20 18:40:11 -05:00
|
|
|
* @member {wp.media.model.Attachments}
|
|
|
|
*/
|
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 00:54:23 -04:00
|
|
|
Attachments.all = new Attachments();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* wp.media.query
|
2014-01-20 18:40:11 -05:00
|
|
|
*
|
2014-11-05 14:39:22 -05:00
|
|
|
* Shorthand for creating a new Attachments Query.
|
|
|
|
*
|
|
|
|
* @param {object} [props]
|
2014-01-21 12:37:12 -05:00
|
|
|
* @returns {wp.media.model.Attachments}
|
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 00:54:23 -04:00
|
|
|
*/
|
2012-09-18 17:42:29 -04: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 00:54:23 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* wp.media.model.Query
|
|
|
|
*
|
2014-11-05 14:39:22 -05:00
|
|
|
* A collection of attachments that match the supplied query arguments.
|
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 00:54:23 -04:00
|
|
|
*
|
|
|
|
* Note: Do NOT change this.args after the query has been initialized.
|
|
|
|
* Things will break.
|
2014-01-20 18:40:11 -05:00
|
|
|
*
|
2014-11-05 14:39:22 -05:00
|
|
|
* @class
|
2014-01-20 18:40:11 -05:00
|
|
|
* @augments wp.media.model.Attachments
|
|
|
|
* @augments Backbone.Collection
|
2014-11-05 14:39:22 -05:00
|
|
|
*
|
|
|
|
* @param {array} [models] Models to initialize with the collection.
|
|
|
|
* @param {object} [options] Options hash.
|
|
|
|
* @param {object} [options.args] Attachments query arguments.
|
|
|
|
* @param {object} [options.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 00:54:23 -04:00
|
|
|
*/
|
|
|
|
Query = media.model.Query = Attachments.extend({
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
|
|
|
* @global wp.Uploader
|
|
|
|
*
|
2014-11-05 14:39:22 -05:00
|
|
|
* @param {array} [models=[]] Array of initial models to populate the collection.
|
|
|
|
* @param {object} [options={}]
|
2014-01-20 18:40:11 -05: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 00:54:23 -04:00
|
|
|
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 00:23:59 -04: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 00:54:23 -04:00
|
|
|
options = options || {};
|
|
|
|
Attachments.prototype.initialize.apply( this, arguments );
|
|
|
|
|
2012-11-30 11:41:38 -05:00
|
|
|
this.args = options.args;
|
|
|
|
this._hasMore = true;
|
|
|
|
this.created = new Date();
|
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 00:54:23 -04:00
|
|
|
|
|
|
|
this.filters.order = function( attachment ) {
|
2012-11-30 10:11:44 -05:00
|
|
|
var orderby = this.props.get('orderby'),
|
|
|
|
order = this.props.get('order');
|
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! this.comparator ) {
|
2012-09-18 17:42:29 -04:00
|
|
|
return true;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-09-18 17:42:29 -04: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 00:54:23 -04: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 ) {
|
2012-11-30 10:11:44 -05:00
|
|
|
return 1 !== this.comparator( attachment, this.last(), { ties: 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 00:54:23 -04:00
|
|
|
|
|
|
|
// 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-11-30 10:11:44 -05:00
|
|
|
} else if ( 'DESC' === order && ( 'date' === orderby || 'modified' === orderby ) ) {
|
|
|
|
return attachment.get( orderby ) >= this.created;
|
|
|
|
|
|
|
|
// If we're sorting by menu order and we have no items,
|
|
|
|
// accept any items that have the default menu order (0).
|
|
|
|
} else if ( 'ASC' === order && 'menuOrder' === orderby ) {
|
|
|
|
return attachment.get( orderby ) === 0;
|
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 00:54:23 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
// Otherwise, we don't want any items yet.
|
|
|
|
return false;
|
|
|
|
};
|
|
|
|
|
2012-11-18 21:43:10 -05:00
|
|
|
// Observe the central `wp.Uploader.queue` collection to watch for
|
|
|
|
// new matches for the 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 00:23:59 -04:00
|
|
|
//
|
|
|
|
// 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.
|
2012-11-30 10:11:44 -05:00
|
|
|
allowed = [ 's', 'order', 'orderby', 'posts_per_page', 'post_mime_type', 'post_parent' ];
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( wp.Uploader && _( this.args ).chain().keys().difference( allowed ).isEmpty().value() ) {
|
2012-11-18 21:43:10 -05:00
|
|
|
this.observe( wp.Uploader.queue );
|
2014-01-20 18:40:11 -05: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 00:54:23 -04:00
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* Whether there are more attachments that haven't been sync'd from the server
|
|
|
|
* that match the collection's query.
|
|
|
|
*
|
|
|
|
* @returns {boolean}
|
2014-01-20 18:40:11 -05:00
|
|
|
*/
|
2012-11-30 11:41:38 -05:00
|
|
|
hasMore: function() {
|
|
|
|
return this._hasMore;
|
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* Fetch more attachments from the server for the collection.
|
|
|
|
*
|
|
|
|
* @param {object} [options={}]
|
2014-01-20 18:40:11 -05:00
|
|
|
* @returns {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 00:54:23 -04:00
|
|
|
more: function( options ) {
|
|
|
|
var query = this;
|
|
|
|
|
2014-11-05 14:39:22 -05:00
|
|
|
// If there is already a request pending, return early with the Deferred object.
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( this._more && 'pending' === this._more.state() ) {
|
2012-11-07 15:14:41 -05:00
|
|
|
return this._more;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-11-07 15:14:41 -05:00
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! this.hasMore() ) {
|
2012-11-30 11:41:38 -05:00
|
|
|
return $.Deferred().resolveWith( this ).promise();
|
2014-01-20 18:40:11 -05: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 00:54:23 -04:00
|
|
|
|
|
|
|
options = options || {};
|
2013-04-03 13:40:52 -04:00
|
|
|
options.remove = false;
|
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 00:54:23 -04:00
|
|
|
|
2012-11-07 15:14:41 -05:00
|
|
|
return this._more = this.fetch( options ).done( function( resp ) {
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( _.isEmpty( resp ) || -1 === this.args.posts_per_page || resp.length < this.args.posts_per_page ) {
|
2012-11-30 11:41:38 -05:00
|
|
|
query._hasMore = false;
|
2014-01-20 18:40:11 -05: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 00:54:23 -04:00
|
|
|
});
|
|
|
|
},
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-01-25 02:39:11 -05:00
|
|
|
* Overrides Backbone.Collection.sync
|
|
|
|
* Overrides wp.media.model.Attachments.sync
|
|
|
|
*
|
2014-01-20 18:40:11 -05:00
|
|
|
* @param {String} method
|
|
|
|
* @param {Backbone.Model} model
|
|
|
|
* @param {Object} [options={}]
|
|
|
|
* @returns {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 00:54:23 -04:00
|
|
|
sync: function( method, model, options ) {
|
2013-08-21 22:11:08 -04:00
|
|
|
var args, fallback;
|
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 00:54:23 -04:00
|
|
|
|
|
|
|
// Overload the read method so Attachment.fetch() functions correctly.
|
|
|
|
if ( 'read' === method ) {
|
|
|
|
options = options || {};
|
|
|
|
options.context = this;
|
|
|
|
options.data = _.extend( options.data || {}, {
|
2012-11-27 09:58:08 -05:00
|
|
|
action: 'query-attachments',
|
2012-12-03 02:17:10 -05:00
|
|
|
post_id: media.model.settings.post.id
|
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 00:54:23 -04:00
|
|
|
});
|
|
|
|
|
|
|
|
// Clone the args so manipulation is non-destructive.
|
|
|
|
args = _.clone( this.args );
|
|
|
|
|
|
|
|
// Determine which page to query.
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( -1 !== args.posts_per_page ) {
|
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 00:23:59 -04:00
|
|
|
args.paged = Math.floor( this.length / args.posts_per_page ) + 1;
|
2014-01-20 18:40:11 -05: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 00:54:23 -04:00
|
|
|
|
|
|
|
options.data.query = args;
|
|
|
|
return media.ajax( options );
|
|
|
|
|
|
|
|
// Otherwise, fall back to Backbone.sync()
|
|
|
|
} else {
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
|
|
|
* Call wp.media.model.Attachments.sync or Backbone.sync
|
|
|
|
*/
|
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 00:54:23 -04:00
|
|
|
fallback = Attachments.prototype.sync ? Attachments.prototype : Backbone;
|
|
|
|
return fallback.sync.apply( this, arguments );
|
|
|
|
}
|
2012-09-18 17:42:29 -04:00
|
|
|
}
|
|
|
|
}, {
|
2014-01-25 02:39:11 -05:00
|
|
|
/**
|
|
|
|
* @readonly
|
|
|
|
*/
|
2012-09-18 18:19:05 -04:00
|
|
|
defaultProps: {
|
2012-09-18 21:10:17 -04: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 00:54:23 -04:00
|
|
|
},
|
2014-01-25 02:39:11 -05:00
|
|
|
/**
|
|
|
|
* @readonly
|
|
|
|
*/
|
2012-09-18 18:19:05 -04:00
|
|
|
defaultArgs: {
|
|
|
|
posts_per_page: 40
|
|
|
|
},
|
2014-01-25 02:39:11 -05:00
|
|
|
/**
|
|
|
|
* @readonly
|
|
|
|
*/
|
2012-09-18 17:42:29 -04:00
|
|
|
orderby: {
|
2012-11-27 18:20:12 -05:00
|
|
|
allowed: [ 'name', 'author', 'date', 'title', 'modified', 'uploadedTo', 'id', 'post__in', 'menuOrder' ],
|
2014-11-05 14:39:22 -05:00
|
|
|
/**
|
|
|
|
* A map of JavaScript orderby values to their WP_Query equivalents.
|
|
|
|
* @type {Object}
|
|
|
|
*/
|
2012-09-18 18:19:05 -04:00
|
|
|
valuemap: {
|
2012-09-18 17:42:29 -04:00
|
|
|
'id': 'ID',
|
2012-11-27 18:20:12 -05:00
|
|
|
'uploadedTo': 'parent',
|
|
|
|
'menuOrder': 'menu_order ID'
|
2012-09-18 17:42:29 -04:00
|
|
|
}
|
|
|
|
},
|
2014-01-25 02:39:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* A map of JavaScript query properties to their WP_Query equivalents.
|
|
|
|
*
|
2014-01-25 02:39:11 -05:00
|
|
|
* @readonly
|
|
|
|
*/
|
2012-09-18 17:42:29 -04:00
|
|
|
propmap: {
|
2012-11-27 18:20:12 -05:00
|
|
|
'search': 's',
|
|
|
|
'type': 'post_mime_type',
|
|
|
|
'perPage': 'posts_per_page',
|
2012-11-30 10:11:44 -05:00
|
|
|
'menuOrder': 'menu_order',
|
Media Grid, support `MEDIA_TRASH`:
* Add a setting to `_wpMediaViewsL10n.settings`: `mediaTrash`
* In the attachment edit modal, properly toggle between Trash/Untrash
* In `media.view.Attachment`, add a method for `untrashAttachment`
* When creating the grid toolbar, switch the setting order of subviews so that `media.view.DeleteSelectedButton` can listen to the instance of `media.view.AttachmentFilters.All` to update the text in its UI.
* Add a new filter to `media.view.AttachmentFilters.All`, `trash`, when `settings.mediaTrash` is true
* Allow the cached queries in `Query.get()` to be flushed when race conditions exist and collections need to be refreshed. This is currently only being used when `MEDIA_TRASH` is set, to refresh the filtered/mirrored collections related to `all`, `trash`, and any already queried filter.
* Cleanup the bootstrapping of `media.view.MediaFrame.Manage`
* Allow `wp_ajax_query_attachments()` to return items from the trash when `MEDIA_TRASH` is `true`
* Allow `wp_ajax_save_attachment()` to set `post_status` when `MEDIA_TRASH` is `true`. It allows `wp_delete_post()` to be called, which will trash the attachment instead of deleting when the flag is set.
Props koop for the knowledge sharing and thought partnership.
See #29145.
Built from https://develop.svn.wordpress.org/trunk@29490
git-svn-id: http://core.svn.wordpress.org/trunk@29268 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-08-14 14:31:19 -04:00
|
|
|
'uploadedTo': 'post_parent',
|
2014-09-22 23:38:16 -04:00
|
|
|
'status': 'post_status',
|
|
|
|
'include': 'post__in',
|
|
|
|
'exclude': 'post__not_in'
|
2012-09-18 17:42:29 -04:00
|
|
|
},
|
2014-01-25 02:39:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* Creates and returns an Attachments Query collection given the properties.
|
|
|
|
*
|
|
|
|
* Caches query objects and reuses where possible.
|
|
|
|
*
|
2014-01-25 02:39:11 -05:00
|
|
|
* @static
|
2014-01-25 03:56:12 -05:00
|
|
|
* @method
|
|
|
|
*
|
2014-11-05 14:39:22 -05:00
|
|
|
* @param {object} [props]
|
|
|
|
* @param {Object} [props.cache=true] Whether to use the query cache or not.
|
|
|
|
* @param {Object} [props.order]
|
|
|
|
* @param {Object} [props.orderby]
|
|
|
|
* @param {Object} [props.include]
|
|
|
|
* @param {Object} [props.exclude]
|
|
|
|
* @param {Object} [props.s]
|
|
|
|
* @param {Object} [props.post_mime_type]
|
|
|
|
* @param {Object} [props.posts_per_page]
|
|
|
|
* @param {Object} [props.menu_order]
|
|
|
|
* @param {Object} [props.post_parent]
|
|
|
|
* @param {Object} [props.post_status]
|
|
|
|
* @param {Object} [options]
|
|
|
|
*
|
|
|
|
* @returns {wp.media.model.Query} A new Attachments Query collection.
|
2014-01-25 02:39:11 -05:00
|
|
|
*/
|
2012-09-18 17:42:29 -04:00
|
|
|
get: (function(){
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
|
|
|
* @static
|
|
|
|
* @type Array
|
|
|
|
*/
|
2012-09-18 17:42:29 -04:00
|
|
|
var queries = [];
|
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
|
|
|
* @returns {Query}
|
|
|
|
*/
|
2012-09-18 17:42:29 -04:00
|
|
|
return function( props, options ) {
|
|
|
|
var args = {},
|
|
|
|
orderby = Query.orderby,
|
2012-09-18 18:19:05 -04:00
|
|
|
defaults = Query.defaultProps,
|
Media Grid, support `MEDIA_TRASH`:
* Add a setting to `_wpMediaViewsL10n.settings`: `mediaTrash`
* In the attachment edit modal, properly toggle between Trash/Untrash
* In `media.view.Attachment`, add a method for `untrashAttachment`
* When creating the grid toolbar, switch the setting order of subviews so that `media.view.DeleteSelectedButton` can listen to the instance of `media.view.AttachmentFilters.All` to update the text in its UI.
* Add a new filter to `media.view.AttachmentFilters.All`, `trash`, when `settings.mediaTrash` is true
* Allow the cached queries in `Query.get()` to be flushed when race conditions exist and collections need to be refreshed. This is currently only being used when `MEDIA_TRASH` is set, to refresh the filtered/mirrored collections related to `all`, `trash`, and any already queried filter.
* Cleanup the bootstrapping of `media.view.MediaFrame.Manage`
* Allow `wp_ajax_query_attachments()` to return items from the trash when `MEDIA_TRASH` is `true`
* Allow `wp_ajax_save_attachment()` to set `post_status` when `MEDIA_TRASH` is `true`. It allows `wp_delete_post()` to be called, which will trash the attachment instead of deleting when the flag is set.
Props koop for the knowledge sharing and thought partnership.
See #29145.
Built from https://develop.svn.wordpress.org/trunk@29490
git-svn-id: http://core.svn.wordpress.org/trunk@29268 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-08-14 14:31:19 -04:00
|
|
|
query,
|
2014-08-18 00:08:15 -04:00
|
|
|
cache = !! props.cache || _.isUndefined( props.cache );
|
2012-09-18 17:42:29 -04:00
|
|
|
|
2012-09-18 18:19:05 -04:00
|
|
|
// Remove the `query` property. This isn't linked to a query,
|
|
|
|
// this *is* the query.
|
|
|
|
delete props.query;
|
Media Grid, support `MEDIA_TRASH`:
* Add a setting to `_wpMediaViewsL10n.settings`: `mediaTrash`
* In the attachment edit modal, properly toggle between Trash/Untrash
* In `media.view.Attachment`, add a method for `untrashAttachment`
* When creating the grid toolbar, switch the setting order of subviews so that `media.view.DeleteSelectedButton` can listen to the instance of `media.view.AttachmentFilters.All` to update the text in its UI.
* Add a new filter to `media.view.AttachmentFilters.All`, `trash`, when `settings.mediaTrash` is true
* Allow the cached queries in `Query.get()` to be flushed when race conditions exist and collections need to be refreshed. This is currently only being used when `MEDIA_TRASH` is set, to refresh the filtered/mirrored collections related to `all`, `trash`, and any already queried filter.
* Cleanup the bootstrapping of `media.view.MediaFrame.Manage`
* Allow `wp_ajax_query_attachments()` to return items from the trash when `MEDIA_TRASH` is `true`
* Allow `wp_ajax_save_attachment()` to set `post_status` when `MEDIA_TRASH` is `true`. It allows `wp_delete_post()` to be called, which will trash the attachment instead of deleting when the flag is set.
Props koop for the knowledge sharing and thought partnership.
See #29145.
Built from https://develop.svn.wordpress.org/trunk@29490
git-svn-id: http://core.svn.wordpress.org/trunk@29268 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-08-14 14:31:19 -04:00
|
|
|
delete props.cache;
|
2012-09-18 18:19:05 -04:00
|
|
|
|
|
|
|
// Fill default args.
|
|
|
|
_.defaults( props, defaults );
|
|
|
|
|
|
|
|
// Normalize the order.
|
|
|
|
props.order = props.order.toUpperCase();
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( 'DESC' !== props.order && 'ASC' !== props.order ) {
|
2012-09-18 18:19:05 -04:00
|
|
|
props.order = defaults.order.toUpperCase();
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-09-18 18:19:05 -04:00
|
|
|
|
|
|
|
// Ensure we have a valid orderby value.
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! _.contains( orderby.allowed, props.orderby ) ) {
|
2012-09-18 18:19:05 -04:00
|
|
|
props.orderby = defaults.orderby;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-09-18 18:19:05 -04:00
|
|
|
|
2014-09-22 23:38:16 -04:00
|
|
|
_.each( [ 'include', 'exclude' ], function( prop ) {
|
|
|
|
if ( props[ prop ] && ! _.isArray( props[ prop ] ) ) {
|
|
|
|
props[ prop ] = [ props[ prop ] ];
|
|
|
|
}
|
|
|
|
} );
|
|
|
|
|
2012-09-18 18:19:05 -04:00
|
|
|
// Generate the query `args` object.
|
2012-09-18 17:42:29 -04:00
|
|
|
// Correct any differing property names.
|
|
|
|
_.each( props, function( value, prop ) {
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( _.isNull( value ) ) {
|
2012-11-21 05:18:59 -05:00
|
|
|
return;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-11-21 05:18:59 -05:00
|
|
|
|
2012-09-18 17:42:29 -04:00
|
|
|
args[ Query.propmap[ prop ] || prop ] = value;
|
|
|
|
});
|
|
|
|
|
2012-09-18 18:19:05 -04: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 00:54:23 -04:00
|
|
|
|
2012-09-18 18:19:05 -04:00
|
|
|
// `props.orderby` does not always map directly to `args.orderby`.
|
2012-09-18 17:42:29 -04:00
|
|
|
// Substitute exceptions specified in orderby.keymap.
|
2012-09-18 18:19:05 -04: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 00:54:23 -04:00
|
|
|
|
2014-11-05 14:39:22 -05:00
|
|
|
// Search the query cache for a matching query.
|
Media Grid, support `MEDIA_TRASH`:
* Add a setting to `_wpMediaViewsL10n.settings`: `mediaTrash`
* In the attachment edit modal, properly toggle between Trash/Untrash
* In `media.view.Attachment`, add a method for `untrashAttachment`
* When creating the grid toolbar, switch the setting order of subviews so that `media.view.DeleteSelectedButton` can listen to the instance of `media.view.AttachmentFilters.All` to update the text in its UI.
* Add a new filter to `media.view.AttachmentFilters.All`, `trash`, when `settings.mediaTrash` is true
* Allow the cached queries in `Query.get()` to be flushed when race conditions exist and collections need to be refreshed. This is currently only being used when `MEDIA_TRASH` is set, to refresh the filtered/mirrored collections related to `all`, `trash`, and any already queried filter.
* Cleanup the bootstrapping of `media.view.MediaFrame.Manage`
* Allow `wp_ajax_query_attachments()` to return items from the trash when `MEDIA_TRASH` is `true`
* Allow `wp_ajax_save_attachment()` to set `post_status` when `MEDIA_TRASH` is `true`. It allows `wp_delete_post()` to be called, which will trash the attachment instead of deleting when the flag is set.
Props koop for the knowledge sharing and thought partnership.
See #29145.
Built from https://develop.svn.wordpress.org/trunk@29490
git-svn-id: http://core.svn.wordpress.org/trunk@29268 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-08-14 14:31:19 -04:00
|
|
|
if ( cache ) {
|
|
|
|
query = _.find( queries, function( query ) {
|
|
|
|
return _.isEqual( query.args, args );
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
queries = [];
|
|
|
|
}
|
2012-09-18 17:42:29 -04:00
|
|
|
|
|
|
|
// Otherwise, create a new query and add it to the cache.
|
|
|
|
if ( ! query ) {
|
2012-09-18 18:19:05 -04:00
|
|
|
query = new Query( [], _.extend( options || {}, {
|
|
|
|
props: props,
|
|
|
|
args: args
|
|
|
|
} ) );
|
2012-09-18 17:42:29 -04: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 00:54:23 -04:00
|
|
|
}
|
|
|
|
|
2012-09-18 17:42:29 -04: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 00:54:23 -04:00
|
|
|
};
|
|
|
|
}())
|
|
|
|
});
|
|
|
|
|
2012-10-29 11:13:02 -04:00
|
|
|
/**
|
|
|
|
* wp.media.model.Selection
|
|
|
|
*
|
2014-11-05 14:39:22 -05:00
|
|
|
* A selection of attachments.
|
2014-01-20 18:40:11 -05:00
|
|
|
*
|
2014-11-05 14:39:22 -05:00
|
|
|
* @class
|
2014-01-20 18:40:11 -05:00
|
|
|
* @augments wp.media.model.Attachments
|
|
|
|
* @augments Backbone.Collection
|
2012-10-29 11:13:02 -04:00
|
|
|
*/
|
|
|
|
media.model.Selection = Attachments.extend({
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
|
|
|
* Refresh the `single` model whenever the selection changes.
|
|
|
|
* Binds `single` instead of using the context argument to ensure
|
|
|
|
* it receives no parameters.
|
|
|
|
*
|
2014-01-25 03:56:12 -05:00
|
|
|
* @param {Array} [models=[]] Array of models used to populate the collection.
|
|
|
|
* @param {Object} [options={}]
|
2014-01-20 18:40:11 -05:00
|
|
|
*/
|
2012-10-29 11:13:02 -04:00
|
|
|
initialize: function( models, options ) {
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
|
|
|
* call 'initialize' directly on the parent class
|
|
|
|
*/
|
2012-10-29 11:13:02 -04:00
|
|
|
Attachments.prototype.initialize.apply( this, arguments );
|
|
|
|
this.multiple = options && options.multiple;
|
2012-10-30 19:15:16 -04:00
|
|
|
|
2012-11-20 06:10:04 -05:00
|
|
|
this.on( 'add remove reset', _.bind( this.single, this, false ) );
|
2012-10-29 11:13:02 -04:00
|
|
|
},
|
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* If the workflow does not support multi-select, clear out the selection
|
|
|
|
* before adding a new attachment to it.
|
2014-01-25 02:39:11 -05:00
|
|
|
*
|
2014-01-20 18:40:11 -05:00
|
|
|
* @param {Array} models
|
|
|
|
* @param {Object} options
|
|
|
|
* @returns {wp.media.model.Attachment[]}
|
|
|
|
*/
|
2012-10-29 11:13:02 -04:00
|
|
|
add: function( models, options ) {
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! this.multiple ) {
|
2012-12-03 00:32:25 -05:00
|
|
|
this.remove( this.models );
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
|
|
|
/**
|
|
|
|
* call 'add' directly on the parent class
|
|
|
|
*/
|
2012-10-29 11:13:02 -04:00
|
|
|
return Attachments.prototype.add.call( this, models, options );
|
|
|
|
},
|
|
|
|
|
2014-01-20 18:40:11 -05:00
|
|
|
/**
|
2014-11-05 14:39:22 -05:00
|
|
|
* Fired when toggling (clicking on) an attachment in the modal.
|
2014-01-20 18:40:11 -05:00
|
|
|
*
|
2014-01-21 12:37:12 -05:00
|
|
|
* @param {undefined|boolean|wp.media.model.Attachment} model
|
2014-01-20 18:40:11 -05:00
|
|
|
*
|
|
|
|
* @fires wp.media.model.Selection#selection:single
|
|
|
|
* @fires wp.media.model.Selection#selection:unsingle
|
|
|
|
*
|
|
|
|
* @returns {Backbone.Model}
|
|
|
|
*/
|
2012-10-30 19:15:16 -04:00
|
|
|
single: function( model ) {
|
|
|
|
var previous = this._single;
|
|
|
|
|
|
|
|
// If a `model` is provided, use it as the single model.
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( model ) {
|
2012-10-30 19:15:16 -04:00
|
|
|
this._single = model;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-10-30 19:15:16 -04:00
|
|
|
// If the single model isn't in the selection, remove it.
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( this._single && ! this.get( this._single.cid ) ) {
|
2012-10-30 19:15:16 -04:00
|
|
|
delete this._single;
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-10-30 19:15:16 -04:00
|
|
|
|
|
|
|
this._single = this._single || this.last();
|
|
|
|
|
|
|
|
// If single has changed, fire an event.
|
|
|
|
if ( this._single !== previous ) {
|
2012-12-04 17:19:08 -05:00
|
|
|
if ( previous ) {
|
2012-10-30 19:15:16 -04:00
|
|
|
previous.trigger( 'selection:unsingle', previous, this );
|
2012-12-04 17:19:08 -05:00
|
|
|
|
|
|
|
// If the model was already removed, trigger the collection
|
|
|
|
// event manually.
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( ! this.get( previous.cid ) ) {
|
2012-12-04 17:19:08 -05:00
|
|
|
this.trigger( 'selection:unsingle', previous, this );
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-12-04 17:19:08 -05:00
|
|
|
}
|
2014-01-20 18:40:11 -05:00
|
|
|
if ( this._single ) {
|
2012-11-22 01:30:25 -05:00
|
|
|
this._single.trigger( 'selection:single', this._single, this );
|
2014-01-20 18:40:11 -05:00
|
|
|
}
|
2012-10-30 19:15:16 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
// Return the single model, or the last model as a fallback.
|
|
|
|
return this._single;
|
2012-10-29 11:13:02 -04:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2012-11-27 11:17:53 -05:00
|
|
|
// Clean up. Prevents mobile browsers caching
|
|
|
|
$(window).on('unload', function(){
|
|
|
|
window.wp = null;
|
|
|
|
});
|
|
|
|
|
2014-01-28 16:17:12 -05:00
|
|
|
}(jQuery));
|