wp/wp-admin/js/postbox.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
var postboxes;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
(function($) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
	postboxes = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
		add_postbox_toggles : function(page, args) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
			var self = this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
			self.init(page, args);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
			$('.postbox h3, .postbox .handlediv').bind('click.postboxes', function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
				var p = $(this).parent('.postbox'), id = p.attr('id');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
				if ( 'dashboard_browser_nag' == id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
				p.toggleClass('closed');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
				if ( page != 'press-this' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
					self.save_state(page);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
				if ( id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
					if ( !p.hasClass('closed') && $.isFunction(postboxes.pbshow) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
						self.pbshow(id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
					else if ( p.hasClass('closed') && $.isFunction(postboxes.pbhide) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
						self.pbhide(id);
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
			$('.postbox h3 a').click( function(e) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
				e.stopPropagation();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
			$('.postbox a.dismiss').bind('click.postboxes', function(e) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
				var hide_id = $(this).parents('.postbox').attr('id') + '-hide';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
				$( '#' + hide_id ).prop('checked', false).triggerHandler('click');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
				return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
			$('.hide-postbox-tog').bind('click.postboxes', function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
				var box = $(this).val();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
				if ( $(this).prop('checked') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
					$('#' + box).show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
					if ( $.isFunction( postboxes.pbshow ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
						self.pbshow( box );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
				} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
					$('#' + box).hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
					if ( $.isFunction( postboxes.pbhide ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
						self.pbhide( box );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
				self.save_state(page);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
				self._mark_area();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
			$('.columns-prefs input[type="radio"]').bind('click.postboxes', function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
				var n = parseInt($(this).val(), 10);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
				if ( n ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
					self._pb_edit(n);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
					self.save_order(page);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
		init : function(page, args) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
			var isMobile = $(document.body).hasClass('mobile');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
			$.extend( this, args || {} );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
			$('#wpbody-content').css('overflow','hidden');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
			$('.meta-box-sortables').sortable({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
				placeholder: 'sortable-placeholder',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
				connectWith: '.meta-box-sortables',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
				items: '.postbox',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
				handle: '.hndle',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
				cursor: 'move',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
				delay: ( isMobile ? 200 : 0 ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
				distance: 2,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
				tolerance: 'pointer',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
				forcePlaceholderSize: true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
				helper: 'clone',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
				opacity: 0.65,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
				stop: function(e,ui) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
					if ( $(this).find('#dashboard_browser_nag').is(':visible') && 'dashboard_browser_nag' != this.firstChild.id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
						$(this).sortable('cancel');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
						return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
					postboxes.save_order(page);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
				receive: function(e,ui) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
					if ( 'dashboard_browser_nag' == ui.item[0].id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
						$(ui.sender).sortable('cancel');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
					postboxes._mark_area();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
				}
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
			if ( isMobile ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
				$(document.body).bind('orientationchange.postboxes', function(){ postboxes._pb_change(); });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
				this._pb_change();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
			this._mark_area();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
		save_state : function(page) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
			var closed = $('.postbox').filter('.closed').map(function() { return this.id; }).get().join(','),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
				hidden = $('.postbox').filter(':hidden').map(function() { return this.id; }).get().join(',');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
			$.post(ajaxurl, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
				action: 'closed-postboxes',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
				closed: closed,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
				hidden: hidden,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
				closedpostboxesnonce: jQuery('#closedpostboxesnonce').val(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
				page: page
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
		save_order : function(page) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
			var postVars, page_columns = $('.columns-prefs input:checked').val() || 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
			postVars = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
				action: 'meta-box-order',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
				_ajax_nonce: $('#meta-box-order-nonce').val(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
				page_columns: page_columns,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
				page: page
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
			$('.meta-box-sortables').each( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
				postVars["order[" + this.id.split('-')[0] + "]"] = $(this).sortable( 'toArray' ).join(',');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
			} );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
			$.post( ajaxurl, postVars );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
		_mark_area : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
			var visible = $('div.postbox:visible').length, side = $('#post-body #side-sortables');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
			$('#dashboard-widgets .meta-box-sortables:visible').each(function(n, el){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
				var t = $(this);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
				if ( visible == 1 || t.children('.postbox:visible').length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
					t.removeClass('empty-container');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
					t.addClass('empty-container');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
			if ( side.length ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
				if ( side.children('.postbox:visible').length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
					side.removeClass('empty-container');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
				else if ( $('#postbox-container-1').css('width') == '280px' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
					side.addClass('empty-container');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
		_pb_edit : function(n) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
			var el = $('.metabox-holder').get(0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
			el.className = el.className.replace(/columns-\d+/, 'columns-' + n);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
		_pb_change : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
			var check = $( 'label.columns-prefs-1 input[type="radio"]' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
			switch ( window.orientation ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
				case 90:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
				case -90:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
					if ( !check.length || !check.is(':checked') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
						this._pb_edit(2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
				case 0:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
				case 180:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
					if ( $('#poststuff').length ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
						this._pb_edit(1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
					} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
						if ( !check.length || !check.is(':checked') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
							this._pb_edit(2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
		/* Callbacks */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
		pbshow : false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
		pbhide : false
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
	};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
}(jQuery));