Making WordPress.org

Changeset 1957


Ignore:
Timestamp:
10/10/2015 09:25:06 PM (11 years ago)
Author:
ocean90
Message:

Trac: Add autocomplete for usernames and attachments.

For now the list of usernames includes users who have commented to the ticket. Core Trac includes also committers.

Props helen, johnbillion, DrewAPicture, ocean90.
See #830.

Location:
sites/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/trac.wordpress.org/templates/core/site-specific.html

    r1955 r1957  
    5151};
    5252
     53var wpTracAutoCompleteUsers = {
     54        include: $.map( wpTracContributorLabels, function( v, k ) { return k } ),
     55        exclude: [
     56                'slackbot',
     57                'ircbot',
     58        ]
     59};
     60
    5361</script>
    5462</body>
  • sites/trunk/trac.wordpress.org/templates/site.html

    r1954 r1957  
    300300        </script>
    301301
     302        <script py:if="req.authname">
     303        var wpTracCurrentUser = "${req.authname}";
     304        </script>
     305
    302306        <!--! JavaScript -->
     307        <script src="//s.w.org/style/trac/jquery.caret.min.js?ver=2015-02-01"></script>
     308        <script src="//s.w.org/style/trac/jquery.atwho.min.js?ver=1.0.1"></script>
    303309        <script src="//s.w.org/style/trac/wp-trac.js?${scripts_version}"></script>
    304310
  • sites/trunk/wordpress.org/public_html/style/trac/wp-trac.css

    r1934 r1957  
    16491649}
    16501650
     1651/**
     1652 * Autocomplete via At.js.
     1653 */
     1654
     1655.atwho-container {
     1656        font-size: 1.3em
     1657}
     1658
     1659.atwho-view {
     1660        position: absolute;
     1661        top: 0;
     1662        left: 0;
     1663        display: none;
     1664        margin-top: 18px;
     1665        background: #fff;
     1666        color: black;
     1667        border: 1px solid #ccc;
     1668        box-shadow: 0 1px 2px rgba(0,0,0,0.1);
     1669        min-width: 120px;
     1670        max-height: 200px;
     1671        overflow: auto;
     1672        z-index: 11110 !important;
     1673}
     1674
     1675.atwho-view .cur {
     1676        background: #0073aa;
     1677        color: #fff;
     1678}
     1679
     1680.atwho-view .cur small {
     1681        color: #fff;
     1682}
     1683
     1684.atwho-view strong {
     1685        color: #0073aa;
     1686}
     1687
     1688.atwho-view .cur strong {
     1689        color: #fff;
     1690        font: bold;
     1691}
     1692
     1693.atwho-view ul {
     1694        /* width: 100px; */
     1695        list-style: none;
     1696        padding: 0;
     1697        margin: auto;
     1698}
     1699
     1700.atwho-view ul li {
     1701        display: block;
     1702        padding: 5px 10px;
     1703        border-bottom: 1px solid #ccc;
     1704        cursor: pointer;
     1705}
     1706
     1707.atwho-view ul li:last-child {
     1708        border-bottom: 0;
     1709}
     1710
     1711.atwho-view small {
     1712        font-size: smaller;
     1713        color: #777;
     1714        font-weight: normal;
     1715}
     1716
     1717
    16511718/* =Responsive / Mobile
    16521719----------------------------------------------- */
  • sites/trunk/wordpress.org/public_html/style/trac/wp-trac.js

    r1955 r1957  
    4444
    4545                gardener: typeof wpBugGardener !== 'undefined',
     46                currentUser: wpTracCurrentUser,
    4647
    4748                init: function() {
     
    5455                                wpTrac.showContributorLabels( wpTracContributorLabels );
    5556                        }
     57
     58                        wpTrac.autocomplete.init();
    5659
    5760                        if ( ! $(document.body).hasClass( 'plugins' ) ) {
     
    7477                        });
    7578                },
     79
    7680                // These ticket hacks need to be re-run after ticket previews.
    7781                postPreviewHacks: function() {
     
    411415                        });
    412416                },
     417
     418                autocomplete: (function() {
     419                        var users,
     420                                attachments,
     421                                settings = {};
     422
     423                        return {
     424                                init: function() {
     425                                        if ( ! $( '#comment' ).length ) {
     426                                                return;
     427                                        }
     428
     429                                        if ( 'undefined' !== typeof wpTracAutoCompleteUsers ) {
     430                                                settings = wpTracAutoCompleteUsers;
     431                                        }
     432
     433                                        users = this.getUsers();
     434                                        attachments  = this.getAttachments();
     435
     436                                        $( '#comment' ).atwho({
     437                                                at:  '@',
     438                                                data: users
     439                                        }).atwho({
     440                                                at: '[att',
     441                                                insertTpl: '${atwho-at}achment:${name}]',
     442                                                displayTpl: '<li>${display}</li>',
     443                                                data: attachments
     444                                        });
     445                                },
     446
     447                                getUsers: function() {
     448                                        var users  = [], exclude = [];
     449
     450                                        if ( 'undefined' !== settings.exclude ) {
     451                                                exclude = settings.exclude;
     452                                        }
     453
     454                                        // Most recent should show up first.
     455                                        $( $( '.change .username' ).get().reverse() ).each( function() {
     456                                                var username = $(this).data( 'username' );
     457                                                if (
     458                                                        typeof username !== 'undefined' &&
     459                                                        -1 === $.inArray( username, users ) &&
     460                                                        -1 === $.inArray( username, exclude )
     461                                                ) {
     462                                                        users.push( $(this).data( 'username' ) );
     463                                                }
     464                                        });
     465
     466                                        // Add additional users.
     467                                        if ( 'undefined' !== typeof settings.include ) {
     468                                                $.each( settings.include, function( k, username ) {
     469                                                        if ( -1 === $.inArray( username, users ) ) {
     470                                                                users.push( username );
     471                                                        }
     472                                                });
     473                                        }
     474
     475                                        // Exclude current user.
     476                                        if ( 'undefined' !== wpTrac.currentUser ) {
     477                                                users = $.grep( users, function( user ) {
     478                                                        return user != wpTrac.currentUser;
     479                                                });
     480                                        }
     481
     482                                        return users;
     483                                },
     484
     485                                getAttachments: function() {
     486                                        var attachments = [];
     487
     488                                        // Most recent should show up first.
     489                                        $ ($( 'dl.attachments dt' ).get().reverse() ).each( function() {
     490                                                attachments.push({
     491                                                        display: $( this ).text(),
     492                                                        name: $( this ).find( 'a[title="View attachment"]' ).text()
     493                                                });
     494                                        });
     495
     496                                        return attachments;
     497                                }
     498                        };
     499                }()),
    413500
    414501                workflow: (function() {
Note: See TracChangeset for help on using the changeset viewer.