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