]> scripts.mit.edu Git - autoinstalls/wordpress.git/blob - wp-admin/js/postbox.js
WordPress 4.4.1
[autoinstalls/wordpress.git] / wp-admin / js / postbox.js
1 /* global ajaxurl */
2
3 var postboxes;
4
5 (function($) {
6         var $document = $( document );
7
8         postboxes = {
9                 handle_click : function () {
10                         var $el = $( this ),
11                                 p = $el.parent( '.postbox' ),
12                                 id = p.attr( 'id' ),
13                                 ariaExpandedValue;
14
15                         if ( 'dashboard_browser_nag' === id ) {
16                                 return;
17                         }
18
19                         p.toggleClass( 'closed' );
20
21                         ariaExpandedValue = ! p.hasClass( 'closed' );
22
23                         if ( $el.hasClass( 'handlediv' ) ) {
24                                 // The handle button was clicked.
25                                 $el.attr( 'aria-expanded', ariaExpandedValue );
26                         } else {
27                                 // The handle heading was clicked.
28                                 $el.closest( '.postbox' ).find( 'button.handlediv' )
29                                         .attr( 'aria-expanded', ariaExpandedValue );
30                         }
31
32                         if ( postboxes.page !== 'press-this' ) {
33                                 postboxes.save_state( postboxes.page );
34                         }
35
36                         if ( id ) {
37                                 if ( !p.hasClass('closed') && $.isFunction( postboxes.pbshow ) ) {
38                                         postboxes.pbshow( id );
39                                 } else if ( p.hasClass('closed') && $.isFunction( postboxes.pbhide ) ) {
40                                         postboxes.pbhide( id );
41                                 }
42                         }
43
44                         $document.trigger( 'postbox-toggled', p );
45                 },
46
47                 add_postbox_toggles : function (page, args) {
48                         var $handles = $( '.postbox .hndle, .postbox .handlediv' );
49
50                         this.page = page;
51                         this.init( page, args );
52
53                         $handles.on( 'click.postboxes', this.handle_click );
54
55                         $('.postbox .hndle a').click( function(e) {
56                                 e.stopPropagation();
57                         });
58
59                         $( '.postbox a.dismiss' ).on( 'click.postboxes', function( e ) {
60                                 var hide_id = $(this).parents('.postbox').attr('id') + '-hide';
61                                 e.preventDefault();
62                                 $( '#' + hide_id ).prop('checked', false).triggerHandler('click');
63                         });
64
65                         $('.hide-postbox-tog').bind('click.postboxes', function() {
66                                 var $el = $(this),
67                                         boxId = $el.val(),
68                                         $postbox = $( '#' + boxId );
69
70                                 if ( $el.prop( 'checked' ) ) {
71                                         $postbox.show();
72                                         if ( $.isFunction( postboxes.pbshow ) ) {
73                                                 postboxes.pbshow( boxId );
74                                         }
75                                 } else {
76                                         $postbox.hide();
77                                         if ( $.isFunction( postboxes.pbhide ) ) {
78                                                 postboxes.pbhide( boxId );
79                                         }
80                                 }
81                                 postboxes.save_state( page );
82                                 postboxes._mark_area();
83                                 $document.trigger( 'postbox-toggled', $postbox );
84                         });
85
86                         $('.columns-prefs input[type="radio"]').bind('click.postboxes', function(){
87                                 var n = parseInt($(this).val(), 10);
88
89                                 if ( n ) {
90                                         postboxes._pb_edit(n);
91                                         postboxes.save_order( page );
92                                 }
93                         });
94                 },
95
96                 init : function(page, args) {
97                         var isMobile = $( document.body ).hasClass( 'mobile' ),
98                                 $handleButtons = $( '.postbox .handlediv' );
99
100                         $.extend( this, args || {} );
101                         $('#wpbody-content').css('overflow','hidden');
102                         $('.meta-box-sortables').sortable({
103                                 placeholder: 'sortable-placeholder',
104                                 connectWith: '.meta-box-sortables',
105                                 items: '.postbox',
106                                 handle: '.hndle',
107                                 cursor: 'move',
108                                 delay: ( isMobile ? 200 : 0 ),
109                                 distance: 2,
110                                 tolerance: 'pointer',
111                                 forcePlaceholderSize: true,
112                                 helper: 'clone',
113                                 opacity: 0.65,
114                                 stop: function() {
115                                         var $el = $( this );
116
117                                         if ( $el.find( '#dashboard_browser_nag' ).is( ':visible' ) && 'dashboard_browser_nag' != this.firstChild.id ) {
118                                                 $el.sortable('cancel');
119                                                 return;
120                                         }
121
122                                         postboxes.save_order(page);
123                                 },
124                                 receive: function(e,ui) {
125                                         if ( 'dashboard_browser_nag' == ui.item[0].id )
126                                                 $(ui.sender).sortable('cancel');
127
128                                         postboxes._mark_area();
129                                 }
130                         });
131
132                         if ( isMobile ) {
133                                 $(document.body).bind('orientationchange.postboxes', function(){ postboxes._pb_change(); });
134                                 this._pb_change();
135                         }
136
137                         this._mark_area();
138
139                         // Set the handle buttons `aria-expanded` attribute initial value on page load.
140                         $handleButtons.each( function () {
141                                 var $el = $( this );
142                                 $el.attr( 'aria-expanded', ! $el.parent( '.postbox' ).hasClass( 'closed' ) );
143                         });
144                 },
145
146                 save_state : function(page) {
147                         var closed, hidden;
148
149                         // Return on the nav-menus.php screen, see #35112.
150                         if ( 'nav-menus' === page ) {
151                                 return;
152                         }
153
154                         closed = $( '.postbox' ).filter( '.closed' ).map( function() { return this.id; } ).get().join( ',' );
155                         hidden = $( '.postbox' ).filter( ':hidden' ).map( function() { return this.id; } ).get().join( ',' );
156
157                         $.post(ajaxurl, {
158                                 action: 'closed-postboxes',
159                                 closed: closed,
160                                 hidden: hidden,
161                                 closedpostboxesnonce: jQuery('#closedpostboxesnonce').val(),
162                                 page: page
163                         });
164                 },
165
166                 save_order : function(page) {
167                         var postVars, page_columns = $('.columns-prefs input:checked').val() || 0;
168
169                         postVars = {
170                                 action: 'meta-box-order',
171                                 _ajax_nonce: $('#meta-box-order-nonce').val(),
172                                 page_columns: page_columns,
173                                 page: page
174                         };
175                         $('.meta-box-sortables').each( function() {
176                                 postVars[ 'order[' + this.id.split( '-' )[0] + ']' ] = $( this ).sortable( 'toArray' ).join( ',' );
177                         } );
178                         $.post( ajaxurl, postVars );
179                 },
180
181                 _mark_area : function() {
182                         var visible = $('div.postbox:visible').length, side = $('#post-body #side-sortables');
183
184                         $( '#dashboard-widgets .meta-box-sortables:visible' ).each( function() {
185                                 var t = $(this);
186
187                                 if ( visible == 1 || t.children('.postbox:visible').length )
188                                         t.removeClass('empty-container');
189                                 else
190                                         t.addClass('empty-container');
191                         });
192
193                         if ( side.length ) {
194                                 if ( side.children('.postbox:visible').length )
195                                         side.removeClass('empty-container');
196                                 else if ( $('#postbox-container-1').css('width') == '280px' )
197                                         side.addClass('empty-container');
198                         }
199                 },
200
201                 _pb_edit : function(n) {
202                         var el = $('.metabox-holder').get(0);
203
204                         if ( el ) {
205                                 el.className = el.className.replace(/columns-\d+/, 'columns-' + n);
206                         }
207
208                         $( document ).trigger( 'postboxes-columnchange' );
209                 },
210
211                 _pb_change : function() {
212                         var check = $( 'label.columns-prefs-1 input[type="radio"]' );
213
214                         switch ( window.orientation ) {
215                                 case 90:
216                                 case -90:
217                                         if ( !check.length || !check.is(':checked') )
218                                                 this._pb_edit(2);
219                                         break;
220                                 case 0:
221                                 case 180:
222                                         if ( $('#poststuff').length ) {
223                                                 this._pb_edit(1);
224                                         } else {
225                                                 if ( !check.length || !check.is(':checked') )
226                                                         this._pb_edit(2);
227                                         }
228                                         break;
229                         }
230                 },
231
232                 /* Callbacks */
233                 pbshow : false,
234
235                 pbhide : false
236         };
237
238 }(jQuery));