Make WordPress Core

Changeset 10641


Ignore:
Timestamp:
02/24/2009 02:37:22 AM (18 years ago)
Author:
azaozz
Message:

Allow the dashboard widgets to be arranged in up to four columns. The number of columns can be selected from the Screen Options tab.

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/admin-ajax.php

    r10622 r10641  
    950950case 'closed-postboxes' :
    951951        check_ajax_referer( 'closedpostboxes', 'closedpostboxesnonce' );
    952         $closed = isset( $_POST['closed'] )? $_POST['closed'] : '';
     952        $closed = isset( $_POST['closed'] ) ? $_POST['closed'] : '';
    953953        $closed = explode( ',', $_POST['closed'] );
    954         $hidden = isset( $_POST['hidden'] )? $_POST['hidden'] : '';
     954        $hidden = isset( $_POST['hidden'] ) ? $_POST['hidden'] : '';
    955955        $hidden = explode( ',', $_POST['hidden'] );
    956         $page = isset( $_POST['page'] )? $_POST['page'] : '';
    957         if ( !preg_match( '/^[a-z-_]+$/', $page ) ) {
     956        $page = isset( $_POST['page'] ) ? $_POST['page'] : '';
     957
     958        if ( !preg_match( '/^[a-z_-]+$/', $page ) )
    958959                die(-1);
    959         }
    960         $current_user = wp_get_current_user();
     960
     961        if ( ! $user = wp_get_current_user() )
     962                die(-1);
     963
    961964        if ( is_array($closed) )
    962                 update_usermeta($current_user->ID, 'closedpostboxes_'.$page, $closed);
     965                update_usermeta($user->ID, 'closedpostboxes_'.$page, $closed);
     966
    963967        if ( is_array($hidden) )
    964                 update_usermeta($current_user->ID, 'meta-box-hidden_'.$page, $hidden);
    965 break;
     968                update_usermeta($user->ID, 'meta-box-hidden_'.$page, $hidden);
     969
     970        die('1');
     971        break;
    966972case 'hidden-columns' :
    967973        check_ajax_referer( 'hiddencolumns', 'hiddencolumnsnonce' );
    968         $hidden = isset( $_POST['hidden'] )? $_POST['hidden'] : '';
     974        $hidden = isset( $_POST['hidden'] ) ? $_POST['hidden'] : '';
    969975        $hidden = explode( ',', $_POST['hidden'] );
    970         $page = isset( $_POST['page'] )? $_POST['page'] : '';
    971         if ( !preg_match( '/^[a-z_-]+$/', $page ) ) {
     976        $page = isset( $_POST['page'] ) ? $_POST['page'] : '';
     977
     978        if ( !preg_match( '/^[a-z_-]+$/', $page ) )
    972979                die(-1);
    973         }
    974         $current_user = wp_get_current_user();
     980
     981        if ( ! $user = wp_get_current_user() )
     982                die(-1);
     983
    975984        if ( is_array($hidden) )
    976                 update_usermeta($current_user->ID, "manage-$page-columns-hidden", $hidden);
    977 break;
     985                update_usermeta($user->ID, "manage-$page-columns-hidden", $hidden);
     986
     987        die('1');
     988        break;
     989case 'meta-box-order':
     990        check_ajax_referer( 'meta-box-order' );
     991        $order = isset( $_POST['order'] ) ? (array) $_POST['order'] : false;
     992        $page_columns = isset( $_POST['page_columns'] ) ? (int) $_POST['page_columns'] : 0;
     993        $page = isset( $_POST['page'] ) ? $_POST['page'] : '';
     994
     995        if ( !preg_match( '/^[a-z_-]+$/', $page ) )
     996                die(-1);
     997
     998        if ( ! $user = wp_get_current_user() )
     999                die(-1);
     1000
     1001        if ( $order )
     1002                update_user_option($user->ID, "meta-box-order_$page", $order);
     1003
     1004        if ( $page_columns )
     1005                update_usermeta($user->ID, "screen_layout_$page", $page_columns);
     1006
     1007        die('1');
     1008        break;
    9781009case 'get-permalink':
    9791010        check_ajax_referer( 'getpermalink', 'getpermalinknonce' );
     
    11061137
    11071138        exit;
    1108         break;
    1109 case 'meta-box-order':
    1110         check_ajax_referer( 'meta-box-order' );
    1111         update_user_option( $GLOBALS['current_user']->ID, "meta-box-order_$_POST[page]", $_POST['order'] );
    1112         die('1');
    11131139        break;
    11141140case 'find_posts':
  • trunk/wp-admin/includes/dashboard.php

    r10605 r10641  
    144144 */
    145145function wp_dashboard() {
    146         echo "<div id='dashboard-widgets' class='metabox-holder'>\n\n";
    147 
    148         echo "<div id='side-info-column' class='inner-sidebar'>\n\n";
    149         $class = do_meta_boxes( 'dashboard', 'side', '' ) ? ' class="has-sidebar"' : '';
    150         echo "</div>\n\n";
    151 
    152         echo "<div id='post-body'$class>\n\n";
    153         echo "<div id='dashboard-widgets-main-content' class='has-sidebar-content'>\n\n";
     146        global $screen_layout_columns;
     147
     148        $hide2 = $hide3 = $hide4 = '';
     149        switch ( $screen_layout_columns ) {
     150                case 4:
     151                        $width = 'width:24.5%;';
     152                        break;
     153                case 3:
     154                        $width = 'width:32.67%;';
     155                        $hide4 = 'display:none;';
     156                        break;
     157                case 2:
     158                        $width = 'width:49%;';
     159                        $hide3 = $hide4 = 'display:none;';
     160                        break;
     161                default:
     162                        $width = 'width:98%;';
     163                        $hide2 = $hide3 = $hide4 = 'display:none;';
     164        }
     165?>
     166<div id='dashboard-widgets' class='metabox-holder'>
     167<?php
     168        echo "\t<div class='postbox-container' style='$width'>\n";
    154169        do_meta_boxes( 'dashboard', 'normal', '' );
    155         echo "</div>\n\n";
    156         echo "</div>\n\n";
    157 
    158         echo "<form style='display: none' method='get' action=''>\n<p>\n";
     170       
     171        echo "\t</div><div class='postbox-container' style='{$hide2}$width'>\n";
     172        do_meta_boxes( 'dashboard', 'side', '' );
     173
     174        echo "\t</div><div class='postbox-container' style='{$hide3}$width'>\n";
     175        do_meta_boxes( 'dashboard', 'column3', '' );
     176
     177        echo "\t</div><div class='postbox-container' style='{$hide4}$width'>\n";
     178        do_meta_boxes( 'dashboard', 'column4', '' );
     179?>
     180</div></div>
     181
     182<form style='display: none' method='get' action=''>
     183        <p>
     184<?php
    159185        wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false );
    160186        wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );
    161         echo "</p>\n</form>\n";
    162 
    163         echo "</div>";
     187?>
     188        </p>
     189</form>
     190
     191<?php
    164192}
    165193
  • trunk/wp-admin/includes/template.php

    r10629 r10641  
    33013301        <br class="clear" />
    33023302        </div></form>
     3303<?php echo screen_layout($screen); ?>
    33033304</div>
    33043305
     
    33113312                $_wp_contextual_help = array();
    33123313
    3313         if ( !isset($_wp_contextual_help['post']) ) {
    3314                 $help = drag_drop_help();
    3315                 $help .= '<p>' . __('<a href="http://codex.wordpress.org/Writing_Posts" target="_blank">Writing Posts</a>') . '</p>';
    3316                 $_wp_contextual_help['post'] = $help;
    3317         }
    3318 
    3319         if ( !isset($_wp_contextual_help['page']) ) {
    3320                 $help = drag_drop_help();
    3321                 $_wp_contextual_help['page'] = $help;
    3322         }
    3323 
    3324         if ( !isset($_wp_contextual_help['dashboard']) ) {
    3325                 $help = drag_drop_help();
    3326                 $_wp_contextual_help['dashboard'] = $help;
    3327         }
    3328 
    3329         if ( !isset($_wp_contextual_help['link']) ) {
    3330                 $help = drag_drop_help();
    3331                 $_wp_contextual_help['link'] = $help;
    3332         }
    3333 
    3334         if ( !isset($_wp_contextual_help['options-general']) )
    3335                 $_wp_contextual_help['options-general'] =  __('<a href="http://codex.wordpress.org/Settings_General_SubPanel" target="_blank">General Settings</a>');
     3314        switch ( $screen ) {
     3315                case 'post':
     3316                        if ( !isset($_wp_contextual_help['post']) ) {
     3317                                $help = drag_drop_help();
     3318                                $help .= '<p>' . __('<a href="http://codex.wordpress.org/Writing_Posts" target="_blank">Writing Posts</a>') . '</p>';
     3319                                $_wp_contextual_help['post'] = $help;
     3320                        }
     3321                        break;
     3322                case 'page':
     3323                        if ( !isset($_wp_contextual_help['page']) ) {
     3324                                $help = drag_drop_help();
     3325                                $_wp_contextual_help['page'] = $help;
     3326                        }
     3327                        break;
     3328                case 'dashboard':
     3329                        if ( !isset($_wp_contextual_help['dashboard']) ) {
     3330                                $help = '<p>' . __('The modules on this screen can be arranged in several columns. You can select the number of columns from the Screen Options tab.') . "</p>\n";
     3331                                $help .= drag_drop_help();
     3332                                $_wp_contextual_help['dashboard'] = $help;
     3333                        }
     3334                        break;
     3335                case 'link':
     3336                        if ( !isset($_wp_contextual_help['link']) ) {
     3337                                $help = drag_drop_help();
     3338                                $_wp_contextual_help['link'] = $help;
     3339                        }
     3340                        break;
     3341                case 'options-general':
     3342                        if ( !isset($_wp_contextual_help['options-general']) )
     3343                                $_wp_contextual_help['options-general'] =  __('<a href="http://codex.wordpress.org/Settings_General_SubPanel" target="_blank">General Settings</a>');
     3344                        break;
     3345        }
    33363346
    33373347        $_wp_contextual_help = apply_filters('contextual_help_list', $_wp_contextual_help, $screen);
     
    33993409}
    34003410
     3411
     3412function screen_layout($screen) {
     3413        global $screen_layout_columns;
     3414
     3415        if ( 'dashboard' == $screen ) {
     3416                $screen_layout_columns = get_user_option('screen_layout_dashboard');
     3417                $num = 4;
     3418/* add to the write pages?
     3419        } elseif ( in_array( $screen, array('post', 'page', 'link') ) ) {
     3420                $screen_layout_columns = get_user_option('screen_layout_write');
     3421                $num = 2;
     3422*/
     3423        } else {
     3424                $screen_layout_columns = 0;
     3425                return '';
     3426        }
     3427       
     3428        if ( ! $screen_layout_columns )
     3429                        $screen_layout_columns = 2;
     3430
     3431        $i = 1;
     3432        $return = '<h5>' . __('Screen Layout') . "</h5>\n<div class='columns-prefs'>" . __('Number of Columns:') . "\n";
     3433        while ( $i <= $num ) {
     3434                $return .= "<label><input type='radio' name='screen_columns' value='$i'" . ( ($screen_layout_columns == $i) ? " checked='checked'" : "" ) . " /> $i</label>\n";
     3435                ++$i;
     3436        }
     3437        $return .= "</div>\n";
     3438        return $return;
     3439}
     3440
    34013441function screen_icon($name = '') {
    34023442        global $parent_file, $hook_suffix;
  • trunk/wp-admin/js/postbox.dev.js

    r10348 r10641  
    2626                                postboxes.save_state(page);
    2727                        } );
     28                       
     29                        $('.columns-prefs input[type="radio"]').click(function(){
     30                                var num = $(this).val(), i, el;
     31                               
     32                                if ( num ) {
     33                                        for ( i = 4; ( i > num && i > 1 ); i-- ) {
     34                                                $('#' + colname(i-1) + '-sortables').append($('#' + colname(i) + '-sortables').children('.postbox'));
     35                                                $('#' + colname(i) + '-sortables').parent().hide();
     36                                        }
     37                                        for ( i = 1; i <= num; i++ ) {
     38                                                el = $('#' + colname(i) + '-sortables')
     39                                                if ( el.parent().is(':hidden') )
     40                                                        el.addClass('temp-border').parent().show();
     41                                        }
     42                                }
     43                                $('.postbox-container:visible').css('width', 98/num + '%');
     44                                postboxes.save_order(page);
     45                        });
     46                       
     47                        function colname(n) {
     48                                switch (n) {
     49                                        case 1:
     50                                                return 'normal';
     51                                                break
     52                                        case 2:
     53                                                return 'side';
     54                                                break
     55                                        case 3:
     56                                                return 'column3';
     57                                                break
     58                                        case 4:
     59                                                return 'column4';
     60                                                break
     61                                        default:
     62                                                return '';
     63                                }
     64                        }
    2865
    2966                        this.expandSidebar();
     
    3269
    3370                expandSidebar : function(doIt) {
     71                        if ( ! $('#side-info-column').length )
     72                                return;
     73                       
    3474                        if ( doIt || $('#side-sortables > .postbox:visible').length ) {
    3575                                if ( ! $('#post-body').hasClass('has-sidebar') ) {
     
    4787
    4888                init : function(page, args) {
     89                        var fixed = $('#dashboard-widgets').length;
     90                       
    4991                        $.extend( this, args || {} );
    5092                        $('#wpbody-content').css('overflow','hidden');
     
    58100                                toleranceMove: 'tolerance',
    59101                                sort: function(e,ui) {
     102                                        if ( fixed )
     103                                                return;
     104
    60105                                        if ( $(document).width() - e.clientX < 300 ) {
    61106                                                if ( ! $('#post-body').hasClass('has-sidebar') ) {
     
    68113                                        }
    69114                                },
    70                                 stop: function() {
    71                                         var postVars = {
    72                                                 action: 'meta-box-order',
    73                                                 _ajax_nonce: $('#meta-box-order-nonce').val(),
    74                                                 page: page
    75                                         }
    76                                         $('.meta-box-sortables').each( function() {
    77                                                 postVars["order[" + this.id.split('-')[0] + "]"] = $(this).sortable( 'toArray' ).join(',');
    78                                         } );
    79                                         $.post( postboxL10n.requestFile, postVars, function() {
    80                                                 postboxes.expandSidebar();
    81                                         } );
     115                                stop: function(e,ui) {
     116                                        postboxes.save_order(page);
     117                                        ui.item.parent().removeClass('temp-border');
     118                                        postboxes.expandSidebar();
    82119                                }
    83120                        } );
     
    96133                        postboxes.expandSidebar();
    97134                },
     135               
     136                save_order : function(page) {
     137                        var postVars, page_columns = $('.columns-prefs input:checked').val() || 0;
     138                        postVars = {
     139                                action: 'meta-box-order',
     140                                _ajax_nonce: $('#meta-box-order-nonce').val(),
     141                                page_columns: page_columns,
     142                                page: page
     143                        }
     144                        $('.meta-box-sortables').each( function() {
     145                                postVars["order[" + this.id.split('-')[0] + "]"] = $(this).sortable( 'toArray' ).join(',');
     146                        } );
     147                        $.post( postboxL10n.requestFile, postVars );
     148                },
    98149
    99150                /* Callbacks */
  • trunk/wp-admin/js/postbox.js

    r10348 r10641  
    1 var postboxes;(function(a){postboxes={add_postbox_toggles:function(c,b){a(".postbox h3, .postbox .handlediv").click(function(){a(a(this).parent().get(0)).toggleClass("closed");postboxes.save_state(c)});a(".postbox h3 a").click(function(d){d.stopPropagation()});a(".hide-postbox-tog").click(function(){var d=jQuery(this).val();if(jQuery(this).attr("checked")){jQuery("#"+d).show();if(a.isFunction(postboxes.pbshow)){postboxes.pbshow(d)}}else{jQuery("#"+d).hide();if(a.isFunction(postboxes.pbhide)){postboxes.pbhide(d)}}postboxes.save_state(c)});this.expandSidebar();this.init(c,b)},expandSidebar:function(b){if(b||a("#side-sortables > .postbox:visible").length){if(!a("#post-body").hasClass("has-sidebar")){a("#post-body").addClass("has-sidebar");var c=Math.min(a("#post-body").height(),300);a("#side-sortables").css({minHeight:c+"px",height:"auto"})}}else{a("#post-body").removeClass("has-sidebar");a("#side-sortables").css({minHeight:"0"});if(a.browser.msie&&a.browser.version.charAt(0)==7){a("#side-sortables").css({height:"0"})}}},init:function(c,b){a.extend(this,b||{});a("#wpbody-content").css("overflow","hidden");a(".meta-box-sortables").sortable({placeholder:"sortable-placeholder",connectWith:[".meta-box-sortables"],items:"> .postbox",handle:".hndle",distance:2,tolerance:"pointer",toleranceMove:"tolerance",sort:function(f,d){if(a(document).width()-f.clientX<300){if(!a("#post-body").hasClass("has-sidebar")){var g=a("#side-sortables").offset();a("#side-sortables").append(d.item);a(d.placeholder).css({top:g.top,left:g.left}).width(a(d.item).width());postboxes.expandSidebar(1)}}},stop:function(){var d={action:"meta-box-order",_ajax_nonce:a("#meta-box-order-nonce").val(),page:c};a(".meta-box-sortables").each(function(){d["order["+this.id.split("-")[0]+"]"]=a(this).sortable("toArray").join(",")});a.post(postboxL10n.requestFile,d,function(){postboxes.expandSidebar()})}})},save_state:function(d){var b=a(".postbox").filter(".closed").map(function(){return this.id}).get().join(","),c=a(".postbox").filter(":hidden").map(function(){return this.id}).get().join(",");a.post(postboxL10n.requestFile,{action:"closed-postboxes",closed:b,hidden:c,closedpostboxesnonce:jQuery("#closedpostboxesnonce").val(),page:d});postboxes.expandSidebar()},pbshow:false,pbhide:false}}(jQuery));
     1var postboxes;(function(a){postboxes={add_postbox_toggles:function(c,b){a(".postbox h3, .postbox .handlediv").click(function(){a(a(this).parent().get(0)).toggleClass("closed");postboxes.save_state(c)});a(".postbox h3 a").click(function(f){f.stopPropagation()});a(".hide-postbox-tog").click(function(){var e=jQuery(this).val();if(jQuery(this).attr("checked")){jQuery("#"+e).show();if(a.isFunction(postboxes.pbshow)){postboxes.pbshow(e)}}else{jQuery("#"+e).hide();if(a.isFunction(postboxes.pbhide)){postboxes.pbhide(e)}}postboxes.save_state(c)});a('.columns-prefs input[type="radio"]').click(function(){var e=a(this).val(),f,g;if(e){for(f=4;(f>e&&f>1);f--){a("#"+d(f-1)+"-sortables").append(a("#"+d(f)+"-sortables").children(".postbox"));a("#"+d(f)+"-sortables").parent().hide()}for(f=1;f<=e;f++){g=a("#"+d(f)+"-sortables");if(g.parent().is(":hidden")){g.addClass("temp-border").parent().show()}}}a(".postbox-container:visible").css("width",98/e+"%");postboxes.save_order(c)});function d(e){switch(e){case 1:return"normal";break;case 2:return"side";break;case 3:return"column3";break;case 4:return"column4";break;default:return""}}this.expandSidebar();this.init(c,b)},expandSidebar:function(b){if(!a("#side-info-column").length){return}if(b||a("#side-sortables > .postbox:visible").length){if(!a("#post-body").hasClass("has-sidebar")){a("#post-body").addClass("has-sidebar");var c=Math.min(a("#post-body").height(),300);a("#side-sortables").css({minHeight:c+"px",height:"auto"})}}else{a("#post-body").removeClass("has-sidebar");a("#side-sortables").css({minHeight:"0"});if(a.browser.msie&&a.browser.version.charAt(0)==7){a("#side-sortables").css({height:"0"})}}},init:function(d,b){var c=a("#dashboard-widgets").length;a.extend(this,b||{});a("#wpbody-content").css("overflow","hidden");a(".meta-box-sortables").sortable({placeholder:"sortable-placeholder",connectWith:[".meta-box-sortables"],items:"> .postbox",handle:".hndle",distance:2,tolerance:"pointer",toleranceMove:"tolerance",sort:function(g,f){if(c){return}if(a(document).width()-g.clientX<300){if(!a("#post-body").hasClass("has-sidebar")){var h=a("#side-sortables").offset();a("#side-sortables").append(f.item);a(f.placeholder).css({top:h.top,left:h.left}).width(a(f.item).width());postboxes.expandSidebar(1)}}},stop:function(g,f){postboxes.save_order(d);f.item.parent().removeClass("temp-border");postboxes.expandSidebar()}})},save_state:function(d){var b=a(".postbox").filter(".closed").map(function(){return this.id}).get().join(","),c=a(".postbox").filter(":hidden").map(function(){return this.id}).get().join(",");a.post(postboxL10n.requestFile,{action:"closed-postboxes",closed:b,hidden:c,closedpostboxesnonce:jQuery("#closedpostboxesnonce").val(),page:d});postboxes.expandSidebar()},save_order:function(c){var b,d=a(".columns-prefs input:checked").val()||0;b={action:"meta-box-order",_ajax_nonce:a("#meta-box-order-nonce").val(),page_columns:d,page:c};a(".meta-box-sortables").each(function(){b["order["+this.id.split("-")[0]+"]"]=a(this).sortable("toArray").join(",")});a.post(postboxL10n.requestFile,b)},pbshow:false,pbhide:false}}(jQuery));
  • trunk/wp-admin/wp-admin.css

    r10557 r10641  
    13211321
    13221322/* Post Screen */
    1323 #normal-sortables {
     1323#post-body-content #normal-sortables {
    13241324        min-height: 50px;
    13251325}
     
    15401540}
    15411541
     1542#dashboard-widgets .meta-box-sortables {
     1543        margin: 0 5px;
     1544}
     1545
    15421546.meta-box-sortables .postbox .handlediv {
    15431547        float: right;
     
    29692973        margin-left: 2em;
    29702974}
     2975
     2976.postbox-container {
     2977        float: left;
     2978        padding-right: 0.5%;
     2979}
     2980
     2981.postbox-container .meta-box-sortables {
     2982        min-height: 300px;
     2983}
     2984
     2985.temp-border {
     2986        border: 1px dotted #ccc;
     2987}
     2988
     2989.columns-prefs label {
     2990        padding: 0 5px;
     2991}
  • trunk/wp-includes/script-loader.php

    r10635 r10641  
    246246                $scripts->add( 'xfn', "/wp-admin/js/xfn$suffix.js", false, '3517m' );
    247247
    248                 $scripts->add( 'postbox', "/wp-admin/js/postbox$suffix.js", array('jquery-ui-sortable'), '20090102' );
     248                $scripts->add( 'postbox', "/wp-admin/js/postbox$suffix.js", array('jquery-ui-sortable'), '20090223' );
    249249                $scripts->add_data( 'postbox', 'group', 1 );
    250250                $scripts->localize( 'postbox', 'postboxL10n', array(
Note: See TracChangeset for help on using the changeset viewer.