wp/wp-includes/js/media-views.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
(function($){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
	var media       = wp.media,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
		Attachment  = media.model.Attachment,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
		Attachments = media.model.Attachments,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
		Query       = media.model.Query,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
		l10n;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
	// Link any localized strings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
	l10n = media.view.l10n = typeof _wpMediaViewsL10n === 'undefined' ? {} : _wpMediaViewsL10n;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
	// Link any settings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
	media.view.settings = l10n.settings || {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
	delete l10n.settings;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
	// Copy the `post` setting over to the model settings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
	media.model.settings.post = media.view.settings.post;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
	// Check if the browser supports CSS 3.0 transitions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
	$.support.transition = (function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
		var style = document.documentElement.style,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
			transitions = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
				WebkitTransition: 'webkitTransitionEnd',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
				MozTransition:    'transitionend',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
				OTransition:      'oTransitionEnd otransitionend',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
				transition:       'transitionend'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
			}, transition;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
		transition = _.find( _.keys( transitions ), function( transition ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
			return ! _.isUndefined( style[ transition ] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
		return transition && {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
			end: transitions[ transition ]
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
		};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
	}());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
	// Makes it easier to bind events using transitions.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
	media.transition = function( selector, sensitivity ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
		var deferred = $.Deferred();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
		sensitivity = sensitivity || 2000;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
		if ( $.support.transition ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
			if ( ! (selector instanceof $) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
				selector = $( selector );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
			// Resolve the deferred when the first element finishes animating.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
			selector.first().one( $.support.transition.end, deferred.resolve );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
			// Just in case the event doesn't trigger, fire a callback.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
			_.delay( deferred.resolve, sensitivity );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
		// Otherwise, execute on the spot.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
			deferred.resolve();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
		return deferred.promise();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
	};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
	 * ========================================================================
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
	 * CONTROLLERS
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
	 * ========================================================================
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
	 * wp.media.controller.Region
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
	media.controller.Region = function( options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
		_.extend( this, _.pick( options || {}, 'id', 'view', 'selector' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
	};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
	// Use Backbone's self-propagating `extend` inheritance method.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
	media.controller.Region.extend = Backbone.Model.extend;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
	_.extend( media.controller.Region.prototype, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
		mode: function( mode ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
			if ( ! mode )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
				return this._mode;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
			// Bail if we're trying to change to the current mode.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
			if ( mode === this._mode )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
				return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
			this.trigger('deactivate');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
			this._mode = mode;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
			this.render( mode );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
			this.trigger('activate');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
			return this;
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
		render: function( mode ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
			// If no mode is provided, just re-render the current mode.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
			// If the provided mode isn't active, perform a full switch.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
			if ( mode && mode !== this._mode )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
				return this.mode( mode );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
			var set = { view: null },
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
				view;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
			this.trigger( 'create', set );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
			view = set.view;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
			this.trigger( 'render', view );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
			if ( view )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
				this.set( view );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
		get: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
			return this.view.views.first( this.selector );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
		set: function( views, options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
			if ( options )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
				options.add = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
			return this.view.views.set( this.selector, views, options );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
		trigger: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
			var base;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
			if ( ! this._mode )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
			var args = _.toArray( arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
			base = this.id + ':' + event;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
			// Trigger `region:action:mode` event.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
			args[0] = base + ':' + this._mode;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
			this.view.trigger.apply( this.view, args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
			// Trigger `region:action` event.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
			args[0] = base;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
			this.view.trigger.apply( this.view, args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
			return this;
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
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
	 * wp.media.controller.StateMachine
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
	media.controller.StateMachine = function( states ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
		this.states = new Backbone.Collection( states );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
	};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
	// Use Backbone's self-propagating `extend` inheritance method.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
	media.controller.StateMachine.extend = Backbone.Model.extend;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
	// Add events to the `StateMachine`.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
	_.extend( media.controller.StateMachine.prototype, Backbone.Events, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
		// Fetch a state.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
		//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
		// If no `id` is provided, returns the active state.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
		//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
		// Implicitly creates states.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
		state: function( id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
			// Ensure that the `states` collection exists so the `StateMachine`
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
			// can be used as a mixin.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
			this.states = this.states || new Backbone.Collection();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
			// Default to the active state.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
			id = id || this._state;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
			if ( id && ! this.states.get( id ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
				this.states.add({ id: id });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
			return this.states.get( id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
		// Sets the active state.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
		setState: function( id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
			var previous = this.state();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
			// Bail if we're trying to select the current state, if we haven't
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
			// created the `states` collection, or are trying to select a state
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
			// that does not exist.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
			if ( ( previous && id === previous.id ) || ! this.states || ! this.states.get( id ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
				return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
			if ( previous ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
				previous.trigger('deactivate');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
				this._lastState = previous.id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
			this._state = id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
			this.state().trigger('activate');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
		// Returns the previous active state.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
		//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
		// Call the `state()` method with no parameters to retrieve the current
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
		// active state.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
		lastState: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
			if ( this._lastState )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
				return this.state( this._lastState );
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
	// Map methods from the `states` collection to the `StateMachine` itself.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
	_.each([ 'on', 'off', 'trigger' ], function( method ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
		media.controller.StateMachine.prototype[ method ] = function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
			// Ensure that the `states` collection exists so the `StateMachine`
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
			// can be used as a mixin.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
			this.states = this.states || new Backbone.Collection();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
			// Forward the method to the `states` collection.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
			this.states[ method ].apply( this.states, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
		};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
	// wp.media.controller.State
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
	// ---------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
	media.controller.State = Backbone.Model.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
		constructor: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
			this.on( 'activate', this._preActivate, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
			this.on( 'activate', this.activate, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
			this.on( 'activate', this._postActivate, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
			this.on( 'deactivate', this._deactivate, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
			this.on( 'deactivate', this.deactivate, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
			this.on( 'reset', this.reset, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
			this.on( 'ready', this._ready, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
			this.on( 'ready', this.ready, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
			Backbone.Model.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
			this.on( 'change:menu', this._updateMenu, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
		ready: function() {},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
		activate: function() {},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
		deactivate: function() {},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
		reset: function() {},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
		_ready: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
			this._updateMenu();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
		_preActivate: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
			this.active = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
		_postActivate: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
			this.on( 'change:menu', this._menu, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
			this.on( 'change:titleMode', this._title, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
			this.on( 'change:content', this._content, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
			this.on( 'change:toolbar', this._toolbar, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
			this.frame.on( 'title:render:default', this._renderTitle, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
			this._title();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
			this._menu();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
			this._toolbar();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
			this._content();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
			this._router();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
		_deactivate: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
			this.active = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
			this.frame.off( 'title:render:default', this._renderTitle, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
			this.off( 'change:menu', this._menu, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
			this.off( 'change:titleMode', this._title, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
			this.off( 'change:content', this._content, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
			this.off( 'change:toolbar', this._toolbar, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
		_title: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
			this.frame.title.render( this.get('titleMode') || 'default' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
		_renderTitle: function( view ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
			view.$el.text( this.get('title') || '' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
		_router: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
			var router = this.frame.router,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
				mode = this.get('router'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
				view;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
			this.frame.$el.toggleClass( 'hide-router', ! mode );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
			if ( ! mode )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
			this.frame.router.render( mode );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
			view = router.get();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
			if ( view && view.select )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
				view.select( this.frame.content.mode() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
		_menu: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
			var menu = this.frame.menu,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
				mode = this.get('menu'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
				view;
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 ( ! mode )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
			menu.mode( mode );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
			view = menu.get();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
			if ( view && view.select )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
				view.select( this.id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
		_updateMenu: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
			var previous = this.previous('menu'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
				menu = this.get('menu');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
			if ( previous )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
				this.frame.off( 'menu:render:' + previous, this._renderMenu, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
			if ( menu )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
				this.frame.on( 'menu:render:' + menu, this._renderMenu, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
		_renderMenu: function( view ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
			var menuItem = this.get('menuItem'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
				title = this.get('title'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
				priority = this.get('priority');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
			if ( ! menuItem && title ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
				menuItem = { text: title };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
				if ( priority )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
					menuItem.priority = priority;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
			if ( ! menuItem )
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
			view.set( this.id, menuItem );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
	_.each(['toolbar','content'], function( region ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
		media.controller.State.prototype[ '_' + region ] = function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
			var mode = this.get( region );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
			if ( mode )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
				this.frame[ region ].render( mode );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
		};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
	// wp.media.controller.Library
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
	// ---------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
	media.controller.Library = media.controller.State.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
		defaults: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
			id:         'library',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
			multiple:   false, // false, 'add', 'reset'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
			describe:   false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
			toolbar:    'select',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
			sidebar:    'settings',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
			content:    'upload',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
			router:     'browse',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
			menu:       'default',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
			searchable: true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
			filterable: false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
			sortable:   true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
			title:      l10n.mediaLibraryTitle,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
			// Uses a user setting to override the content mode.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
			contentUserSetting: true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
			// Sync the selection from the last state when 'multiple' matches.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
			syncSelection: true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
			var selection = this.get('selection'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
				props;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
			// If a library isn't provided, query all media items.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
			if ( ! this.get('library') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
				this.set( 'library', media.query() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
			// If a selection instance isn't provided, create one.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
			if ( ! (selection instanceof media.model.Selection) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
				props = selection;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
				if ( ! props ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
					props = this.get('library').props.toJSON();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
					props = _.omit( props, 'orderby', 'query' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
				// If the `selection` attribute is set to an object,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
				// it will use those values as the selection instance's
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
				// `props` model. Otherwise, it will copy the library's
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
				// `props` model.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
				this.set( 'selection', new media.model.Selection( null, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
					multiple: this.get('multiple'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
					props: props
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
			if ( ! this.get('edge') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
				this.set( 'edge', 120 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
			if ( ! this.get('gutter') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
				this.set( 'gutter', 8 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
			this.resetDisplays();
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
		activate: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
			this.syncSelection();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
			wp.Uploader.queue.on( 'add', this.uploading, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
			this.get('selection').on( 'add remove reset', this.refreshContent, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
			if ( this.get('contentUserSetting') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
				this.frame.on( 'content:activate', this.saveContentMode, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
				this.set( 'content', getUserSetting( 'libraryContent', this.get('content') ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
		deactivate: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
			this.recordSelection();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
			this.frame.off( 'content:activate', this.saveContentMode, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
			// Unbind all event handlers that use this state as the context
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
			// from the selection.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
			this.get('selection').off( null, null, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
			wp.Uploader.queue.off( null, null, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
		reset: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
			this.get('selection').reset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
			this.resetDisplays();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
			this.refreshContent();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
		resetDisplays: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
			var defaultProps = media.view.settings.defaultProps;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
			this._displays = [];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
			this._defaultDisplaySettings = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
				align: defaultProps.align || getUserSetting( 'align', 'none' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
				size:  defaultProps.size  || getUserSetting( 'imgsize', 'medium' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
				link:  defaultProps.link  || getUserSetting( 'urlbutton', 'file' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
		display: function( attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
			var displays = this._displays;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
			if ( ! displays[ attachment.cid ] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
				displays[ attachment.cid ] = new Backbone.Model( this.defaultDisplaySettings( attachment ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
			return displays[ attachment.cid ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
		defaultDisplaySettings: function( attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
			settings = this._defaultDisplaySettings;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
			if ( settings.canEmbed = this.canEmbed( attachment ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
				settings.link = 'embed';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
			return settings;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
		canEmbed: function( attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
			// If uploading, we know the filename but not the mime type.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
			if ( ! attachment.get('uploading') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
				var type = attachment.get('type');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
				if ( type !== 'audio' && type !== 'video' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
					return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
			return _.contains( media.view.settings.embedExts, attachment.get('filename').split('.').pop() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
		syncSelection: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
			var selection = this.get('selection'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
				manager = this.frame._selection;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
			if ( ! this.get('syncSelection') || ! manager || ! selection )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
			// If the selection supports multiple items, validate the stored
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
			// attachments based on the new selection's conditions. Record
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
			// the attachments that are not included; we'll maintain a
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
			// reference to those. Other attachments are considered in flux.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
			if ( selection.multiple ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
				selection.reset( [], { silent: true });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
				selection.validateAll( manager.attachments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
				manager.difference = _.difference( manager.attachments.models, selection.models );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
			// Sync the selection's single item with the master.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
			selection.single( manager.single );
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
		recordSelection: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
			var selection = this.get('selection'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
				manager = this.frame._selection,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
				filtered;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
			if ( ! this.get('syncSelection') || ! manager || ! selection )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
			// Record the currently active attachments, which is a combination
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
			// of the selection's attachments and the set of selected
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
			// attachments that this specific selection considered invalid.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
			// Reset the difference and record the single attachment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
			if ( selection.multiple ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
				manager.attachments.reset( selection.toArray().concat( manager.difference ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
				manager.difference = [];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
				manager.attachments.add( selection.toArray() );
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
			manager.single = selection._single;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
		refreshContent: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
			var selection = this.get('selection'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
				frame = this.frame,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
				router = frame.router.get(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
				mode = frame.content.mode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
			// If the state is active, no items are selected, and the current
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
			// content mode is not an option in the state's router (provided
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
			// the state has a router), reset the content mode to the default.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
			if ( this.active && ! selection.length && router && ! router.get( mode ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
				this.frame.content.render( this.get('content') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
		uploading: function( attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
			var content = this.frame.content;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
			// If the uploader was selected, navigate to the browser.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
			if ( 'upload' === content.mode() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
				this.frame.content.mode('browse');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
			// Automatically select any uploading attachments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
			//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
			// Selections that don't support multiple attachments automatically
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
			// limit themselves to one attachment (in this case, the last
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
			// attachment in the upload queue).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
			this.get('selection').add( attachment );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
		saveContentMode: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
			// Only track the browse router on library states.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
			if ( 'browse' !== this.get('router') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
			var mode = this.frame.content.mode(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
				view = this.frame.router.get();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
			if ( view && view.get( mode ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
				setUserSetting( 'libraryContent', mode );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
	// wp.media.controller.GalleryEdit
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
	// -------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
	media.controller.GalleryEdit = media.controller.Library.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
		defaults: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
			id:         'gallery-edit',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
			multiple:   false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
			describe:   true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
			edge:       199,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
			editing:    false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
			sortable:   true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
			searchable: false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
			toolbar:    'gallery-edit',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
			content:    'browse',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
			title:      l10n.editGalleryTitle,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
			priority:   60,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
			dragInfo:   true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
			// Don't sync the selection, as the Edit Gallery library
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
			// *is* the selection.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
			syncSelection: false
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
			// If we haven't been provided a `library`, create a `Selection`.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
			if ( ! this.get('library') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
				this.set( 'library', new media.model.Selection() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
			// The single `Attachment` view to be used in the `Attachments` view.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
			if ( ! this.get('AttachmentView') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
				this.set( 'AttachmentView', media.view.Attachment.EditLibrary );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
			media.controller.Library.prototype.initialize.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
		activate: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
			var library = this.get('library');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
			// Limit the library to images only.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
			library.props.set( 'type', 'image' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
			// Watch for uploaded attachments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
			this.get('library').observe( wp.Uploader.queue );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
			this.frame.on( 'content:render:browse', this.gallerySettings, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
			media.controller.Library.prototype.activate.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
		deactivate: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
			// Stop watching for uploaded attachments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
			this.get('library').unobserve( wp.Uploader.queue );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
			this.frame.off( 'content:render:browse', this.gallerySettings, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
			media.controller.Library.prototype.deactivate.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
		gallerySettings: function( browser ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
			var library = this.get('library');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
			if ( ! library || ! browser )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
			library.gallery = library.gallery || new Backbone.Model();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
			browser.sidebar.set({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
				gallery: new media.view.Settings.Gallery({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
					controller: this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
					model:      library.gallery,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
					priority:   40
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
				})
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
			browser.toolbar.set( 'reverse', {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
				text:     l10n.reverseOrder,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
				priority: 80,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
				click: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
					library.reset( library.toArray().reverse() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
				}
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
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
	// wp.media.controller.GalleryAdd
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
	// ---------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
	media.controller.GalleryAdd = media.controller.Library.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
		defaults: _.defaults({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
			id:           'gallery-library',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
			filterable:   'uploaded',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
			multiple:     'add',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
			menu:         'gallery',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
			toolbar:      'gallery-add',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
			title:        l10n.addToGalleryTitle,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
			priority:     100,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
			// Don't sync the selection, as the Edit Gallery library
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
			// *is* the selection.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
			syncSelection: false
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
		}, media.controller.Library.prototype.defaults ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
			// If we haven't been provided a `library`, create a `Selection`.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
			if ( ! this.get('library') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
				this.set( 'library', media.query({ type: 'image' }) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
			media.controller.Library.prototype.initialize.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
		activate: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
			var library = this.get('library'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
				edit    = this.frame.state('gallery-edit').get('library');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
			if ( this.editLibrary && this.editLibrary !== edit )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
				library.unobserve( this.editLibrary );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
			// Accepts attachments that exist in the original library and
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
			// that do not exist in gallery's library.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
			library.validator = function( attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
				return !! this.mirroring.get( attachment.cid ) && ! edit.get( attachment.cid ) && media.model.Selection.prototype.validator.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
			// Reset the library to ensure that all attachments are re-added
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
			// to the collection. Do so silently, as calling `observe` will
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
			// trigger the `reset` event.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
			library.reset( library.mirroring.models, { silent: true });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
			library.observe( edit );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
			this.editLibrary = edit;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
			media.controller.Library.prototype.activate.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
	// wp.media.controller.FeaturedImage
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
	// ---------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
	media.controller.FeaturedImage = media.controller.Library.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
		defaults: _.defaults({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
			id:         'featured-image',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
			filterable: 'uploaded',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
			multiple:   false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
			toolbar:    'featured-image',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
			title:      l10n.setFeaturedImageTitle,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
			priority:   60,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
			syncSelection: false
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
		}, media.controller.Library.prototype.defaults ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
			var library, comparator;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
			// If we haven't been provided a `library`, create a `Selection`.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
			if ( ! this.get('library') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
				this.set( 'library', media.query({ type: 'image' }) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
			media.controller.Library.prototype.initialize.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
			library    = this.get('library');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
			comparator = library.comparator;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
			// Overload the library's comparator to push items that are not in
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
			// the mirrored query to the front of the aggregate collection.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
			library.comparator = function( a, b ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
				var aInQuery = !! this.mirroring.get( a.cid ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
					bInQuery = !! this.mirroring.get( b.cid );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
				if ( ! aInQuery && bInQuery )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
					return -1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
				else if ( aInQuery && ! bInQuery )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
					return 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
					return comparator.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
			// Add all items in the selection to the library, so any featured
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
			// images that are not initially loaded still appear.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
			library.observe( this.get('selection') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
		activate: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
			this.updateSelection();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
			this.frame.on( 'open', this.updateSelection, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
			media.controller.Library.prototype.activate.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
		deactivate: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
			this.frame.off( 'open', this.updateSelection, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
			media.controller.Library.prototype.deactivate.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
		updateSelection: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
			var selection = this.get('selection'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
				id = media.view.settings.post.featuredImageId,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
				attachment;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
			if ( '' !== id && -1 !== id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
				attachment = Attachment.get( id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
				attachment.fetch();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
			selection.reset( attachment ? [ attachment ] : [] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
	// wp.media.controller.Embed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
	// -------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
	media.controller.Embed = media.controller.State.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
		defaults: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
			id:      'embed',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
			url:     '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
			menu:    'default',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
			content: 'embed',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
			toolbar: 'main-embed',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   771
			type:    'link',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
			title:    l10n.insertFromUrlTitle,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
			priority: 120
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
		// The amount of time used when debouncing the scan.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
		sensitivity: 200,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
			this.debouncedScan = _.debounce( _.bind( this.scan, this ), this.sensitivity );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
			this.props = new Backbone.Model({ url: '' });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
			this.props.on( 'change:url', this.debouncedScan, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
			this.props.on( 'change:url', this.refresh, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
			this.on( 'scan', this.scanImage, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
		scan: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
			var scanners,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
				embed = this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
				attributes = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
					type: 'link',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
					scanners: []
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
				};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
			// Scan is triggered with the list of `attributes` to set on the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
			// state, useful for the 'type' attribute and 'scanners' attribute,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
			// an array of promise objects for asynchronous scan operations.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
			if ( this.props.get('url') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
				this.trigger( 'scan', attributes );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
			if ( attributes.scanners.length ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
				scanners = attributes.scanners = $.when.apply( $, attributes.scanners );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
				scanners.always( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
					if ( embed.get('scanners') === scanners )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
						embed.set( 'loading', false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
				attributes.scanners = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
			attributes.loading = !! attributes.scanners;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
			this.set( attributes );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
		scanImage: function( attributes ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
			var frame = this.frame,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
				state = this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
				url = this.props.get('url'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
				image = new Image(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   821
				deferred = $.Deferred();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
			attributes.scanners.push( deferred.promise() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
			// Try to load the image and find its width/height.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
			image.onload = function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
				deferred.resolve();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   829
				if ( state !== frame.state() || url !== state.props.get('url') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
				state.set({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
					type: 'image'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
				state.props.set({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
					width:  image.width,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
					height: image.height
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
			image.onerror = deferred.reject;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
			image.src = url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
		refresh: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
			this.frame.toolbar.get().refresh();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850
		reset: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
			this.props.clear().set({ url: '' });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
			if ( this.active )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
				this.refresh();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
	 * ========================================================================
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
	 * VIEWS
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
	 * ========================================================================
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
	// wp.media.View
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
	// -------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
	//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
	// The base view class.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
	//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
	// Undelegating events, removing events from the model, and
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
	// removing events from the controller mirror the code for
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
	// `Backbone.View.dispose` in Backbone 0.9.8 development.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
	//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
	// This behavior has since been removed, and should not be used
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
	// outside of the media manager.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
	media.View = wp.Backbone.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
		constructor: function( options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
			if ( options && options.controller )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
				this.controller = options.controller;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
			wp.Backbone.View.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
		dispose: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
			// Undelegating events, removing events from the model, and
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   885
			// removing events from the controller mirror the code for
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
			// `Backbone.View.dispose` in Backbone 0.9.8 development.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
			this.undelegateEvents();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
			if ( this.model && this.model.off )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
				this.model.off( null, null, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
			if ( this.collection && this.collection.off )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
				this.collection.off( null, null, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
			// Unbind controller events.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
			if ( this.controller && this.controller.off )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   897
				this.controller.off( null, null, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   898
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
		remove: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
			this.dispose();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
			return wp.Backbone.View.prototype.remove.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   905
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
	 * wp.media.view.Frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
	media.view.Frame = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
			this._createRegions();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
			this._createStates();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   916
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
		_createRegions: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
			// Clone the regions array.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
			this.regions = this.regions ? this.regions.slice() : [];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   920
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   921
			// Initialize regions.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
			_.each( this.regions, function( region ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
				this[ region ] = new media.controller.Region({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   924
					view:     this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   925
					id:       region,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
					selector: '.media-frame-' + region
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   927
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   928
			}, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   929
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   930
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   931
		_createStates: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   932
			// Create the default `states` collection.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   933
			this.states = new Backbone.Collection( null, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   934
				model: media.controller.State
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   935
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   936
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
			// Ensure states have a reference to the frame.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   938
			this.states.on( 'add', function( model ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
				model.frame = this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
				model.trigger('ready');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   941
			}, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   942
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   943
			if ( this.options.states )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   944
				this.states.add( this.options.states );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   945
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   946
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   947
		reset: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
			this.states.invoke( 'trigger', 'reset' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   950
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   952
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   953
	// Make the `Frame` a `StateMachine`.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   954
	_.extend( media.view.Frame.prototype, media.controller.StateMachine.prototype );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   955
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   956
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
	 * wp.media.view.MediaFrame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   958
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
	media.view.MediaFrame = media.view.Frame.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
		className: 'media-frame',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
		template:  media.template('media-frame'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
		regions:   ['menu','title','content','toolbar','router'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   965
			media.view.Frame.prototype.initialize.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   967
			_.defaults( this.options, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
				title:    '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
				modal:    true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
				uploader: true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   971
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   972
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
			// Ensure core UI is enabled.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
			this.$el.addClass('wp-core-ui');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
			// Initialize modal container view.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
			if ( this.options.modal ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
				this.modal = new media.view.Modal({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   979
					controller: this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   980
					title:      this.options.title
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   981
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   982
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   983
				this.modal.content( this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   984
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   985
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   986
			// Force the uploader off if the upload limit has been exceeded or
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   987
			// if the browser isn't supported.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   988
			if ( wp.Uploader.limitExceeded || ! wp.Uploader.browser.supported )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   989
				this.options.uploader = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   990
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   991
			// Initialize window-wide uploader.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   992
			if ( this.options.uploader ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   993
				this.uploader = new media.view.UploaderWindow({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   994
					controller: this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   995
					uploader: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   996
						dropzone:  this.modal ? this.modal.$el : this.$el,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   997
						container: this.$el
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   998
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   999
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1000
				this.views.set( '.media-frame-uploader', this.uploader );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1001
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1002
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1003
			this.on( 'attach', _.bind( this.views.ready, this.views ), this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1004
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1005
			// Bind default title creation.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1006
			this.on( 'title:create:default', this.createTitle, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1007
			this.title.mode('default');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1008
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1009
			// Bind default menu.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1010
			this.on( 'menu:create:default', this.createMenu, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1011
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1012
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1013
		render: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1014
			// Activate the default state if no active state exists.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1015
			if ( ! this.state() && this.options.state )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1016
				this.setState( this.options.state );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1017
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1018
			return media.view.Frame.prototype.render.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1019
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1020
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1021
		createTitle: function( title ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1022
			title.view = new media.View({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1023
				controller: this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1024
				tagName: 'h1'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1025
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1026
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1027
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1028
		createMenu: function( menu ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1029
			menu.view = new media.view.Menu({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1030
				controller: this
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1031
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1032
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1033
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1034
		createToolbar: function( toolbar ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1035
			toolbar.view = new media.view.Toolbar({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1036
				controller: this
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1037
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1038
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1039
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1040
		createRouter: function( router ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1041
			router.view = new media.view.Router({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1042
				controller: this
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1043
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1044
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1045
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1046
		createIframeStates: function( options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1047
			var settings = media.view.settings,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1048
				tabs = settings.tabs,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1049
				tabUrl = settings.tabUrl,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1050
				$postId;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1051
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1052
			if ( ! tabs || ! tabUrl )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1053
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1054
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1055
			// Add the post ID to the tab URL if it exists.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1056
			$postId = $('#post_ID');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1057
			if ( $postId.length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1058
				tabUrl += '&post_id=' + $postId.val();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1059
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1060
			// Generate the tab states.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1061
			_.each( tabs, function( title, id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1062
				var frame = this.state( 'iframe:' + id ).set( _.defaults({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1063
					tab:     id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1064
					src:     tabUrl + '&tab=' + id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1065
					title:   title,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1066
					content: 'iframe',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1067
					menu:    'default'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1068
				}, options ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1069
			}, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1070
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1071
			this.on( 'content:create:iframe', this.iframeContent, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1072
			this.on( 'menu:render:default', this.iframeMenu, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1073
			this.on( 'open', this.hijackThickbox, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1074
			this.on( 'close', this.restoreThickbox, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1075
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1076
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1077
		iframeContent: function( content ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1078
			this.$el.addClass('hide-toolbar');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1079
			content.view = new media.view.Iframe({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1080
				controller: this
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1081
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1082
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1083
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1084
		iframeMenu: function( view ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1085
			var views = {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1086
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1087
			if ( ! view )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1088
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1089
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1090
			_.each( media.view.settings.tabs, function( title, id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1091
				views[ 'iframe:' + id ] = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1092
					text: this.state( 'iframe:' + id ).get('title'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1093
					priority: 200
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1094
				};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1095
			}, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1096
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1097
			view.set( views );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1098
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1099
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1100
		hijackThickbox: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1101
			var frame = this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1102
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1103
			if ( ! window.tb_remove || this._tb_remove )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1104
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1105
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1106
			this._tb_remove = window.tb_remove;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1107
			window.tb_remove = function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1108
				frame.close();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1109
				frame.reset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1110
				frame.setState( frame.options.state );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1111
				frame._tb_remove.call( window );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1112
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1113
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1114
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1115
		restoreThickbox: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1116
			if ( ! this._tb_remove )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1117
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1118
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1119
			window.tb_remove = this._tb_remove;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1120
			delete this._tb_remove;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1121
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1122
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1123
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1124
	// Map some of the modal's methods to the frame.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1125
	_.each(['open','close','attach','detach','escape'], function( method ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1126
		media.view.MediaFrame.prototype[ method ] = function( view ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1127
			if ( this.modal )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1128
				this.modal[ method ].apply( this.modal, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1129
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1130
		};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1131
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1132
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1133
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1134
	 * wp.media.view.MediaFrame.Select
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1135
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1136
	media.view.MediaFrame.Select = media.view.MediaFrame.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1137
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1138
			media.view.MediaFrame.prototype.initialize.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1139
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1140
			_.defaults( this.options, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1141
				selection: [],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1142
				library:   {},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1143
				multiple:  false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1144
				state:    'library'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1145
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1146
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1147
			this.createSelection();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1148
			this.createStates();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1149
			this.bindHandlers();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1150
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1151
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1152
		createSelection: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1153
			var controller = this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1154
				selection = this.options.selection;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1155
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1156
			if ( ! (selection instanceof media.model.Selection) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1157
				this.options.selection = new media.model.Selection( selection, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1158
					multiple: this.options.multiple
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1159
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1160
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1161
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1162
			this._selection = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1163
				attachments: new Attachments(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1164
				difference: []
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1165
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1166
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1167
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1168
		createStates: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1169
			var options = this.options;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1170
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1171
			if ( this.options.states )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1172
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1173
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1174
			// Add the default states.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1175
			this.states.add([
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1176
				// Main states.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1177
				new media.controller.Library({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1178
					library:   media.query( options.library ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1179
					multiple:  options.multiple,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1180
					title:     options.title,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1181
					priority:  20
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1182
				})
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1183
			]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1184
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1185
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1186
		bindHandlers: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1187
			this.on( 'router:create:browse', this.createRouter, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1188
			this.on( 'router:render:browse', this.browseRouter, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1189
			this.on( 'content:create:browse', this.browseContent, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1190
			this.on( 'content:render:upload', this.uploadContent, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1191
			this.on( 'toolbar:create:select', this.createSelectToolbar, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1192
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1193
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1194
		// Routers
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1195
		browseRouter: function( view ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1196
			view.set({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1197
				upload: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1198
					text:     l10n.uploadFilesTitle,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1199
					priority: 20
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1200
				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1201
				browse: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1202
					text:     l10n.mediaLibraryTitle,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1203
					priority: 40
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1204
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1205
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1206
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1207
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1208
		// Content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1209
		browseContent: function( content ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1210
			var state = this.state();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1211
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1212
			this.$el.removeClass('hide-toolbar');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1213
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1214
			// Browse our library of attachments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1215
			content.view = new media.view.AttachmentsBrowser({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1216
				controller: this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1217
				collection: state.get('library'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1218
				selection:  state.get('selection'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1219
				model:      state,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1220
				sortable:   state.get('sortable'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1221
				search:     state.get('searchable'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1222
				filters:    state.get('filterable'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1223
				display:    state.get('displaySettings'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1224
				dragInfo:   state.get('dragInfo'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1225
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1226
				AttachmentView: state.get('AttachmentView')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1227
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1228
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1229
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1230
		uploadContent: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1231
			this.$el.removeClass('hide-toolbar');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1232
			this.content.set( new media.view.UploaderInline({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1233
				controller: this
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1234
			}) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1235
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1236
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1237
		// Toolbars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1238
		createSelectToolbar: function( toolbar, options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1239
			options = options || this.options.button || {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1240
			options.controller = this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1241
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1242
			toolbar.view = new media.view.Toolbar.Select( options );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1243
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1244
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1245
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1246
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1247
	 * wp.media.view.MediaFrame.Post
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1248
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1249
	media.view.MediaFrame.Post = media.view.MediaFrame.Select.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1250
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1251
			_.defaults( this.options, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1252
				multiple:  true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1253
				editing:   false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1254
				state:    'insert'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1255
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1256
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1257
			media.view.MediaFrame.Select.prototype.initialize.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1258
			this.createIframeStates();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1259
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1260
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1261
		createStates: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1262
			var options = this.options;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1263
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1264
			// Add the default states.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1265
			this.states.add([
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1266
				// Main states.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1267
				new media.controller.Library({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1268
					id:         'insert',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1269
					title:      l10n.insertMediaTitle,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1270
					priority:   20,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1271
					toolbar:    'main-insert',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1272
					filterable: 'all',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1273
					library:    media.query( options.library ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1274
					multiple:   options.multiple ? 'reset' : false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1275
					editable:   true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1276
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1277
					// If the user isn't allowed to edit fields,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1278
					// can they still edit it locally?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1279
					allowLocalEdits: true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1280
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1281
					// Show the attachment display settings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1282
					displaySettings: true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1283
					// Update user settings when users adjust the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1284
					// attachment display settings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1285
					displayUserSettings: true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1286
				}),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1287
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1288
				new media.controller.Library({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1289
					id:         'gallery',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1290
					title:      l10n.createGalleryTitle,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1291
					priority:   40,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1292
					toolbar:    'main-gallery',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1293
					filterable: 'uploaded',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1294
					multiple:   'add',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1295
					editable:   false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1296
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1297
					library:  media.query( _.defaults({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1298
						type: 'image'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1299
					}, options.library ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1300
				}),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1301
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1302
				// Embed states.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1303
				new media.controller.Embed(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1304
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1305
				// Gallery states.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1306
				new media.controller.GalleryEdit({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1307
					library: options.selection,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1308
					editing: options.editing,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1309
					menu:    'gallery'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1310
				}),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1311
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1312
				new media.controller.GalleryAdd()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1313
			]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1314
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1315
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1316
			if ( media.view.settings.post.featuredImageId ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1317
				this.states.add( new media.controller.FeaturedImage() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1318
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1319
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1320
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1321
		bindHandlers: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1322
			media.view.MediaFrame.Select.prototype.bindHandlers.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1323
			this.on( 'menu:create:gallery', this.createMenu, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1324
			this.on( 'toolbar:create:main-insert', this.createToolbar, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1325
			this.on( 'toolbar:create:main-gallery', this.createToolbar, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1326
			this.on( 'toolbar:create:featured-image', this.featuredImageToolbar, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1327
			this.on( 'toolbar:create:main-embed', this.mainEmbedToolbar, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1328
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1329
			var handlers = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1330
					menu: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1331
						'default': 'mainMenu',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1332
						'gallery': 'galleryMenu'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1333
					},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1334
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1335
					content: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1336
						'embed':          'embedContent',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1337
						'edit-selection': 'editSelectionContent'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1338
					},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1339
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1340
					toolbar: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1341
						'main-insert':      'mainInsertToolbar',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1342
						'main-gallery':     'mainGalleryToolbar',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1343
						'gallery-edit':     'galleryEditToolbar',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1344
						'gallery-add':      'galleryAddToolbar'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1345
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1346
				};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1347
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1348
			_.each( handlers, function( regionHandlers, region ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1349
				_.each( regionHandlers, function( callback, handler ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1350
					this.on( region + ':render:' + handler, this[ callback ], this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1351
				}, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1352
			}, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1353
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1354
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1355
		// Menus
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1356
		mainMenu: function( view ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1357
			view.set({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1358
				'library-separator': new media.View({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1359
					className: 'separator',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1360
					priority: 100
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1361
				})
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1362
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1363
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1364
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1365
		galleryMenu: function( view ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1366
			var lastState = this.lastState(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1367
				previous = lastState && lastState.id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1368
				frame = this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1369
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1370
			view.set({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1371
				cancel: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1372
					text:     l10n.cancelGalleryTitle,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1373
					priority: 20,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1374
					click:    function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1375
						if ( previous )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1376
							frame.setState( previous );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1377
						else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1378
							frame.close();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1379
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1380
				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1381
				separateCancel: new media.View({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1382
					className: 'separator',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1383
					priority: 40
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1384
				})
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1385
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1386
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1387
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1388
		// Content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1389
		embedContent: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1390
			var view = new media.view.Embed({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1391
				controller: this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1392
				model:      this.state()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1393
			}).render();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1394
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1395
			this.content.set( view );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1396
			view.url.focus();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1397
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1398
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1399
		editSelectionContent: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1400
			var state = this.state(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1401
				selection = state.get('selection'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1402
				view;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1403
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1404
			view = new media.view.AttachmentsBrowser({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1405
				controller: this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1406
				collection: selection,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1407
				selection:  selection,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1408
				model:      state,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1409
				sortable:   true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1410
				search:     false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1411
				dragInfo:   true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1412
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1413
				AttachmentView: media.view.Attachment.EditSelection
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1414
			}).render();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1415
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1416
			view.toolbar.set( 'backToLibrary', {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1417
				text:     l10n.returnToLibrary,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1418
				priority: -100,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1419
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1420
				click: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1421
					this.controller.content.mode('browse');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1422
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1423
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1424
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1425
			// Browse our library of attachments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1426
			this.content.set( view );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1427
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1428
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1429
		// Toolbars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1430
		selectionStatusToolbar: function( view ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1431
			var editable = this.state().get('editable');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1432
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1433
			view.set( 'selection', new media.view.Selection({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1434
				controller: this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1435
				collection: this.state().get('selection'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1436
				priority:   -40,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1437
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1438
				// If the selection is editable, pass the callback to
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1439
				// switch the content mode.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1440
				editable: editable && function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1441
					this.controller.content.mode('edit-selection');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1442
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1443
			}).render() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1444
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1445
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1446
		mainInsertToolbar: function( view ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1447
			var controller = this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1448
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1449
			this.selectionStatusToolbar( view );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1450
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1451
			view.set( 'insert', {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1452
				style:    'primary',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1453
				priority: 80,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1454
				text:     l10n.insertIntoPost,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1455
				requires: { selection: true },
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1456
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1457
				click: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1458
					var state = controller.state(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1459
						selection = state.get('selection');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1460
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1461
					controller.close();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1462
					state.trigger( 'insert', selection ).reset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1463
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1464
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1465
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1466
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1467
		mainGalleryToolbar: function( view ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1468
			var controller = this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1469
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1470
			this.selectionStatusToolbar( view );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1471
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1472
			view.set( 'gallery', {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1473
				style:    'primary',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1474
				text:     l10n.createNewGallery,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1475
				priority: 60,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1476
				requires: { selection: true },
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1477
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1478
				click: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1479
					var selection = controller.state().get('selection'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1480
						edit = controller.state('gallery-edit'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1481
						models = selection.where({ type: 'image' });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1482
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1483
					edit.set( 'library', new media.model.Selection( models, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1484
						props:    selection.props.toJSON(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1485
						multiple: true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1486
					}) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1487
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1488
					this.controller.setState('gallery-edit');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1489
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1490
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1491
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1492
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1493
		featuredImageToolbar: function( toolbar ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1494
			this.createSelectToolbar( toolbar, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1495
				text:  l10n.setFeaturedImage,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1496
				state: this.options.state
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1497
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1498
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1499
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1500
		mainEmbedToolbar: function( toolbar ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1501
			toolbar.view = new media.view.Toolbar.Embed({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1502
				controller: this
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1503
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1504
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1505
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1506
		galleryEditToolbar: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1507
			var editing = this.state().get('editing');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1508
			this.toolbar.set( new media.view.Toolbar({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1509
				controller: this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1510
				items: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1511
					insert: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1512
						style:    'primary',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1513
						text:     editing ? l10n.updateGallery : l10n.insertGallery,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1514
						priority: 80,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1515
						requires: { library: true },
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1516
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1517
						click: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1518
							var controller = this.controller,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1519
								state = controller.state();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1520
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1521
							controller.close();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1522
							state.trigger( 'update', state.get('library') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1523
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1524
							// Restore and reset the default state.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1525
							controller.setState( controller.options.state );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1526
							controller.reset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1527
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1528
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1529
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1530
			}) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1531
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1532
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1533
		galleryAddToolbar: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1534
			this.toolbar.set( new media.view.Toolbar({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1535
				controller: this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1536
				items: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1537
					insert: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1538
						style:    'primary',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1539
						text:     l10n.addToGallery,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1540
						priority: 80,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1541
						requires: { selection: true },
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1542
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1543
						click: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1544
							var controller = this.controller,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1545
								state = controller.state(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1546
								edit = controller.state('gallery-edit');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1547
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1548
							edit.get('library').add( state.get('selection').models );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1549
							state.trigger('reset');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1550
							controller.setState('gallery-edit');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1551
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1552
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1553
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1554
			}) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1555
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1556
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1557
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1558
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1559
	 * wp.media.view.Modal
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1560
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1561
	media.view.Modal = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1562
		tagName:  'div',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1563
		template: media.template('media-modal'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1564
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1565
		attributes: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1566
			tabindex: 0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1567
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1568
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1569
		events: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1570
			'click .media-modal-backdrop, .media-modal-close': 'escapeHandler',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1571
			'keydown': 'keydown'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1572
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1573
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1574
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1575
			_.defaults( this.options, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1576
				container: document.body,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1577
				title:     '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1578
				propagate: true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1579
				freeze:    true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1580
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1581
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1582
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1583
		prepare: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1584
			return {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1585
				title: this.options.title
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1586
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1587
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1588
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1589
		attach: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1590
			if ( this.views.attached )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1591
				return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1592
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1593
			if ( ! this.views.rendered )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1594
				this.render();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1595
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1596
			this.$el.appendTo( this.options.container );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1597
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1598
			// Manually mark the view as attached and trigger ready.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1599
			this.views.attached = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1600
			this.views.ready();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1601
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1602
			return this.propagate('attach');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1603
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1604
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1605
		detach: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1606
			if ( this.$el.is(':visible') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1607
				this.close();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1608
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1609
			this.$el.detach();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1610
			this.views.attached = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1611
			return this.propagate('detach');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1612
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1613
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1614
		open: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1615
			var $el = this.$el,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1616
				options = this.options;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1617
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1618
			if ( $el.is(':visible') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1619
				return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1620
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1621
			if ( ! this.views.attached )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1622
				this.attach();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1623
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1624
			// If the `freeze` option is set, record the window's scroll position.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1625
			if ( options.freeze ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1626
				this._freeze = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1627
					scrollTop: $( window ).scrollTop()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1628
				};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1629
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1630
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1631
			$el.show().focus();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1632
			return this.propagate('open');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1633
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1634
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1635
		close: function( options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1636
			var freeze = this._freeze;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1637
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1638
			if ( ! this.views.attached || ! this.$el.is(':visible') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1639
				return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1640
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1641
			this.$el.hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1642
			this.propagate('close');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1643
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1644
			// If the `freeze` option is set, restore the container's scroll position.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1645
			if ( freeze ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1646
				$( window ).scrollTop( freeze.scrollTop );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1647
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1648
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1649
			if ( options && options.escape )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1650
				this.propagate('escape');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1651
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1652
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1653
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1654
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1655
		escape: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1656
			return this.close({ escape: true });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1657
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1658
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1659
		escapeHandler: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1660
			event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1661
			this.escape();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1662
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1663
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1664
		content: function( content ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1665
			this.views.set( '.media-modal-content', content );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1666
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1667
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1668
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1669
		// Triggers a modal event and if the `propagate` option is set,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1670
		// forwards events to the modal's controller.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1671
		propagate: function( id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1672
			this.trigger( id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1673
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1674
			if ( this.options.propagate )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1675
				this.controller.trigger( id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1676
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1677
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1678
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1679
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1680
		keydown: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1681
			// Close the modal when escape is pressed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1682
			if ( 27 === event.which ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1683
				event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1684
				this.escape();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1685
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1686
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1687
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1688
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1689
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1690
	// wp.media.view.FocusManager
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1691
	// ----------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1692
	media.view.FocusManager = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1693
		events: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1694
			keydown: 'recordTab',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1695
			focusin: 'updateIndex'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1696
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1697
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1698
		focus: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1699
			if ( _.isUndefined( this.index ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1700
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1701
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1702
			// Update our collection of `$tabbables`.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1703
			this.$tabbables = this.$(':tabbable');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1704
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1705
			// If tab is saved, focus it.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1706
			this.$tabbables.eq( this.index ).focus();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1707
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1708
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1709
		recordTab: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1710
			// Look for the tab key.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1711
			if ( 9 !== event.keyCode )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1712
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1713
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1714
			// First try to update the index.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1715
			if ( _.isUndefined( this.index ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1716
				this.updateIndex( event );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1717
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1718
			// If we still don't have an index, bail.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1719
			if ( _.isUndefined( this.index ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1720
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1721
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1722
			var index = this.index + ( event.shiftKey ? -1 : 1 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1723
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1724
			if ( index >= 0 && index < this.$tabbables.length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1725
				this.index = index;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1726
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1727
				delete this.index;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1728
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1729
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1730
		updateIndex: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1731
			this.$tabbables = this.$(':tabbable');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1732
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1733
			var index = this.$tabbables.index( event.target );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1734
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1735
			if ( -1 === index )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1736
				delete this.index;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1737
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1738
				this.index = index;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1739
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1740
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1741
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1742
	// wp.media.view.UploaderWindow
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1743
	// ----------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1744
	media.view.UploaderWindow = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1745
		tagName:   'div',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1746
		className: 'uploader-window',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1747
		template:  media.template('uploader-window'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1748
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1749
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1750
			var uploader;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1751
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1752
			this.$browser = $('<a href="#" class="browser" />').hide().appendTo('body');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1753
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1754
			uploader = this.options.uploader = _.defaults( this.options.uploader || {}, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1755
				dropzone:  this.$el,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1756
				browser:   this.$browser,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1757
				params:    {}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1758
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1759
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1760
			// Ensure the dropzone is a jQuery collection.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1761
			if ( uploader.dropzone && ! (uploader.dropzone instanceof $) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1762
				uploader.dropzone = $( uploader.dropzone );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1763
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1764
			this.controller.on( 'activate', this.refresh, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1765
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1766
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1767
		refresh: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1768
			if ( this.uploader )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1769
				this.uploader.refresh();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1770
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1771
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1772
		ready: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1773
			var postId = media.view.settings.post.id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1774
				dropzone;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1775
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1776
			// If the uploader already exists, bail.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1777
			if ( this.uploader )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1778
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1779
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1780
			if ( postId )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1781
				this.options.uploader.params.post_id = postId;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1782
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1783
			this.uploader = new wp.Uploader( this.options.uploader );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1784
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1785
			dropzone = this.uploader.dropzone;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1786
			dropzone.on( 'dropzone:enter', _.bind( this.show, this ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1787
			dropzone.on( 'dropzone:leave', _.bind( this.hide, this ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1788
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1789
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1790
		show: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1791
			var $el = this.$el.show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1792
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1793
			// Ensure that the animation is triggered by waiting until
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1794
			// the transparent element is painted into the DOM.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1795
			_.defer( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1796
				$el.css({ opacity: 1 });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1797
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1798
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1799
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1800
		hide: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1801
			var $el = this.$el.css({ opacity: 0 });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1802
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1803
			media.transition( $el ).done( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1804
				// Transition end events are subject to race conditions.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1805
				// Make sure that the value is set as intended.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1806
				if ( '0' === $el.css('opacity') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1807
					$el.hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1808
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1809
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1810
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1811
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1812
	media.view.UploaderInline = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1813
		tagName:   'div',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1814
		className: 'uploader-inline',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1815
		template:  media.template('uploader-inline'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1816
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1817
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1818
			_.defaults( this.options, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1819
				message: '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1820
				status:  true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1821
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1822
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1823
			if ( ! this.options.$browser && this.controller.uploader )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1824
				this.options.$browser = this.controller.uploader.$browser;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1825
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1826
			if ( _.isUndefined( this.options.postId ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1827
				this.options.postId = media.view.settings.post.id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1828
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1829
			if ( this.options.status ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1830
				this.views.set( '.upload-inline-status', new media.view.UploaderStatus({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1831
					controller: this.controller
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1832
				}) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1833
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1834
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1835
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1836
		dispose: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1837
			if ( this.disposing )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1838
				return media.View.prototype.dispose.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1839
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1840
			// Run remove on `dispose`, so we can be sure to refresh the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1841
			// uploader with a view-less DOM. Track whether we're disposing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1842
			// so we don't trigger an infinite loop.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1843
			this.disposing = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1844
			return this.remove();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1845
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1846
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1847
		remove: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1848
			var result = media.View.prototype.remove.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1849
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1850
			_.defer( _.bind( this.refresh, this ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1851
			return result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1852
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1853
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1854
		refresh: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1855
			var uploader = this.controller.uploader;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1856
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1857
			if ( uploader )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1858
				uploader.refresh();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1859
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1860
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1861
		ready: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1862
			var $browser = this.options.$browser,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1863
				$placeholder;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1864
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1865
			if ( this.controller.uploader ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1866
				$placeholder = this.$('.browser');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1867
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1868
				// Check if we've already replaced the placeholder.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1869
				if ( $placeholder[0] === $browser[0] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1870
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1871
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1872
				$browser.detach().text( $placeholder.text() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1873
				$browser[0].className = $placeholder[0].className;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1874
				$placeholder.replaceWith( $browser.show() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1875
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1876
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1877
			this.refresh();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1878
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1879
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1880
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1881
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1882
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1883
	 * wp.media.view.UploaderStatus
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1884
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1885
	media.view.UploaderStatus = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1886
		className: 'media-uploader-status',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1887
		template:  media.template('uploader-status'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1888
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1889
		events: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1890
			'click .upload-dismiss-errors': 'dismiss'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1891
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1892
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1893
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1894
			this.queue = wp.Uploader.queue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1895
			this.queue.on( 'add remove reset', this.visibility, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1896
			this.queue.on( 'add remove reset change:percent', this.progress, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1897
			this.queue.on( 'add remove reset change:uploading', this.info, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1898
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1899
			this.errors = wp.Uploader.errors;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1900
			this.errors.reset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1901
			this.errors.on( 'add remove reset', this.visibility, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1902
			this.errors.on( 'add', this.error, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1903
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1904
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1905
		dispose: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1906
			wp.Uploader.queue.off( null, null, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1907
			media.View.prototype.dispose.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1908
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1909
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1910
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1911
		visibility: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1912
			this.$el.toggleClass( 'uploading', !! this.queue.length );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1913
			this.$el.toggleClass( 'errors', !! this.errors.length );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1914
			this.$el.toggle( !! this.queue.length || !! this.errors.length );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1915
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1916
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1917
		ready: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1918
			_.each({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1919
				'$bar':      '.media-progress-bar div',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1920
				'$index':    '.upload-index',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1921
				'$total':    '.upload-total',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1922
				'$filename': '.upload-filename'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1923
			}, function( selector, key ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1924
				this[ key ] = this.$( selector );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1925
			}, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1926
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1927
			this.visibility();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1928
			this.progress();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1929
			this.info();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1930
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1931
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1932
		progress: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1933
			var queue = this.queue,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1934
				$bar = this.$bar,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1935
				memo = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1936
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1937
			if ( ! $bar || ! queue.length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1938
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1939
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1940
			$bar.width( ( queue.reduce( function( memo, attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1941
				if ( ! attachment.get('uploading') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1942
					return memo + 100;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1943
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1944
				var percent = attachment.get('percent');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1945
				return memo + ( _.isNumber( percent ) ? percent : 100 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1946
			}, 0 ) / queue.length ) + '%' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1947
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1948
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1949
		info: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1950
			var queue = this.queue,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1951
				index = 0, active;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1952
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1953
			if ( ! queue.length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1954
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1955
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1956
			active = this.queue.find( function( attachment, i ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1957
				index = i;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1958
				return attachment.get('uploading');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1959
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1960
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1961
			this.$index.text( index + 1 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1962
			this.$total.text( queue.length );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1963
			this.$filename.html( active ? this.filename( active.get('filename') ) : '' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1964
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1965
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1966
		filename: function( filename ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1967
			return media.truncate( _.escape( filename ), 24 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1968
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1969
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1970
		error: function( error ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1971
			this.views.add( '.upload-errors', new media.view.UploaderStatusError({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1972
				filename: this.filename( error.get('file').name ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1973
				message:  error.get('message')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1974
			}), { at: 0 });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1975
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1976
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1977
		dismiss: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1978
			var errors = this.views.get('.upload-errors');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1979
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1980
			event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1981
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1982
			if ( errors )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1983
				_.invoke( errors, 'remove' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1984
			wp.Uploader.errors.reset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1985
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1986
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1987
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1988
	media.view.UploaderStatusError = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1989
		className: 'upload-error',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1990
		template:  media.template('uploader-status-error')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1991
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1992
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1993
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1994
	 * wp.media.view.Toolbar
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1995
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1996
	media.view.Toolbar = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1997
		tagName:   'div',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1998
		className: 'media-toolbar',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1999
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2000
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2001
			var state = this.controller.state(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2002
				selection = this.selection = state.get('selection'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2003
				library = this.library = state.get('library');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2004
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2005
			this._views = {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2006
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2007
			// The toolbar is composed of two `PriorityList` views.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2008
			this.primary   = new media.view.PriorityList();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2009
			this.secondary = new media.view.PriorityList();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2010
			this.primary.$el.addClass('media-toolbar-primary');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2011
			this.secondary.$el.addClass('media-toolbar-secondary');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2012
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2013
			this.views.set([ this.secondary, this.primary ]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2014
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2015
			if ( this.options.items )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2016
				this.set( this.options.items, { silent: true });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2017
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2018
			if ( ! this.options.silent )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2019
				this.render();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2020
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2021
			if ( selection )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2022
				selection.on( 'add remove reset', this.refresh, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2023
			if ( library )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2024
				library.on( 'add remove reset', this.refresh, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2025
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2026
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2027
		dispose: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2028
			if ( this.selection )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2029
				this.selection.off( null, null, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2030
			if ( this.library )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2031
				this.library.off( null, null, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2032
			return media.View.prototype.dispose.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2033
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2034
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2035
		ready: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2036
			this.refresh();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2037
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2038
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2039
		set: function( id, view, options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2040
			var list;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2041
			options = options || {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2042
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2043
			// Accept an object with an `id` : `view` mapping.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2044
			if ( _.isObject( id ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2045
				_.each( id, function( view, id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2046
					this.set( id, view, { silent: true });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2047
				}, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2048
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2049
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2050
				if ( ! ( view instanceof Backbone.View ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2051
					view.classes = [ 'media-button-' + id ].concat( view.classes || [] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2052
					view = new media.view.Button( view ).render();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2053
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2054
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2055
				view.controller = view.controller || this.controller;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2056
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2057
				this._views[ id ] = view;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2058
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2059
				list = view.options.priority < 0 ? 'secondary' : 'primary';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2060
				this[ list ].set( id, view, options );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2061
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2062
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2063
			if ( ! options.silent )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2064
				this.refresh();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2065
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2066
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2067
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2068
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2069
		get: function( id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2070
			return this._views[ id ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2071
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2072
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2073
		unset: function( id, options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2074
			delete this._views[ id ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2075
			this.primary.unset( id, options );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2076
			this.secondary.unset( id, options );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2077
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2078
			if ( ! options || ! options.silent )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2079
				this.refresh();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2080
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2081
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2082
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2083
		refresh: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2084
			var state = this.controller.state(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2085
				library = state.get('library'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2086
				selection = state.get('selection');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2087
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2088
			_.each( this._views, function( button ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2089
				if ( ! button.model || ! button.options || ! button.options.requires )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2090
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2091
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2092
				var requires = button.options.requires,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2093
					disabled = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2094
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2095
				// Prevent insertion of attachments if any of them are still uploading
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2096
				disabled = _.some( selection.models, function( attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2097
					return attachment.get('uploading') === true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2098
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2099
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2100
				if ( requires.selection && selection && ! selection.length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2101
					disabled = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2102
				else if ( requires.library && library && ! library.length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2103
					disabled = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2104
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2105
				button.model.set( 'disabled', disabled );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2106
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2107
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2108
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2109
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2110
	// wp.media.view.Toolbar.Select
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2111
	// ----------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2112
	media.view.Toolbar.Select = media.view.Toolbar.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2113
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2114
			var options = this.options,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2115
				controller = options.controller,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2116
				selection = controller.state().get('selection');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2117
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2118
			_.bindAll( this, 'clickSelect' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2119
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2120
			_.defaults( options, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2121
				event: 'select',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2122
				state: false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2123
				reset: true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2124
				close: true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2125
				text:  l10n.select,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2126
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2127
				// Does the button rely on the selection?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2128
				requires: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2129
					selection: true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2130
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2131
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2132
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2133
			options.items = _.defaults( options.items || {}, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2134
				select: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2135
					style:    'primary',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2136
					text:     options.text,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2137
					priority: 80,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2138
					click:    this.clickSelect,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2139
					requires: options.requires
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2140
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2141
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2142
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2143
			media.view.Toolbar.prototype.initialize.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2144
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2145
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2146
		clickSelect: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2147
			var options = this.options,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2148
				controller = this.controller;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2149
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2150
			if ( options.close )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2151
				controller.close();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2152
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2153
			if ( options.event )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2154
				controller.state().trigger( options.event );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2155
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2156
			if ( options.state )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2157
				controller.setState( options.state );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2158
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2159
			if ( options.reset )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2160
				controller.reset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2161
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2162
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2163
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2164
	// wp.media.view.Toolbar.Embed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2165
	// ---------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2166
	media.view.Toolbar.Embed = media.view.Toolbar.Select.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2167
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2168
			_.defaults( this.options, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2169
				text: l10n.insertIntoPost,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2170
				requires: false
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2171
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2172
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2173
			media.view.Toolbar.Select.prototype.initialize.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2174
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2175
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2176
		refresh: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2177
			var url = this.controller.state().props.get('url');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2178
			this.get('select').model.set( 'disabled', ! url || url === 'http://' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2179
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2180
			media.view.Toolbar.Select.prototype.refresh.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2181
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2182
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2183
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2184
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2185
	 * wp.media.view.Button
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2186
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2187
	media.view.Button = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2188
		tagName:    'a',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2189
		className:  'media-button',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2190
		attributes: { href: '#' },
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2191
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2192
		events: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2193
			'click': 'click'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2194
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2195
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2196
		defaults: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2197
			text:     '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2198
			style:    '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2199
			size:     'large',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2200
			disabled: false
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2201
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2202
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2203
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2204
			// Create a model with the provided `defaults`.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2205
			this.model = new Backbone.Model( this.defaults );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2206
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2207
			// If any of the `options` have a key from `defaults`, apply its
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2208
			// value to the `model` and remove it from the `options object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2209
			_.each( this.defaults, function( def, key ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2210
				var value = this.options[ key ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2211
				if ( _.isUndefined( value ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2212
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2213
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2214
				this.model.set( key, value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2215
				delete this.options[ key ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2216
			}, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2217
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2218
			this.model.on( 'change', this.render, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2219
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2220
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2221
		render: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2222
			var classes = [ 'button', this.className ],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2223
				model = this.model.toJSON();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2224
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2225
			if ( model.style )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2226
				classes.push( 'button-' + model.style );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2227
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2228
			if ( model.size )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2229
				classes.push( 'button-' + model.size );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2230
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2231
			classes = _.uniq( classes.concat( this.options.classes ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2232
			this.el.className = classes.join(' ');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2233
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2234
			this.$el.attr( 'disabled', model.disabled );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2235
			this.$el.text( this.model.get('text') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2236
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2237
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2238
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2239
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2240
		click: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2241
			if ( '#' === this.attributes.href )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2242
				event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2243
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2244
			if ( this.options.click && ! this.model.get('disabled') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2245
				this.options.click.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2246
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2247
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2248
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2249
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2250
	 * wp.media.view.ButtonGroup
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2251
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2252
	media.view.ButtonGroup = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2253
		tagName:   'div',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2254
		className: 'button-group button-large media-button-group',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2255
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2256
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2257
			this.buttons = _.map( this.options.buttons || [], function( button ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2258
				if ( button instanceof Backbone.View )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2259
					return button;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2260
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2261
					return new media.view.Button( button ).render();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2262
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2263
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2264
			delete this.options.buttons;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2265
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2266
			if ( this.options.classes )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2267
				this.$el.addClass( this.options.classes );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2268
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2269
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2270
		render: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2271
			this.$el.html( $( _.pluck( this.buttons, 'el' ) ).detach() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2272
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2273
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2274
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2275
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2276
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2277
	 * wp.media.view.PriorityList
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2278
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2279
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2280
	media.view.PriorityList = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2281
		tagName:   'div',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2282
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2283
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2284
			this._views = {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2285
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2286
			this.set( _.extend( {}, this._views, this.options.views ), { silent: true });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2287
			delete this.options.views;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2288
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2289
			if ( ! this.options.silent )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2290
				this.render();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2291
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2292
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2293
		set: function( id, view, options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2294
			var priority, views, index;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2295
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2296
			options = options || {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2297
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2298
			// Accept an object with an `id` : `view` mapping.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2299
			if ( _.isObject( id ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2300
				_.each( id, function( view, id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2301
					this.set( id, view );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2302
				}, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2303
				return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2304
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2305
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2306
			if ( ! (view instanceof Backbone.View) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2307
				view = this.toView( view, id, options );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2308
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2309
			view.controller = view.controller || this.controller;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2310
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2311
			this.unset( id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2312
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2313
			priority = view.options.priority || 10;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2314
			views = this.views.get() || [];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2315
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2316
			_.find( views, function( existing, i ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2317
				if ( existing.options.priority > priority ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2318
					index = i;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2319
					return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2320
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2321
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2322
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2323
			this._views[ id ] = view;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2324
			this.views.add( view, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2325
				at: _.isNumber( index ) ? index : views.length || 0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2326
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2327
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2328
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2329
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2330
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2331
		get: function( id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2332
			return this._views[ id ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2333
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2334
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2335
		unset: function( id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2336
			var view = this.get( id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2337
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2338
			if ( view )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2339
				view.remove();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2340
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2341
			delete this._views[ id ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2342
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2343
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2344
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2345
		toView: function( options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2346
			return new media.View( options );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2347
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2348
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2349
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2350
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2351
	 * wp.media.view.MenuItem
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2352
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2353
	media.view.MenuItem = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2354
		tagName:   'a',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2355
		className: 'media-menu-item',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2356
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2357
		attributes: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2358
			href: '#'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2359
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2360
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2361
		events: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2362
			'click': '_click'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2363
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2364
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2365
		_click: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2366
			var clickOverride = this.options.click;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2367
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2368
			if ( event )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2369
				event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2370
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2371
			if ( clickOverride )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2372
				clickOverride.call( this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2373
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2374
				this.click();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2375
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2376
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2377
		click: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2378
			var state = this.options.state;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2379
			if ( state )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2380
				this.controller.setState( state );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2381
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2382
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2383
		render: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2384
			var options = this.options;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2385
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2386
			if ( options.text )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2387
				this.$el.text( options.text );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2388
			else if ( options.html )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2389
				this.$el.html( options.html );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2390
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2391
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2392
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2393
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2394
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2395
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2396
	 * wp.media.view.Menu
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2397
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2398
	media.view.Menu = media.view.PriorityList.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2399
		tagName:   'div',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2400
		className: 'media-menu',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2401
		property:  'state',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2402
		ItemView:  media.view.MenuItem,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2403
		region:    'menu',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2404
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2405
		toView: function( options, id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2406
			options = options || {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2407
			options[ this.property ] = options[ this.property ] || id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2408
			return new this.ItemView( options ).render();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2409
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2410
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2411
		ready: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2412
			media.view.PriorityList.prototype.ready.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2413
			this.visibility();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2414
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2415
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2416
		set: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2417
			media.view.PriorityList.prototype.set.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2418
			this.visibility();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2419
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2420
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2421
		unset: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2422
			media.view.PriorityList.prototype.unset.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2423
			this.visibility();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2424
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2425
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2426
		visibility: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2427
			var region = this.region,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2428
				view = this.controller[ region ].get(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2429
				views = this.views.get(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2430
				hide = ! views || views.length < 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2431
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2432
			if ( this === view )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2433
				this.controller.$el.toggleClass( 'hide-' + region, hide );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2434
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2435
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2436
		select: function( id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2437
			var view = this.get( id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2438
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2439
			if ( ! view )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2440
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2441
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2442
			this.deselect();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2443
			view.$el.addClass('active');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2444
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2445
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2446
		deselect: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2447
			this.$el.children().removeClass('active');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2448
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2449
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2450
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2451
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2452
	 * wp.media.view.RouterItem
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2453
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2454
	media.view.RouterItem = media.view.MenuItem.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2455
		click: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2456
			var contentMode = this.options.contentMode;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2457
			if ( contentMode )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2458
				this.controller.content.mode( contentMode );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2459
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2460
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2461
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2462
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2463
	 * wp.media.view.Router
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2464
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2465
	media.view.Router = media.view.Menu.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2466
		tagName:   'div',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2467
		className: 'media-router',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2468
		property:  'contentMode',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2469
		ItemView:  media.view.RouterItem,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2470
		region:    'router',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2471
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2472
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2473
			this.controller.on( 'content:render', this.update, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2474
			media.view.Menu.prototype.initialize.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2475
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2476
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2477
		update: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2478
			var mode = this.controller.content.mode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2479
			if ( mode )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2480
				this.select( mode );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2481
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2482
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2483
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2484
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2485
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2486
	 * wp.media.view.Sidebar
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2487
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2488
	media.view.Sidebar = media.view.PriorityList.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2489
		className: 'media-sidebar'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2490
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2491
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2492
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2493
	 * wp.media.view.Attachment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2494
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2495
	media.view.Attachment = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2496
		tagName:   'li',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2497
		className: 'attachment',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2498
		template:  media.template('attachment'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2499
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2500
		events: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2501
			'click .attachment-preview':      'toggleSelectionHandler',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2502
			'change [data-setting]':          'updateSetting',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2503
			'change [data-setting] input':    'updateSetting',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2504
			'change [data-setting] select':   'updateSetting',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2505
			'change [data-setting] textarea': 'updateSetting',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2506
			'click .close':                   'removeFromLibrary',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2507
			'click .check':                   'removeFromSelection',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2508
			'click a':                        'preventDefault'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2509
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2510
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2511
		buttons: {},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2512
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2513
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2514
			var selection = this.options.selection;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2515
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2516
			this.model.on( 'change:sizes change:uploading', this.render, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2517
			this.model.on( 'change:title', this._syncTitle, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2518
			this.model.on( 'change:caption', this._syncCaption, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2519
			this.model.on( 'change:percent', this.progress, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2520
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2521
			// Update the selection.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2522
			this.model.on( 'add', this.select, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2523
			this.model.on( 'remove', this.deselect, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2524
			if ( selection )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2525
				selection.on( 'reset', this.updateSelect, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2526
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2527
			// Update the model's details view.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2528
			this.model.on( 'selection:single selection:unsingle', this.details, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2529
			this.details( this.model, this.controller.state().get('selection') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2530
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2531
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2532
		dispose: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2533
			var selection = this.options.selection;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2534
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2535
			// Make sure all settings are saved before removing the view.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2536
			this.updateAll();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2537
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2538
			if ( selection )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2539
				selection.off( null, null, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2540
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2541
			media.View.prototype.dispose.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2542
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2543
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2544
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2545
		render: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2546
			var options = _.defaults( this.model.toJSON(), {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2547
					orientation:   'landscape',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2548
					uploading:     false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2549
					type:          '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2550
					subtype:       '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2551
					icon:          '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2552
					filename:      '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2553
					caption:       '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2554
					title:         '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2555
					dateFormatted: '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2556
					width:         '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2557
					height:        '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2558
					compat:        false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2559
					alt:           '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2560
					description:   ''
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2561
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2562
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2563
			options.buttons  = this.buttons;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2564
			options.describe = this.controller.state().get('describe');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2565
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2566
			if ( 'image' === options.type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2567
				options.size = this.imageSize();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2568
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2569
			options.can = {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2570
			if ( options.nonces ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2571
				options.can.remove = !! options.nonces['delete'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2572
				options.can.save = !! options.nonces.update;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2573
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2574
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2575
			if ( this.controller.state().get('allowLocalEdits') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2576
				options.allowLocalEdits = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2577
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2578
			this.views.detach();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2579
			this.$el.html( this.template( options ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2580
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2581
			this.$el.toggleClass( 'uploading', options.uploading );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2582
			if ( options.uploading )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2583
				this.$bar = this.$('.media-progress-bar div');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2584
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2585
				delete this.$bar;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2586
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2587
			// Check if the model is selected.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2588
			this.updateSelect();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2589
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2590
			// Update the save status.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2591
			this.updateSave();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2592
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2593
			this.views.render();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2594
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2595
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2596
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2597
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2598
		progress: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2599
			if ( this.$bar && this.$bar.length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2600
				this.$bar.width( this.model.get('percent') + '%' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2601
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2602
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2603
		toggleSelectionHandler: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2604
			var method;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2605
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2606
			if ( event.shiftKey )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2607
				method = 'between';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2608
			else if ( event.ctrlKey || event.metaKey )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2609
				method = 'toggle';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2610
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2611
			this.toggleSelection({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2612
				method: method
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2613
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2614
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2615
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2616
		toggleSelection: function( options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2617
			var collection = this.collection,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2618
				selection = this.options.selection,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2619
				model = this.model,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2620
				method = options && options.method,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2621
				single, between, models, singleIndex, modelIndex;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2622
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2623
			if ( ! selection )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2624
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2625
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2626
			single = selection.single();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2627
			method = _.isUndefined( method ) ? selection.multiple : method;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2628
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2629
			// If the `method` is set to `between`, select all models that
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2630
			// exist between the current and the selected model.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2631
			if ( 'between' === method && single && selection.multiple ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2632
				// If the models are the same, short-circuit.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2633
				if ( single === model )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2634
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2635
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2636
				singleIndex = collection.indexOf( single );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2637
				modelIndex  = collection.indexOf( this.model );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2638
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2639
				if ( singleIndex < modelIndex )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2640
					models = collection.models.slice( singleIndex, modelIndex + 1 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2641
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2642
					models = collection.models.slice( modelIndex, singleIndex + 1 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2643
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2644
				selection.add( models ).single( model );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2645
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2646
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2647
			// If the `method` is set to `toggle`, just flip the selection
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2648
			// status, regardless of whether the model is the single model.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2649
			} else if ( 'toggle' === method ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2650
				selection[ this.selected() ? 'remove' : 'add' ]( model ).single( model );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2651
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2652
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2653
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2654
			if ( method !== 'add' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2655
				method = 'reset';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2656
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2657
			if ( this.selected() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2658
				// If the model is the single model, remove it.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2659
				// If it is not the same as the single model,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2660
				// it now becomes the single model.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2661
				selection[ single === model ? 'remove' : 'single' ]( model );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2662
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2663
				// If the model is not selected, run the `method` on the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2664
				// selection. By default, we `reset` the selection, but the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2665
				// `method` can be set to `add` the model to the selection.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2666
				selection[ method ]( model ).single( model );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2667
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2668
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2669
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2670
		updateSelect: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2671
			this[ this.selected() ? 'select' : 'deselect' ]();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2672
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2673
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2674
		selected: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2675
			var selection = this.options.selection;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2676
			if ( selection )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2677
				return !! selection.get( this.model.cid );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2678
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2679
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2680
		select: function( model, collection ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2681
			var selection = this.options.selection;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2682
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2683
			// Check if a selection exists and if it's the collection provided.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2684
			// If they're not the same collection, bail; we're in another
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2685
			// selection's event loop.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2686
			if ( ! selection || ( collection && collection !== selection ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2687
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2688
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2689
			this.$el.addClass('selected');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2690
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2691
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2692
		deselect: function( model, collection ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2693
			var selection = this.options.selection;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2694
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2695
			// Check if a selection exists and if it's the collection provided.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2696
			// If they're not the same collection, bail; we're in another
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2697
			// selection's event loop.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2698
			if ( ! selection || ( collection && collection !== selection ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2699
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2700
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2701
			this.$el.removeClass('selected');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2702
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2703
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2704
		details: function( model, collection ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2705
			var selection = this.options.selection,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2706
				details;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2707
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2708
			if ( selection !== collection )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2709
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2710
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2711
			details = selection.single();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2712
			this.$el.toggleClass( 'details', details === this.model );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2713
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2714
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2715
		preventDefault: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2716
			event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2717
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2718
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2719
		imageSize: function( size ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2720
			var sizes = this.model.get('sizes');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2721
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2722
			size = size || 'medium';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2723
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2724
			// Use the provided image size if possible.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2725
			if ( sizes && sizes[ size ] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2726
				return _.clone( sizes[ size ] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2727
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2728
				return {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2729
					url:         this.model.get('url'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2730
					width:       this.model.get('width'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2731
					height:      this.model.get('height'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2732
					orientation: this.model.get('orientation')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2733
				};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2734
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2735
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2736
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2737
		updateSetting: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2738
			var $setting = $( event.target ).closest('[data-setting]'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2739
				setting, value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2740
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2741
			if ( ! $setting.length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2742
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2743
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2744
			setting = $setting.data('setting');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2745
			value   = event.target.value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2746
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2747
			if ( this.model.get( setting ) !== value )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2748
				this.save( setting, value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2749
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2750
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2751
		// Pass all the arguments to the model's save method.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2752
		//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2753
		// Records the aggregate status of all save requests and updates the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2754
		// view's classes accordingly.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2755
		save: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2756
			var view = this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2757
				save = this._save = this._save || { status: 'ready' },
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2758
				request = this.model.save.apply( this.model, arguments ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2759
				requests = save.requests ? $.when( request, save.requests ) : request;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2760
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2761
			// If we're waiting to remove 'Saved.', stop.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2762
			if ( save.savedTimer )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2763
				clearTimeout( save.savedTimer );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2764
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2765
			this.updateSave('waiting');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2766
			save.requests = requests;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2767
			requests.always( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2768
				// If we've performed another request since this one, bail.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2769
				if ( save.requests !== requests )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2770
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2771
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2772
				view.updateSave( requests.state() === 'resolved' ? 'complete' : 'error' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2773
				save.savedTimer = setTimeout( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2774
					view.updateSave('ready');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2775
					delete save.savedTimer;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2776
				}, 2000 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2777
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2778
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2779
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2780
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2781
		updateSave: function( status ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2782
			var save = this._save = this._save || { status: 'ready' };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2783
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2784
			if ( status && status !== save.status ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2785
				this.$el.removeClass( 'save-' + save.status );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2786
				save.status = status;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2787
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2788
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2789
			this.$el.addClass( 'save-' + save.status );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2790
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2791
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2792
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2793
		updateAll: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2794
			var $settings = this.$('[data-setting]'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2795
				model = this.model,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2796
				changed;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2797
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2798
			changed = _.chain( $settings ).map( function( el ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2799
				var $input = $('input, textarea, select, [value]', el ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2800
					setting, value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2801
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2802
				if ( ! $input.length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2803
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2804
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2805
				setting = $(el).data('setting');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2806
				value = $input.val();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2807
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2808
				// Record the value if it changed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2809
				if ( model.get( setting ) !== value )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2810
					return [ setting, value ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2811
			}).compact().object().value();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2812
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2813
			if ( ! _.isEmpty( changed ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2814
				model.save( changed );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2815
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2816
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2817
		removeFromLibrary: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2818
			// Stop propagation so the model isn't selected.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2819
			event.stopPropagation();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2820
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2821
			this.collection.remove( this.model );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2822
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2823
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2824
		removeFromSelection: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2825
			var selection = this.options.selection;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2826
			if ( ! selection )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2827
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2828
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2829
			// Stop propagation so the model isn't selected.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2830
			event.stopPropagation();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2831
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2832
			selection.remove( this.model );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2833
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2834
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2835
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2836
	// Ensure settings remain in sync between attachment views.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2837
	_.each({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2838
		caption: '_syncCaption',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2839
		title:   '_syncTitle'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2840
	}, function( method, setting ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2841
		media.view.Attachment.prototype[ method ] = function( model, value ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2842
			var $setting = this.$('[data-setting="' + setting + '"]');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2843
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2844
			if ( ! $setting.length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2845
				return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2846
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2847
			// If the updated value is in sync with the value in the DOM, there
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2848
			// is no need to re-render. If we're currently editing the value,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2849
			// it will automatically be in sync, suppressing the re-render for
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2850
			// the view we're editing, while updating any others.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2851
			if ( value === $setting.find('input, textarea, select, [value]').val() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2852
				return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2853
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2854
			return this.render();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2855
		};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2856
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2857
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2858
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2859
	 * wp.media.view.Attachment.Library
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2860
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2861
	media.view.Attachment.Library = media.view.Attachment.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2862
		buttons: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2863
			check: true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2864
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2865
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2866
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2867
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2868
	 * wp.media.view.Attachment.EditLibrary
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2869
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2870
	media.view.Attachment.EditLibrary = media.view.Attachment.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2871
		buttons: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2872
			close: true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2873
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2874
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2875
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2876
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2877
	 * wp.media.view.Attachments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2878
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2879
	media.view.Attachments = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2880
		tagName:   'ul',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2881
		className: 'attachments',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2882
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2883
		cssTemplate: media.template('attachments-css'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2884
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2885
		events: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2886
			'scroll': 'scroll'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2887
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2888
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2889
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2890
			this.el.id = _.uniqueId('__attachments-view-');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2891
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2892
			_.defaults( this.options, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2893
				refreshSensitivity: 200,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2894
				refreshThreshold:   3,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2895
				AttachmentView:     media.view.Attachment,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2896
				sortable:           false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2897
				resize:             true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2898
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2899
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2900
			this._viewsByCid = {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2901
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2902
			this.collection.on( 'add', function( attachment, attachments, options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2903
				this.views.add( this.createAttachmentView( attachment ), {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2904
					at: this.collection.indexOf( attachment )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2905
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2906
			}, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2907
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2908
			this.collection.on( 'remove', function( attachment, attachments, options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2909
				var view = this._viewsByCid[ attachment.cid ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2910
				delete this._viewsByCid[ attachment.cid ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2911
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2912
				if ( view )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2913
					view.remove();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2914
			}, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2915
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2916
			this.collection.on( 'reset', this.render, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2917
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2918
			// Throttle the scroll handler.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2919
			this.scroll = _.chain( this.scroll ).bind( this ).throttle( this.options.refreshSensitivity ).value();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2920
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2921
			this.initSortable();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2922
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2923
			_.bindAll( this, 'css' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2924
			this.model.on( 'change:edge change:gutter', this.css, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2925
			this._resizeCss = _.debounce( _.bind( this.css, this ), this.refreshSensitivity );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2926
			if ( this.options.resize )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2927
				$(window).on( 'resize.attachments', this._resizeCss );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2928
			this.css();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2929
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2930
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2931
		dispose: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2932
			this.collection.props.off( null, null, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2933
			$(window).off( 'resize.attachments', this._resizeCss );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2934
			media.View.prototype.dispose.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2935
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2936
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2937
		css: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2938
			var $css = $( '#' + this.el.id + '-css' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2939
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2940
			if ( $css.length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2941
				$css.remove();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2942
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2943
			media.view.Attachments.$head().append( this.cssTemplate({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2944
				id:     this.el.id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2945
				edge:   this.edge(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2946
				gutter: this.model.get('gutter')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2947
			}) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2948
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2949
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2950
		edge: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2951
			var edge = this.model.get('edge'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2952
				gutter, width, columns;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2953
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2954
			if ( ! this.$el.is(':visible') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2955
				return edge;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2956
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2957
			gutter  = this.model.get('gutter') * 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2958
			width   = this.$el.width() - gutter;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2959
			columns = Math.ceil( width / ( edge + gutter ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2960
			edge = Math.floor( ( width - ( columns * gutter ) ) / columns );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2961
			return edge;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2962
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2963
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2964
		initSortable: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2965
			var collection = this.collection;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2966
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2967
			if ( ! this.options.sortable || ! $.fn.sortable )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2968
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2969
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2970
			this.$el.sortable( _.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2971
				// If the `collection` has a `comparator`, disable sorting.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2972
				disabled: !! collection.comparator,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2973
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2974
				// Prevent attachments from being dragged outside the bounding
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2975
				// box of the list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2976
				containment: this.$el,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2977
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2978
				// Change the position of the attachment as soon as the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2979
				// mouse pointer overlaps a thumbnail.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2980
				tolerance: 'pointer',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2981
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2982
				// Record the initial `index` of the dragged model.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2983
				start: function( event, ui ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2984
					ui.item.data('sortableIndexStart', ui.item.index());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2985
				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2986
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2987
				// Update the model's index in the collection.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2988
				// Do so silently, as the view is already accurate.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2989
				update: function( event, ui ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2990
					var model = collection.at( ui.item.data('sortableIndexStart') ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2991
						comparator = collection.comparator;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2992
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2993
					// Temporarily disable the comparator to prevent `add`
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2994
					// from re-sorting.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2995
					delete collection.comparator;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2996
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2997
					// Silently shift the model to its new index.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2998
					collection.remove( model, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2999
						silent: true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3000
					}).add( model, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3001
						silent: true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3002
						at:     ui.item.index()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3003
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3004
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3005
					// Restore the comparator.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3006
					collection.comparator = comparator;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3007
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3008
					// Fire the `reset` event to ensure other collections sync.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3009
					collection.trigger( 'reset', collection );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3010
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3011
					// If the collection is sorted by menu order,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3012
					// update the menu order.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3013
					collection.saveMenuOrder();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3014
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3015
			}, this.options.sortable ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3016
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3017
			// If the `orderby` property is changed on the `collection`,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3018
			// check to see if we have a `comparator`. If so, disable sorting.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3019
			collection.props.on( 'change:orderby', function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3020
				this.$el.sortable( 'option', 'disabled', !! collection.comparator );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3021
			}, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3022
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3023
			this.collection.props.on( 'change:orderby', this.refreshSortable, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3024
			this.refreshSortable();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3025
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3026
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3027
		refreshSortable: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3028
			if ( ! this.options.sortable || ! $.fn.sortable )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3029
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3030
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3031
			// If the `collection` has a `comparator`, disable sorting.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3032
			var collection = this.collection,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3033
				orderby = collection.props.get('orderby'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3034
				enabled = 'menuOrder' === orderby || ! collection.comparator;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3035
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3036
			this.$el.sortable( 'option', 'disabled', ! enabled );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3037
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3038
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3039
		createAttachmentView: function( attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3040
			var view = new this.options.AttachmentView({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3041
				controller: this.controller,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3042
				model:      attachment,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3043
				collection: this.collection,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3044
				selection:  this.options.selection
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3045
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3046
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3047
			return this._viewsByCid[ attachment.cid ] = view;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3048
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3049
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3050
		prepare: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3051
			// Create all of the Attachment views, and replace
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3052
			// the list in a single DOM operation.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3053
			if ( this.collection.length ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3054
				this.views.set( this.collection.map( this.createAttachmentView, this ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3055
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3056
			// If there are no elements, clear the views and load some.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3057
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3058
				this.views.unset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3059
				this.collection.more().done( this.scroll );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3060
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3061
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3062
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3063
		ready: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3064
			// Trigger the scroll event to check if we're within the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3065
			// threshold to query for additional attachments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3066
			this.scroll();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3067
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3068
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3069
		scroll: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3070
			// @todo: is this still necessary?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3071
			if ( ! this.$el.is(':visible') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3072
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3073
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3074
			if ( this.collection.hasMore() && this.el.scrollHeight < this.el.scrollTop + ( this.el.clientHeight * this.options.refreshThreshold ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3075
				this.collection.more().done( this.scroll );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3076
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3077
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3078
	}, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3079
		$head: (function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3080
			var $head;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3081
			return function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3082
				return $head = $head || $('head');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3083
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3084
		}())
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3085
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3086
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3087
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3088
	 * wp.media.view.Search
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3089
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3090
	media.view.Search = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3091
		tagName:   'input',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3092
		className: 'search',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3093
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3094
		attributes: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3095
			type:        'search',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3096
			placeholder: l10n.search
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3097
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3098
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3099
		events: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3100
			'input':  'search',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3101
			'keyup':  'search',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3102
			'change': 'search',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3103
			'search': 'search'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3104
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3105
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3106
		render: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3107
			this.el.value = this.model.escape('search');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3108
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3109
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3110
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3111
		search: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3112
			if ( event.target.value )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3113
				this.model.set( 'search', event.target.value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3114
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3115
				this.model.unset('search');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3116
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3117
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3118
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3119
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3120
	 * wp.media.view.AttachmentFilters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3121
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3122
	media.view.AttachmentFilters = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3123
		tagName:   'select',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3124
		className: 'attachment-filters',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3125
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3126
		events: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3127
			change: 'change'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3128
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3129
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3130
		keys: [],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3131
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3132
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3133
			this.createFilters();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3134
			_.extend( this.filters, this.options.filters );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3135
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3136
			// Build `<option>` elements.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3137
			this.$el.html( _.chain( this.filters ).map( function( filter, value ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3138
				return {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3139
					el: $('<option></option>').val(value).text(filter.text)[0],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3140
					priority: filter.priority || 50
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3141
				};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3142
			}, this ).sortBy('priority').pluck('el').value() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3143
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3144
			this.model.on( 'change', this.select, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3145
			this.select();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3146
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3147
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3148
		createFilters: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3149
			this.filters = {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3150
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3151
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3152
		change: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3153
			var filter = this.filters[ this.el.value ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3154
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3155
			if ( filter )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3156
				this.model.set( filter.props );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3157
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3158
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3159
		select: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3160
			var model = this.model,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3161
				value = 'all',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3162
				props = model.toJSON();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3163
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3164
			_.find( this.filters, function( filter, id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3165
				var equal = _.all( filter.props, function( prop, key ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3166
					return prop === ( _.isUndefined( props[ key ] ) ? null : props[ key ] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3167
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3168
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3169
				if ( equal )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3170
					return value = id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3171
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3172
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3173
			this.$el.val( value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3174
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3175
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3176
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3177
	media.view.AttachmentFilters.Uploaded = media.view.AttachmentFilters.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3178
		createFilters: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3179
			var type = this.model.get('type'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3180
				types = media.view.settings.mimeTypes,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3181
				text;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3182
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3183
			if ( types && type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3184
				text = types[ type ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3185
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3186
			this.filters = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3187
				all: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3188
					text:  text || l10n.allMediaItems,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3189
					props: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3190
						uploadedTo: null,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3191
						orderby: 'date',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3192
						order:   'DESC'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3193
					},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3194
					priority: 10
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3195
				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3196
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3197
				uploaded: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3198
					text:  l10n.uploadedToThisPost,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3199
					props: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3200
						uploadedTo: media.view.settings.post.id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3201
						orderby: 'menuOrder',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3202
						order:   'ASC'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3203
					},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3204
					priority: 20
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3205
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3206
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3207
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3208
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3209
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3210
	media.view.AttachmentFilters.All = media.view.AttachmentFilters.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3211
		createFilters: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3212
			var filters = {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3213
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3214
			_.each( media.view.settings.mimeTypes || {}, function( text, key ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3215
				filters[ key ] = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3216
					text: text,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3217
					props: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3218
						type:    key,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3219
						uploadedTo: null,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3220
						orderby: 'date',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3221
						order:   'DESC'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3222
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3223
				};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3224
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3225
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3226
			filters.all = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3227
				text:  l10n.allMediaItems,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3228
				props: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3229
					type:    null,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3230
					uploadedTo: null,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3231
					orderby: 'date',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3232
					order:   'DESC'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3233
				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3234
				priority: 10
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3235
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3236
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3237
			filters.uploaded = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3238
				text:  l10n.uploadedToThisPost,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3239
				props: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3240
					type:    null,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3241
					uploadedTo: media.view.settings.post.id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3242
					orderby: 'menuOrder',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3243
					order:   'ASC'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3244
				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3245
				priority: 20
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3246
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3247
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3248
			this.filters = filters;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3249
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3250
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3251
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3252
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3253
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3254
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3255
	 * wp.media.view.AttachmentsBrowser
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3256
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3257
	media.view.AttachmentsBrowser = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3258
		tagName:   'div',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3259
		className: 'attachments-browser',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3260
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3261
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3262
			_.defaults( this.options, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3263
				filters: false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3264
				search:  true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3265
				display: false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3266
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3267
				AttachmentView: media.view.Attachment.Library
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3268
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3269
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3270
			this.createToolbar();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3271
			this.updateContent();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3272
			this.createSidebar();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3273
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3274
			this.collection.on( 'add remove reset', this.updateContent, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3275
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3276
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3277
		dispose: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3278
			this.options.selection.off( null, null, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3279
			media.View.prototype.dispose.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3280
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3281
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3282
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3283
		createToolbar: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3284
			var filters, FiltersConstructor;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3285
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3286
			this.toolbar = new media.view.Toolbar({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3287
				controller: this.controller
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3288
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3289
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3290
			this.views.add( this.toolbar );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3291
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3292
			filters = this.options.filters;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3293
			if ( 'uploaded' === filters )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3294
				FiltersConstructor = media.view.AttachmentFilters.Uploaded;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3295
			else if ( 'all' === filters )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3296
				FiltersConstructor = media.view.AttachmentFilters.All;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3297
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3298
			if ( FiltersConstructor ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3299
				this.toolbar.set( 'filters', new FiltersConstructor({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3300
					controller: this.controller,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3301
					model:      this.collection.props,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3302
					priority:   -80
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3303
				}).render() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3304
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3305
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3306
			if ( this.options.search ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3307
				this.toolbar.set( 'search', new media.view.Search({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3308
					controller: this.controller,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3309
					model:      this.collection.props,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3310
					priority:   60
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3311
				}).render() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3312
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3313
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3314
			if ( this.options.dragInfo ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3315
				this.toolbar.set( 'dragInfo', new media.View({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3316
					el: $( '<div class="instructions">' + l10n.dragInfo + '</div>' )[0],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3317
					priority: -40
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3318
				}) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3319
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3320
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3321
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3322
		updateContent: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3323
			var view = this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3324
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3325
			if( ! this.attachments )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3326
				this.createAttachments();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3327
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3328
			if ( ! this.collection.length ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3329
				this.collection.more().done( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3330
					if ( ! view.collection.length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3331
						view.createUploader();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3332
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3333
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3334
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3335
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3336
		removeContent: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3337
			_.each(['attachments','uploader'], function( key ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3338
				if ( this[ key ] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3339
					this[ key ].remove();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3340
					delete this[ key ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3341
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3342
			}, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3343
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3344
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3345
		createUploader: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3346
			this.removeContent();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3347
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3348
			this.uploader = new media.view.UploaderInline({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3349
				controller: this.controller,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3350
				status:     false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3351
				message:    l10n.noItemsFound
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3352
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3353
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3354
			this.views.add( this.uploader );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3355
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3356
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3357
		createAttachments: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3358
			this.removeContent();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3359
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3360
			this.attachments = new media.view.Attachments({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3361
				controller: this.controller,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3362
				collection: this.collection,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3363
				selection:  this.options.selection,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3364
				model:      this.model,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3365
				sortable:   this.options.sortable,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3366
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3367
				// The single `Attachment` view to be used in the `Attachments` view.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3368
				AttachmentView: this.options.AttachmentView
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3369
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3370
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3371
			this.views.add( this.attachments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3372
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3373
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3374
		createSidebar: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3375
			var options = this.options,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3376
				selection = options.selection,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3377
				sidebar = this.sidebar = new media.view.Sidebar({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3378
					controller: this.controller
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3379
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3380
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3381
			this.views.add( sidebar );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3382
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3383
			if ( this.controller.uploader ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3384
				sidebar.set( 'uploads', new media.view.UploaderStatus({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3385
					controller: this.controller,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3386
					priority:   40
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3387
				}) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3388
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3389
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3390
			selection.on( 'selection:single', this.createSingle, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3391
			selection.on( 'selection:unsingle', this.disposeSingle, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3392
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3393
			if ( selection.single() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3394
				this.createSingle();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3395
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3396
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3397
		createSingle: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3398
			var sidebar = this.sidebar,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3399
				single = this.options.selection.single(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3400
				views = {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3401
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3402
			sidebar.set( 'details', new media.view.Attachment.Details({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3403
				controller: this.controller,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3404
				model:      single,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3405
				priority:   80
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3406
			}) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3407
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3408
			sidebar.set( 'compat', new media.view.AttachmentCompat({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3409
				controller: this.controller,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3410
				model:      single,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3411
				priority:   120
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3412
			}) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3413
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3414
			if ( this.options.display ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3415
				sidebar.set( 'display', new media.view.Settings.AttachmentDisplay({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3416
					controller:   this.controller,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3417
					model:        this.model.display( single ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3418
					attachment:   single,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3419
					priority:     160,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3420
					userSettings: this.model.get('displayUserSettings')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3421
				}) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3422
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3423
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3424
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3425
		disposeSingle: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3426
			var sidebar = this.sidebar;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3427
			sidebar.unset('details');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3428
			sidebar.unset('compat');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3429
			sidebar.unset('display');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3430
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3431
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3432
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3433
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3434
	 * wp.media.view.Selection
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3435
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3436
	media.view.Selection = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3437
		tagName:   'div',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3438
		className: 'media-selection',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3439
		template:  media.template('media-selection'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3440
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3441
		events: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3442
			'click .edit-selection':  'edit',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3443
			'click .clear-selection': 'clear'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3444
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3445
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3446
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3447
			_.defaults( this.options, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3448
				editable:  false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3449
				clearable: true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3450
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3451
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3452
			this.attachments = new media.view.Attachments.Selection({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3453
				controller: this.controller,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3454
				collection: this.collection,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3455
				selection:  this.collection,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3456
				model:      new Backbone.Model({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3457
					edge:   40,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3458
					gutter: 5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3459
				})
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3460
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3461
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3462
			this.views.set( '.selection-view', this.attachments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3463
			this.collection.on( 'add remove reset', this.refresh, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3464
			this.controller.on( 'content:activate', this.refresh, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3465
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3466
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3467
		ready: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3468
			this.refresh();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3469
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3470
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3471
		refresh: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3472
			// If the selection hasn't been rendered, bail.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3473
			if ( ! this.$el.children().length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3474
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3475
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3476
			var collection = this.collection,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3477
				editing = 'edit-selection' === this.controller.content.mode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3478
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3479
			// If nothing is selected, display nothing.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3480
			this.$el.toggleClass( 'empty', ! collection.length );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3481
			this.$el.toggleClass( 'one', 1 === collection.length );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3482
			this.$el.toggleClass( 'editing', editing );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3483
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3484
			this.$('.count').text( l10n.selected.replace('%d', collection.length) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3485
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3486
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3487
		edit: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3488
			event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3489
			if ( this.options.editable )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3490
				this.options.editable.call( this, this.collection );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3491
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3492
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3493
		clear: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3494
			event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3495
			this.collection.reset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3496
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3497
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3498
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3499
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3500
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3501
	 * wp.media.view.Attachment.Selection
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3502
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3503
	media.view.Attachment.Selection = media.view.Attachment.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3504
		className: 'attachment selection',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3505
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3506
		// On click, just select the model, instead of removing the model from
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3507
		// the selection.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3508
		toggleSelection: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3509
			this.options.selection.single( this.model );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3510
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3511
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3512
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3513
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3514
	 * wp.media.view.Attachments.Selection
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3515
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3516
	media.view.Attachments.Selection = media.view.Attachments.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3517
		events: {},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3518
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3519
			_.defaults( this.options, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3520
				sortable:   true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3521
				resize:     false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3522
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3523
				// The single `Attachment` view to be used in the `Attachments` view.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3524
				AttachmentView: media.view.Attachment.Selection
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3525
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3526
			return media.view.Attachments.prototype.initialize.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3527
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3528
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3529
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3530
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3531
	 * wp.media.view.Attachments.EditSelection
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3532
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3533
	media.view.Attachment.EditSelection = media.view.Attachment.Selection.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3534
		buttons: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3535
			close: true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3536
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3537
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3538
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3539
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3540
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3541
	 * wp.media.view.Settings
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3542
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3543
	media.view.Settings = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3544
		events: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3545
			'click button':    'updateHandler',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3546
			'change input':    'updateHandler',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3547
			'change select':   'updateHandler',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3548
			'change textarea': 'updateHandler'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3549
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3550
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3551
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3552
			this.model = this.model || new Backbone.Model();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3553
			this.model.on( 'change', this.updateChanges, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3554
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3555
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3556
		prepare: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3557
			return _.defaults({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3558
				model: this.model.toJSON()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3559
			}, this.options );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3560
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3561
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3562
		render: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3563
			media.View.prototype.render.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3564
			// Select the correct values.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3565
			_( this.model.attributes ).chain().keys().each( this.update, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3566
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3567
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3568
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3569
		update: function( key ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3570
			var value = this.model.get( key ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3571
				$setting = this.$('[data-setting="' + key + '"]'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3572
				$buttons, $value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3573
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3574
			// Bail if we didn't find a matching setting.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3575
			if ( ! $setting.length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3576
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3577
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3578
			// Attempt to determine how the setting is rendered and update
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3579
			// the selected value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3580
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3581
			// Handle dropdowns.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3582
			if ( $setting.is('select') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3583
				$value = $setting.find('[value="' + value + '"]');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3584
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3585
				if ( $value.length ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3586
					$setting.find('option').prop( 'selected', false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3587
					$value.prop( 'selected', true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3588
				} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3589
					// If we can't find the desired value, record what *is* selected.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3590
					this.model.set( key, $setting.find(':selected').val() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3591
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3592
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3593
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3594
			// Handle button groups.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3595
			} else if ( $setting.hasClass('button-group') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3596
				$buttons = $setting.find('button').removeClass('active');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3597
				$buttons.filter( '[value="' + value + '"]' ).addClass('active');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3598
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3599
			// Handle text inputs and textareas.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3600
			} else if ( $setting.is('input[type="text"], textarea') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3601
				if ( ! $setting.is(':focus') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3602
					$setting.val( value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3603
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3604
			// Handle checkboxes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3605
			} else if ( $setting.is('input[type="checkbox"]') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3606
				$setting.attr( 'checked', !! value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3607
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3608
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3609
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3610
		updateHandler: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3611
			var $setting = $( event.target ).closest('[data-setting]'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3612
				value = event.target.value,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3613
				userSetting;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3614
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3615
			event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3616
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3617
			if ( ! $setting.length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3618
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3619
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3620
			// Use the correct value for checkboxes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3621
			if ( $setting.is('input[type="checkbox"]') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3622
				value = $setting[0].checked;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3623
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3624
			// Update the corresponding setting.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3625
			this.model.set( $setting.data('setting'), value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3626
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3627
			// If the setting has a corresponding user setting,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3628
			// update that as well.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3629
			if ( userSetting = $setting.data('userSetting') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3630
				setUserSetting( userSetting, value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3631
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3632
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3633
		updateChanges: function( model, options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3634
			if ( model.hasChanged() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3635
				_( model.changed ).chain().keys().each( this.update, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3636
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3637
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3638
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3639
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3640
	 * wp.media.view.Settings.AttachmentDisplay
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3641
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3642
	media.view.Settings.AttachmentDisplay = media.view.Settings.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3643
		className: 'attachment-display-settings',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3644
		template:  media.template('attachment-display-settings'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3645
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3646
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3647
			var attachment = this.options.attachment;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3648
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3649
			_.defaults( this.options, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3650
				userSettings: false
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3651
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3652
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3653
			media.view.Settings.prototype.initialize.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3654
			this.model.on( 'change:link', this.updateLinkTo, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3655
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3656
			if ( attachment )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3657
				attachment.on( 'change:uploading', this.render, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3658
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3659
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3660
		dispose: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3661
			var attachment = this.options.attachment;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3662
			if ( attachment )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3663
				attachment.off( null, null, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3664
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3665
			media.view.Settings.prototype.dispose.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3666
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3667
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3668
		render: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3669
			var attachment = this.options.attachment;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3670
			if ( attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3671
				_.extend( this.options, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3672
					sizes: attachment.get('sizes'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3673
					type:  attachment.get('type')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3674
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3675
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3676
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3677
			media.view.Settings.prototype.render.call( this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3678
			this.updateLinkTo();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3679
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3680
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3681
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3682
		updateLinkTo: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3683
			var linkTo = this.model.get('link'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3684
				$input = this.$('.link-to-custom'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3685
				attachment = this.options.attachment;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3686
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3687
			if ( 'none' === linkTo || 'embed' === linkTo || ( ! attachment && 'custom' !== linkTo ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3688
				$input.hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3689
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3690
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3691
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3692
			if ( attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3693
				if ( 'post' === linkTo ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3694
					$input.val( attachment.get('link') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3695
				} else if ( 'file' === linkTo ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3696
					$input.val( attachment.get('url') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3697
				} else if ( ! this.model.get('linkUrl') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3698
					$input.val('http://');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3699
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3700
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3701
				$input.prop( 'readonly', 'custom' !== linkTo );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3702
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3703
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3704
			$input.show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3705
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3706
			// If the input is visible, focus and select its contents.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3707
			if ( $input.is(':visible') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3708
				$input.focus()[0].select();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3709
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3710
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3711
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3712
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3713
	 * wp.media.view.Settings.Gallery
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3714
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3715
	media.view.Settings.Gallery = media.view.Settings.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3716
		className: 'gallery-settings',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3717
		template:  media.template('gallery-settings')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3718
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3719
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3720
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3721
	 * wp.media.view.Attachment.Details
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3722
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3723
	media.view.Attachment.Details = media.view.Attachment.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3724
		tagName:   'div',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3725
		className: 'attachment-details',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3726
		template:  media.template('attachment-details'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3727
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3728
		events: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3729
			'change [data-setting]':          'updateSetting',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3730
			'change [data-setting] input':    'updateSetting',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3731
			'change [data-setting] select':   'updateSetting',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3732
			'change [data-setting] textarea': 'updateSetting',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3733
			'click .delete-attachment':       'deleteAttachment',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3734
			'click .edit-attachment':         'editAttachment',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3735
			'click .refresh-attachment':      'refreshAttachment'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3736
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3737
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3738
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3739
			this.focusManager = new media.view.FocusManager({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3740
				el: this.el
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3741
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3742
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3743
			media.view.Attachment.prototype.initialize.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3744
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3745
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3746
		render: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3747
			media.view.Attachment.prototype.render.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3748
			this.focusManager.focus();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3749
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3750
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3751
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3752
		deleteAttachment: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3753
			event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3754
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3755
			if ( confirm( l10n.warnDelete ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3756
				this.model.destroy();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3757
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3758
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3759
		editAttachment: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3760
			this.$el.addClass('needs-refresh');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3761
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3762
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3763
		refreshAttachment: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3764
			this.$el.removeClass('needs-refresh');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3765
			event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3766
			this.model.fetch();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3767
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3768
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3769
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3770
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3771
	 * wp.media.view.AttachmentCompat
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3772
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3773
	media.view.AttachmentCompat = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3774
		tagName:   'form',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3775
		className: 'compat-item',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3776
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3777
		events: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3778
			'submit':          'preventDefault',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3779
			'change input':    'save',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3780
			'change select':   'save',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3781
			'change textarea': 'save'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3782
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3783
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3784
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3785
			this.focusManager = new media.view.FocusManager({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3786
				el: this.el
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3787
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3788
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3789
			this.model.on( 'change:compat', this.render, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3790
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3791
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3792
		dispose: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3793
			if ( this.$(':focus').length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3794
				this.save();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3795
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3796
			return media.View.prototype.dispose.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3797
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3798
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3799
		render: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3800
			var compat = this.model.get('compat');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3801
			if ( ! compat || ! compat.item )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3802
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3803
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3804
			this.views.detach();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3805
			this.$el.html( compat.item );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3806
			this.views.render();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3807
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3808
			this.focusManager.focus();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3809
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3810
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3811
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3812
		preventDefault: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3813
			event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3814
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3815
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3816
		save: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3817
			var data = {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3818
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3819
			if ( event )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3820
				event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3821
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3822
			_.each( this.$el.serializeArray(), function( pair ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3823
				data[ pair.name ] = pair.value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3824
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3825
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3826
			this.model.saveCompat( data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3827
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3828
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3829
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3830
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3831
	 * wp.media.view.Iframe
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3832
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3833
	media.view.Iframe = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3834
		className: 'media-iframe',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3835
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3836
		render: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3837
			this.views.detach();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3838
			this.$el.html( '<iframe src="' + this.controller.state().get('src') + '" />' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3839
			this.views.render();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3840
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3841
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3842
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3843
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3844
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3845
	 * wp.media.view.Embed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3846
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3847
	media.view.Embed = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3848
		className: 'media-embed',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3849
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3850
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3851
			this.url = new media.view.EmbedUrl({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3852
				controller: this.controller,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3853
				model:      this.model.props
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3854
			}).render();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3855
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3856
			this.views.set([ this.url ]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3857
			this.refresh();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3858
			this.model.on( 'change:type', this.refresh, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3859
			this.model.on( 'change:loading', this.loading, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3860
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3861
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3862
		settings: function( view ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3863
			if ( this._settings )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3864
				this._settings.remove();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3865
			this._settings = view;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3866
			this.views.add( view );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3867
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3868
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3869
		refresh: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3870
			var type = this.model.get('type'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3871
				constructor;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3872
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3873
			if ( 'image' === type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3874
				constructor = media.view.EmbedImage;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3875
			else if ( 'link' === type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3876
				constructor = media.view.EmbedLink;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3877
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3878
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3879
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3880
			this.settings( new constructor({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3881
				controller: this.controller,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3882
				model:      this.model.props,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3883
				priority:   40
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3884
			}) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3885
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3886
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3887
		loading: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3888
			this.$el.toggleClass( 'embed-loading', this.model.get('loading') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3889
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3890
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3891
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3892
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3893
	 * wp.media.view.EmbedUrl
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3894
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3895
	media.view.EmbedUrl = media.View.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3896
		tagName:   'label',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3897
		className: 'embed-url',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3898
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3899
		events: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3900
			'input':  'url',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3901
			'keyup':  'url',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3902
			'change': 'url'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3903
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3904
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3905
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3906
			this.$input = $('<input/>').attr( 'type', 'text' ).val( this.model.get('url') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3907
			this.input = this.$input[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3908
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3909
			this.spinner = $('<span class="spinner" />')[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3910
			this.$el.append([ this.input, this.spinner ]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3911
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3912
			this.model.on( 'change:url', this.render, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3913
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3914
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3915
		render: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3916
			var $input = this.$input;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3917
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3918
			if ( $input.is(':focus') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3919
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3920
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3921
			this.input.value = this.model.get('url') || 'http://';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3922
			media.View.prototype.render.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3923
			return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3924
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3925
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3926
		ready: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3927
			this.focus();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3928
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3929
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3930
		url: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3931
			this.model.set( 'url', event.target.value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3932
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3933
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3934
		focus: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3935
			var $input = this.$input;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3936
			// If the input is visible, focus and select its contents.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3937
			if ( $input.is(':visible') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3938
				$input.focus()[0].select();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3939
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3940
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3941
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3942
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3943
	 * wp.media.view.EmbedLink
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3944
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3945
	media.view.EmbedLink = media.view.Settings.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3946
		className: 'embed-link-settings',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3947
		template:  media.template('embed-link-settings')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3948
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3949
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3950
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3951
	 * wp.media.view.EmbedImage
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3952
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3953
	media.view.EmbedImage =  media.view.Settings.AttachmentDisplay.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3954
		className: 'embed-image-settings',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3955
		template:  media.template('embed-image-settings'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3956
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3957
		initialize: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3958
			media.view.Settings.AttachmentDisplay.prototype.initialize.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3959
			this.model.on( 'change:url', this.updateImage, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3960
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3961
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3962
		updateImage: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3963
			this.$('img').attr( 'src', this.model.get('url') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3964
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3965
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3966
}(jQuery));