wp/wp-admin/js/customize-controls.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( exports, $ ){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
	var api = wp.customize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
	/*
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
	 * @param options
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
	 * - previewer - The Previewer instance to sync with.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
	 * - transport - The transport to use for previewing. Supports 'refresh' and 'postMessage'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
	api.Setting = api.Value.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
		initialize: function( id, value, options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
			var element;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
			api.Value.prototype.initialize.call( this, value, options );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
			this.id = id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
			this.transport = this.transport || 'refresh';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
			this.bind( this.preview );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
		preview: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
			switch ( this.transport ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
				case 'refresh':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
					return this.previewer.refresh();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
				case 'postMessage':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
					return this.previewer.send( 'setting', [ this.id, this() ] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
	api.Control = api.Class.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
		initialize: function( id, options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
			var control = this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
				nodes, radios, settings;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
			this.params = {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
			$.extend( this, options || {} );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
			this.id = id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
			this.selector = '#customize-control-' + id.replace( /\]/g, '' ).replace( /\[/g, '-' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
			this.container = $( this.selector );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
			settings = $.map( this.params.settings, function( value ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
				return value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
			api.apply( api, settings.concat( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
				var key;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
				control.settings = {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
				for ( key in control.params.settings ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
					control.settings[ key ] = api( control.params.settings[ key ] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
				control.setting = control.settings['default'] || null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
				control.ready();
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
			control.elements = [];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
			nodes  = this.container.find('[data-customize-setting-link]');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
			radios = {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
			nodes.each( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
				var node = $(this),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
					name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
				if ( node.is(':radio') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
					name = node.prop('name');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
					if ( radios[ name ] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
						return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
					radios[ name ] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
					node = nodes.filter( '[name="' + name + '"]' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
				api( node.data('customizeSettingLink'), function( setting ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
					var element = new api.Element( node );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
					control.elements.push( element );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
					element.sync( setting );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
					element.set( setting() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
		ready: function() {},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
		dropdownInit: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
			var control  = this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
				statuses = this.container.find('.dropdown-status'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
				params   = this.params,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
				update   = function( to ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
					if ( typeof	to === 'string' && params.statuses && params.statuses[ to ] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
						statuses.html( params.statuses[ to ] ).show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
					else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
						statuses.hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
				};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
			var toggleFreeze = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
			// Support the .dropdown class to open/close complex elements
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
			this.container.on( 'click keydown', '.dropdown', function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
				if ( event.type === 'keydown' &&  13 !== event.which ) // enter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
				event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
				if (!toggleFreeze)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
					control.container.toggleClass('open');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
				if ( control.container.hasClass('open') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
					control.container.parent().parent().find('li.library-selected').focus();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
				// Don't want to fire focus and click at same time
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
				toggleFreeze = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
				setTimeout(function () {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
					toggleFreeze = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
				}, 400);
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
			this.setting.bind( update );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
			update( this.setting() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
	api.ColorControl = api.Control.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
		ready: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
			var control = this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
				picker = this.container.find('.color-picker-hex');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
			picker.val( control.setting() ).wpColorPicker({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
				change: function( event, options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
					control.setting.set( picker.wpColorPicker('color') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
 				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
 				clear: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
 					control.setting.set( false );
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
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
	api.UploadControl = api.Control.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
		ready: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
			var control = this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
			this.params.removed = this.params.removed || '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
			this.success = $.proxy( this.success, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
			this.uploader = $.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
				container: this.container,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
				browser:   this.container.find('.upload'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
				dropzone:  this.container.find('.upload-dropzone'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
				success:   this.success,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
				plupload:  {},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
				params:    {}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
			}, this.uploader || {} );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
			if ( control.params.extensions ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
				control.uploader.plupload.filters = [{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
					title:      api.l10n.allowedFiles,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
					extensions: control.params.extensions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
				}];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
			}
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 ( control.params.context )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
				control.uploader.params['post_data[context]'] = this.params.context;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
			if ( api.settings.theme.stylesheet )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
				control.uploader.params['post_data[theme]'] = api.settings.theme.stylesheet;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
			this.uploader = new wp.Uploader( this.uploader );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
			this.remover = this.container.find('.remove');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
			this.remover.on( 'click keydown', function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
				if ( event.type === 'keydown' &&  13 !== event.which ) // enter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
				control.setting.set( control.params.removed );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
				event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
			this.removerVisibility = $.proxy( this.removerVisibility, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
			this.setting.bind( this.removerVisibility );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
			this.removerVisibility( this.setting.get() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
		success: function( attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
			this.setting.set( attachment.get('url') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
		removerVisibility: function( to ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
			this.remover.toggle( to != this.params.removed );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
	api.ImageControl = api.UploadControl.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
		ready: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
			var control = this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
				panels;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
			this.uploader = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
				init: function( up ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
					var fallback, button;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
					if ( this.supports.dragdrop )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
						return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
					// Maintain references while wrapping the fallback button.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
					fallback = control.container.find( '.upload-fallback' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
					button   = fallback.children().detach();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
					this.browser.detach().empty().append( button );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
					fallback.append( this.browser ).show();
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
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
			api.UploadControl.prototype.ready.call( this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
			this.thumbnail    = this.container.find('.preview-thumbnail img');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
			this.thumbnailSrc = $.proxy( this.thumbnailSrc, this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
			this.setting.bind( this.thumbnailSrc );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
			this.library = this.container.find('.library');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
			// Generate tab objects
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
			this.tabs = {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
			panels    = this.library.find('.library-content');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
			this.library.children('ul').children('li').each( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
				var link  = $(this),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
					id    = link.data('customizeTab'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
					panel = panels.filter('[data-customize-tab="' + id + '"]');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
				control.tabs[ id ] = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
					both:  link.add( panel ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
					link:  link,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
					panel: panel
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
				};
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
			// Bind tab switch events
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
			this.library.children('ul').on( 'click keydown', 'li', function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
				if ( event.type === 'keydown' &&  13 !== event.which ) // enter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
				var id  = $(this).data('customizeTab'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
					tab = control.tabs[ id ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
				event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
				if ( tab.link.hasClass('library-selected') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
				control.selected.both.removeClass('library-selected');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
				control.selected = tab;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
				control.selected.both.addClass('library-selected');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
			// Bind events to switch image urls.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
			this.library.on( 'click keydown', 'a', function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
				if ( event.type === 'keydown' && 13 !== event.which ) // enter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
				var value = $(this).data('customizeImageValue');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
				if ( value ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
					control.setting.set( value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
					event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
				}
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
			if ( this.tabs.uploaded ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
				this.tabs.uploaded.target = this.library.find('.uploaded-target');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
				if ( ! this.tabs.uploaded.panel.find('.thumbnail').length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
					this.tabs.uploaded.both.addClass('hidden');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
			// Select a tab
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
			panels.each( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
				var tab = control.tabs[ $(this).data('customizeTab') ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
				// Select the first visible tab.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
				if ( ! tab.link.hasClass('hidden') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
					control.selected = tab;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
					tab.both.addClass('library-selected');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
					return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
			this.dropdownInit();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
		success: function( attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
			api.UploadControl.prototype.success.call( this, attachment );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
			// Add the uploaded image to the uploaded tab.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
			if ( this.tabs.uploaded && this.tabs.uploaded.target.length ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
				this.tabs.uploaded.both.removeClass('hidden');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
				// @todo: Do NOT store this on the attachment model. That is bad.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
				attachment.element = $( '<a href="#" class="thumbnail"></a>' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
					.data( 'customizeImageValue', attachment.get('url') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
					.append( '<img src="' +  attachment.get('url')+ '" />' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
					.appendTo( this.tabs.uploaded.target );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
		thumbnailSrc: function( to ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
			if ( /^(https?:)?\/\//.test( to ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
				this.thumbnail.prop( 'src', to ).show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
				this.thumbnail.hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
	// Change objects contained within the main customize object to Settings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
	api.defaultConstructor = api.Setting;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
	// Create the collection of Control objects.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
	api.control = new api.Values({ defaultConstructor: api.Control });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
	api.PreviewFrame = api.Messenger.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
		sensitivity: 2000,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
		initialize: function( params, options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
			var deferred = $.Deferred(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
				self     = this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
			// This is the promise object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
			deferred.promise( this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
			this.container = params.container;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
			this.signature = params.signature;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
			$.extend( params, { channel: api.PreviewFrame.uuid() });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
			api.Messenger.prototype.initialize.call( this, params, options );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
			this.add( 'previewUrl', params.previewUrl );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
			this.query = $.extend( params.query || {}, { customize_messenger_channel: this.channel() });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
			this.run( deferred );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
		run: function( deferred ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
			var self   = this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
				loaded = false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
				ready  = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
			if ( this._ready )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
				this.unbind( 'ready', this._ready );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
			this._ready = function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
				ready = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
				if ( loaded )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
					deferred.resolveWith( self );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
			this.bind( 'ready', this._ready );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
			this.request = $.ajax( this.previewUrl(), {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
				type: 'POST',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
				data: this.query,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
				xhrFields: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
					withCredentials: true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
			} );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
			this.request.fail( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
				deferred.rejectWith( self, [ 'request failure' ] );
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
			this.request.done( function( response ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
				var location = self.request.getResponseHeader('Location'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
					signature = self.signature,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
					index;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
				// Check if the location response header differs from the current URL.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
				// If so, the request was redirected; try loading the requested page.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
				if ( location && location != self.previewUrl() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
					deferred.rejectWith( self, [ 'redirect', location ] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
				// Check if the user is not logged in.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
				if ( '0' === response ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
					self.login( deferred );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
				// Check for cheaters.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
				if ( '-1' === response ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
					deferred.rejectWith( self, [ 'cheatin' ] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
				// Check for a signature in the request.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
				index = response.lastIndexOf( signature );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
				if ( -1 === index || index < response.lastIndexOf('</html>') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
					deferred.rejectWith( self, [ 'unsigned' ] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
				// Strip the signature from the request.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
				response = response.slice( 0, index ) + response.slice( index + signature.length );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
				// Create the iframe and inject the html content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
				self.iframe = $('<iframe />').appendTo( self.container );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
				// Bind load event after the iframe has been added to the page;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
				// otherwise it will fire when injected into the DOM.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
				self.iframe.one( 'load', function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
					loaded = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
					if ( ready ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
						deferred.resolveWith( self );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
					} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
						setTimeout( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
							deferred.rejectWith( self, [ 'ready timeout' ] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
						}, self.sensitivity );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
				self.targetWindow( self.iframe[0].contentWindow );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
				self.targetWindow().document.open();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
				self.targetWindow().document.write( response );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
				self.targetWindow().document.close();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
		login: function( deferred ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
			var self = this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
				reject;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
			reject = function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
				deferred.rejectWith( self, [ 'logged out' ] );
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
			if ( this.triedLogin )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
				return reject();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
			// Check if we have an admin cookie.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
			$.get( api.settings.url.ajax, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
				action: 'logged-in'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
			}).fail( reject ).done( function( response ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
				var iframe;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
				if ( '1' !== response )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
					reject();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
				iframe = $('<iframe src="' + self.previewUrl() + '" />').hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
				iframe.appendTo( self.container );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
				iframe.load( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
					self.triedLogin = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
					iframe.remove();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
					self.run( deferred );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
		destroy: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
			api.Messenger.prototype.destroy.call( this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
			this.request.abort();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
			if ( this.iframe )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
				this.iframe.remove();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
			delete this.request;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
			delete this.iframe;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
			delete this.targetWindow;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
	(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
		var uuid = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
		api.PreviewFrame.uuid = function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
			return 'preview-' + uuid++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
		};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
	}());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
	api.Previewer = api.Messenger.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
		refreshBuffer: 250,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
		/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
		 * Requires params:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
		 *  - container  - a selector or jQuery element
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
		 *  - previewUrl - the URL of preview frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
		initialize: function( params, options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
			var self = this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
				rscheme = /^https?/,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
				url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
			$.extend( this, options || {} );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
			/*
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
			 * Wrap this.refresh to prevent it from hammering the servers:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
			 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
			 * If refresh is called once and no other refresh requests are
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
			 * loading, trigger the request immediately.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
			 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
			 * If refresh is called while another refresh request is loading,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
			 * debounce the refresh requests:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
			 * 1. Stop the loading request (as it is instantly outdated).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
			 * 2. Trigger the new request once refresh hasn't been called for
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
			 *    self.refreshBuffer milliseconds.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
			 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
			this.refresh = (function( self ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
				var refresh  = self.refresh,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
					callback = function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
						timeout = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
						refresh.call( self );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
					},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
					timeout;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
				return function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
					if ( typeof timeout !== 'number' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
						if ( self.loading ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
							self.abort();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
						} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
							return callback();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
					clearTimeout( timeout );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
					timeout = setTimeout( callback, self.refreshBuffer );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
				};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
			})( this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
			this.container   = api.ensure( params.container );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
			this.allowedUrls = params.allowedUrls;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
			this.signature   = params.signature;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
			params.url = window.location.href;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
			api.Messenger.prototype.initialize.call( this, params );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
			this.add( 'scheme', this.origin() ).link( this.origin ).setter( function( to ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
				var match = to.match( rscheme );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
				return match ? match[0] : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
			// Limit the URL to internal, front-end links.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
			//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
			// If the frontend and the admin are served from the same domain, load the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
			// preview over ssl if the customizer is being loaded over ssl. This avoids
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
			// insecure content warnings. This is not attempted if the admin and frontend
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
			// are on different domains to avoid the case where the frontend doesn't have
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
			// ssl certs.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
			this.add( 'previewUrl', params.previewUrl ).setter( function( to ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
				var result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
				// Check for URLs that include "/wp-admin/" or end in "/wp-admin".
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
				// Strip hashes and query strings before testing.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
				if ( /\/wp-admin(\/|$)/.test( to.replace( /[#?].*$/, '' ) ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
					return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
				// Attempt to match the URL to the control frame's scheme
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
				// and check if it's allowed. If not, try the original URL.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
				$.each([ to.replace( rscheme, self.scheme() ), to ], function( i, url ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
					$.each( self.allowedUrls, function( i, allowed ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
						var path;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
						allowed = allowed.replace( /\/+$/, '' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
						path = url.replace( allowed, '' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
						if ( 0 === url.indexOf( allowed ) && /^([/#?]|$)/.test( path ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
							result = url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
							return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
					if ( result )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
						return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
				// If we found a matching result, return it. If not, bail.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
				return result ? result : null;
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
			// Refresh the preview when the URL is changed (but not yet).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
			this.previewUrl.bind( this.refresh );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
			this.scroll = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
			this.bind( 'scroll', function( distance ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
				this.scroll = distance;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
			// Update the URL when the iframe sends a URL message.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
			this.bind( 'url', this.previewUrl );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
		query: function() {},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
		abort: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
			if ( this.loading ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
				this.loading.destroy();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
				delete this.loading;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
		refresh: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
			var self = this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
			this.abort();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
			this.loading = new api.PreviewFrame({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
				url:        this.url(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
				previewUrl: this.previewUrl(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
				query:      this.query() || {},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
				container:  this.container,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
				signature:  this.signature
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
			this.loading.done( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
				// 'this' is the loading frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
				this.bind( 'synced', function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
					if ( self.preview )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
						self.preview.destroy();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
					self.preview = this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
					delete self.loading;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
					self.targetWindow( this.targetWindow() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
					self.channel( this.channel() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
					self.send( 'active' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
				this.send( 'sync', {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
					scroll:   self.scroll,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
					settings: api.get()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
			this.loading.fail( function( reason, location ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
				if ( 'redirect' === reason && location )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
					self.previewUrl( location );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
				if ( 'logged out' === reason ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
					if ( self.preview ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
						self.preview.destroy();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
						delete self.preview;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
					self.login().done( self.refresh );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
				if ( 'cheatin' === reason )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
					self.cheatin();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
		login: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
			var previewer = this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
				deferred, messenger, iframe;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
			if ( this._login )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
				return this._login;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
			deferred = $.Deferred();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
			this._login = deferred.promise();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
			messenger = new api.Messenger({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
				channel: 'login',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
				url:     api.settings.url.login
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
			iframe = $('<iframe src="' + api.settings.url.login + '" />').appendTo( this.container );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
			messenger.targetWindow( iframe[0].contentWindow );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
			messenger.bind( 'login', function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
				iframe.remove();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
				messenger.destroy();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
				delete previewer._login;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
				deferred.resolve();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
			return this._login;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
		cheatin: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
			$( document.body ).empty().addClass('cheatin').append( '<p>' + api.l10n.cheatin + '</p>' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
	/* =====================================================================
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
	 * Ready.
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
	api.controlConstructor = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
		color:  api.ColorControl,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
		upload: api.UploadControl,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
		image:  api.ImageControl
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
	};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
	$( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
		api.settings = window._wpCustomizeSettings;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
		api.l10n = window._wpCustomizeControlsL10n;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
		// Check if we can run the customizer.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
		if ( ! api.settings )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
			return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
		// Redirect to the fallback preview if any incompatibilities are found.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
		if ( ! $.support.postMessage || ( ! $.support.cors && api.settings.isCrossDomain ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
			return window.location = api.settings.url.fallback;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
		var body = $( document.body ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
			overlay = body.children('.wp-full-overlay'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
			query, previewer, parent;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
		// Prevent the form from saving when enter is pressed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
		$('#customize-controls').on( 'keydown', function( e ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
			if ( $( e.target ).is('textarea') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
			if ( 13 === e.which ) // Enter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
				e.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
		// Initialize Previewer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
		previewer = new api.Previewer({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
			container:   '#customize-preview',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
			form:        '#customize-controls',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
			previewUrl:  api.settings.url.preview,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
			allowedUrls: api.settings.url.allowed,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
			signature:   'WP_CUSTOMIZER_SIGNATURE'
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
			nonce: api.settings.nonce,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
			query: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
				return {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
					wp_customize: 'on',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
					theme:        api.settings.theme.stylesheet,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
					customized:   JSON.stringify( api.get() ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
					nonce:        this.nonce.preview
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
				};
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
			save: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
				var self  = this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
					query = $.extend( this.query(), {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
						action: 'customize_save',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
						nonce:  this.nonce.save
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
					}),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
					request = $.post( api.settings.url.ajax, query );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
				api.trigger( 'save', request );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
				body.addClass('saving');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
				request.always( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
					body.removeClass('saving');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
				request.done( function( response ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
					// Check if the user is logged out.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
					if ( '0' === response ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
						self.preview.iframe.hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
						self.login().done( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
							self.save();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
							self.preview.iframe.show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
						});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
						return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
					// Check for cheaters.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
					if ( '-1' === response ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   771
						self.cheatin();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
						return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
					api.trigger( 'saved' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
		// Refresh the nonces if the preview sends updated nonces over.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
 		previewer.bind( 'nonce', function( nonce ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
 			$.extend( this.nonce, nonce );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
 		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
		$.each( api.settings.settings, function( id, data ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
			api.create( id, id, data.value, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
				transport: data.transport,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
				previewer: previewer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
			} );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
		$.each( api.settings.controls, function( id, data ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
			var constructor = api.controlConstructor[ data.type ] || api.Control,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
				control;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
			control = api.control.add( id, new constructor( id, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
				params: data,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
				previewer: previewer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
			} ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
		// Check if preview url is valid and load the preview frame.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
		if ( previewer.previewUrl() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
			previewer.refresh();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
			previewer.previewUrl( api.settings.url.home );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
		// Save and activated states
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
		(function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
			var state = new api.Values(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
				saved = state.create('saved'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
				activated = state.create('activated');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
			state.bind( 'change', function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
				var save = $('#save'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
					back = $('.back');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
				if ( ! activated() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
					save.val( api.l10n.activate ).prop( 'disabled', false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
					back.text( api.l10n.cancel );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   821
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
				} else if ( saved() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
					save.val( api.l10n.saved ).prop( 'disabled', true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
					back.text( api.l10n.close );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
				} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
					save.val( api.l10n.save ).prop( 'disabled', false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
					back.text( api.l10n.cancel );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   829
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
			// Set default states.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
			saved( true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
			activated( api.settings.theme.active );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
			api.bind( 'change', function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
				state('saved').set( false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
			api.bind( 'saved', function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
				state('saved').set( true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
				state('activated').set( true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
			activated.bind( function( to ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
				if ( to )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
					api.trigger( 'activated' );
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
			// Expose states to the API.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
			api.state = state;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
		}());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
		// Button bindings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
		$('#save').click( function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
			previewer.save();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
			event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
		}).keydown( function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
			if ( 9 === event.which ) // tab
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
			if ( 13 === event.which ) // enter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
				previewer.save();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
			event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
		$('.back').keydown( function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
			if ( 9 === event.which ) // tab
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
			if ( 13 === event.which ) // enter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
				this.click();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
			event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
		$('.upload-dropzone a.upload').keydown( function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
			if ( 13 === event.which ) // enter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
				this.click();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
		$('.collapse-sidebar').on( 'click keydown', function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
			if ( event.type === 'keydown' &&  13 !== event.which ) // enter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
			overlay.toggleClass( 'collapsed' ).toggleClass( 'expanded' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
			event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   885
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
		// Create a potential postMessage connection with the parent frame.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
		parent = new api.Messenger({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
			url: api.settings.url.parent,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
			channel: 'loader'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
		// If we receive a 'back' event, we're inside an iframe.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
		// Send any clicks to the 'Return' link to the parent page.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
		parent.bind( 'back', function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
			$('.back').on( 'click.back', function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   897
				event.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   898
				parent.send( 'close' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
			});
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
		// Pass events through to the parent.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
		api.bind( 'saved', function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
			parent.send( 'saved' );
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
		// When activated, let the loader handle redirecting the page.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
		// If no loader exists, redirect the page ourselves (if a url exists).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
		api.bind( 'activated', function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
			if ( parent.targetWindow() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
				parent.send( 'activated', api.settings.url.activated );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
			else if ( api.settings.url.activated )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
				window.location = api.settings.url.activated;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   916
		// Initialize the connection with the parent frame.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
		parent.send( 'ready' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
		// Control visibility for default controls
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   920
		$.each({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   921
			'background_image': {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
				controls: [ 'background_repeat', 'background_position_x', 'background_attachment' ],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
				callback: function( to ) { return !! to }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   924
			},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   925
			'show_on_front': {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
				controls: [ 'page_on_front', 'page_for_posts' ],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   927
				callback: function( to ) { return 'page' === to }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   928
			},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   929
			'header_textcolor': {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   930
				controls: [ 'header_textcolor' ],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   931
				callback: function( to ) { return 'blank' !== to }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   932
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   933
		}, function( settingId, o ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   934
			api( settingId, function( setting ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   935
				$.each( o.controls, function( i, controlId ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   936
					api.control( controlId, function( control ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
						var visibility = function( to ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   938
							control.container.toggle( o.callback( to ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
						};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   941
						visibility( setting.get() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   942
						setting.bind( visibility );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   943
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   944
				});
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
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
		// Juggle the two controls that use header_textcolor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
		api.control( 'display_header_text', function( control ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   950
			var last = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   952
			control.elements[0].unsync( api( 'header_textcolor' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   953
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   954
			control.element = new api.Element( control.container.find('input') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   955
			control.element.set( 'blank' !== control.setting() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   956
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
			control.element.bind( function( to ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   958
				if ( ! to )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
					last = api( 'header_textcolor' ).get();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
				control.setting.set( to ? last : 'blank' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
			control.setting.bind( function( to ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   965
				control.element.set( 'blank' !== to );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   967
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
		// Handle header image data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
		api.control( 'header_image', function( control ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   971
			control.setting.bind( function( to ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   972
				if ( to === control.params.removed )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
					control.settings.data.set( false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
			control.library.on( 'click', 'a', function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
				control.settings.data.set( $(this).data('customizeHeaderImageData') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   979
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   980
			control.uploader.success = function( attachment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   981
				var data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   982
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   983
				api.ImageControl.prototype.success.call( control, attachment );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   984
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   985
				data = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   986
					attachment_id: attachment.get('id'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   987
					url:           attachment.get('url'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   988
					thumbnail_url: attachment.get('url'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   989
					height:        attachment.get('height'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   990
					width:         attachment.get('width')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   991
				};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   992
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   993
				attachment.element.data( 'customizeHeaderImageData', data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   994
				control.settings.data.set( data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   995
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   996
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   997
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   998
		api.trigger( 'ready' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   999
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1000
		// Make sure left column gets focus
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1001
		var topFocus = $('.back');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1002
		topFocus.focus();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1003
		setTimeout(function () {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1004
			topFocus.focus();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1005
		}, 200);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1006
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1007
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1008
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1009
})( wp, jQuery );