wp/wp-includes/js/media-editor.js
author ymh <ymh.work@gmail.com>
Wed, 06 Nov 2013 03:21:17 +0000
changeset 0 d970ebf37754
child 5 5e2f62d02dcd
permissions -rw-r--r--
first import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
// WordPress, TinyMCE, and Media
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
// -----------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
(function($){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
	// Stores the editors' `wp.media.controller.Frame` instances.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
	var workflows = {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
	wp.media.string = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
		// Joins the `props` and `attachment` objects,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
		// outputting the proper object format based on the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
		// attachment's type.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
		props: function( props, attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
			var link, linkUrl, size, sizes, fallbacks,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
				defaultProps = wp.media.view.settings.defaultProps;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
			// Final fallbacks run after all processing has been completed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
			fallbacks = function( props ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
				// Generate alt fallbacks and strip tags.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
				if ( 'image' === props.type && ! props.alt ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
					props.alt = props.caption || props.title || '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
					props.alt = props.alt.replace( /<\/?[^>]+>/g, '' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
					props.alt = props.alt.replace( /[\r\n]+/g, ' ' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
				return props;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
			props = props ? _.clone( props ) : {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
			if ( attachment && attachment.type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
				props.type = attachment.type;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
			if ( 'image' === props.type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
				props = _.defaults( props || {}, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
					align:   defaultProps.align || getUserSetting( 'align', 'none' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
					size:    defaultProps.size  || getUserSetting( 'imgsize', 'medium' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
					url:     '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
					classes: []
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
			// All attachment-specific settings follow.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
			if ( ! attachment )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
				return fallbacks( props );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
			props.title = props.title || attachment.title;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
			link = props.link || defaultProps.link || getUserSetting( 'urlbutton', 'file' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
			if ( 'file' === link || 'embed' === link )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
				linkUrl = attachment.url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
			else if ( 'post' === link )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
				linkUrl = attachment.link;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
			else if ( 'custom' === link )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
				linkUrl = props.linkUrl;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
			props.linkUrl = linkUrl || '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
			// Format properties for images.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
			if ( 'image' === attachment.type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
				props.classes.push( 'wp-image-' + attachment.id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
				sizes = attachment.sizes;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
				size = sizes && sizes[ props.size ] ? sizes[ props.size ] : attachment;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
				_.extend( props, _.pick( attachment, 'align', 'caption', 'alt' ), {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
					width:     size.width,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
					height:    size.height,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
					src:       size.url,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
					captionId: 'attachment_' + attachment.id
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
			} else if ( 'video' === attachment.type || 'audio' === attachment.type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
				_.extend( props, _.pick( attachment, 'title', 'type', 'icon', 'mime' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
			// Format properties for non-images.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
				props.title = props.title || attachment.filename;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
				props.rel = props.rel || 'attachment wp-att-' + attachment.id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
			return fallbacks( props );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
		link: function( props, attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
			var options;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
			props = wp.media.string.props( props, attachment );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
			options = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
				tag:     'a',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
				content: props.title,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
				attrs:   {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
					href: props.linkUrl
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
			if ( props.rel )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
				options.attrs.rel = props.rel;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
			return wp.html.string( options );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
		audio: function( props, attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
			return wp.media.string._audioVideo( 'audio', props, attachment );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
		video: function( props, attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
			return wp.media.string._audioVideo( 'video', props, attachment );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
		_audioVideo: function( type, props, attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
			var shortcode, html, extension;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
			props = wp.media.string.props( props, attachment );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
			if ( props.link !== 'embed' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
				return wp.media.string.link( props );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
			shortcode = {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
			if ( 'video' === type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
				if ( attachment.width )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
					shortcode.width = attachment.width;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
				if ( attachment.height )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
					shortcode.height = attachment.height;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
			extension = attachment.filename.split('.').pop();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
			if ( _.contains( wp.media.view.settings.embedExts, extension ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
				shortcode[extension] = attachment.url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
				// Render unsupported audio and video files as links.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
				return wp.media.string.link( props );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
			html = wp.shortcode.string({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
				tag:     type,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
				attrs:   shortcode
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
			return html;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
		image: function( props, attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
			var img = {},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
				options, classes, shortcode, html;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
			props = wp.media.string.props( props, attachment );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
			classes = props.classes || [];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
			img.src = typeof attachment !== 'undefined' ? attachment.url : props.url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
			_.extend( img, _.pick( props, 'width', 'height', 'alt' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
			// Only assign the align class to the image if we're not printing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
			// a caption, since the alignment is sent to the shortcode.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
			if ( props.align && ! props.caption )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
				classes.push( 'align' + props.align );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
			if ( props.size )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
				classes.push( 'size-' + props.size );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
			img['class'] = _.compact( classes ).join(' ');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
			// Generate `img` tag options.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
			options = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
				tag:    'img',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
				attrs:  img,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
				single: true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
			// Generate the `a` element options, if they exist.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
			if ( props.linkUrl ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
				options = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
					tag:   'a',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
					attrs: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
						href: props.linkUrl
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
					},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
					content: options
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
				};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
			html = wp.html.string( options );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
			// Generate the caption shortcode.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
			if ( props.caption ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
				shortcode = {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
				if ( img.width )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
					shortcode.width = img.width;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
				if ( props.captionId )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
					shortcode.id = props.captionId;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
				if ( props.align )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
					shortcode.align = 'align' + props.align;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
				html = wp.shortcode.string({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
					tag:     'caption',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
					attrs:   shortcode,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
					content: html + ' ' + props.caption
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
			return html;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
	};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
	wp.media.gallery = (function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
		var galleries = {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
		return {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
			defaults: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
				order:      'ASC',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
				id:         wp.media.view.settings.post.id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
				itemtag:    'dl',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
				icontag:    'dt',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
				captiontag: 'dd',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
				columns:    '3',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
				link:       'post',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
				size:       'thumbnail',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
				orderby:    'menu_order ID'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
			},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
			attachments: function( shortcode ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
				var shortcodeString = shortcode.string(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
					result = galleries[ shortcodeString ],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
					attrs, args, query, others;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
				delete galleries[ shortcodeString ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
				if ( result )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
					return result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
				// Fill the default shortcode attributes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
				attrs = _.defaults( shortcode.attrs.named, wp.media.gallery.defaults );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
				args  = _.pick( attrs, 'orderby', 'order' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
				args.type    = 'image';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
				args.perPage = -1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
				// Mark the `orderby` override attribute.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
				if( undefined !== attrs.orderby )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
					attrs._orderByField = attrs.orderby;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
				if ( 'rand' === attrs.orderby )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
					attrs._orderbyRandom = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
				// Map the `orderby` attribute to the corresponding model property.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
				if ( ! attrs.orderby || /^menu_order(?: ID)?$/i.test( attrs.orderby ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
					args.orderby = 'menuOrder';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
				// Map the `ids` param to the correct query args.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
				if ( attrs.ids ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
					args.post__in = attrs.ids.split(',');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
					args.orderby  = 'post__in';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
				} else if ( attrs.include ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
					args.post__in = attrs.include.split(',');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
				if ( attrs.exclude )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
					args.post__not_in = attrs.exclude.split(',');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
				if ( ! args.post__in )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
					args.uploadedTo = attrs.id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
				// Collect the attributes that were not included in `args`.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
				others = _.omit( attrs, 'id', 'ids', 'include', 'exclude', 'orderby', 'order' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
				query = wp.media.query( args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
				query.gallery = new Backbone.Model( others );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
				return query;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
			},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
			shortcode: function( attachments ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
				var props = attachments.props.toJSON(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
					attrs = _.pick( props, 'orderby', 'order' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
					shortcode, clone;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
				if ( attachments.gallery )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
					_.extend( attrs, attachments.gallery.toJSON() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
				// Convert all gallery shortcodes to use the `ids` property.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
				// Ignore `post__in` and `post__not_in`; the attachments in
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
				// the collection will already reflect those properties.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
				attrs.ids = attachments.pluck('id');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
				// Copy the `uploadedTo` post ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
				if ( props.uploadedTo )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
					attrs.id = props.uploadedTo;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
				// Check if the gallery is randomly ordered.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
				delete attrs.orderby;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
				if ( attrs._orderbyRandom )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
					attrs.orderby = 'rand';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
				else if ( attrs._orderByField && attrs._orderByField != 'rand' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
					attrs.orderby = attrs._orderByField;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
				delete attrs._orderbyRandom;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
				delete attrs._orderByField;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
				// If the `ids` attribute is set and `orderby` attribute
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
				// is the default value, clear it for cleaner output.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
				if ( attrs.ids && 'post__in' === attrs.orderby )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
					delete attrs.orderby;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
				// Remove default attributes from the shortcode.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
				_.each( wp.media.gallery.defaults, function( value, key ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
					if ( value === attrs[ key ] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
						delete attrs[ key ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
				shortcode = new wp.shortcode({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
					tag:    'gallery',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
					attrs:  attrs,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
					type:   'single'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
				// Use a cloned version of the gallery.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
				clone = new wp.media.model.Attachments( attachments.models, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
					props: props
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
				clone.gallery = attachments.gallery;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
				galleries[ shortcode.string() ] = clone;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
				return shortcode;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
			},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
			edit: function( content ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
				var shortcode = wp.shortcode.next( 'gallery', content ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
					defaultPostId = wp.media.gallery.defaults.id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
					attachments, selection;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
				// Bail if we didn't match the shortcode or all of the content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
				if ( ! shortcode || shortcode.content !== content )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
				// Ignore the rest of the match object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
				shortcode = shortcode.shortcode;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
				if ( _.isUndefined( shortcode.get('id') ) && ! _.isUndefined( defaultPostId ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
					shortcode.set( 'id', defaultPostId );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
				attachments = wp.media.gallery.attachments( shortcode );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
				selection = new wp.media.model.Selection( attachments.models, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
					props:    attachments.props.toJSON(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
					multiple: true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
				selection.gallery = attachments.gallery;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
				// Fetch the query's attachments, and then break ties from the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
				// query to allow for sorting.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
				selection.more().done( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
					// Break ties with the query.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
					selection.props.set({ query: false });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
					selection.unmirror();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
					selection.props.unset('orderby');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
				// Destroy the previous gallery frame.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
				if ( this.frame )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
					this.frame.dispose();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
				// Store the current gallery frame.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
				this.frame = wp.media({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
					frame:     'post',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
					state:     'gallery-edit',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
					title:     wp.media.view.l10n.editGalleryTitle,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
					editing:   true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
					multiple:  true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
					selection: selection
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
				}).open();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
				return this.frame;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
		};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
	}());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
	wp.media.featuredImage = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
		get: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
			return wp.media.view.settings.post.featuredImageId;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
		set: function( id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
			var settings = wp.media.view.settings;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
			settings.post.featuredImageId = id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
			wp.media.post( 'set-post-thumbnail', {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
				json:         true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
				post_id:      settings.post.id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
				thumbnail_id: settings.post.featuredImageId,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
				_wpnonce:     settings.post.nonce
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
			}).done( function( html ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
				$( '.inside', '#postimagediv' ).html( html );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
		frame: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
			if ( this._frame )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
				return this._frame;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
			this._frame = wp.media({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
				state: 'featured-image',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
				states: [ new wp.media.controller.FeaturedImage() ]
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
			this._frame.on( 'toolbar:create:featured-image', function( toolbar ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
				this.createSelectToolbar( toolbar, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
					text: wp.media.view.l10n.setFeaturedImage
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
			}, this._frame );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
			this._frame.state('featured-image').on( 'select', this.select );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
			return this._frame;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
		select: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
			var settings = wp.media.view.settings,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
				selection = this.get('selection').single();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
			if ( ! settings.post.featuredImageId )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
			wp.media.featuredImage.set( selection ? selection.id : -1 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
		init: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
			// Open the content media manager to the 'featured image' tab when
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
			// the post thumbnail is clicked.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
			$('#postimagediv').on( 'click', '#set-post-thumbnail', function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
				event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
				// Stop propagation to prevent thickbox from activating.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
				event.stopPropagation();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
				wp.media.featuredImage.frame().open();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
			// Update the featured image id when the 'remove' link is clicked.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
			}).on( 'click', '#remove-post-thumbnail', function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
				wp.media.view.settings.post.featuredImageId = -1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
	};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
	$( wp.media.featuredImage.init );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
	wp.media.editor = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
		insert: function( h ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
			var mce = typeof(tinymce) != 'undefined',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
				qt = typeof(QTags) != 'undefined',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
				wpActiveEditor = window.wpActiveEditor,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
				ed;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
			// Delegate to the global `send_to_editor` if it exists.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
			// This attempts to play nice with any themes/plugins that have
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
			// overridden the insert functionality.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
			if ( window.send_to_editor )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
				return window.send_to_editor.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
			if ( ! wpActiveEditor ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
				if ( mce && tinymce.activeEditor ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
					ed = tinymce.activeEditor;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
					wpActiveEditor = window.wpActiveEditor = ed.id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
				} else if ( !qt ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
					return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
			} else if ( mce ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
				if ( tinymce.activeEditor && (tinymce.activeEditor.id == 'mce_fullscreen' || tinymce.activeEditor.id == 'wp_mce_fullscreen') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
					ed = tinymce.activeEditor;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
					ed = tinymce.get(wpActiveEditor);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
			if ( ed && !ed.isHidden() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
				// restore caret position on IE
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
				if ( tinymce.isIE && ed.windowManager.insertimagebookmark )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
					ed.selection.moveToBookmark(ed.windowManager.insertimagebookmark);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
				if ( h.indexOf('[caption') !== -1 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
					if ( ed.wpSetImgCaption )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
						h = ed.wpSetImgCaption(h);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
				} else if ( h.indexOf('[gallery') !== -1 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
					if ( ed.plugins.wpgallery )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
						h = ed.plugins.wpgallery._do_gallery(h);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
				} else if ( h.indexOf('[embed') === 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
					if ( ed.plugins.wordpress )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
						h = ed.plugins.wordpress._setEmbed(h);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
				ed.execCommand('mceInsertContent', false, h);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
			} else if ( qt ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
				QTags.insertContent(h);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
				document.getElementById(wpActiveEditor).value += h;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
			// If the old thickbox remove function exists, call it in case
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
			// a theme/plugin overloaded it.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
			if ( window.tb_remove )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
				try { window.tb_remove(); } catch( e ) {}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
		add: function( id, options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
			var workflow = this.get( id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
			if ( workflow ) // only add once: if exists return existing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
				return workflow;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
			workflow = workflows[ id ] = wp.media( _.defaults( options || {}, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
				frame:    'post',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
				state:    'insert',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
				title:    wp.media.view.l10n.addMedia,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
				multiple: true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
			} ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
			workflow.on( 'insert', function( selection ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
				var state = workflow.state();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
				selection = selection || state.get('selection');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
				if ( ! selection )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
				$.when.apply( $, selection.map( function( attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
					var display = state.display( attachment ).toJSON();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
					return this.send.attachment( display, attachment.toJSON() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
				}, this ) ).done( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
					wp.media.editor.insert( _.toArray( arguments ).join("\n\n") );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
			}, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
			workflow.state('gallery-edit').on( 'update', function( selection ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
				this.insert( wp.media.gallery.shortcode( selection ).string() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
			}, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
			workflow.state('embed').on( 'select', function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
				var state = workflow.state(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
					type = state.get('type'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
					embed = state.props.toJSON();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
				embed.url = embed.url || '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
				if ( 'link' === type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
					_.defaults( embed, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
						title:   embed.url,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
						linkUrl: embed.url
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
					this.send.link( embed ).done( function( resp ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
						wp.media.editor.insert( resp );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
				} else if ( 'image' === type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
					_.defaults( embed, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
						title:   embed.url,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
						linkUrl: '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
						align:   'none',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
						link:    'none'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
					if ( 'none' === embed.link )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
						embed.linkUrl = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
					else if ( 'file' === embed.link )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
						embed.linkUrl = embed.url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
					this.insert( wp.media.string.image( embed ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
			}, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
			workflow.state('featured-image').on( 'select', wp.media.featuredImage.select );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
			workflow.setState( workflow.options.state );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
			return workflow;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
		id: function( id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
			if ( id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
				return id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
			// If an empty `id` is provided, default to `wpActiveEditor`.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
			id = wpActiveEditor;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
			// If that doesn't work, fall back to `tinymce.activeEditor.id`.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
			if ( ! id && typeof tinymce !== 'undefined' && tinymce.activeEditor )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
				id = tinymce.activeEditor.id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
			// Last but not least, fall back to the empty string.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
			id = id || '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
			return id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
		get: function( id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
			id = this.id( id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
			return workflows[ id ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
		remove: function( id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
			id = this.id( id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
			delete workflows[ id ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
		send: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
			attachment: function( props, attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
				var caption = attachment.caption,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
					options, html;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
				// If captions are disabled, clear the caption.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
				if ( ! wp.media.view.settings.captions )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
					delete attachment.caption;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
				props = wp.media.string.props( props, attachment );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
				options = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
					id:           attachment.id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
					post_content: attachment.description,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
					post_excerpt: caption
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
				};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
				if ( props.linkUrl )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
					options.url = props.linkUrl;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
				if ( 'image' === attachment.type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
					html = wp.media.string.image( props );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
					_.each({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
						align: 'align',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
						size:  'image-size',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
						alt:   'image_alt'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
					}, function( option, prop ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
						if ( props[ prop ] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
							options[ option ] = props[ prop ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
				} else if ( 'video' === attachment.type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
					html = wp.media.string.video( props, attachment );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
				} else if ( 'audio' === attachment.type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
					html = wp.media.string.audio( props, attachment );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
				} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
					html = wp.media.string.link( props );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
					options.post_title = props.title;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
				return wp.media.post( 'send-attachment-to-editor', {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
					nonce:      wp.media.view.settings.nonce.sendToEditor,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
					attachment: options,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
					html:       html,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
					post_id:    wp.media.view.settings.post.id
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
			},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
			link: function( embed ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
				return wp.media.post( 'send-link-to-editor', {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
					nonce:   wp.media.view.settings.nonce.sendToEditor,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
					src:     embed.linkUrl,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
					title:   embed.title,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
					html:    wp.media.string.link( embed ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
					post_id: wp.media.view.settings.post.id
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
		open: function( id, options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
			var workflow, editor;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
			options = options || {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
			id = this.id( id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
			// Save a bookmark of the caret position in IE.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
			if ( typeof tinymce !== 'undefined' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
				editor = tinymce.get( id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
				if ( tinymce.isIE && editor && ! editor.isHidden() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
					editor.focus();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
					editor.windowManager.insertimagebookmark = editor.selection.getBookmark();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
			workflow = this.get( id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
			// Redo workflow if state has changed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
			if ( ! workflow || ( workflow.options && options.state !== workflow.options.state ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
				workflow = this.add( id, options );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
			return workflow.open();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
		init: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
			$(document.body).on( 'click', '.insert-media', function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
				var $this = $(this),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
					editor = $this.data('editor'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
					options = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
						frame:    'post',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
						state:    'insert',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
						title:    wp.media.view.l10n.addMedia,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
						multiple: true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
					};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
				event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
				// Remove focus from the `.insert-media` button.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
				// Prevents Opera from showing the outline of the button
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
				// above the modal.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
				//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
				// See: http://core.trac.wordpress.org/ticket/22445
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
				$this.blur();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
				if ( $this.hasClass( 'gallery' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
					options.state = 'gallery';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
					options.title = wp.media.view.l10n.createGalleryTitle;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
				wp.media.editor.open( editor, options );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
	};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
	_.bindAll( wp.media.editor, 'open' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
	$( wp.media.editor.init );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
}(jQuery));