jenkins-bot has submitted this change and it was merged.

Change subject: Change UI of Special:SmiteSpam
......................................................................


Change UI of Special:SmiteSpam

Change from a table and rows layout to a "card" layout.

Change-Id: I89ef7bcbd9d7566a05dca3c22295dae4647c104c
---
M SmiteSpam.php
M SpecialSmiteSpam.php
A static/css/smitespam.css
M static/js/ext.smitespam.js
4 files changed, 118 insertions(+), 38 deletions(-)

Approvals:
  Polybuildr: Looks good to me, approved
  Yaron Koren: Looks good to me, but someone else must approve
  jenkins-bot: Verified



diff --git a/SmiteSpam.php b/SmiteSpam.php
index 5a63909..5d60b6f 100644
--- a/SmiteSpam.php
+++ b/SmiteSpam.php
@@ -32,6 +32,7 @@
 
 $wgResourceModules['ext.SmiteSpam.retriever'] = array(
        'scripts' => 'js/ext.smitespam.js',
+       'styles' => 'css/smitespam.css',
        'localBasePath' => "$ssRoot/static",
        'remoteExtPath' => 'SmiteSpam/static',
        'dependencies' => array(
diff --git a/SpecialSmiteSpam.php b/SpecialSmiteSpam.php
index 1433f95..6a0319d 100644
--- a/SpecialSmiteSpam.php
+++ b/SpecialSmiteSpam.php
@@ -43,6 +43,10 @@
                        }
                }
 
+               $out->addHTML(
+                       '<a target="_blank" 
href="./Special:SmiteSpamTrustedUsers">View trusted users</a>'
+               );
+
                $out->addHTML( '<h2>' . $this->msg( 
'smitespam-spam-pages-list-heading' )->text() . '</h2>' );
 
                $out->addHTML( '<div id="pagination"></div>' );
