WordPress.org

Make WordPress Core

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

File pess-this-selection-fix.patch, 17.7 KB (added by azaozz, 6 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