Make WordPress Core

Changeset 8720


Ignore:
Timestamp:
08/24/2008 06:56:22 AM (16 years ago)
Author:
azaozz
Message:

Reply to comments from admin, first run, see #7435

Location:
trunk
Files:
4 added
22 edited

Legend:

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

    r8712 r8720  
    423423        ) );
    424424    }
     425    $x->send();
     426    break;
     427case 'replyto-comment' :
     428    check_ajax_referer( $action );
     429
     430    $comment_post_ID = (int) $_POST['comment_post_ID'];
     431    if ( !current_user_can( 'edit_post', $comment_post_ID ) )
     432        die('-1');
     433
     434    $status = $wpdb->get_var( $wpdb->prepare("SELECT post_status FROM $wpdb->posts WHERE ID = %d", $comment_post_ID) );
     435
     436    if ( empty($status) )
     437        die('1');
     438    elseif ( in_array($status->post_status, array('draft', 'pending') ) )
     439        die( __('Error: you are replying to comment on a draft post.') );
     440
     441    $user = wp_get_current_user();
     442    if ( $user->ID ) {
     443        $comment_author       = $wpdb->escape($user->display_name);
     444        $comment_author_email = $wpdb->escape($user->user_email);
     445        $comment_author_url   = $wpdb->escape($user->user_url);
     446        $comment_content      = trim($_POST['comment']);
     447        if ( current_user_can('unfiltered_html') ) {
     448            if ( wp_create_nonce('unfiltered-html-comment_' . $comment_post_ID) != $_POST['_wp_unfiltered_html_comment'] ) {
     449                kses_remove_filters(); // start with a clean slate
     450                kses_init_filters(); // set up the filters
     451            }
     452        }
     453    } else {
     454        die( __('Sorry, you must be logged in to reply to a comment.') );
     455    }
     456
     457    if ( '' == $comment_content )
     458        die( __('Error: please type a comment.') );
     459
     460    $comment_parent = absint($_POST['comment_ID']);
     461    $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'comment_parent', 'user_ID');
     462
     463    $comment_id = wp_new_comment( $commentdata );
     464    $comment = get_comment($comment_id);
     465    if ( ! $comment ) die('1');
     466
     467    $mode = ( isset($_POST['mode']) && 'single' == $_POST['mode'] ) ? 'single' : 'detail';
     468    $position = ( isset($_POST['position']) && (int) $_POST['position']) ? (int) $_POST['position'] : '-1';
     469    $checkbox = ( isset($_POST['checkbox']) && true == $_POST['checkbox'] ) ? 1 : 0;
     470
     471    if ( get_option('show_avatars') && 'single' != $mode )
     472        add_filter( 'comment_author', 'floated_admin_avatar' );
     473
     474    $x = new WP_Ajax_Response();
     475
     476    ob_start();
     477        _wp_comment_row( $comment->comment_ID, $mode, false, $checkbox );
     478        $comment_list_item = ob_get_contents();
     479    ob_end_clean();
     480
     481    $x->add( array(
     482        'what' => 'comment',
     483        'id' => $comment->comment_ID,
     484        'data' => $comment_list_item,
     485        'position' => $position
     486    ));
     487
    425488    $x->send();
    426489    break;
  • trunk/wp-admin/admin-footer.php

    r8697 r8720  
    1111</div><!-- wpbody -->
    1212</div><!-- wpcontent -->
    13 </div><!-- wpwrap -->
     13<br class="clear" /></div><!-- wpwrap -->
    1414<div id="footer">
    1515<p><?php
  • trunk/wp-admin/css/colors-classic.css

    r8691 r8720  
    5555
    5656li.widget-list-control-item, div.nav, .tablenav, #dashboard-widgets p.dashboard-widget-links,
    57 ul.view-switch li.current, .form-table tr, #poststuff h3,
     57ul.view-switch li.current, .form-table tr, #poststuff h3, #replyhandle,
    5858.login form, h3.info-box-title, #post-status-info {
    5959    background-color: #cfebf7;
     
    7171#post-body ul#category-tabs li.ui-tabs-selected, .button-secondary,
    7272#quicktags, #login form .submit input, #post-search .button,
    73 #post-search-prep .button {
     73#post-search-prep .button, #ed_reply_toolbar {
    7474    background-color: #8ebddc !important;
    7575}
     
    377377}
    378378
    379 #ed_toolbar input {
     379#ed_toolbar input, #ed_reply_toolbar input {
    380380    background: url( ../images/fade-butt.png ) #fff repeat-x 0 -2px;
    381381}
  • trunk/wp-admin/css/colors-fresh.css

    r8691 r8720  
    5555
    5656li.widget-list-control-item, div.nav, .tablenav, #dashboard-widgets p.dashboard-widget-links,
    57 ul.view-switch li.current, .form-table tr, #poststuff h3,
     57ul.view-switch li.current, .form-table tr, #poststuff h3, #replyhandle,
    5858.login form, h3.info-box-title, #post-status-info {
    5959    background-color: #eaf3fa;
     
    7171#post-body ul#category-tabs li.ui-tabs-selected, .button-secondary,
    7272#quicktags, #login form .submit input, #post-search .button,
    73 #post-search-prep .button {
     73#post-search-prep .button, #ed_reply_toolbar {
    7474    background-color: #cee1ef !important;
    7575}
     
    366366}
    367367
    368 #ed_toolbar input {
     368#ed_toolbar input, #ed_reply_toolbar input {
    369369    background: url( ../images/fade-butt.png ) #fff repeat-x 0 -2px;
    370370}
  • trunk/wp-admin/edit-comments.php

    r8710 r8720  
    1212$title = __('Edit Comments');
    1313wp_enqueue_script( 'admin-comments' );
    14 wp_enqueue_script('admin-forms');
     14wp_enqueue_script( 'admin-forms' );
     15wp_enqueue_script( 'quicktags' );
    1516
    1617if ( !empty( $_REQUEST['delete_comments'] ) && isset($_REQUEST['action']) ) {
     
    5455require_once('admin-header.php');
    5556
    56 if ( empty($_GET['mode']) )
    57     $mode = 'detail';
    58 else
    59     $mode = attribute_escape($_GET['mode']);
    60 
    61 if ( isset($_GET['comment_status']) )
    62     $comment_status = attribute_escape($_GET['comment_status']);
    63 else
    64     $comment_status = '';
    65 
    66 if ( isset($_GET['s']) )
    67     $search_dirty = $_GET['s'];
    68 else
    69     $search_dirty = '';
     57$mode = ( ! isset($_GET['mode']) || empty($_GET['mode']) ) ? 'detail' : attribute_escape($_GET['mode']);
     58
     59$comment_status = isset($_GET['comment_status']) ? attribute_escape($_GET['comment_status']) : '';
     60
     61$search_dirty = ( isset($_GET['s']) ) ? $_GET['s'] : '';
    7062$search = attribute_escape( $search_dirty );
    7163?>
     
    216208    <th scope="col" class="comment-column"><?php _e('Comment') ?></th>
    217209    <th scope="col" class="author-column"><?php _e('Author') ?></th>
    218     <th scope="col" class="date-column"><?php _e('Comment Submitted') ?></th>
     210    <th scope="col" class="date-column"><?php _e('Submitted') ?></th>
    219211    <th scope="col" class="response-column"><?php _e('In Response To This Post') ?></th>
    220212  </tr>
     
    270262</div>
    271263
    272 <?php include('admin-footer.php'); ?>
     264<?php
     265wp_comment_reply('-1', true, 'detail');
     266include('admin-footer.php'); ?>
  • trunk/wp-admin/edit-form-advanced.php

    r8712 r8720  
    326326</table>
    327327
    328 
    329 <?php
    330 
    331 
    332 
     328<?php
    333329}
    334330add_meta_box('commentstatusdiv', __('Comments on this Post'), 'post_comment_status_meta_box', 'post', 'normal', 'core');
     
    542538</form>
    543539
     540<?php wp_comment_reply(); ?>
     541
    544542<?php if ((isset($post->post_title) && '' == $post->post_title) || (isset($_GET['message']) && 2 > $_GET['message'])) : ?>
    545543<script type="text/javascript">
  • trunk/wp-admin/edit-pages.php

    r8682 r8720  
    6969if ( is_singular() )
    7070    wp_enqueue_script( 'admin-comments' );
     71
    7172require_once('admin-header.php');
    7273
     
    241242
    242243<?php
    243 
     244wp_comment_reply();
    244245endif; // comments
    245246endif; // posts;
  • trunk/wp-admin/edit.php

    r8694 r8720  
    5454list($post_stati, $avail_post_stati) = wp_edit_posts_query();
    5555
    56 if ( 1 == count($posts) && is_singular() )
     56if ( 1 == count($posts) && is_singular() ) {
    5757    wp_enqueue_script( 'admin-comments' );
     58    wp_enqueue_script( 'quicktags' );
     59}
     60
    5861require_once('admin-header.php');
    5962
     
    268271
    269272<?php
    270 
     273wp_comment_reply();
    271274endif; // comments
    272275endif; // posts;
  • trunk/wp-admin/gears-manifest.php

    r8618 r8720  
    136136{
    137137"betaManifestVersion" : 1,
    138 "version" : "<?php echo $man_version; ?>_20080731",
     138"version" : "<?php echo $man_version; ?>_20080823",
    139139"entries" : [
    140140<?php echo $defaults; ?>
     
    174174{ "url" : "images/no.png" },
    175175{ "url" : "images/yes.png" },
     176{ "url" : "images/se.png" },
    176177
    177178<?php if ( is_file('../wp-includes/js/tinymce/tiny_mce.js') ) { ?>
  • trunk/wp-admin/includes/template.php

    r8715 r8720  
    800800
    801801    if ( current_user_can('edit_post', $comment->comment_post_ID) ) {
    802         $actions['approve']   = "<a href='$approve_url' class='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=approved' title='" . __( 'Approve this comment' ) . "'>" . __( 'Approve' ) . '</a> | ';
    803         $actions['unapprove'] = "<a href='$unapprove_url' class='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=unapproved' title='" . __( 'Unapprove this comment' ) . "'>" . __( 'Unapprove' ) . '</a> | ';
     802        $actions['approve']   = "<a href='$approve_url' class='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=approved' title='" . __( 'Approve this comment' ) . "'>" . __( 'Approve' ) . "</a> | ";
     803        $actions['unapprove'] = "<a href='$unapprove_url' class='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=unapproved' title='" . __( 'Unapprove this comment' ) . "'>" . __( 'Unapprove' ) . "</a> | ";
    804804        $actions['edit']      = "<a href='comment.php?action=editcomment&amp;c={$comment->comment_ID}' title='" . __('Edit comment') . "'>". __('Edit') . '</a> | ';
    805         $actions['flag']      = "<a href='#' class='no-crazy'>Flag for Follow-up</a> | ";
    806         $actions['spam']      = "<a href='$spam_url' class='delete:the-comment-list:comment-$comment->comment_ID::spam=1' title='" . __( 'Mark this comment as spam' ) . "'>" . __( 'Spam' ) . '</a> | ';
     805        if ( 'spam' != $the_comment_status )
     806            $actions['spam']      = "<a href='$spam_url' class='delete:the-comment-list:comment-$comment->comment_ID::spam=1' title='" . __( 'Mark this comment as spam' ) . "'>" . __( 'Spam' ) . '</a> | ';
    807807        $actions['delete']    = "<a href='$delete_url' class='delete:the-comment-list:comment-$comment->comment_ID delete'>" . __('Delete') . '</a>';
    808808
     
    817817        }
    818818
    819         if ( 'spam' == $the_comment_status )
    820             unset($actions['spam']);
     819        if ( 'spam' != $the_comment_status )
     820            $actions['reply'] = ' | <a onclick="commentReply.open(\''.$comment->comment_ID.'\',\''.$post->ID.'\',this);return false;" title="'.__('Reply to this comment').'" href="#">' . __('Reply') . '</a>';
    821821
    822822        $actions = apply_filters( 'comment_row_actions', $actions, $comment );
    823823
    824824        foreach ( $actions as $action => $link )
    825             echo "<span class='$action'>$link</span>";
     825            echo "<span class='$action'>$link</span>\n";
    826826    }
    827827    ?>
     
    842842<?php if ( 'single' !== $mode ) : ?>
    843843    <td class="response-column">
    844     "<?php echo $post_link ?>" <?php echo sprintf('(%s comments)', $post->comment_count); ?><br/>
     844    "<?php echo $post_link ?>" <?php echo sprintf('(%s comments)', $post->comment_count); ?><br />
    845845    <?php echo get_the_time(__('Y/m/d \a\t g:ia')); ?>
    846846    </td>
     
    848848  </tr>
    849849    <?php
     850}
     851
     852function wp_comment_reply($position = '1', $checkbox = false, $mode = 'single') {
     853    global $current_user;
     854
     855    // allow plugin to replace the popup content
     856    $content = apply_filters( 'wp_comment_reply', '' );
     857   
     858    if ( ! empty($content) ) {
     859        echo $content;
     860        return;
     861    }
     862?>
     863    <div id="replyerror" style="display:none;">
     864    <img src="images/logo.gif" />
     865    <h3 class="info-box-title"><?php _e('Comment Reply Error'); ?></h3>
     866    <p id="replyerrtext"></p>
     867    <p class="submit"><button id="close-button" onclick="commentReply.close();" class="button"><?php _e('Close'); ?></button></p>
     868    </div>
     869   
     870    <div id="replydiv" style="display:none;">
     871    <p id="replyhandle"><?php _e('Reply'); ?></p>
     872    <form action="" method="post" id="replyform">
     873    <input type="hidden" name="user_ID" id="user_ID" value="<?php echo $current_user->ID; ?>" />
     874    <input type="hidden" name="action" value="replyto-comment" />
     875    <input type="hidden" name="comment_ID" id="comment_ID" value="" />
     876    <input type="hidden" name="comment_post_ID" id="comment_post_ID" value="" />
     877    <input type="hidden" name="position" id="position" value="<?php echo $position; ?>" />
     878    <input type="hidden" name="checkbox" id="checkbox" value="<?php echo $checkbox ? 1 : 0; ?>" />
     879    <input type="hidden" name="mode" id="mode" value="<?php echo $mode; ?>" />
     880    <?php wp_nonce_field( 'replyto-comment', '_ajax_nonce', false ); ?>
     881    <?php wp_comment_form_unfiltered_html_nonce(); ?>
     882
     883    <div id="replycontainer"><textarea rows="5" cols="50" name="replycontent" tabindex="10" id="replycontent"></textarea></div>
     884
     885    <p id="replysubmit"><input type="button" onclick="commentReply.close();" class="button" value="<?php _e('Cancel'); ?>" />
     886    <input type="button" onclick="commentReply.send();" class="button" value="<?php _e('Submit Reply'); ?>" /></p>
     887    </form>
     888    </div>
     889<?php
    850890}
    851891
  • trunk/wp-admin/js/edit-comments.js

    r8691 r8720  
    7979theList = $('#the-comment-list').wpList( { alt: '', dimAfter: dimAfter, delAfter: delAfter, addColor: 'none' } );
    8080
    81 } );
     81});
     82
     83(function($){
     84
     85commentReply = {
     86
     87    open : function(c, p) {
     88        var d = $('#comment-'+c).offset(), H = $('#replydiv').height(), top = 200, left = 100, h = 120;
     89
     90        if ( d && H ) {
     91            top = (d.top - H) < 10 ? 10 : d.top - H - 5;
     92            left = d.left;
     93        }
     94
     95        $('#replydiv').show();
     96        $('#replydiv #comment_post_ID').val(p);
     97        $('#replydiv #comment_ID').val(c);
     98
     99        $('#replydiv').draggable({
     100            handle : '#replyhandle',
     101            containment : '#wpwrap'
     102        });
     103
     104        $('#replydiv').resizable({
     105            handles : 'se',
     106            minHeight : 200,
     107            minWidth : 400,
     108            containment : '#wpwrap',
     109            resize : function(e,o) {
     110                h = o.size.height - 80 - $('#ed_reply_qtags').height();
     111                $('#replycontainer').height(h);
     112            },
     113            stop : function(e,o) {
     114                if ( $.browser.msie )
     115                    $('#replycontent').height(h);
     116            }
     117        });
     118
     119        $('.ui-resizable-se').css({
     120            border: '0 none',
     121            width: '11px',
     122            height: '12px',
     123            background: 'transparent url(images/se.png) no-repeat scroll 0 0'
     124        });
     125
     126        $('#replydiv').css({
     127            'position' : 'absolute',
     128            'top' : top,
     129            'left' : left
     130        });
     131
     132        $('#replycontent').focus().keyup(function(e){
     133            if (e.which == 27) commentReply.close(); // close on Escape
     134        });
     135       
     136        // emulate the Safari/Opera scrollIntoView
     137        var to = $('#replydiv').offset();
     138        var scr = document.documentElement.scrollTop ? document.documentElement.scrollTop : 0;
     139
     140        if ( scr - 20 > to.top )
     141            window.scroll(0, to.top - 100);
     142    },
     143
     144    close : function() {
     145        $('#replycontent').val('');
     146        $('#replyerror').hide();
     147
     148        $('#replydiv').draggable('destroy').resizable('destroy').css('position','relative');
     149        $('#replydiv').hide();
     150        return false;
     151    },
     152
     153    send : function() {
     154        var post = {};
     155
     156        $('#replyform input').each(function() {
     157            post[ $(this).attr('name') ] = $(this).val();
     158        });
     159
     160        post.comment = $('#replycontent').val();
     161        post.id = post.comment_post_ID;
     162
     163        $.ajax({
     164            type : 'POST',
     165            url : wpListL10n.url,
     166            data : post,
     167            success : function(x) { commentReply.show(x); },
     168            error : function(r) { commentReply.error(r); }
     169        });
     170    },
     171
     172    show : function(xml) {
     173
     174        if ( typeof(xml) == 'string' ) {
     175            this.error({'responseText': xml});
     176            return;
     177        }
     178
     179        var r = wpAjax.parseAjaxResponse(xml);
     180        if ( r.errors )
     181            this.error({'responseText': wpAjax.broken});
     182
     183        r = r.responses[0];
     184        this.close();
     185//      var scr1 = $('#the-comment-list').offset(), scr2 = $('#the-comment-list').height();
     186
     187        if ( r.position == -1 ) {
     188//          window.scroll(0, scr1.top - 100); // Scroll to the new comment? Seems annoing..
     189            $('#the-comment-list').prepend(r.data);
     190        } else {
     191//          window.scroll(0, scr1.top + scr2 + 200);
     192            $('#the-comment-list').append(r.data);
     193        }
     194
     195        $('#comment-'+r.id)
     196            .animate( { backgroundColor:"#CFEBF7" }, 600 )
     197            .animate( { backgroundColor:"transparent" }, 600 );
     198    },
     199
     200    error : function(r) {
     201        var er = r.statusText;
     202
     203        if ( r.responseText )
     204            er = r.responseText.replace( /<.[^<>]*?>/g, '' );
     205
     206        if ( er ) {
     207            var o = $('#replydiv').offset();
     208            $('#replydiv').hide();
     209
     210            $('#replyerror').css({
     211                'top' : o.top + 60 + 'px',
     212                'left' : o.left + 'px'
     213            }).show().draggable();
     214
     215            $('#replyerrtext').html(er)
     216            $('#close-button').css('outline','none').focus().keyup(function(e) {
     217                if (e.which == 27) commentReply.close(); // close on Escape
     218            });
     219        }
     220    }
     221}
     222
     223$(document).ready(function(){
     224    if ( typeof QTags != 'undefined' )
     225        ed_reply = new QTags('ed_reply', 'replycontent', 'replycontainer', 'more');
     226});
     227
     228})(jQuery);
  • trunk/wp-admin/js/editor.js

    r8600 r8720  
    11wpEditorInit = function() {
    2     // Activate tinyMCE if it's the user's default editor
    3     if ( ( 'undefined' == typeof wpTinyMCEConfig ) || 'tinymce' == wpTinyMCEConfig.defaultEditor ) {
    4         document.getElementById('editorcontainer').style.padding = '0px';
    5         tinyMCE.execCommand("mceAddControl", false, "content");
     2    var H;
     3
     4    // Activate tinyMCE if it's the user's default editor
     5    if ( ( 'undefined' == typeof wpTinyMCEConfig ) || 'tinymce' == wpTinyMCEConfig.defaultEditor ) {
     6        try { document.getElementById('editorcontainer').style.padding = '0px'; } catch(e){};
     7        try { document.getElementById("quicktags").style.display = "none"; } catch(e){};
     8        tinyMCE.execCommand("mceAddControl", false, "content");
    69    } else {
    7         var H;
    8         if ( H = tinymce.util.Cookie.getHash("TinyMCE_content_size") )
    9             document.getElementById('content').style.height = H.ch - 30 + 'px';
    10     }
     10        if ( H = tinymce.util.Cookie.getHash("TinyMCE_content_size") )
     11            try { document.getElementById('content').style.height = H.ch - 30 + 'px'; } catch(e){};
     12    }
    1113};
    1214
    1315switchEditors = {
    1416
    15     saveCallback : function(el, content, body) {
     17    saveCallback : function(el, content, body) {
    1618
    17         document.getElementById(el).style.color = '#fff';
    18         if ( tinyMCE.activeEditor.isHidden() )
    19             content = document.getElementById(el).value;
    20         else
    21             content = this.pre_wpautop(content);
     19        document.getElementById(el).style.color = '#fff';
     20        if ( tinyMCE.activeEditor.isHidden() )
     21            content = document.getElementById(el).value;
     22        else
     23            content = this.pre_wpautop(content);
    2224
    23         return content;
    24     },
     25        return content;
     26    },
    2527
    26     pre_wpautop : function(content) {
    27         // We have a TON of cleanup to do. Line breaks are already stripped.
     28    pre_wpautop : function(content) {
     29        // We have a TON of cleanup to do. Line breaks are already stripped.
    2830
    29         // Protect pre|script tags
    30         content = content.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g, function(a) {
    31             a = a.replace(/<br ?\/?>[\r\n]*/g, '<wp_temp>');
    32             return a.replace(/<\/?p( [^>]*)?>[\r\n]*/g, '<wp_temp>');
    33         });
     31        // Protect pre|script tags
     32        content = content.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g, function(a) {
     33            a = a.replace(/<br ?\/?>[\r\n]*/g, '<wp_temp>');
     34            return a.replace(/<\/?p( [^>]*)?>[\r\n]*/g, '<wp_temp>');
     35        });
    3436
    35         // Pretty it up for the source editor
    36         var blocklist1 = 'blockquote|ul|ol|li|table|thead|tbody|tr|th|td|div|h[1-6]|p';
    37         content = content.replace(new RegExp('\\s*</('+blocklist1+')>\\s*', 'mg'), '</$1>\n');
    38         content = content.replace(new RegExp('\\s*<(('+blocklist1+')[^>]*)>', 'mg'), '\n<$1>');
     37        // Pretty it up for the source editor
     38        var blocklist1 = 'blockquote|ul|ol|li|table|thead|tbody|tr|th|td|div|h[1-6]|p';
     39        content = content.replace(new RegExp('\\s*</('+blocklist1+')>\\s*', 'mg'), '</$1>\n');
     40        content = content.replace(new RegExp('\\s*<(('+blocklist1+')[^>]*)>', 'mg'), '\n<$1>');
    3941
    40         // Mark </p> if it has any attributes.
    41         content = content.replace(new RegExp('(<p [^>]+>.*?)</p>', 'mg'), '$1</p#>');
     42        // Mark </p> if it has any attributes.
     43        content = content.replace(new RegExp('(<p [^>]+>.*?)</p>', 'mg'), '$1</p#>');
    4244
    43         // Sepatate <div> containing <p>
    44         content = content.replace(new RegExp('<div([^>]*)>\\s*<p>', 'mgi'), '<div$1>\n\n');
     45        // Sepatate <div> containing <p>
     46        content = content.replace(new RegExp('<div([^>]*)>\\s*<p>', 'mgi'), '<div$1>\n\n');
    4547
    46         // Remove <p> and <br />
    47         content = content.replace(new RegExp('\\s*<p>', 'mgi'), '');
    48         content = content.replace(new RegExp('\\s*</p>\\s*', 'mgi'), '\n\n');
    49         content = content.replace(new RegExp('\\n\\s*\\n', 'mgi'), '\n\n');
    50         content = content.replace(new RegExp('\\s*<br ?/?>\\s*', 'gi'), '\n');
     48        // Remove <p> and <br />
     49        content = content.replace(new RegExp('\\s*<p>', 'mgi'), '');
     50        content = content.replace(new RegExp('\\s*</p>\\s*', 'mgi'), '\n\n');
     51        content = content.replace(new RegExp('\\n\\s*\\n', 'mgi'), '\n\n');
     52        content = content.replace(new RegExp('\\s*<br ?/?>\\s*', 'gi'), '\n');
    5153
    52         // Fix some block element newline issues
    53         content = content.replace(new RegExp('\\s*<div', 'mg'), '\n<div');
    54         content = content.replace(new RegExp('</div>\\s*', 'mg'), '</div>\n');
     54        // Fix some block element newline issues
     55        content = content.replace(new RegExp('\\s*<div', 'mg'), '\n<div');
     56        content = content.replace(new RegExp('</div>\\s*', 'mg'), '</div>\n');
    5557        content = content.replace(new RegExp('\\s*\\[caption([^\\[]+)\\[/caption\\]\\s*', 'gi'), '\n\n[caption$1[/caption]\n\n');
    5658        content = content.replace(new RegExp('caption\\]\\n\\n+\\[caption', 'g'), 'caption]\n\n[caption');
    5759
    58         var blocklist2 = 'blockquote|ul|ol|li|table|thead|tr|th|td|h[1-6]|pre';
    59         content = content.replace(new RegExp('\\s*<(('+blocklist2+') ?[^>]*)\\s*>', 'mg'), '\n<$1>');
    60         content = content.replace(new RegExp('\\s*</('+blocklist2+')>\\s*', 'mg'), '</$1>\n');
    61         content = content.replace(new RegExp('<li([^>]*)>', 'g'), '\t<li$1>');
     60        var blocklist2 = 'blockquote|ul|ol|li|table|thead|tr|th|td|h[1-6]|pre';
     61        content = content.replace(new RegExp('\\s*<(('+blocklist2+') ?[^>]*)\\s*>', 'mg'), '\n<$1>');
     62        content = content.replace(new RegExp('\\s*</('+blocklist2+')>\\s*', 'mg'), '</$1>\n');
     63        content = content.replace(new RegExp('<li([^>]*)>', 'g'), '\t<li$1>');
    6264
    63         if ( content.indexOf('<object') != -1 ) {
    64             content = content.replace(new RegExp('\\s*<param([^>]*)>\\s*', 'mg'), "<param$1>");
    65             content = content.replace(new RegExp('\\s*</embed>\\s*', 'mg'), '</embed>');
    66         }
     65        if ( content.indexOf('<object') != -1 ) {
     66            content = content.replace(new RegExp('\\s*<param([^>]*)>\\s*', 'mg'), "<param$1>");
     67            content = content.replace(new RegExp('\\s*</embed>\\s*', 'mg'), '</embed>');
     68        }
    6769
    68         // Unmark special paragraph closing tags
    69         content = content.replace(new RegExp('</p#>', 'g'), '</p>\n');
    70         content = content.replace(new RegExp('\\s*(<p [^>]+>.*</p>)', 'mg'), '\n$1');
     70        // Unmark special paragraph closing tags
     71        content = content.replace(new RegExp('</p#>', 'g'), '</p>\n');
     72        content = content.replace(new RegExp('\\s*(<p [^>]+>.*</p>)', 'mg'), '\n$1');
    7173
    72         // Trim whitespace
    73         content = content.replace(new RegExp('^\\s*', ''), '');
    74         content = content.replace(new RegExp('[\\s\\u00a0]*$', ''), '');
     74        // Trim whitespace
     75        content = content.replace(new RegExp('^\\s*', ''), '');
     76        content = content.replace(new RegExp('[\\s\\u00a0]*$', ''), '');
    7577
    76         // put back the line breaks in pre|script
    77         content = content.replace(/<wp_temp>/g, '\n');
     78        // put back the line breaks in pre|script
     79        content = content.replace(/<wp_temp>/g, '\n');
    7880
    79         // Hope.
    80         return content;
    81     },
     81        // Hope.
     82        return content;
     83    },
    8284
    83     go : function(id) {
    84         var ed = tinyMCE.get(id);
    85         var qt = document.getElementById('quicktags');
    86         var H = document.getElementById('edButtonHTML');
    87         var P = document.getElementById('edButtonPreview');
    88         var ta = document.getElementById(id);
    89         var ec = document.getElementById('editorcontainer');
     85    go : function(id) {
     86        var ed = tinyMCE.get(id);
     87        var qt = document.getElementById('quicktags');
     88        var H = document.getElementById('edButtonHTML');
     89        var P = document.getElementById('edButtonPreview');
     90        var ta = document.getElementById(id);
     91        var ec = document.getElementById('editorcontainer');
    9092
    91         if ( ! ed || ed.isHidden() ) {
    92             ta.style.color = '#fff';
     93        if ( ! ed || ed.isHidden() ) {
     94            ta.style.color = '#fff';
    9395
    94             this.edToggle(P, H);
    95             edCloseAllTags(); // :-(
     96            this.edToggle(P, H);
     97            edCloseAllTags(); // :-(
    9698
    97             qt.style.display = 'none';
    98             ec.style.padding = '0px';
    99             ta.style.padding = '0px';
     99            qt.style.display = 'none';
     100            ec.style.padding = '0px';
     101            ta.style.padding = '0px';
    100102
    101             ta.value = this.wpautop(ta.value);
     103            ta.value = this.wpautop(ta.value);
    102104
    103             if ( ed ) ed.show();
    104             else tinyMCE.execCommand("mceAddControl", false, id);
     105            if ( ed ) ed.show();
     106            else tinyMCE.execCommand("mceAddControl", false, id);
    105107
    106             this.wpSetDefaultEditor('tinymce');
    107         } else {
    108             this.edToggle(H, P);
    109             ta.style.height = ed.getContentAreaContainer().offsetHeight + 6 + 'px';
     108            this.wpSetDefaultEditor('tinymce');
     109        } else {
     110            this.edToggle(H, P);
     111            ta.style.height = ed.getContentAreaContainer().offsetHeight + 6 + 'px';
    110112
    111             ed.hide();
    112             qt.style.display = 'block';
     113            ed.hide();
     114            qt.style.display = 'block';
    113115
    114             if ( tinymce.isIE6 ) {
     116            if ( tinymce.isIE6 ) {
    115117                ta.style.width = '98%';
    116118                ec.style.padding = '0px';
     
    119121                ta.style.width = '100%';
    120122                ec.style.padding = '6px';
    121             }
     123            }
    122124
    123             ta.style.color = '';
    124             this.wpSetDefaultEditor('html');
    125         }
    126     },
     125            ta.style.color = '';
     126            this.wpSetDefaultEditor('html');
     127        }
     128    },
    127129
    128     edToggle : function(A, B) {
    129         A.className = 'active';
    130         B.className = '';
     130    edToggle : function(A, B) {
     131        A.className = 'active';
     132        B.className = '';
    131133
    132         B.onclick = A.onclick;
    133         A.onclick = null;
    134     },
     134        B.onclick = A.onclick;
     135        A.onclick = null;
     136    },
    135137
    136     wpSetDefaultEditor : function(editor) {
    137         try {
    138             editor = escape( editor.toString() );
    139         } catch(err) {
    140             editor = 'tinymce';
    141         }
     138    wpSetDefaultEditor : function(editor) {
     139        try {
     140            editor = escape( editor.toString() );
     141        } catch(err) {
     142            editor = 'tinymce';
     143        }
    142144
    143         var userID = document.getElementById('user-id');
    144         var date = new Date();
    145         date.setTime(date.getTime()+(10*365*24*60*60*1000));
    146         document.cookie = "wordpress_editor_" + userID.value + "=" + editor + "; expires=" + date.toGMTString();
    147     },
     145        var userID = document.getElementById('user-id');
     146        var date = new Date();
     147        date.setTime(date.getTime()+(10*365*24*60*60*1000));
     148        document.cookie = "wordpress_editor_" + userID.value + "=" + editor + "; expires=" + date.toGMTString();
     149    },
    148150
    149     wpautop : function(pee) {
    150         var blocklist = 'table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6]';
     151    wpautop : function(pee) {
     152        var blocklist = 'table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6]';
    151153
    152         pee = pee + "\n\n";
    153         pee = pee.replace(new RegExp('<br />\\s*<br />', 'gi'), "\n\n");
    154         pee = pee.replace(new RegExp('(<(?:'+blocklist+')[^>]*>)', 'gi'), "\n$1");
    155         pee = pee.replace(new RegExp('(</(?:'+blocklist+')>)', 'gi'), "$1\n\n");
    156         pee = pee.replace(new RegExp("\\r\\n|\\r", 'g'), "\n");
    157         pee = pee.replace(new RegExp("\\n\\s*\\n+", 'g'), "\n\n");
    158         pee = pee.replace(new RegExp('([\\s\\S]+?)\\n\\n', 'mg'), "<p>$1</p>\n");
    159         pee = pee.replace(new RegExp('<p>\\s*?</p>', 'gi'), '');
    160         pee = pee.replace(new RegExp('<p>\\s*(</?(?:'+blocklist+')[^>]*>)\\s*</p>', 'gi'), "$1");
    161         pee = pee.replace(new RegExp("<p>(<li.+?)</p>", 'gi'), "$1");
    162         pee = pee.replace(new RegExp('<p>\\s*<blockquote([^>]*)>', 'gi'), "<blockquote$1><p>");
    163         pee = pee.replace(new RegExp('</blockquote>\\s*</p>', 'gi'), '</p></blockquote>');
    164         pee = pee.replace(new RegExp('<p>\\s*(</?(?:'+blocklist+')[^>]*>)', 'gi'), "$1");
    165         pee = pee.replace(new RegExp('(</?(?:'+blocklist+')[^>]*>)\\s*</p>', 'gi'), "$1");
    166         pee = pee.replace(new RegExp('\\s*\\n', 'gi'), "<br />\n");
    167         pee = pee.replace(new RegExp('(</?(?:'+blocklist+')[^>]*>)\\s*<br />', 'gi'), "$1");
    168         pee = pee.replace(new RegExp('<br />(\\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)>)', 'gi'), '$1');
    169         pee = pee.replace(new RegExp('(?:<p>|<br ?/?>)*\\s*\\[caption([^\\[]+)\\[/caption\\]\\s*(?:</p>|<br ?/?>)*', 'gi'), '[caption$1[/caption]');
    170         // pee = pee.replace(new RegExp('^((?:&nbsp;)*)\\s', 'mg'), '$1&nbsp;');
     154        pee = pee + "\n\n";
     155        pee = pee.replace(new RegExp('<br />\\s*<br />', 'gi'), "\n\n");
     156        pee = pee.replace(new RegExp('(<(?:'+blocklist+')[^>]*>)', 'gi'), "\n$1");
     157        pee = pee.replace(new RegExp('(</(?:'+blocklist+')>)', 'gi'), "$1\n\n");
     158        pee = pee.replace(new RegExp("\\r\\n|\\r", 'g'), "\n");
     159        pee = pee.replace(new RegExp("\\n\\s*\\n+", 'g'), "\n\n");
     160        pee = pee.replace(new RegExp('([\\s\\S]+?)\\n\\n', 'mg'), "<p>$1</p>\n");
     161        pee = pee.replace(new RegExp('<p>\\s*?</p>', 'gi'), '');
     162        pee = pee.replace(new RegExp('<p>\\s*(</?(?:'+blocklist+')[^>]*>)\\s*</p>', 'gi'), "$1");
     163        pee = pee.replace(new RegExp("<p>(<li.+?)</p>", 'gi'), "$1");
     164        pee = pee.replace(new RegExp('<p>\\s*<blockquote([^>]*)>', 'gi'), "<blockquote$1><p>");
     165        pee = pee.replace(new RegExp('</blockquote>\\s*</p>', 'gi'), '</p></blockquote>');
     166        pee = pee.replace(new RegExp('<p>\\s*(</?(?:'+blocklist+')[^>]*>)', 'gi'), "$1");
     167        pee = pee.replace(new RegExp('(</?(?:'+blocklist+')[^>]*>)\\s*</p>', 'gi'), "$1");
     168        pee = pee.replace(new RegExp('\\s*\\n', 'gi'), "<br />\n");
     169        pee = pee.replace(new RegExp('(</?(?:'+blocklist+')[^>]*>)\\s*<br />', 'gi'), "$1");
     170        pee = pee.replace(new RegExp('<br />(\\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)>)', 'gi'), '$1');
     171        pee = pee.replace(new RegExp('(?:<p>|<br ?/?>)*\\s*\\[caption([^\\[]+)\\[/caption\\]\\s*(?:</p>|<br ?/?>)*', 'gi'), '[caption$1[/caption]');
     172        // pee = pee.replace(new RegExp('^((?:&nbsp;)*)\\s', 'mg'), '$1&nbsp;');
    171173
    172         // Fix the pre|script tags
    173         pee = pee.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g, function(a) {
     174        // Fix the pre|script tags
     175        pee = pee.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g, function(a) {
    174176            a = a.replace(/<br ?\/?>[\r\n]*/g, '\n');
    175177            return a.replace(/<\/?p( [^>]*)?>[\r\n]*/g, '\n');
    176         });
     178        });
    177179
    178         return pee;
    179     }
     180        return pee;
     181    }
    180182}
  • trunk/wp-admin/post.php

    r8691 r8720  
    131131    wp_enqueue_script('media-upload');
    132132    wp_enqueue_script('word-count');
     133    wp_enqueue_script( 'admin-comments' );
    133134
    134135    if ( current_user_can('edit_post', $post_ID) ) {
  • trunk/wp-admin/upload.php

    r8682 r8720  
    1010require_once('admin.php');
    1111add_thickbox();
    12 wp_enqueue_script('media-upload');
     12wp_enqueue_script( 'media-upload' );
     13wp_enqueue_script( 'quicktags' );
    1314
    1415if (!current_user_can('upload_files'))
     
    264265</div>
    265266
    266 <?php include('admin-footer.php'); ?>
     267<?php
     268wp_comment_reply();
     269include('admin-footer.php');
     270?>
  • trunk/wp-admin/wp-admin.css

    r8700 r8720  
    321321}
    322322
    323 #ed_toolbar input {
     323#ed_toolbar input,
     324#ed_reply_toolbar input {
    324325    margin: 3px 2px 2px;
    325326    padding: 2px 4px;
     
    328329}
    329330
    330 #quicktags #ed_strong {
     331#quicktags #ed_strong,
     332#ed_reply_toolbar #ed_reply_strong {
    331333    font-weight: bold;
    332334}
    333335
    334 #quicktags #ed_link {
     336#quicktags #ed_link,
     337#ed_reply_toolbar #ed_reply_link {
    335338    text-decoration: underline;
    336339}
    337340
    338 #quicktags #ed_del {
     341#quicktags #ed_del,
     342#ed_reply_toolbar #ed_reply_del {
    339343    text-decoration: line-through;
    340344}
    341345
    342 #quicktags #ed_em {
     346#quicktags #ed_em,
     347#ed_reply_toolbar #ed_reply_em {
    343348    font-style: italic;
    344349}
    345350
    346 #quicktags #ed_code {
     351#quicktags #ed_code,
     352#ed_reply_toolbar #ed_reply_code {
    347353    font-family: "Courier New", Courier, mono;
    348354    font-size: 1.1em;
     
    503509}
    504510
     511.comment-column p {
     512    margin-top: 0;
     513}
     514
    505515.comment-column {
    506516    width: 50%;
    507 }
    508 
    509 .comment-column p {
    510     margin-top: 0;
    511517}
    512518
     
    17611767    line-height: 2;
    17621768    margin: 0;
    1763     padding: 0 7px;
     1769    padding: 4px 8px;
     1770    font: 18px Georgia, "Times New Roman", Times, serif;
    17641771}
    17651772
     
    18101817}
    18111818
    1812 
    1813 /* fixed bottom bar */
    1814 .postarea h3 label {
    1815 
    1816 }
    1817 
    1818 #footer {
    1819     z-index: -1;
    1820 }
    1821 
    1822 #fixedbar {
    1823     bottom:0pt;
    1824     height:80px;
    1825     position:fixed;
    1826     width:100%;
    1827     z-index: 100;
    1828 }
    1829 
    1830 #fixedbar #submitpost {
    1831    
    1832 }
    1833 
    1834 #fixedbar .submit {
    1835     padding-top: 10px;
    1836 }
    1837 
    1838 #fixedbar .button {
    1839     border: none;
    1840     -moz-border-radius: 6px;
    1841     -khtml-border-radius: 6px;
    1842     -webkit-border-radius: 6px;
    1843     border-radius: 6px;
    1844 }
    1845 
    1846 #fixedbar .button:hover {
    1847     background: #fff;
    1848 }
    1849 
    1850 #fixedbar #publish {
    1851     font-weight:bold;
    1852     width:160px;
    1853 }
    1854 
    1855 #fixedbar #save-post {
    1856     width:80px;
    1857     font-weight:normal;
    1858 }
    1859 
    1860 #fixedbar .submitbox {
    1861     padding: 14px 18px;
    1862     border-left: 1px solid #aaa;
    1863     width: 690px;
    1864 }
    1865 
    1866 #fixedbar #post-time-info,
    1867 #fixedbar #comment-time-info {
    1868     margin-top: 16px;
    1869 }
    1870 
    1871 #fixedbar #timestampdiv input,
    1872 #fixedbar #timestampdiv select {
    1873     background-color:#464646;
    1874     border:1px solid #777777;
    1875     color:#CCCCCC;
    1876     padding:2px;
    1877 }
    1878 
    1879 #fixedbar-wrap {
    1880     width: 100%;
    1881 }
    1882 
    1883 #preview-link {
    1884     text-align: right;
    1885 }
    1886 
    1887 #preview-link a {
    1888     padding-right:10px;
    1889 }
    1890 
    18911819p#post-search-prep {
    1892     margin:0pt;
    1893     position:absolute;
    1894     right:20px;
    1895     top:50px;
     1820    margin: 0;
     1821    position: absolute;
     1822    right: 20px;
     1823    top: 50px;
    18961824}
    18971825
     
    19161844
    19171845/* media popup 0819 */
    1918 
    19191846#sidemenu {
    19201847    margin: -30px 15px 0 315px;
     
    20011928    width:200px;
    20021929}
     1930
     1931/* reply to comments */
     1932#replydiv {
     1933    width: 700px;
     1934    border-color: #EBEBEB #CCCCCC #CCCCCC #EBEBEB;
     1935    border-width: 1px;
     1936    border-style: solid;
     1937    padding: 2px;
     1938    background-color: #fff;
     1939    left: 20px;
     1940    top: 300px;
     1941}
     1942
     1943#replydiv #editorcontainer {
     1944    border: 0 none;
     1945}
     1946
     1947#replysubmit {
     1948    margin: 0;
     1949    padding: 3px 5px;
     1950    background-color: #EAF3FA;
     1951    border-top: 1px solid #ddd;
     1952}
     1953
     1954#replydiv #editor-toolbar {
     1955    display: none;
     1956}
     1957
     1958#replydiv #replyhandle {
     1959    cursor: move;
     1960    margin: 0;
     1961    font-size: 14px;
     1962    font-weight: bold;
     1963    padding: 7px;
     1964}
     1965
     1966#replycontainer {
     1967    padding: 6px;
     1968    border: 0 none;
     1969    height: 100%;
     1970    overflow: hidden;
     1971}
     1972
     1973#replycontent {
     1974    resize: none;
     1975    margin: 0;
     1976    width: 100%;
     1977    height: 100%;
     1978    padding: 0;
     1979    line-height: 150%;
     1980    border: 0 none;
     1981    outline: none;
     1982}
     1983
     1984#ed_reply_toolbar {
     1985    margin: 0;
     1986    padding: 2px 4px;
     1987}
     1988
     1989#replyerror {
     1990    border: 5px solid #ddd;
     1991    background-color: #f8f8f8;
     1992    position: absolute;
     1993    padding: 15px 15px 10px;
     1994    width: 500px;
     1995    z-index: 1000;
     1996    display: none;
     1997}
     1998
     1999#replyerror img {
     2000    float: right;
     2001    margin: 15px;
     2002}
     2003
     2004#replyerror p.submit {
     2005    padding: 10px 0 0;
     2006}
     2007
     2008#replyerror .error {
     2009    margin: 15px 0 0;
     2010}
  • trunk/wp-comments-post.php

    r8149 r8720  
    6767    wp_die( __('Error: please type a comment.') );
    6868
    69 $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'user_ID');
     69$comment_parent = isset($_POST['comment_parent']) ? absint($_POST['comment_parent']) : 0;
     70
     71$commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'comment_parent', 'user_ID');
    7072
    7173$comment_id = wp_new_comment( $commentdata );
  • trunk/wp-includes/comment.php

    r8622 r8720  
    392392        $dupe .= "OR comment_author_email = '$comment_author_email' ";
    393393    $dupe .= ") AND comment_content = '$comment_content' LIMIT 1";
    394     if ( $wpdb->get_var($dupe) )
     394    if ( $wpdb->get_var($dupe) ) {
     395        if ( defined('DOING_AJAX') )
     396            die( __('Duplicate comment detected; it looks as though you\'ve already said that!') );
     397
    395398        wp_die( __('Duplicate comment detected; it looks as though you\'ve already said that!') );
     399    }
    396400
    397401    do_action( 'check_comment_flood', $comment_author_IP, $comment_author_email, $comment_date_gmt );
     
    444448        if ( $flood_die ) {
    445449            do_action('comment_flood_trigger', $time_lastcomment, $time_newcomment);
     450
     451            if ( defined('DOING_AJAX') )
     452                die( __('You are posting comments too quickly.  Slow down.') );
     453
    446454            wp_die( __('You are posting comments too quickly.  Slow down.') );
    447455        }
     
    753761    $commentdata['comment_post_ID'] = (int) $commentdata['comment_post_ID'];
    754762    $commentdata['user_ID']         = (int) $commentdata['user_ID'];
     763
     764    $commentdata['comment_parent'] = absint($commentdata['comment_parent']);
     765    $parent_status = ( 0 < $commentdata['comment_parent'] ) ? wp_get_comment_status($commentdata['comment_parent']) : '';
     766    $commentdata['comment_parent'] = ( 'approved' == $parent_status || 'unapproved' == $parent_status ) ? $commentdata['comment_parent'] : 0;
    755767
    756768    $commentdata['comment_author_IP'] = preg_replace( '/[^0-9a-fA-F:., ]/', '',$_SERVER['REMOTE_ADDR'] );
  • trunk/wp-includes/general-template.php

    r8691 r8720  
    956956    $rows = "rows='$rows'"; ?>
    957957    <div id="editor-toolbar">
    958     <?php if ( user_can_richedit() ) {
     958    <?php if ( user_can_richedit() && $media_buttons ) {
    959959        $wp_default_editor = wp_default_editor(); ?>
    960960        <div class="zerosize"><input accesskey="e" type="button" onclick="switchEditors.go('<?php echo $id; ?>')" /></div>
     
    968968            <a id="edButtonPreview" onclick="switchEditors.go('<?php echo $id; ?>');"><?php _e('Visual'); ?></a>
    969969        <?php }
    970     }
     970    } else
     971        add_filter('the_editor_content', 'wp_htmledit_pre');
    971972
    972973/*  if ( $media_buttons ) { ?>
     
    982983    </div>
    983984
    984     <?php if ( 'html' != $wp_default_editor ) : ?>
    985     <script type="text/javascript">
    986     // <![CDATA[
    987         if ( typeof tinyMCE != "undefined" )
    988             document.getElementById("quicktags").style.display="none";
    989     // ]]>
    990     </script>
    991     <?php endif; // 'html' != $wp_default_editor
    992 
    993     $the_editor = apply_filters('the_editor', "<div id='editorcontainer'><textarea class='' $rows cols='40' name='$id' tabindex='$tab_index' id='$id'>%s</textarea></div>\n");
     985    <?php $the_editor = apply_filters('the_editor', "<div id='editorcontainer'><textarea $rows cols='40' name='$id' tabindex='$tab_index' id='$id'>%s</textarea></div>\n");
    994986    $the_editor_content = apply_filters('the_editor_content', $content);
    995987
     
    997989
    998990    ?>
    999     <script type="text/javascript">
    1000     // <![CDATA[
    1001     edCanvas = document.getElementById('<?php echo $id; ?>');
    1002     <?php if ( $prev_id && user_can_richedit() ) : ?>
    1003     // If tinyMCE is defined.
    1004     if ( typeof tinyMCE != 'undefined' ) {
    1005     // This code is meant to allow tabbing from Title to Post (TinyMCE).
    1006         document.getElementById('<?php echo $prev_id; ?>').onkeydown = function (e) {
    1007             e = e || window.event;
    1008             if (e.keyCode == 9 && !e.shiftKey && !e.controlKey && !e.altKey) {
    1009                 if ( tinyMCE.activeEditor ) {
    1010                     if ( (jQuery("#post_ID").val() < 1) && (jQuery("#title").val().length > 0) ) { autosave(); }
    1011                     e = null;
    1012                     if ( tinyMCE.activeEditor.isHidden() ) return true;
    1013                     tinyMCE.activeEditor.focus();
    1014                     return false;
    1015                 }
    1016                 return true;
    1017             }
    1018         }
    1019     }
    1020     <?php endif; ?>
    1021     // ]]>
    1022     </script>
    1023     <?php
     991    <script type="text/javascript">
     992    // <![CDATA[
     993    edCanvas = document.getElementById('<?php echo $id; ?>');
     994    <?php if ( user_can_richedit() && $prev_id ) { ?>
     995    // If tinyMCE is defined.
     996    if ( typeof tinyMCE != 'undefined' ) {
     997        // This code is meant to allow tabbing from Title to Post (TinyMCE).
     998        document.getElementById('<?php echo $prev_id; ?>').onkeydown = function (e) {
     999            e = e || window.event;
     1000            if (e.keyCode == 9 && !e.shiftKey && !e.controlKey && !e.altKey) {
     1001                if ( tinyMCE.activeEditor ) {
     1002                    if ( (jQuery("#post_ID").val() < 1) && (jQuery("#title").val().length > 0) ) { autosave(); }
     1003                    e = null;
     1004                    if ( tinyMCE.activeEditor.isHidden() ) return true;
     1005                    tinyMCE.activeEditor.focus();
     1006                    return false;
     1007                }
     1008                return true;
     1009            }
     1010        }
     1011    }
     1012    <?php } ?>
     1013    // ]]>
     1014    </script>
     1015    <?php
    10241016}
    10251017
  • trunk/wp-includes/js/quicktags.js

    r7130 r8720  
    388388    }
    389389}
     390
     391
     392// Allow multiple instances.
     393// Name = unique value, id = textarea id, container = container div.
     394// Can disable some buttons by passing comma delimited string as 4th param.
     395var QTags = function(name, id, container, disabled) {
     396    var t = this;
     397
     398    t.Buttons = [];
     399    t.Links = [];
     400    t.OpenTags = [];
     401    t.Canvas = document.getElementById(id);
     402
     403    disabled = ( typeof disabled != 'undefined' ) ? ','+disabled+',' : '';
     404
     405    t.edShowButton = function(button, i) {
     406        if ( disabled && (disabled.indexOf(','+button.display+',') != -1) )
     407            return '';
     408        else if ( button.id == name+'_img' )
     409            return '<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertImage('+name+'.Canvas);" value="' + button.display + '" />';
     410        else if (button.id == name+'_link')
     411            return '<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="'+name+'.edInsertLink('+i+');" value="'+button.display+'" />';
     412        else
     413            return '<input type="button" id="' + button.id + '" accesskey="'+button.access+'" class="ed_button" onclick="'+name+'.edInsertTag('+i+');" value="'+button.display+'" />';
     414    };
     415
     416    t.edAddTag = function(button) {
     417        if ( t.Buttons[button].tagEnd != '' ) {
     418            t.OpenTags[t.OpenTags.length] = button;
     419            document.getElementById(t.Buttons[button].id).value = '/' + document.getElementById(t.Buttons[button].id).value;
     420        }
     421    };
     422
     423    t.edRemoveTag = function(button) {
     424        for ( var i = 0; i < t.OpenTags.length; i++ ) {
     425            if ( t.OpenTags[i] == button ) {
     426                t.OpenTags.splice(i, 1);
     427                document.getElementById(t.Buttons[button].id).value = document.getElementById(t.Buttons[button].id).value.replace('/', '');
     428            }
     429        }
     430    };
     431
     432    t.edCheckOpenTags = function(button) {
     433        var tag = 0;
     434        for ( var i = 0; i < t.OpenTags.length; i++ ) {
     435            if ( t.OpenTags[i] == button )
     436                tag++;
     437        }
     438        if ( tag > 0 ) return true; // tag found
     439        else return false; // tag not found
     440    };
     441
     442    this.edCloseAllTags = function() {
     443        var count = t.OpenTags.length;
     444        for ( var o = 0; o < count; o++ )
     445            t.edInsertTag(t.OpenTags[t.OpenTags.length - 1]);
     446    };
     447
     448    this.edQuickLink = function(i, thisSelect) {
     449        if ( i > -1 ) {
     450            var newWin = '';
     451            if ( Links[i].newWin == 1 ) {
     452                newWin = ' target="_blank"';
     453            }
     454            var tempStr = '<a href="' + Links[i].URL + '"' + newWin + '>'
     455                        + Links[i].display
     456                        + '</a>';
     457            thisSelect.selectedIndex = 0;
     458            edInsertContent(t.Canvas, tempStr);
     459        } else {
     460            thisSelect.selectedIndex = 0;
     461        }
     462    };
     463
     464    // insertion code
     465    t.edInsertTag = function(i) {
     466        //IE support
     467        if ( document.selection ) {
     468            t.Canvas.focus();
     469            sel = document.selection.createRange();
     470            if ( sel.text.length > 0 ) {
     471                sel.text = t.Buttons[i].tagStart + sel.text + t.Buttons[i].tagEnd;
     472            } else {
     473                if ( ! t.edCheckOpenTags(i) || t.Buttons[i].tagEnd == '' ) {
     474                    sel.text = t.Buttons[i].tagStart;
     475                    t.edAddTag(i);
     476                } else {
     477                    sel.text = t.Buttons[i].tagEnd;
     478                    t.edRemoveTag(i);
     479                }
     480            }
     481            t.Canvas.focus();
     482        } else if ( t.Canvas.selectionStart || t.Canvas.selectionStart == '0' ) { //MOZILLA/NETSCAPE support
     483            var startPos = t.Canvas.selectionStart;
     484            var endPos = t.Canvas.selectionEnd;
     485            var cursorPos = endPos;
     486            var scrollTop = t.Canvas.scrollTop;
     487
     488            if ( startPos != endPos ) {
     489                t.Canvas.value = t.Canvas.value.substring(0, startPos)
     490                              + t.Buttons[i].tagStart
     491                              + t.Canvas.value.substring(startPos, endPos)
     492                              + t.Buttons[i].tagEnd
     493                              + t.Canvas.value.substring(endPos, t.Canvas.value.length);
     494                cursorPos += t.Buttons[i].tagStart.length + t.Buttons[i].tagEnd.length;
     495            } else {
     496                if ( !t.edCheckOpenTags(i) || t.Buttons[i].tagEnd == '' ) {
     497                    t.Canvas.value = t.Canvas.value.substring(0, startPos)
     498                                  + t.Buttons[i].tagStart
     499                                  + t.Canvas.value.substring(endPos, t.Canvas.value.length);
     500                    t.edAddTag(i);
     501                    cursorPos = startPos + t.Buttons[i].tagStart.length;
     502                } else {
     503                    t.Canvas.value = t.Canvas.value.substring(0, startPos)
     504                                  + t.Buttons[i].tagEnd
     505                                  + t.Canvas.value.substring(endPos, t.Canvas.value.length);
     506                    t.edRemoveTag(i);
     507                    cursorPos = startPos + t.Buttons[i].tagEnd.length;
     508                }
     509            }
     510            t.Canvas.focus();
     511            t.Canvas.selectionStart = cursorPos;
     512            t.Canvas.selectionEnd = cursorPos;
     513            t.Canvas.scrollTop = scrollTop;
     514        } else {
     515            if ( ! t.edCheckOpenTags(i) || t.Buttons[i].tagEnd == '' ) {
     516                t.Canvas.value += Buttons[i].tagStart;
     517                t.edAddTag(i);
     518            } else {
     519                t.Canvas.value += Buttons[i].tagEnd;
     520                t.edRemoveTag(i);
     521            }
     522            t.Canvas.focus();
     523        }
     524    };
     525
     526    this.edInsertLink = function(i, defaultValue) {
     527        if ( ! defaultValue )
     528            defaultValue = 'http://';
     529
     530        if ( ! t.edCheckOpenTags(i) ) {
     531            var URL = prompt(quicktagsL10n.enterURL, defaultValue);
     532            if ( URL ) {
     533                t.Buttons[i].tagStart = '<a href="' + URL + '">';
     534                t.edInsertTag(i);
     535            }
     536        } else {
     537            t.edInsertTag(i);
     538        }
     539    };
     540
     541    this.edInsertImage = function() {
     542        var myValue = prompt(quicktagsL10n.enterImageURL, 'http://');
     543        if ( myValue ) {
     544            myValue = '<img src="'
     545                    + myValue
     546                    + '" alt="' + prompt(quicktagsL10n.enterImageDescription, '')
     547                    + '" />';
     548            edInsertContent(t.Canvas, myValue);
     549        }
     550    };
     551
     552    t.Buttons[t.Buttons.length] = new edButton(name+'_strong','b','<strong>','</strong>','b');
     553    t.Buttons[t.Buttons.length] = new edButton(name+'_em','i','<em>','</em>','i');
     554    t.Buttons[t.Buttons.length] = new edButton(name+'_link','link','','</a>','a'); // special case
     555    t.Buttons[t.Buttons.length] = new edButton(name+'_block','b-quote','\n\n<blockquote>','</blockquote>\n\n','q');
     556    t.Buttons[t.Buttons.length] = new edButton(name+'_del','del','<del datetime="' + datetime + '">','</del>','d');
     557    t.Buttons[t.Buttons.length] = new edButton(name+'_ins','ins','<ins datetime="' + datetime + '">','</ins>','s');
     558    t.Buttons[t.Buttons.length] = new edButton(name+'_img','img','','','m',-1); // special case
     559    t.Buttons[t.Buttons.length] = new edButton(name+'_ul','ul','<ul>\n','</ul>\n\n','u');
     560    t.Buttons[t.Buttons.length] = new edButton(name+'_ol','ol','<ol>\n','</ol>\n\n','o');
     561    t.Buttons[t.Buttons.length] = new edButton(name+'_li','li','\t<li>','</li>\n','l');
     562    t.Buttons[t.Buttons.length] = new edButton(name+'_code','code','<code>','</code>','c');
     563    t.Buttons[t.Buttons.length] = new edButton(name+'_more','more','<!--more-->','','t',-1);
     564//  t.Buttons[t.Buttons.length] = new edButton(name+'_next','page','<!--nextpage-->','','p',-1);
     565
     566    var tb = document.createElement('div');
     567    tb.id = name+'_qtags';
     568
     569    var html = '<div id="'+name+'_toolbar">';
     570    for (var i = 0; i < t.Buttons.length; i++)
     571        html += t.edShowButton(t.Buttons[i], i);
     572
     573    html += '<input type="button" id="'+name+'_ed_spell" class="ed_button" onclick="edSpell('+name+'.Canvas);" title="' + quicktagsL10n.dictionaryLookup + '" value="' + quicktagsL10n.lookup + '" />';
     574    html += '<input type="button" id="'+name+'_ed_close" class="ed_button" onclick="'+name+'.edCloseAllTags();" title="' + quicktagsL10n.closeAllOpenTags + '" value="' + quicktagsL10n.closeTags + '" /></div>';
     575
     576    tb.innerHTML = html;
     577    var cont = document.getElementById(container);
     578    cont.parentNode.insertBefore(tb, cont);
     579
     580};
  • trunk/wp-includes/script-loader.php

    r8691 r8720  
    1616    $scripts->add( 'sack', '/wp-includes/js/tw-sack.js', false, '1.6.1' );
    1717
    18     $scripts->add( 'quicktags', '/wp-includes/js/quicktags.js', false, '3958' );
     18    $scripts->add( 'quicktags', '/wp-includes/js/quicktags.js', false, '20080823' );
    1919    $scripts->localize( 'quicktags', 'quicktagsL10n', array(
    2020        'quickLinks' => __('(Quick Links)'),
     
    3535    $scripts->add( 'editor', false, $visual_editor, '20080321' );
    3636
    37     $scripts->add( 'editor_functions', '/wp-admin/js/editor.js', false, '20080710' );
     37    $scripts->add( 'editor_functions', '/wp-admin/js/editor.js', false, '20080823' );
    3838
    3939    // Modify this version when tinyMCE plugins are changed.
     
    104104    $scripts->add( 'jquery-ui-tabs', '/wp-includes/js/jquery/ui.tabs.js', array('jquery-ui-core'), '1.5.2' );
    105105    $scripts->add( 'jquery-ui-sortable', '/wp-includes/js/jquery/ui.sortable.js', array('jquery-ui-core'), '1.5.2' );
     106    $scripts->add( 'jquery-ui-draggable', '/wp-includes/js/jquery/ui.draggable.js', array('jquery-ui-core'), '1.5.2' );
     107    $scripts->add( 'jquery-ui-resizable', '/wp-includes/js/jquery/ui.resizable.js', array('jquery-ui-core'), '1.5.2' );
     108    $scripts->add( 'jquery-ui-dialog', '/wp-includes/js/jquery/ui.dialog.js', array('jquery-ui-resizable', 'jquery-ui-draggable'), '1.5.2' );
    106109
    107110    if ( is_admin() ) {
     
    121124            'strong' => __('Strong')
    122125        ) );
    123         $scripts->add( 'admin-comments', '/wp-admin/js/edit-comments.js', array('wp-lists'), '20080311' );
     126        $scripts->add( 'admin-comments', '/wp-admin/js/edit-comments.js', array('wp-lists', 'jquery-ui-draggable', 'jquery-ui-resizable'), '20080821' );
    124127        $scripts->localize( 'admin-comments', 'adminCommentsL10n', array(
    125128            'pending' => __('%i% pending') // must look like: "# blah blah"
  • trunk/xmlrpc.php

    r8698 r8720  
    10891089            }
    10901090        }
     1091
     1092        $comment['comment_parent'] = isset($content_struct['comment_parent']) ? absint($content_struct['comment_parent']) : 0;
    10911093
    10921094        $comment['comment_content'] = $content_struct['content'];
Note: See TracChangeset for help on using the changeset viewer.