WordPress.org

Make WordPress Core

Changeset 10641


Ignore:
Timestamp:
02/24/09 02:37:22 (5 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.