WordPress.org

Make WordPress Core

Changeset 11498


Ignore:
Timestamp:
05/31/09 11:34:08 (5 years ago)
Author:
azaozz
Message:

Reload the widget form with the ajax response after save, add Close link to the widgets, don't auto-close on save to show possible errors returned from validation

Location:
trunk
Files:
7 edited

Legend:

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

    r11450 r11498  
    12901290    $widget_id = $_POST['widget-id']; 
    12911291    $sidebar_id = $_POST['sidebar']; 
     1292    $multi_number = !empty($_POST['multi_number']) ? (int) $_POST['multi_number'] : 0; 
     1293    $settings = isset($_POST['widget-' . $id_base]) && is_array($_POST['widget-' . $id_base]) ? $_POST['widget-' . $id_base] : false; 
     1294    $error = '<p>' . __('An error has occured. Please reload the page and try again.') . '</p>'; 
    12921295 
    12931296    $sidebars = wp_get_sidebars_widgets(); 
     
    12981301 
    12991302        if ( !isset($wp_registered_widgets[$widget_id]) ) 
    1300             die('-1'); 
     1303            die($error); 
    13011304 
    13021305        $sidebar = array_diff( $sidebar, array($widget_id) ); 
    13031306        $_POST = array('sidebar' => $sidebar_id, 'widget-' . $id_base => array(), 'the-widget-id' => $widget_id, 'delete_widget' => '1'); 
     1307    } elseif ( $settings && preg_match( '/__i__|%i%/', key($settings) ) ) { 
     1308        if ( !$multi_number ) 
     1309            die($error); 
     1310 
     1311        $_POST['widget-' . $id_base] = array( $multi_number => array_shift($settings) ); 
     1312        $widget_id = $id_base . '-' . $multi_number; 
     1313        $sidebar[] = $widget_id; 
    13041314    } 
    13051315    $_POST['widget-id'] = $sidebar; 
     
    13251335    } 
    13261336 
    1327     die('1'); 
     1337    if ( !empty($_POST['add_new']) ) 
     1338        die(); 
     1339 
     1340    if ( $form = $wp_registered_widget_controls[$widget_id] ) 
     1341        call_user_func_array( $form['callback'], $form['params'] ); 
     1342 
     1343    die(); 
    13281344    break; 
    13291345default : 
  • trunk/wp-admin/css/widgets.css

    r11482 r11498  
    189189.widget .widget-inside, 
    190190.widget .widget-description { 
    191     padding: 15px; 
     191    padding: 12px 12px 10px; 
    192192    font-size: 11px; 
    193193    line-height: 16px; 
     
    225225.widget-control-actions a { 
    226226    text-decoration: none; 
     227} 
     228 
     229.widget-control-actions a:hover { 
     230    text-decoration: underline; 
     231} 
     232 
     233.widget-control-actions .ajax-feedback { 
     234    padding-bottom: 3px; 
     235} 
     236 
     237.widget-control-actions div.alignleft { 
     238    margin-top: 6px; 
    227239} 
    228240 
  • trunk/wp-admin/includes/widgets.php

    r11445 r11498  
    169169    <div class="widget-inside"> 
    170170    <form action="" method="post"> 
     171    <div class="widget-content"> 
    171172<?php 
    172173    if ( isset($control['callback']) ) 
     
    174175    else 
    175176        echo "\t\t<p>" . __('There are no options for this widget.') . "</p>\n"; ?> 
    176  
     177    </div> 
    177178    <input type="hidden" name="widget-id" class="widget-id" value="<?php echo esc_attr($id_format); ?>" /> 
    178179    <input type="hidden" name="id_base" class="id_base" value="<?php echo esc_attr($id_base); ?>" /> 
     
    184185 
    185186    <div class="widget-control-actions"> 
    186         <a class="button widget-control-remove alignleft" href="#remove"><?php _e('Remove'); ?></a> 
     187        <div class="alignleft"> 
     188        <a class="widget-control-remove" href="#remove"><?php _e('Remove'); ?></a> | 
     189        <a class="widget-control-close" href="#close"><?php _e('Close'); ?></a> 
     190        </div> 
    187191<?php       if ( 'noform' !== $has_form ) { ?> 
    188         <input type="submit" name="savewidget" class="button-primary widget-control-save alignright" value="<?php esc_attr_e('Save'); ?>" /> 
     192        <div class="alignright"> 
     193        <img src="images/wpspin_light.gif" class="ajax-feedback " title="" alt="" /> 
     194        <input type="submit" name="savewidget" class="button-primary widget-control-save" value="<?php esc_attr_e('Save'); ?>" /> 
     195        </div> 
    189196<?php       } ?> 
    190197        <br class="clear" /> 
  • trunk/wp-admin/js/widgets.dev.js

    r11445 r11498  
    9393 
    9494                if ( ui.item.hasClass('deleting') ) { 
    95                     wpWidgets.save( ui.item, 1, 0, 0, 1 ); // delete widget 
     95                    wpWidgets.save( ui.item, 1, 0, 1 ); // delete widget 
    9696                    ui.item.remove(); 
    9797                    return; 
     
    113113                    } 
    114114                    wpWidgets.addEvents(ui.item); 
    115                     wpWidgets.save( ui.item, 0, 0, 0, 1 ); 
     115                    wpWidgets.save( ui.item, 0, 0, 1 ); 
    116116                    ui.item.find('input.add_new').val(''); 
    117117                    ui.item.find('a.widget-action').click(); 
     
    126126        }).not(':visible').sortable('disable'); 
    127127        wpWidgets.resize(); 
    128  
    129         $('.widget-inside label').each(function(){ 
    130             var f = $(this).attr('for'); 
    131             if ( f && f == $('input', this).attr('id') ) 
    132                 $(this).removeAttr('for'); 
    133         }); 
     128        wpWidgets.fixLabels(); 
    134129    }, 
    135130 
     
    154149    }, 
    155150 
    156     save : function(widget, del, close, animate, order) { 
     151    save : function(widget, del, animate, order) { 
    157152        var sb = widget.parents('.widgets-sortables').attr('id'), data = widget.find('form').serialize(), a; 
    158153        widget = $(widget); 
    159         $('#' + sb).parents('.widgets-holder-wrap').find('.ajax-feedback').css('visibility', 'visible'); 
     154        widget.find('.ajax-feedback').css('visibility', 'visible'); 
    160155 
    161156        a = { 
     
    192187                    wpWidgets.resize(); 
    193188                } 
    194             } else if ( close ) { 
    195                 widget.find('.widget-inside').slideUp('fast', function(){ 
    196                     widget.css({'width':'','marginLeft':''}); 
     189            } else { 
     190                $('.ajax-feedback').css('visibility', 'hidden'); 
     191                if ( r && r.length > 2 ) { 
     192                    $('.widget-content', widget).html(r); 
    197193                    wpWidgets.appendTitle(widget); 
    198                     $('.ajax-feedback').css('visibility', 'hidden'); 
    199                 }); 
     194                    wpWidgets.fixLabels(widget); 
     195                } 
    200196            } 
    201197            if ( order ) 
     
    231227        }); 
    232228    }, 
     229     
     230    fixLabels : function(sc) { 
     231        sc = sc || document; 
     232 
     233        $('.widget-inside label', sc).each(function(){ 
     234            var f = $(this).attr('for'); 
     235 
     236            if ( f && f == $('input', this).attr('id') ) 
     237                $(this).removeAttr('for'); 
     238        }); 
     239    }, 
     240     
     241    close : function(widget) { 
     242        widget.find('.widget-inside').slideUp('fast', function(){ 
     243            widget.css({'width':'','marginLeft':''}); 
     244        }); 
     245    }, 
    233246 
    234247    addEvents : function(sc) { 
     
    250263        }); 
    251264        $('.widget-control-save', sc).click(function(){ 
    252             wpWidgets.save( $(this).parents('.widget'), 0, 1, 1, 0 ); 
     265            wpWidgets.save( $(this).parents('.widget'), 0, 1, 0 ); 
    253266            return false; 
    254267        }); 
    255268        $('.widget-control-remove', sc).click(function(){ 
    256             wpWidgets.save( $(this).parents('.widget'), 1, 1, 1, 0 ); 
     269            wpWidgets.save( $(this).parents('.widget'), 1, 1, 0 ); 
     270            return false; 
     271        }); 
     272        $('.widget-control-close', sc).click(function(){ 
     273            wpWidgets.close( $(this).parents('.widget') ); 
    257274            return false; 
    258275        }); 
  • trunk/wp-admin/js/widgets.js

    r11445 r11498  
    1 var wpWidgets;(function(a){wpWidgets={init:function(){var b;a("#widgets-right div.sidebar-name").click(function(){var d=a(this).siblings(".widgets-sortables");if(d.is(":visible")){d.sortable("disable");a(this).parent().addClass("closed")}else{a(this).parent().removeClass("closed");d.sortable("enable").sortable("refresh")}});a("#widgets-left div.sidebar-name").click(function(){if(a(this).siblings(".widget-holder").is(":visible")){a(this).parent().addClass("closed")}else{a(this).parent().removeClass("closed")}});a("#widgets-right .widget, #wp_inactive_widgets .widget").each(function(){wpWidgets.appendTitle(this)});this.addEvents();a(".widget-error").parents(".widget").find("a.widget-action").click();a("#available-widgets").droppable({tolerance:"pointer",accept:function(c){return a(c).parent().attr("id")!="widget-list"},drop:function(d,c){c.draggable.addClass("deleting");a("#removing-widget").hide().children("span").html("")},over:function(d,c){c.draggable.addClass("deleting");a(".widget-placeholder").hide();if(c.draggable.hasClass("ui-sortable-helper")){a("#removing-widget").show().children("span").html(c.draggable.find(".widget-title h4").html())}},out:function(d,c){c.draggable.removeClass("deleting");a(".widget-placeholder").show();a("#removing-widget").hide().children("span").html("")}});a("#widget-list .widget").draggable({connectToSortable:".widgets-sortables",handle:".widget-title",distance:2,helper:"clone",zIndex:5,containment:"document",start:function(d,c){wpWidgets.fixWebkit(1);c.helper.find(".widget-description").hide()},stop:function(d,c){if(b){a(b).hide()}b="";wpWidgets.fixWebkit()}});a(".widgets-sortables").sortable({placeholder:"widget-placeholder",connectWith:".widgets-sortables",items:".widget",handle:".widget-title",cursor:"move",distance:2,containment:"document",start:function(d,c){wpWidgets.fixWebkit(1);c.item.find(".widget-inside").hide();c.item.css({marginLeft:"",width:""})},stop:function(f,c){if(c.item.hasClass("ui-draggable")){c.item.draggable("destroy")}if(c.item.hasClass("deleting")){wpWidgets.save(c.item,1,0,0,1);c.item.remove();return}var d=c.item.find("input.add_new").val(),i=c.item.find("input.multi_number").val(),h=c.item.attr("id"),g=a(this).attr("id");c.item.css({marginLeft:"",width:""});wpWidgets.fixWebkit();if(d){if("multi"==d){c.item.html(c.item.html().replace(/<[^<>]+>/g,function(e){return e.replace(/__i__|%i%/g,i)}));c.item.attr("id",h.replace(/__i__|%i%/g,i));i++;a("div#"+h).find("input.multi_number").val(i)}else{if("single"==d){c.item.attr("id","new-"+h);b="div#"+h}}wpWidgets.addEvents(c.item);wpWidgets.save(c.item,0,0,0,1);c.item.find("input.add_new").val("");c.item.find("a.widget-action").click();return}wpWidgets.saveOrder(g)},receive:function(d,c){if(!a(this).is(":visible")){a(this).sortable("cancel")}}}).not(":visible").sortable("disable");wpWidgets.resize();a(".widget-inside label").each(function(){var c=a(this).attr("for");if(c&&c==a("input",this).attr("id")){a(this).removeAttr("for")}})},saveOrder:function(c){if(c){a("#"+c).parents(".widgets-holder-wrap").find(".ajax-feedback").css("visibility","visible")}var b={action:"widgets-order",savewidgets:a("#_wpnonce_widgets").val(),sidebars:[]};a(".widgets-sortables").each(function(){b["sidebars["+a(this).attr("id")+"]"]=a(this).sortable("toArray").join(",")});a.post(ajaxurl,b,function(){a(".ajax-feedback").css("visibility","hidden")});this.resize()},save:function(g,d,h,e,b){var i=g.parents(".widgets-sortables").attr("id"),f=g.find("form").serialize(),c;g=a(g);a("#"+i).parents(".widgets-holder-wrap").find(".ajax-feedback").css("visibility","visible");c={action:"save-widget",savewidgets:a("#_wpnonce_widgets").val(),sidebar:i};if(d){c.delete_widget=1}f+="&"+a.param(c);a.post(ajaxurl,f,function(j){var k;if(d){if(!a(".widget_number",g).val()){k=a(".widget-id",g).val();a("#available-widgets .widget-id").each(function(){if(a(this).val()==k){a(this).parents(".widget").show()}})}if(e){b=0;g.slideUp("fast",function(){a(this).remove();wpWidgets.saveOrder()})}else{g.remove();wpWidgets.resize()}}else{if(h){g.find(".widget-inside").slideUp("fast",function(){g.css({width:"",marginLeft:""});wpWidgets.appendTitle(g);a(".ajax-feedback").css("visibility","hidden")})}}if(b){wpWidgets.saveOrder()}})},appendTitle:function(b){a('input[type="text"]',b).each(function(){var c;if(this.id.indexOf("title")!=-1){c=a(this).val().replace(/<[^<>]+>/g,"").replace(/</g,"&lt;").replace(/>/g,"&gt;");if(c){a(".widget-title .in-widget-title",b).html(": "+c)}return false}})},resize:function(){a(".widgets-sortables").not("#wp_inactive_widgets").each(function(){var c=50,b=a(".widget",this).length;c=c+parseInt(b*48,10);a(this).css("minHeight",c+"px")})},fixWebkit:function(b){b=b?"none":"";a("body").css({WebkitUserSelect:b,KhtmlUserSelect:b})},addEvents:function(b){b=b||document;a("a.widget-action",b).click(function(){var d=parseInt(a(this).parents(".widget").find(".widget-width").val(),10),e={},c=a(this).parents(".widget-top").siblings(".widget-inside");if(c.is(":hidden")){if(d>250&&c.parents(".widgets-sortables").length){e.width=d+30+"px";if(c.parents(".widget-liquid-right").length){e.marginLeft=235-d+"px"}c.parents(".widget").css(e)}c.slideDown("fast")}else{c.slideUp("fast",function(){c.parents(".widget").css({width:"",marginLeft:""})})}return false});a(".widget-control-save",b).click(function(){wpWidgets.save(a(this).parents(".widget"),0,1,1,0);return false});a(".widget-control-remove",b).click(function(){wpWidgets.save(a(this).parents(".widget"),1,1,1,0);return false})}};a(document).ready(function(){wpWidgets.init()})})(jQuery); 
     1var wpWidgets;(function(a){wpWidgets={init:function(){var b;a("#widgets-right div.sidebar-name").click(function(){var d=a(this).siblings(".widgets-sortables");if(d.is(":visible")){d.sortable("disable");a(this).parent().addClass("closed")}else{a(this).parent().removeClass("closed");d.sortable("enable").sortable("refresh")}});a("#widgets-left div.sidebar-name").click(function(){if(a(this).siblings(".widget-holder").is(":visible")){a(this).parent().addClass("closed")}else{a(this).parent().removeClass("closed")}});a("#widgets-right .widget, #wp_inactive_widgets .widget").each(function(){wpWidgets.appendTitle(this)});this.addEvents();a(".widget-error").parents(".widget").find("a.widget-action").click();a("#available-widgets").droppable({tolerance:"pointer",accept:function(c){return a(c).parent().attr("id")!="widget-list"},drop:function(d,c){c.draggable.addClass("deleting");a("#removing-widget").hide().children("span").html("")},over:function(d,c){c.draggable.addClass("deleting");a(".widget-placeholder").hide();if(c.draggable.hasClass("ui-sortable-helper")){a("#removing-widget").show().children("span").html(c.draggable.find(".widget-title h4").html())}},out:function(d,c){c.draggable.removeClass("deleting");a(".widget-placeholder").show();a("#removing-widget").hide().children("span").html("")}});a("#widget-list .widget").draggable({connectToSortable:".widgets-sortables",handle:".widget-title",distance:2,helper:"clone",zIndex:5,containment:"document",start:function(d,c){wpWidgets.fixWebkit(1);c.helper.find(".widget-description").hide()},stop:function(d,c){if(b){a(b).hide()}b="";wpWidgets.fixWebkit()}});a(".widgets-sortables").sortable({placeholder:"widget-placeholder",connectWith:".widgets-sortables",items:".widget",handle:".widget-title",cursor:"move",distance:2,containment:"document",start:function(d,c){wpWidgets.fixWebkit(1);c.item.find(".widget-inside").hide();c.item.css({marginLeft:"",width:""})},stop:function(f,c){if(c.item.hasClass("ui-draggable")){c.item.draggable("destroy")}if(c.item.hasClass("deleting")){wpWidgets.save(c.item,1,0,1);c.item.remove();return}var d=c.item.find("input.add_new").val(),i=c.item.find("input.multi_number").val(),h=c.item.attr("id"),g=a(this).attr("id");c.item.css({marginLeft:"",width:""});wpWidgets.fixWebkit();if(d){if("multi"==d){c.item.html(c.item.html().replace(/<[^<>]+>/g,function(e){return e.replace(/__i__|%i%/g,i)}));c.item.attr("id",h.replace(/__i__|%i%/g,i));i++;a("div#"+h).find("input.multi_number").val(i)}else{if("single"==d){c.item.attr("id","new-"+h);b="div#"+h}}wpWidgets.addEvents(c.item);wpWidgets.save(c.item,0,0,1);c.item.find("input.add_new").val("");c.item.find("a.widget-action").click();return}wpWidgets.saveOrder(g)},receive:function(d,c){if(!a(this).is(":visible")){a(this).sortable("cancel")}}}).not(":visible").sortable("disable");wpWidgets.resize();wpWidgets.fixLabels()},saveOrder:function(c){if(c){a("#"+c).parents(".widgets-holder-wrap").find(".ajax-feedback").css("visibility","visible")}var b={action:"widgets-order",savewidgets:a("#_wpnonce_widgets").val(),sidebars:[]};a(".widgets-sortables").each(function(){b["sidebars["+a(this).attr("id")+"]"]=a(this).sortable("toArray").join(",")});a.post(ajaxurl,b,function(){a(".ajax-feedback").css("visibility","hidden")});this.resize()},save:function(g,d,e,b){var h=g.parents(".widgets-sortables").attr("id"),f=g.find("form").serialize(),c;g=a(g);g.find(".ajax-feedback").css("visibility","visible");c={action:"save-widget",savewidgets:a("#_wpnonce_widgets").val(),sidebar:h};if(d){c.delete_widget=1}f+="&"+a.param(c);a.post(ajaxurl,f,function(i){var j;if(d){if(!a(".widget_number",g).val()){j=a(".widget-id",g).val();a("#available-widgets .widget-id").each(function(){if(a(this).val()==j){a(this).parents(".widget").show()}})}if(e){b=0;g.slideUp("fast",function(){a(this).remove();wpWidgets.saveOrder()})}else{g.remove();wpWidgets.resize()}}else{a(".ajax-feedback").css("visibility","hidden");if(i&&i.length>2){a(".widget-content",g).html(i);wpWidgets.appendTitle(g);wpWidgets.fixLabels(g)}}if(b){wpWidgets.saveOrder()}})},appendTitle:function(b){a('input[type="text"]',b).each(function(){var c;if(this.id.indexOf("title")!=-1){c=a(this).val().replace(/<[^<>]+>/g,"").replace(/</g,"&lt;").replace(/>/g,"&gt;");if(c){a(".widget-title .in-widget-title",b).html(": "+c)}return false}})},resize:function(){a(".widgets-sortables").not("#wp_inactive_widgets").each(function(){var c=50,b=a(".widget",this).length;c=c+parseInt(b*48,10);a(this).css("minHeight",c+"px")})},fixWebkit:function(b){b=b?"none":"";a("body").css({WebkitUserSelect:b,KhtmlUserSelect:b})},fixLabels:function(b){b=b||document;a(".widget-inside label",b).each(function(){var c=a(this).attr("for");if(c&&c==a("input",this).attr("id")){a(this).removeAttr("for")}})},close:function(b){b.find(".widget-inside").slideUp("fast",function(){b.css({width:"",marginLeft:""})})},addEvents:function(b){b=b||document;a("a.widget-action",b).click(function(){var d=parseInt(a(this).parents(".widget").find(".widget-width").val(),10),e={},c=a(this).parents(".widget-top").siblings(".widget-inside");if(c.is(":hidden")){if(d>250&&c.parents(".widgets-sortables").length){e.width=d+30+"px";if(c.parents(".widget-liquid-right").length){e.marginLeft=235-d+"px"}c.parents(".widget").css(e)}c.slideDown("fast")}else{c.slideUp("fast",function(){c.parents(".widget").css({width:"",marginLeft:""})})}return false});a(".widget-control-save",b).click(function(){wpWidgets.save(a(this).parents(".widget"),0,1,0);return false});a(".widget-control-remove",b).click(function(){wpWidgets.save(a(this).parents(".widget"),1,1,0);return false});a(".widget-control-close",b).click(function(){wpWidgets.close(a(this).parents(".widget"));return false})}};a(document).ready(function(){wpWidgets.init()})})(jQuery); 
  • trunk/wp-includes/script-loader.php

    r11483 r11498  
    333333        $scripts->add_data( 'media-upload', 'group', 1 ); 
    334334 
    335         $scripts->add( 'admin-widgets', "/wp-admin/js/widgets$suffix.js", array( 'jquery-ui-sortable', 'jquery-ui-draggable', 'jquery-ui-droppable' ), '20090524' ); 
     335        $scripts->add( 'admin-widgets', "/wp-admin/js/widgets$suffix.js", array( 'jquery-ui-sortable', 'jquery-ui-draggable', 'jquery-ui-droppable' ), '20090530' ); 
    336336        $scripts->add_data( 'admin-widgets', 'group', 1 ); 
    337337 
     
    439439    $styles->add( 'global', '/wp-admin/css/global.css', array(), '20090514' ); 
    440440    $styles->add( 'media', '/wp-admin/css/media.css', array(), '20090516' ); 
    441     $styles->add( 'widgets', '/wp-admin/css/widgets.css', array(), '20090514' ); 
     441    $styles->add( 'widgets', '/wp-admin/css/widgets.css', array(), '20090530' ); 
    442442    $styles->add( 'dashboard', '/wp-admin/css/dashboard.css', array(), '20090514' ); 
    443443    $styles->add( 'install', '/wp-admin/css/install.css', array(), '20090514' ); 
  • trunk/wp-includes/widgets.php

    r11484 r11498  
    298298        } 
    299299 
    300         unset($settings['_multiwidget']); 
     300        unset($settings['_multiwidget'], $settings['__i__']); 
    301301        return $settings; 
    302302    } 
Note: See TracChangeset for help on using the changeset viewer.