@@ -59,12 +63,11 @@
 
                $out->addHTML( '<input type="submit" value="'
                        . $this->msg( 'smitespam-delete-selected' ) . '" 
style="display:none;">' );
-               $out->addHTML( Html::openElement( 'table', array(
-                       'class' => 'wikitable',
+               $out->addHTML( Html::openElement( 'div', array(
                        'id' => 'smitespam-page-list',
                ) ) );
 
-               $out->addHTML( Html::closeElement( 'table' ) );
+               $out->addHTML( Html::closeElement( 'div' ) );
                $out->addHTML( '<input type="submit" value="'
                        . $this->msg( 'smitespam-delete-selected' ) . '" 
style="display:none;">' );
                $out->addHTML( Html::closeElement( 'form' ) );
diff --git a/static/css/smitespam.css b/static/css/smitespam.css
new file mode 100644
index 0000000..0671ee4
--- /dev/null
+++ b/static/css/smitespam.css
@@ -0,0 +1,69 @@
+#smitespam-page-list * {
+    box-sizing: border-box;
+}
+
+.card {
+    border: 1px solid #ccc;
+    margin: .2em;
+    background-color: #f5f5f5;
+}
+
+.card-info-section {
+    padding: .5em;
+    font-size: .9em;
+    width: 20%;
+    float: left;
+}
+
+.info-tag {
+    background-color: #ccc;
+    border-radius: 5px;
+    padding: .4em;
+    display: inline-block;
+    margin: .2em;
+}
+
+.info-tag.red {
+    background-color: red;
+    color: white;
+}
+
+.info-tag.orange {
+    background-color: darkorange;
+    color: white;
+}
+
+.info-tag.green {
+    background-color: green;
+    color: white;
+}
+
+.info-tag.transparent {
+    background-color: transparent;
+    color: #000;
+    padding-left: 0;
+}
+
+.card-data-section {
+    background-color: #fff;
+    padding: 0 1em;
+    width: 80%;
+    float: left;
+}
+
+.user-group {
+    margin-bottom: 4em;
+}
+
+.row:before, .row:after {
+  content: ' ';
+  display: table;
+}
+
+.row:after {
+  clear: both;
+}
+
+.creator-card {
+    text-align: center;
+}
diff --git a/static/js/ext.smitespam.js b/static/js/ext.smitespam.js
index 61f766a..8751c34 100644
--- a/static/js/ext.smitespam.js
+++ b/static/js/ext.smitespam.js
@@ -72,7 +72,7 @@
                processResponse: function ( data ) {
                        var pageID = pagesToDelete[pagesToDeleteIndex];
                        var pageTitleText = 
pagesToDeleteTitleTexts[pagesToDeleteIndex];
-                       var row = $( '#result-row-page-' + pageID );
+                       var row = $( '#result-card-page-' + pageID );
                        if ( 'delete' in data ) {
                                for ( var i = 0; i < results.length; i++ ) {
                                        // force both to string
@@ -127,7 +127,7 @@
                        var username = usersToBlock[usersToBlockIndex];
                        if ( 'block' in data ) {
                                users[username].blocked = true;
-                               $( '#smitespam-page-list th 
.block-checkbox-container' ).each( function () {
+                               $( '#smitespam-page-list .creator-card 
.block-checkbox-container' ).each( function () {
                                        var $this = $( this );
                                        if ( $this.parent().data( 'username' )  
=== username ) {
                                                $this.empty();
@@ -142,7 +142,7 @@
                                $( '#ajax-successbox' ).append( '<p>User "' + 
username + '" blocked.</p>' );
                        } else if ( 'error' in data ) {
                                usersFailedToBlock.push( username );
-                               $( '#smitespam-page-list 
.block-checkbox-container' ).each( function () {
+                               $( '#smitespam-page-list .creator-card 
.block-checkbox-container' ).each( function () {
                                        var $this = $( this );
                                        if ( $this.parent().data( 'username' )  
=== username ) {
                                                $this.empty();
@@ -212,11 +212,8 @@
                        if ( this.checked ) {
                                pagesToDelete.push( id );
                                var titleText = $( this )
-                                       .parent() // td
-                                       .parent() // tr
-                                       .find( 'td' )
-                                       .eq( 0 ) // first cell
-                                       .find( 'a' )
+                                       .closest( '.card' )
+                                       .find( '.smitespam-page-title a' )
                                        .text();
                                pagesToDeleteTitleTexts.push( titleText );
                        } else {
@@ -228,16 +225,16 @@
 
                function onBlockCheckboxChange() {
                        var username = $( this ).val();
-                       var headingsRow = $( this ).closest( 'tr' ).next();
-                       var $checkboxes = headingsRow.nextUntil( 
':not(.result-row)' )
+                       var $userCard = $( this ).closest( '.creator-card' 
).next();
+                       var $checkboxes = $userCard.nextUntil( ':not(.card)' )
                                .find( 'input[type=checkbox]' );
                        if ( this.checked ) {
                                usersToBlock.push( username );
-                               $checkboxes.prop( 'checked', true );
+                               $checkboxes.prop( 'checked', true ).change();
                        } else {
                                var index = $.inArray( username, usersToBlock );
                                usersToBlock.splice( index, 1 );
-                               $checkboxes.prop( 'checked', false );
+                               $checkboxes.prop( 'checked', false ).change();
                        }
                }
 
@@ -273,17 +270,20 @@
                for ( i = 0; i < groupedPages.length; i++ ) {
                        var group = groupedPages[i].pages;
                        var groupCreator = groupedPages[i].creator;
-                       var $creatorCell = $( '<th>' ).attr( 'colspan', 5 )
+                       var $userGroup = $( '<div>' ).addClass( 'user-group' );
+                       $userGroup.append( '<hr>' );
+                       var $creatorCard = $( '<div>' )
+                               .addClass( 'creator-card' )
                                .html( mw.msg( 'smitespam-created-by' ) + ' ' +
                                        ( users[groupCreator] ? 
users[groupCreator].link : groupCreator ) )
                                .data( 'username', groupCreator );
                        if ( users[groupCreator] ) {
                                if ( users[groupCreator].blocked ) {
                                        // TODO i18n
-                                       $creatorCell.append( ' &middot; 
(Blocked)' );
+                                       $creatorCard.append( ' &middot; 
(Blocked)' );
                                } else if ( $.inArray( groupCreator, 
usersFailedToBlock ) !== -1 ) {
                                        // TODO i18n
-                                       $creatorCell.append( ' &middot; (Failed 
to block)' );
+                                       $creatorCard.append( ' &middot; (Failed 
to block)' );
                                } else {
                                        var $blockCheckboxContainer = $( 
'<span>' ).addClass( 'block-checkbox-container' );
                                        var $blockCheckbox = $( '<input>', {
@@ -298,7 +298,7 @@
                                        $blockCheckboxContainer.append( 
$blockCheckbox );
                                        // TODO i18n
                                        $blockCheckboxContainer.append( 'Block' 
);
-                                       $creatorCell.append( 
$blockCheckboxContainer );
+                                       $creatorCard.append( 
$blockCheckboxContainer );
 
                                        var $trustUserButtonContainer = $( 
'<span>' ).addClass( 'trust-user-button-container' );
                                        $trustUserButtonContainer.append( ' 
&middot; ' );
@@ -307,26 +307,31 @@
                                                .on( 'click', 
onTrustUserButtonClick );
 
                                        $trustUserButtonContainer.append( 
$trustUserButton );
-                                       $creatorCell.append( 
$trustUserButtonContainer );
+                                       $creatorCard.append( 
$trustUserButtonContainer );
                                }
                        }
-                       var $creatorRow = $( '<tr>' ).append( $creatorCell );
-                       $( '#smitespam-page-list' ).append( $creatorRow );
-                       $( '#smitespam-page-list' ).append( '<tr>' +
-                               '<th>' + mw.msg( 'smitespam-page' ) + '</th>' +
-                               '<th>' + mw.msg( 'smitespam-probability' ) + 
'</th>' +
-                               '<th>' + mw.msg( 'smitespam-preview-text' ) + 
'</th>' +
-                               '<th>' + mw.msg( 'smitespam-delete' ) + '</th>' 
+
-                               '</tr>' );
+                       $userGroup.append( $creatorCard );
+                       $userGroup.append( '<hr>' );
+                       $( '#smitespam-page-list' ).append( $userGroup );
                        for ( var j = 0; j < group.length; j++ ) {
                                page = group[j];
-                               var $row = $( '<tr>' ).attr( 'id', 
'result-row-page-' + page.id );
-                               $row.addClass( 'result-row' );
-                               $( '<td></td>' ).html( page.link ).appendTo( 
$row );
-                               $( '<td></td>' ).text( 
page['spam-probability-text'] ).appendTo( $row );
-                               $( '<td></td>' ).text( page.preview ).appendTo( 
$row );
+                               var $card = $( '<div>' ).attr( 'id', 
'result-card-page-' + page.id );
+                               $card.addClass( 'card' );
+                               $card = $card.append( '<div>' ).addClass( 'row' 
);
+                               var $cardInfoSection = $( '<div>' ).addClass( 
'card-info-section' )
+                                       .appendTo( $card );
+                               var $cardDataSection = $( '<div>' ).addClass( 
'card-data-section' )
+                                       .appendTo( $card );
+                               $( '<h3>' ).addClass( 'smitespam-page-title' )
+                                       .html( page.link ).appendTo( 
$cardDataSection );
+                               $( '<p>' ).text( page.preview ).appendTo( 
$cardDataSection );
+                               $( '<span>' )
+                                       .addClass( 'info-tag' )
+                                       .text( page['spam-probability-text'] )
+                                       .appendTo( $cardInfoSection );
+                               $cardInfoSection.append( '<br>' );
                                if ( $.inArray( page.id.toString(), 
pagesFailedToDelete ) !== -1 ) {
-                                       $( '<td></td>' ).text( mw.msg( 
'smitespam-delete-page-failure-msg' ) ).appendTo( $row );
+                                       $( '<td></td>' ).text( mw.msg( 
'smitespam-delete-page-failure-msg' ) ).appendTo( $cardInfoSection );
                                } else {
                                        var $checkbox = $( '<input>', {
                                                type: 'checkbox',
@@ -336,9 +341,11 @@
                                        if ( $.inArray( $checkbox.val(), 
pagesToDelete ) !== -1 ) {
                                                $checkbox.attr( 'checked', 
'checked' );
                                        }
-                                       $( '<td></td>' ).append( $checkbox 
).appendTo( $row );
+                                       $( '<label>' ).append( $checkbox )
+                                               .append( 'Delete' ) // TODO: 
i18n
+                                               .appendTo( $cardInfoSection );
                                }
-                               $( '#smitespam-page-list' ).append( $row );
+                               $userGroup.append( $card );
                        }
                }
                refreshRangeDisplayer();
@@ -377,7 +384,7 @@
                        $( '<a>', { href: '#', id: 'smitespam-pager-next' } )
                                .text( mw.msg( 'table_pager_next' ) )
                                .on( 'click', function () {
-                                       var jump = $( '#smitespam-page-list 
.result-row' ).length;
+                                       var jump = $( '#smitespam-page-list 
.card' ).length;
                                        displayOffset += jump;
                                        displayResults();
                                } )
@@ -388,7 +395,7 @@
        function refreshRangeDisplayer() {
                var fromPageIndex = displayOffset + 1;
                $( '#smitespam-displayed-range-from' ).text( fromPageIndex );
-               var numDisplayed = $( '.result-row' ).length;
+               var numDisplayed = $( '.card' ).length;
                $( '#smitespam-displayed-range-to' ).text( fromPageIndex + 
numDisplayed - 1 );
                $( '#smitespam-displayed-range' ).show();
        }

-- 
To view, visit https://gerrit.wikimedia.org/r/232267
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I89ef7bcbd9d7566a05dca3c22295dae4647c104c
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/extensions/SmiteSpam
Gerrit-Branch: master
Gerrit-Owner: Polybuildr <[email protected]>
Gerrit-Reviewer: Polybuildr <[email protected]>
Gerrit-Reviewer: Yaron Koren <[email protected]>
Gerrit-Reviewer: jan <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to