diff --git a/wp-admin/js/widgets.dev.js b/wp-admin/js/widgets.dev.js index 73f28914cb..6c7f8fcd29 100644 --- a/wp-admin/js/widgets.dev.js +++ b/wp-admin/js/widgets.dev.js @@ -15,6 +15,7 @@ wpWidgets = { $(this).siblings('#widget-list').toggle(); }); this.addEvents(); + $('.widget-error').parents('.widget').find('a.widget-action').click(); $('#widget-list .widget').draggable({ connectToSortable: '.widgets-sortables', diff --git a/wp-admin/js/widgets.js b/wp-admin/js/widgets.js index a375f1d17e..11c68829e3 100644 --- a/wp-admin/js/widgets.js +++ b/wp-admin/js/widgets.js @@ -1 +1 @@ -var wpWidgets;(function(a){wpWidgets={init:function(){var b;a("h3.sidebar-name").click(function(){var d=a(this).siblings(".widgets-sortables");if(d.is(":visible")){d.hide().sortable("disable")}else{d.show().sortable("enable").sortable("refresh")}a(this).siblings("#widget-list").toggle()});this.addEvents();a("#widget-list .widget").draggable({connectToSortable:".widgets-sortables",handle:".widget-title",distance:2,helper:"clone",zIndex:5,start:function(){wpWidgets.fixWebkit(1)},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,opacity:0.65,start:function(d,c){wpWidgets.fixWebkit(1);c.item.find(".widget-inside").hide();c.item.css({marginLeft:"",width:""})},stop:function(f,c){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).parent().attr("id");c.item.css({marginLeft:"",width:""});if(d){if("multi"==d){c.item.html(c.item.html().replace(/<[^<>]+>/g,function(e){return e.replace(/__i__/g,i)}));c.item.attr("id",h.replace(/__i__/g,i));i++;a("li#"+h).find("input.multi_number").val(i)}else{if("single"==d){c.item.attr("id","new-"+h);b="li#"+h}}wpWidgets.addEvents(c.item);wpWidgets.save(c.item.find("form").serializeArray(),g,0,0);c.item.find("input.add_new").val("");c.item.find("a.widget-action").click()}wpWidgets.saveOrder(g);wpWidgets.fixWebkit()},receive:function(d,c){if(!a(this).is(":visible")){a(this).sortable("cancel")}}}).not(":visible").sortable("disable")},saveOrder:function(c){a("#"+c+" .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).parent().attr("id")+"]"]=a(this).sortable("toArray").join(",")});a.post(ajaxurl,b,function(){a(".ajax-feedback").css("visibility","hidden")})},save:function(e,f,c,d){a("#"+f+" .ajax-feedback").css("visibility","visible");var b={action:"save-widget",savewidgets:a("#_wpnonce_widgets").val(),sidebar:f};if(c){b.delete_widget=1}a.map(e,function(h,g){b[h.name]=h.value});a.post(ajaxurl,b,function(g){var h;a(".ajax-feedback").css("visibility","hidden");if(!d){return}if(c){a(d).parents("li.widget").slideUp("normal",function(){a(this).remove()});if(!b.widget_number){h=b["widget-id"];a("#available-widgets .widget-id").each(function(){if(a(this).val()==h){a(this).parents("li.widget").show()}})}}else{a(d).parents(".widget-inside").slideUp("normal",function(){a(this).parents("li.widget").css({width:"",marginLeft:""})})}})},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>270&&c.parents(".widgets-sortables").length){e.width=d+30+"px";if(c.parents(".widget-liquid-right").length){e.marginLeft=270-d+"px"}c.parents(".widget").css(e)}c.slideDown("normal")}else{c.slideUp("normal",function(){c.parents(".widget").css({width:"",marginLeft:""})})}return false});a(".widget-control-save",b).click(function(){wpWidgets.save(a(this).parents("form").serializeArray(),a(this).parents(".widgets-holder-wrap").attr("id"),0,this);return false});a(".widget-control-remove",b).click(function(){wpWidgets.save(a(this).parents("form").serializeArray(),a(this).parents(".widgets-holder-wrap").attr("id"),1,this);return false})}};a(document).ready(function(){wpWidgets.init()})})(jQuery); \ No newline at end of file +var wpWidgets;(function(a){wpWidgets={init:function(){var b;a("h3.sidebar-name").click(function(){var d=a(this).siblings(".widgets-sortables");if(d.is(":visible")){d.hide().sortable("disable")}else{d.show().sortable("enable").sortable("refresh")}a(this).siblings("#widget-list").toggle()});this.addEvents();a(".widget-error").parents(".widget").find("a.widget-action").click();a("#widget-list .widget").draggable({connectToSortable:".widgets-sortables",handle:".widget-title",distance:2,helper:"clone",zIndex:5,start:function(){wpWidgets.fixWebkit(1)},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,opacity:0.65,start:function(d,c){wpWidgets.fixWebkit(1);c.item.find(".widget-inside").hide();c.item.css({marginLeft:"",width:""})},stop:function(f,c){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).parent().attr("id");c.item.css({marginLeft:"",width:""});if(d){if("multi"==d){c.item.html(c.item.html().replace(/<[^<>]+>/g,function(e){return e.replace(/__i__/g,i)}));c.item.attr("id",h.replace(/__i__/g,i));i++;a("li#"+h).find("input.multi_number").val(i)}else{if("single"==d){c.item.attr("id","new-"+h);b="li#"+h}}wpWidgets.addEvents(c.item);wpWidgets.save(c.item.find("form").serializeArray(),g,0,0);c.item.find("input.add_new").val("");c.item.find("a.widget-action").click()}wpWidgets.saveOrder(g);wpWidgets.fixWebkit()},receive:function(d,c){if(!a(this).is(":visible")){a(this).sortable("cancel")}}}).not(":visible").sortable("disable")},saveOrder:function(c){a("#"+c+" .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).parent().attr("id")+"]"]=a(this).sortable("toArray").join(",")});a.post(ajaxurl,b,function(){a(".ajax-feedback").css("visibility","hidden")})},save:function(e,f,c,d){a("#"+f+" .ajax-feedback").css("visibility","visible");var b={action:"save-widget",savewidgets:a("#_wpnonce_widgets").val(),sidebar:f};if(c){b.delete_widget=1}a.map(e,function(h,g){b[h.name]=h.value});a.post(ajaxurl,b,function(g){var h;a(".ajax-feedback").css("visibility","hidden");if(!d){return}if(c){a(d).parents("li.widget").slideUp("normal",function(){a(this).remove()});if(!b.widget_number){h=b["widget-id"];a("#available-widgets .widget-id").each(function(){if(a(this).val()==h){a(this).parents("li.widget").show()}})}}else{a(d).parents(".widget-inside").slideUp("normal",function(){a(this).parents("li.widget").css({width:"",marginLeft:""})})}})},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>270&&c.parents(".widgets-sortables").length){e.width=d+30+"px";if(c.parents(".widget-liquid-right").length){e.marginLeft=270-d+"px"}c.parents(".widget").css(e)}c.slideDown("normal")}else{c.slideUp("normal",function(){c.parents(".widget").css({width:"",marginLeft:""})})}return false});a(".widget-control-save",b).click(function(){wpWidgets.save(a(this).parents("form").serializeArray(),a(this).parents(".widgets-holder-wrap").attr("id"),0,this);return false});a(".widget-control-remove",b).click(function(){wpWidgets.save(a(this).parents("form").serializeArray(),a(this).parents(".widgets-holder-wrap").attr("id"),1,this);return false})}};a(document).ready(function(){wpWidgets.init()})})(jQuery); \ No newline at end of file diff --git a/wp-includes/default-widgets.php b/wp-includes/default-widgets.php index e4a5dcb4d7..19f13fe2a2 100644 --- a/wp-includes/default-widgets.php +++ b/wp-includes/default-widgets.php @@ -505,10 +505,10 @@ class WP_Widget_Recent_Posts extends WP_Widget { function widget($args, $instance) { $cache = wp_cache_get('widget_recent_posts', 'widget'); - + if ( !is_array($cache) ) $cache = array(); - + if ( isset($cache[$args['widget_id']]) ) return $cache[$args['widget_id']]; @@ -547,7 +547,7 @@ class WP_Widget_Recent_Posts extends WP_Widget { $instance['title'] = strip_tags($new_instance['title']); $instance['number'] = (int) $new_instance['number']; $this->flush_widget_cache(); - + $alloptions = wp_cache_get( 'alloptions', 'options' ); if ( isset($alloptions['widget_recent_entries']) ) delete_option('widget_recent_entries'); @@ -594,7 +594,7 @@ class WP_Widget_Recent_Comments extends WP_Widget { add_action( 'comment_post', array(&$this, 'flush_widget_cache') ); add_action( 'wp_set_comment_status', array(&$this, 'flush_widget_cache') ); } - + function recent_comments_style() { ?> 15 ) $number = 15; - + if ( !$comments = wp_cache_get( 'recent_comments', 'widget' ) ) { $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_approved = '1' ORDER BY comment_date_gmt DESC LIMIT 15"); wp_cache_add( 'recent_comments', $comments, 'widget' ); } - + $comments = array_slice( (array) $comments, 0, $number ); ?> @@ -664,63 +664,74 @@ class WP_Widget_Recent_Comments extends WP_Widget { } /** - * Display RSS widget. + * RSS widget class * - * Allows for multiple widgets to be displayed. - * - * @since 2.2.0 - * - * @param array $args Widget arguments. - * @param int $number Widget number. + * @since 2.8.0 */ -function wp_widget_rss($args, $widget_args = 1) { - extract($args, EXTR_SKIP); - if ( is_numeric($widget_args) ) - $widget_args = array( 'number' => $widget_args ); - $widget_args = wp_parse_args( $widget_args, array( 'number' => -1 ) ); - extract($widget_args, EXTR_SKIP); +class WP_Widget_RSS extends WP_Widget { - $options = get_option('widget_rss'); - - if ( !isset($options[$number]) ) - return; - - if ( isset($options[$number]['error']) && $options[$number]['error'] ) - return; - - $url = $options[$number]['url']; - while ( stristr($url, 'http') != $url ) - $url = substr($url, 1); - if ( empty($url) ) - return; - - $rss = fetch_feed($url); - $title = $options[$number]['title']; - $desc = ''; - $link = ''; - if ( ! is_wp_error($rss) ) { - $desc = attribute_escape(strip_tags(@html_entity_decode($rss->get_description(), ENT_QUOTES, get_option('blog_charset')))); - if ( empty($title) ) - $title = htmlentities(strip_tags($rss->get_title())); - $link = clean_url(strip_tags($rss->get_permalink())); - while ( stristr($link, 'http') != $link ) - $link = substr($link, 1); + function WP_Widget_RSS() { + $widget_ops = array( 'description' => __('Entries from any RSS or Atom feed') ); + $control_ops = array( 'width' => 400, 'height' => 200 ); + $this->WP_Widget( 'rss', __('RSS'), $widget_ops, $control_ops ); } - if ( empty($title) ) - $title = $desc; - if ( empty($title) ) - $title = __('Unknown Feed'); - $title = apply_filters('widget_title', $title ); - $url = clean_url(strip_tags($url)); - $icon = includes_url('images/rss.png'); - $title = " $title"; - echo $before_widget; - echo $before_title . $title . $after_title; + function widget($args, $instance) { - wp_widget_rss_output( $rss, $options[$number] ); + if ( isset($instance['error']) && $instance['error'] ) + return; - echo $after_widget; + extract($args, EXTR_SKIP); + + $url = $instance['url']; + while ( stristr($url, 'http') != $url ) + $url = substr($url, 1); + + if ( empty($url) ) + return; + + $rss = fetch_feed($url); + $title = $instance['title']; + $desc = ''; + $link = ''; + + if ( ! is_wp_error($rss) ) { + $desc = attribute_escape(strip_tags(@html_entity_decode($rss->get_description(), ENT_QUOTES, get_option('blog_charset')))); + if ( empty($title) ) + $title = htmlentities(strip_tags($rss->get_title())); + $link = clean_url(strip_tags($rss->get_permalink())); + while ( stristr($link, 'http') != $link ) + $link = substr($link, 1); + } + + if ( empty($title) ) + $title = empty($desc) ? __('Unknown Feed') : $desc; + + $title = apply_filters('widget_title', $title ); + $url = clean_url(strip_tags($url)); + $icon = includes_url('images/rss.png'); + $title = " $title"; + + echo $before_widget; + echo $before_title . $title . $after_title; + wp_widget_rss_output( $rss, $instance ); + echo $after_widget; + } + + function update($new_instance, $old_instance) { + $testurl = $new_instance['url'] != $old_instance['url']; + return wp_widget_rss_process( $new_instance, $testurl ); + } + + function form($instance) { + + if ( empty($instance) ) + $instance = array( 'number' => '__i__', 'title' => '', 'url' => '', 'items' => 10, 'error' => false, 'show_summary' => 0, 'show_author' => 0, 'show_date' => 0 ); + else + $instance['number'] = $this->number; + + wp_widget_rss_form( $instance ); + } } /** @@ -742,11 +753,9 @@ function wp_widget_rss_output( $rss, $args = array() ) { } if ( is_wp_error($rss) ) { - if ( is_admin() || current_user_can('manage_options') ) { - echo '
'; - printf(__('RSS Error: %s'), $rss->get_error_message()); - echo '
'; - } + if ( is_admin() || current_user_can('manage_options') ) + echo '' . sprintf( __('RSS Error: %s'), $rss->get_error_message() ) . '
'; + return; } @@ -814,75 +823,7 @@ function wp_widget_rss_output( $rss, $args = array() ) { echo ''; } -/** - * Display and process RSS widget control form. - * - * @since 2.2.0 - * - * @param int $widget_args Widget number. - */ -function wp_widget_rss_control($widget_args) { - global $wp_registered_widgets; - static $updated = false; - if ( is_numeric($widget_args) ) - $widget_args = array( 'number' => $widget_args ); - $widget_args = wp_parse_args( $widget_args, array( 'number' => -1 ) ); - extract($widget_args, EXTR_SKIP); - - $options = get_option('widget_rss'); - if ( !is_array($options) ) - $options = array(); - - $urls = array(); - foreach ( (array) $options as $option ) - if ( isset($option['url']) ) - $urls[$option['url']] = true; - - if ( !$updated && 'POST' == $_SERVER['REQUEST_METHOD'] && !empty($_POST['sidebar']) ) { - $sidebar = (string) $_POST['sidebar']; - - $sidebars_widgets = wp_get_sidebars_widgets(); - if ( isset($sidebars_widgets[$sidebar]) ) - $this_sidebar =& $sidebars_widgets[$sidebar]; - else - $this_sidebar = array(); - - foreach ( (array) $this_sidebar as $_widget_id ) { - if ( 'wp_widget_rss' == $wp_registered_widgets[$_widget_id]['callback'] && isset($wp_registered_widgets[$_widget_id]['params'][0]['number']) ) { - $widget_number = $wp_registered_widgets[$_widget_id]['params'][0]['number']; - if ( !in_array( "rss-$widget_number", $_POST['widget-id'] ) ) // the widget has been removed. - unset($options[$widget_number]); - } - } - - foreach( (array) $_POST['widget-rss'] as $widget_number => $widget_rss ) { - if ( !isset($widget_rss['url']) && isset($options[$widget_number]) ) // user clicked cancel - continue; - $widget_rss = stripslashes_deep( $widget_rss ); - $url = sanitize_url(strip_tags($widget_rss['url'])); - $options[$widget_number] = wp_widget_rss_process( $widget_rss, !isset($urls[$url]) ); - } - - update_option('widget_rss', $options); - $updated = true; - } - - if ( -1 == $number ) { - $title = ''; - $url = ''; - $items = 10; - $error = false; - $number = '__i__'; - $show_summary = 0; - $show_author = 0; - $show_date = 0; - } else { - extract( (array) $options[$number] ); - } - - wp_widget_rss_form( compact( 'number', 'title', 'url', 'items', 'error', 'show_summary', 'show_author', 'show_date' ) ); -} /** * Display RSS widget options form. @@ -913,11 +854,8 @@ function wp_widget_rss_form( $args, $inputs = null ) { $show_author = (int) $show_author; $show_date = (int) $show_date; - if ( !empty($error) ) { - $message = sprintf( __('Error in RSS Widget: %s'), $error); - echo "$message