WordPress.org

Make WordPress Core

Ticket #6813: pess-this-selection-fix.patch

File pess-this-selection-fix.patch, 17.7 KB (added by azaozz, 10 years ago)

Fixes inserting the selection in the editor and stripping of paragraphs when saving.

  • wp-admin/css/press-this.css

     
    231231}
    232232
    233233#photo_saving {
    234         margin-bottom: 8px;
     234        margin: 0 8px 8px;
     235        vertical-align: middle;
    235236}
    236237
    237238#img_container {
     
    302303#jaxtag {
    303304        clear: both;
    304305        padding-left: 1em;
     306        margin: 0;
    305307}
    306308
    307309#tagchecklist {
     
    348350        -webkit-border-bottom-right-radius: 3px;
    349351        border-bottom-right-radius: 3px;
    350352        margin: 0;
    351         padding: 0;
     353        padding: 10px;
    352354}
    353355.submitbox {
    354356        width: 100%;
     
    363365.submitbox .submit input {
    364366        border: none;
    365367        text-align: left;
    366         padding: 12px 10px 10px 10px;
     368        padding: 6px 4px;
    367369        font-size: 12px;
    368         margin: 10px;
    369 
     370        margin: 2px;
    370371        -moz-border-radius: 3px;
    371372        -khtml-border-radius: 3px;
    372373        -webkit-border-radius: 3px;
  • wp-admin/press-this.php

     
    1010        $translation_table[chr(34)] = '"';
    1111        $translation_table[chr(38)] = '&';
    1212        $translation_table[chr(39)] = ''';
    13         return preg_replace("/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,3};)/","&" , strtr($text, $translation_table));   
     13        return preg_replace("/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,3};)/","&" , strtr($text, $translation_table));
    1414}
    1515function press_it() {
    1616        // define some basic variables
    17         $quick['post_status'] = $_REQUEST['post_status'];
     17        $quick['post_status'] = isset($_REQUEST['publish']) ? 'publish' : 'draft';
    1818        $quick['post_category'] = $_REQUEST['post_category'];
    1919        $quick['tags_input'] = $_REQUEST['tags_input'];
    2020        $quick['post_title'] = $_REQUEST['post_title'];
    2121        $quick['post_content'] = '';
    22                
     22
     23        $posted = str_replace('<br />', "\n", str_replace('<p>', '', $_REQUEST['content']));
     24        $posted = str_replace('</p>', "\n\n", $posted);
     25
    2326        // insert the post with nothing in it, to get an ID
    2427        $post_ID = wp_insert_post($quick, true);
    25                
     28
    2629        $content = '';
    2730        switch ( $_REQUEST['post_type'] ) {
    2831                case 'text':
    2932                case 'quote':
    30                         $content .= $_REQUEST['content'];
     33                        $content .= $posted;
    3134                        break;
    32                
     35
    3336                case 'photo':
    34                         $content = $_REQUEST['content'];
    35                        
    36                         foreach($_REQUEST['photo_src'] as $key => $image) {
     37                        $content = $posted;
     38
     39                        foreach( (array) $_REQUEST['photo_src'] as $key => $image) {
    3740                                // escape quote for matching
    3841                                $quoted = preg_quote2($image);
    39                                
     42
    4043                                // see if files exist in content - we don't want to upload non-used selected files.
    41                                 preg_match('/'.$quoted.'/', $_REQUEST['content'], $matches[0]);
    42                                 if($matches[0]) {
     44                //              preg_match('/'.$quoted.'/', $posted, $matches);
     45                                if( strpos($posted, $quoted) !== false ) {
    4346                                        $upload = media_sideload_image($image, $post_ID, $_REQUEST['photo_description'][$key]);
    4447                                        // Replace the POSTED content <img> with correct uploaded ones.
    4548                                        if( !is_wp_error($upload) ) $content = preg_replace('/<img ([^>]*)src=(\"|\')'.$quoted.'(\2)([^>\/]*)\/*>/is', $upload, $content);
    4649                                }
    4750                        }
    48                        
     51
    4952                        break;
    50                        
     53
    5154                case "video":
    5255                        if($_REQUEST['embed_code'])
    5356                                $content .= $_REQUEST['embed_code']."\n\n";
    54                         $content .= $_REQUEST['content'];
    55                         break; 
     57                        $content .= $posted;
     58                        break;
    5659                }
    5760        // set the post_content
    58         $quick['post_content'] = str_replace('<br />', "\n", preg_replace('/<\/?p>/','',$content));
     61        $quick['post_content'] = preg_replace("/\n\n+/", "\n\n", $content);
    5962
    6063        // error handling for $post
    6164        if ( is_wp_error($post_ID)) {
     
    6568        } elseif ( is_wp_error($upload)) {
    6669                wp_die($upload);
    6770                wp_delete_post($post_ID);
    68         } else {       
     71        } else {
    6972                $quick['ID'] = $post_ID;
    7073                wp_update_post($quick);
    7174        }
     
    9194                do_action('admin_head');
    9295        ?>
    9396        </head>
    94         <body class="press-this">       
    95                 <div id="message" class="updated fade"><p><strong><?php _e('Your post has been saved.'); ?></strong> <a onclick="window.opener.location.replace(this.href); window.close();" href="<?php echo get_permalink( $post_ID); ?>"><?php _e('View post'); ?></a> | <a href="post.php?action=edit&amp;post=<?php echo $post_ID; ?>" onclick="window.opener.location.replace(this.href); window.close();"><?php _e('Edit post'); ?></a> | <a href="#" onclick="window.close();"><?php _e('Close Window'); ?></a></p></div>       
     97        <body class="press-this">
     98                <div id="message" class="updated fade"><p><strong><?php _e('Your post has been saved.'); ?></strong> <a onclick="window.opener.location.replace(this.href); window.close();" href="<?php echo get_permalink( $post_ID); ?>"><?php _e('View post'); ?></a> | <a href="post.php?action=edit&amp;post=<?php echo $post_ID; ?>" onclick="window.opener.location.replace(this.href); window.close();"><?php _e('Edit post'); ?></a> | <a href="#" onclick="window.close();"><?php _e('Close Window'); ?></a></p></div>
    9699                <div id="footer">
    97100                <p><?php
    98101                do_action('in_admin_footer', '');
     
    100103                echo __('Thank you for creating with <a href="http://wordpress.org/">WordPress</a>');
    101104                ?></p>
    102105                </div>
    103                 <?php do_action('admin_footer', ''); ?>         
     106                <?php do_action('admin_footer', ''); ?>
    104107        </body>
    105108        </html>
    106109        <?php die;
     
    109112// Ajax Requests
    110113$title = wp_specialchars(aposfix(stripslashes($_GET['t'])));
    111114
    112 $selection = str_replace("\n", "<br />", aposfix( stripslashes($_GET['s']) ) );
     115$selection = trim( aposfix( stripslashes($_GET['s']) ) );
     116if ( ! empty($selection) ) {
     117        $selection = preg_replace('/(\r?\n|\r)/', '</p><p>', $selection);
     118        $selection = '<p>'.str_replace('<p></p>', '', $selection).'</p>';
     119}
     120
    113121$url = clean_url($_GET['u']);
    114122$image = $_GET['i'];
    115123
     
    118126                jQuery('.cancel').click(function() {
    119127                        tb_remove();
    120128                });
    121                
     129
    122130                jQuery('.select').click(function() {
    123131                        image_selector();
    124132                });
     
    127135        <div class="titlewrap">
    128136                <input id="this_photo_description" name="photo_description" class="text" onkeypress="if(event.keyCode==13) image_selector();" value="<?php echo attribute_escape($title);?>"/>
    129137        </div>
    130                
     138
    131139        <p class="centered"><input type="hidden" name="this_photo" value="<?php echo attribute_escape($image); ?>" id="this_photo" />
    132140                <a href="#" class="select"><img src="<?php echo clean_url($image); ?>" alt="<?php echo attribute_escape(__('Click to insert.')); ?>" title="<?php echo attribute_escape(__('Click to insert.')); ?>" /></a></p>
    133        
     141
    134142        <p id="options"><a href="#" class="select button"><?php _e('Insert Image'); ?></a> <a href="#" class="cancel button"><?php _e('Cancel'); ?></a></p>
    135143<?php die;
    136144}
     
    140148                jQuery('.cancel').click(function() {
    141149                        tb_remove();
    142150                });
    143                
     151
    144152                jQuery('.select').click(function() {
    145153                        image_selector();
    146154                });
     
    149157        <div class="titlewrap">
    150158                <input id="this_photo" name="this_photo" class="text" onkeypress="if(event.keyCode==13) image_selector();" />
    151159        </div>
    152        
    153        
     160
     161
    154162        <h3 id="title"><label for="post_title"><?php _e('Description') ?></label></h3>
    155163        <div class="titlewrap">
    156164                <input id="this_photo_description" name="photo_description" class="text" onkeypress="if(event.keyCode==13) image_selector();" value="<?php echo attribute_escape($title);?>"/>
    157165        </div>
    158        
     166
    159167        <p id="options"><a href="#" class="select"><?php _e('Insert Image'); ?></a> | <a href="#" class="cancel"><?php _e('Cancel'); ?></a></p>
    160168<?php die;
    161169}
     
    175183
    176184                $content = wp_remote_fopen($uri);
    177185                if ( false === $content ) return '';
    178                
     186
    179187                $host = parse_url($uri);
    180                
     188
    181189                $pattern = '/<img ([^>]*)src=(\"|\')([^<>]+?\.(png|jpeg|jpg|jpe|gif))(\2)([^>\/]*)\/*>/is';
    182190                preg_match_all($pattern, $content, $matches);
    183                
     191
    184192                if ( empty($matches[1]) ) return '';
    185                
     193
    186194                $sources = array();
    187195                foreach ($matches[3] as $src) {
    188196                        if(strpos($src, 'http') === false)
     
    190198                                        $src = 'http://'.str_replace('//','/', $host['host'].'/'.$src);
    191199                                else
    192200                                        $src = 'http://'.str_replace('//','/', $host['host'].'/'.$host['path'].'/'.$src);
    193                                                                                
     201
    194202                        $sources[] = clean_url($src);
    195203                }
    196204                return "'" . implode("','", $sources) . "'";
    197205        }
    198        
     206
    199207        $url = urldecode($url);
    200208        $url = str_replace(' ', '%20', $url);
    201209        echo 'new Array('.get_images_from_uri($url).')';
    202 die;           
     210die;
    203211}
    204212
    205213if($_REQUEST['ajax'] == 'photo_js') { ?>
     
    216224                        dataType : "script"
    217225                }).responseText
    218226        );
    219        
     227
    220228        for (i = 0; i < my_src.length; i++) {
    221229                img = new Image();
    222230                img.src = my_src[i];
     
    227235                                skip = true;
    228236                        aspect = img.width / img.height;
    229237                        scale = (aspect > 1) ? (75 / img.width) : (75 / img.height);
    230                        
     238
    231239                        w = img.width;
    232240                        h = img.height;
    233                        
     241
    234242                        if (scale < 1) {
    235243                                w = parseInt(img.width * scale);
    236244                                h = parseInt(img.height * scale);
     
    239247                }
    240248                if (!skip) strtoappend += '<a href="?ajax=thickbox&amp;i=' + img.src + '&amp;u=<?php echo $url; ?>&amp;height=400&amp;width=500" title="" class="thickbox"><img src="' + img.src + '" ' + img_attr + '/></a>';
    241249        }
    242        
     250
    243251        function pick(img, desc) {
    244252                if (img) {
    245253                        length = jQuery('.photolist input').length;
     
    251259                tinyMCE.activeEditor.resizeToContent();
    252260                return false;
    253261        }
    254        
     262
    255263        function image_selector() {
    256264                tb_remove();
    257265                desc = jQuery('#this_photo_description').val();
     
    259267                pick(src, desc);
    260268                return false;
    261269        }
    262        
     270
    263271        jQuery(document).ready(function() {
    264272                jQuery('#img_container').html(strtoappend);
    265273                jQuery('#photo_add_url').attr('href', '?ajax=thickbox_url&height=200&width=500');
    266274                tb_init('a.thickbox, area.thickbox, input.thickbox');
    267275        });
    268        
     276
    269277<?php die;
    270278}
    271279
     
    309317                                sl.markDone(base + '/themes/advanced/langs/' + ln + '.js');
    310318                                sl.markDone(base + '/themes/advanced/langs/' + ln + '_dlg.js');
    311319                        })();
    312                        
     320
    313321                        tinyMCE.init({
    314322                                mode: "textareas",
    315323                                editor_selector: "mceEditor",
     
    330338                                remove_script_host : false,
    331339                                convert_urls : false,
    332340                                apply_source_formatting : false,
    333                                 remove_linebreaks : false,
     341                                remove_linebreaks : true,
    334342                                accessibility_focus : false,
    335343                                tab_focus : ":next",
    336344                                plugins : "safari,inlinepopups",
     
    345353
    346354        // add the quickadd form
    347355        jQuery('#jaxtag').prepend('<span id="ajaxtag"><input type="text" name="newtag" id="newtag" class="form-input-tip" size="16" autocomplete="off" value="'+postL10n.addTag+'" /><input type="submit" class="button" id="tagadd" value="' + postL10n.add + '" tabindex="3" onclick="return false;" /><input type="hidden"/><input type="hidden"/><span class="howto">'+postL10n.separate+'</span></span>');
    348                
     356
    349357        jQuery('#tagadd').click( tag_flush_to_text );
    350358        jQuery('#newtag').focus(function() {
    351359                if ( this.value == postL10n.addTag )
     
    359367        // auto-save tags on post save/publish
    360368        jQuery('#publish').click( tag_save_on_publish );
    361369        jQuery('#save-post').click( tag_save_on_publish );
    362                
     370
    363371        function set_menu(type) {
    364372                jQuery('#text_button').removeClass('ui-tabs-selected');
    365373                jQuery('#menu li').removeClass('ui-tabs-selected');
    366374                jQuery('#' + type + '_button').addClass('ui-tabs-selected');
    367375                jQuery("#post_type").val(type);
    368376        }
    369        
     377
    370378        function set_editor(text) {
    371                 if(tinyMCE.activeEditor) tinyMCE.activeEditor.setContent('');
    372                 if(tinyMCE.activeEditor) tinyMCE.execCommand('mceInsertContent' ,false, text);
     379                if ( '' == text || '<p></p>' == text ) text = '<p><br /></p>';
     380                if ( tinyMCE.activeEditor ) tinyMCE.execCommand('mceSetContent', false, text);
    373381        }
    374        
     382
    375383        function append_editor(text) {
    376                 if(tinyMCE.activeEditor) tinyMCE.execCommand('mceInsertContent' ,false, text);
     384                if ( '' != text && tinyMCE.activeEditor ) tinyMCE.execCommand('mceInsertContent', false, text);
    377385        }
    378        
     386
    379387        function set_title(title) { jQuery("#content_type").text(title); }
    380388
    381389        function show(tab_name) {
     
    386394                                set_menu('text');
    387395                                set_title('<?php _e('Post') ?>');
    388396                                <?php if ($selection) { ?>
    389                                         set_editor("<?php echo $selection; ?>");
     397                                        set_editor('<?php echo $selection; ?>');
    390398                                <?php } else { ?>
    391                                         set_editor("<a href='<?php echo $url ?>'><?php echo $title; ?></a>");
     399                                        set_editor('<p><a href="<?php echo $url ?>"><?php echo $title; ?></a></p>');
    392400                                <?php } ?>
    393401                                return false;
    394402                                break;
    395403                        case 'quote' :
    396404                                set_menu('quote');
    397405                                set_title('<?php _e('Quote') ?>');
    398                                 set_editor("<blockquote><p><?php echo $selection; ?> </p><p><cite><a href='<?php echo $url; ?>'><?php echo $title; ?> </a> </cite> </p></blockquote>");
     406                                set_editor('<blockquote><?php echo $selection; ?> <p><cite><a href="<?php echo $url; ?>"><?php echo $title; ?> </a> </cite> </p></blockquote>');
    399407                                return false;
    400408                                break;
    401409                        case 'video' :
     
    405413                                jQuery('body').addClass('video_split');
    406414                                jQuery('#extra_fields').load('<?php echo clean_url($_SERVER['PHP_SELF']); ?>', { ajax: 'video', s: '<?php echo attribute_escape($selection); ?>'}, function() {
    407415                                        <?php
     416                                        $content = '';
    408417                                        if ( preg_match("/youtube\.com\/watch/i", $url) ) {
    409418                                                list($domain, $video_id) = split("v=", $url);
    410419                                                $content = '<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/' . $video_id . '"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/' . $video_id . '" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object>';
    411                                                
     420
    412421                                        } elseif ( preg_match("/vimeo\.com\/[0-9]+/i", $url) ) {
    413422                                                list($domain, $video_id) = split(".com/", $url);
    414423                                                $content = '<object width="400" height="225"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=' . $video_id . '&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" />      <embed src="http://www.vimeo.com/moogaloop.swf?clip_id=' . $video_id . '&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="225"></embed></object>';
    415                                        
     424
    416425                                                if ( trim($selection) == '' )
    417                                                         $selection = '<a href="http://www.vimeo.com/' . $video_id . '?pg=embed&sec=' . $video_id . '">' . $title . '</a> on <a href="http://vimeo.com?pg=embed&sec=' . $video_id . '">Vimeo</a>';
    418                                                                                
    419                                         } else {
     426                                                        $selection = '<p><a href="http://www.vimeo.com/' . $video_id . '?pg=embed&sec=' . $video_id . '">' . $title . '</a> on <a href="http://vimeo.com?pg=embed&sec=' . $video_id . '">Vimeo</a></p>';
     427
     428                                        } elseif ( strpos( $selection, '<object' ) !== false ) {
    420429                                                $content = $selection;
    421430                                        }
    422                                        
    423431                                        ?>
    424432                                        jQuery('#embed_code').prepend('<?php echo htmlentities($content); ?>');
    425                                        
    426                                         set_editor("<?php echo $title; ?>");
     433
     434                                        set_editor('<?php echo $title; ?>');
    427435                                });
    428436                                return false;
    429437                                break;
     
    431439                                set_menu('photo');
    432440                                set_title('<?php _e('Post') ?>');
    433441                                <?php if ($selection) { ?>
    434                                         set_editor("<?php echo $selection; ?>");
     442                                        set_editor('<?php echo $selection; ?>');
    435443                                <?php } else { ?>
    436                                         set_editor("<a href='<?php echo $url ?>'><?php echo $title; ?></a>");
     444                                        set_editor('<p><a href="<?php echo $url ?>"><?php echo $title; ?></a></p>');
    437445                                <?php } ?>
    438446                                jQuery('#extra_fields').show();
    439447                                jQuery('#extra_fields').before('<h2 id="waiting"><img src="images/loading.gif" alt="" /><?php echo js_escape( __( 'Loading...' ) ); ?></h2>');
     
    452460                                break;
    453461                }
    454462        }
    455        
     463
    456464        jQuery(document).ready(function() {
    457465        jQuery('#menu li').click(function (){
    458466                        tab_name = this.id.split('_');
     
    491499                <div class="titlewrap">
    492500                        <input name="post_title" id="post_title" class="text" value="<?php echo attribute_escape($title);?>"/>
    493501                </div>
    494                
     502
    495503                <div id="extra_fields" style="display: none"></div>
    496                
     504
    497505                <div class="editor_area">
    498506                        <h2 id="content_type"><label for="content"><?php _e('Post') ?></label></h2>
    499507                        <div class="editor-container">
     
    516524                        <p id="jaxtag"><label class="hidden" for="newtag"><?php _e('Tags'); ?></label><input type="text" name="tags_input" class="tags-input" id="tags-input" size="40" tabindex="3" value="<?php echo get_tags_to_edit( $post->ID ); ?>" /></p>
    517525                        <div id="tagchecklist"></div>
    518526                </div>
    519                 <div id="post_status">
    520                         <input type="radio" name="post_status" value="publish" checked="checked" id="published" /> <label for="published"><?php _e('Published'); ?></label>
    521                         <input type="radio" name="post_status" value="draft" id="unpublished" /> <label for="unpublished"><?php _e('Unpublished'); ?></label>
    522                 </div>
     527
    523528                <p class="submit">         
    524                         <input type="submit" value="<?php _e('Publish') ?>" onclick="document.getElementById('photo_saving').style.display = '';"/>
     529                        <input type="submit" name="draft" value="<?php _e('Save') ?>" onclick="document.getElementById('photo_saving').style.display = '';"/>
     530                        <input type="submit" name="publish" value="<?php _e('Publish') ?>" onclick="document.getElementById('photo_saving').style.display = '';"/>
    525531                        <img src="images/loading-publish.gif" alt="" id="photo_saving" style="display:none;"/>
    526532                </p>
     533                </div>
    527534        </div>
    528535</form>
    529536</body>
  • wp-includes/script-loader.php

     
    229229        $styles->add( 'dashboard', '/wp-admin/css/dashboard.css' );
    230230        $styles->add( 'install', '/wp-admin/css/install.css', array(), '20080708' );
    231231        $styles->add( 'theme-editor', '/wp-admin/css/theme-editor.css' );
    232         $styles->add( 'press-this', '/wp-admin/css/press-this.css', array(), '20080704' );
     232        $styles->add( 'press-this', '/wp-admin/css/press-this.css', array(), '20080710' );
    233233        $styles->add( 'thickbox', '/wp-includes/js/thickbox/thickbox.css', array(), '20080613' );
    234234        $styles->add( 'login', '/wp-admin/css/login.css' );
    235235