WordPress.org

Make WordPress Core

Ticket #15739: internal-linking.diff

File internal-linking.diff, 8.1 KB (added by greuben, 7 years ago)
  • wp-includes/js/tinymce/plugins/wplink/css/wplink.dev.css

     
    5757        padding: 4px 6px;
    5858        cursor: pointer;
    5959}
    60 #wp-link li:hover {
     60#wp-link .link-item-wrap:hover {
    6161        background: #eaf2fa;
    6262        color: #151515;
    6363}
     
    6969        cursor: auto;
    7070        color: #333;
    7171}
    72 #wp-link li.selected {
     72#wp-link .selected {
    7373        background: #ddd;
    7474        color: #333;
    7575}
    76 #wp-link li.selected .item-title {
     76#wp-link .selected .item-title {
    7777        font-weight: bold;
    7878}
    7979#wp-link .item-info {
     
    106106#wp-link-update {
    107107        line-height: 23px;
    108108        float: right;
     109}
     110
     111#wp-link .toggle{
     112        height: 14px;
     113        width: 14px;
     114}
     115
     116#wp-link .has-submenu .children, #wp-link .has-submenu  ul .has-submenu .children{
     117        display: none;
     118}
     119
     120#wp-link .wp-link-open .children, #wp-link .wp-link-open ul .wp-link-open .children{
     121        display: block;
     122}
     123
     124#wp-link .has-submenu .toggle, #wp-link .has-submenu  ul .has-submenu .toggle{
     125        clear: left;
     126        float: left;
     127        background: url('arrowc.png') no-repeat;               
     128        padding-bottom: 1px 2px 0 0;
     129}
     130
     131#wp-link .wp-link-open .toggle, #wp-link .wp-link-open ul .wp-link-open .toggle{
     132        background: url('arrowo.png') no-repeat;               
    109133}
     134 No newline at end of file
  • wp-includes/js/tinymce/plugins/wplink/js/wplink.dev.js

     
    1 var wpLink;
     1var wpLink, riverMenu;
    22
    33(function($){
    44        var inputs = {}, rivers = {}, ed, River, Query;
    55       
     6        riverMenu = {
     7                init : function(){
     8                        var river = $(".query-results");
     9                                               
     10                        $('.toggle', river).each(function(){
     11                                var t = $(this), sub = t.siblings('.children');                                                         
     12                                if( sub.length )
     13                                        t.click(function(){ riverMenu.toggle(sub); });
     14                                else
     15                                        t.hide();
     16                        });
     17                       
     18                        this.restoreMenuState();
     19                },
     20               
     21                restoreMenuState: function(){                   
     22                        $('li.has-submenu', '.query-results').each(function(i, e){                             
     23                                var v = getUserSetting( 'l'+$(e).attr('id') );                         
     24                                if( 'o' == v ){
     25                                        $(e).addClass('wp-link-open');                                 
     26                                }else if( 'c' == v ){
     27                                        $(e).removeClass('wp-link-open');                                       
     28                                }
     29                        });
     30                },
     31               
     32                toggle: function(el){
     33                        el.slideToggle(150, function(){
     34                                var id = el.parent().toggleClass('wp-link-open').attr('id');
     35                                if( id ){
     36                                        $('li.has-submenu','.query-results').each(function(i, e){
     37                                                if( id == e.id ){
     38                                                        var v = $(e).hasClass('wp-link-open') ? 'o' : 'c';                                                     
     39                                                        setUserSetting( 'l'+id, v );                                                   
     40                                                }
     41                                        });
     42                                }
     43                        });
     44                       
     45                        return false;
     46                },
     47        };
     48
    649        wpLink = {
    750                timeToTriggerRiver: 150,
    851                minRiverAJAXDuration: 200,
     
    2366                        rivers.search = new River( $('#search-results') );
    2467                        rivers.recent = new River( $('#most-recent-results') );
    2568                        rivers.elements = $('.query-results', inputs.dialog);
    26 
     69                                                               
    2770                        // Bind event handlers
    2871                        inputs.dialog.keydown( wpLink.keydown );
    2972                        inputs.dialog.keyup( wpLink.keyup );
     
    3780                       
    3881                        inputs.search.keyup( wpLink.searchInternalLinks );
    3982                       
    40                         inputs.dialog.bind('wpdialogrefresh', wpLink.refresh);
     83                        inputs.dialog.bind('wpdialogrefresh', wpLink.refresh);                                         
    4184                },
    4285
    4386                refresh : function() {
     
    142185                        tinyMCEPopup.close();
    143186                },
    144187
    145                 updateFields : function( e, li, originalEvent ) {
     188                updateFields : function( e, li, originalEvent ) {                                               
    146189                        inputs.url.val( li.children('.item-permalink').val() );
    147190                        inputs.title.val( li.hasClass('no-title') ? '' : li.children('.item-title').text() );
     191                       
    148192                        if ( originalEvent && originalEvent.type == "click" )
    149193                                inputs.url.focus();
    150194                },
     
    253297               
    254298                this.change( search );
    255299                this.refresh();
     300                                       
     301                element.scroll( function(){ self.maybeLoad(); });
     302                element.delegate('.link-item-wrap', 'click', function(e){ self.select( $(this), e ); });               
    256303               
    257                 element.scroll( function(){ self.maybeLoad(); });
    258                 element.delegate('li', 'click', function(e){ self.select( $(this), e ); });
    259304        };
    260305       
    261306        $.extend( River.prototype, {
     
    341386                        this.element.scrollTop(0);
    342387                },
    343388                process: function( results, params ) {
    344                         var list = '', alt = true, classes = '',
    345                                 firstPage = params.page == 1;
     389                        var list = '', alt = true, classes = '', self = this,
     390                                delay = this.query.page == 1 ? 0 : wpLink.minRiverAJAXDuration,                 
     391                                firstPage = params.page == 1; is_child = params.is_child;                               
    346392
    347393                        if ( !results ) {
    348394                                if ( firstPage ) {
     
    350396                                        + wpLinkL10n.noMatchesFound
    351397                                        + '</em></span></li>';
    352398                                }
    353                         } else {
    354                                 $.each( results, function() {
     399                        } else {                               
     400                                $.each( results, function() {                                                                           
    355401                                        classes = alt ? 'alternate' : '';
    356402                                        classes += this['title'] ? '' : ' no-title';
    357                                         list += classes ? '<li class="' + classes + '">' : '<li>';
    358                                         list += '<input type="hidden" class="item-permalink" value="' + this['permalink'] + '" />';
     403                                        classes += this['children'] ? ' has-submenu' : '';
     404                                        list += classes ? '<li class="' + classes + '"' : '<li';                                       
     405                                        list += ' id="'+this['ID']+'">';
     406                                        list += '<div class="toggle"></div><div class="link-item-wrap"><input type="hidden" class="item-permalink" value="' + this['permalink'] + '" />';
    359407                                        list += '<span class="item-title">';
    360408                                        list += this['title'] ? this['title'] : wpLinkL10n.noTitle;
    361                                         list += '</span><span class="item-info">' + this['info'] + '</span></li>';
     409                                        list += '</span><span class="item-info">' + this['info'] + '</span></div>';                                                                                                                                                             
     410                                        if( this['children'] ){                                         
     411                                                list += self.process( this['children'], {'is_child': '1'} );                                                                                                                                           
     412                                        }
     413                                        list += '</li>';                                       
    362414                                        alt = ! alt;
    363415                                });
     416                                       
    364417                        }
    365 
    366                         this.ul[ firstPage ? 'html' : 'append' ]( list );
     418                       
     419                        this.ul[ firstPage ? 'html' : 'append' ]( list );                       
     420                        riverMenu.init();
     421                                                               
     422                        if( is_child ){                         
     423                                return '<ul class="children">'+list+'</ul>';                           
     424                        }                       
     425                       
    367426                },
    368427                maybeLoad: function() {
    369428                        var self = this,
     
    420479                }
    421480        });
    422481
    423         $(document).ready( wpLink.init );
     482        $(document).ready( wpLink.init );       
    424483})(jQuery);
     484 No newline at end of file
  • wp-admin/includes/internal-linking.php

     
    4444        if ( ! $get_posts->post_count )
    4545                return false;
    4646
    47         // Build results.
    48         $results = array();
     47        // Build results.       
     48        $parents = array();
     49        $children = array();
    4950        foreach ( $posts as $post ) {
    5051                if ( 'post' == $post->post_type )
    5152                        $info = mysql2date( __( 'Y/m/d' ), $post->post_date );
    5253                else
    5354                        $info = $pts[ $post->post_type ]->labels->singular_name;
    54 
    55                 $results[] = array(
    56                         'ID' => $post->ID,
    57                         'title' => trim( esc_html( strip_tags( get_the_title( $post ) ) ) ),
    58                         'permalink' => get_permalink( $post->ID ),
    59                         'info' => $info,
    60                 );
     55                       
     56                if( $post->post_parent ){
     57                        $children[$post->ID] = array(
     58                                'ID' => $post->ID,
     59                                'title' => trim( esc_html( strip_tags( get_the_title( $post ) ) ) ),
     60                                'permalink' => get_permalink( $post->ID ),
     61                                'info' => $info,
     62                                'post_parent' => $post->post_parent,
     63                        );
     64                } else{
     65                        $parents[$post->ID] = array(
     66                                'ID' => $post->ID,
     67                                'title' => trim( esc_html( strip_tags( get_the_title( $post ) ) ) ),
     68                                'permalink' => get_permalink( $post->ID ),
     69                                'info' => $info,
     70                        );
     71                }
    6172        }
     73       
     74        foreach( $children as $id => $child ){
     75                $parent_id = $child['post_parent'];
     76                if( array_key_exists( $parent_id, $children ) ){
     77                        $children[$parent_id]['children'][] = $child;
     78                        unset( $children[$id] );
     79                }               
     80        }
     81       
     82        foreach( $children as $id => $child ){
     83                $parent_id = $child['post_parent'];
     84                if( array_key_exists( $parent_id, $parents ) ){
     85                        $parents[$parent_id]['children'][] = $child;
     86                }else{
     87                        //orphans
     88                        $parents[$id] = $child;
     89                }
     90        }
    6291
    63         return $results;
     92        return $parents;
     93       
    6494}
    6595
    6696/**