http://www.mediawiki.org/wiki/Special:Code/MediaWiki/96158

Revision: 96158
Author:   hashar
Date:     2011-09-02 22:41:01 +0000 (Fri, 02 Sep 2011)
Log Message:
-----------
(bug 26084) add some ajax to easily delete tags

TODO: implements functionality to add tags easily!

Modified Paths:
--------------
    trunk/extensions/CodeReview/CodeReview.i18n.php
    trunk/extensions/CodeReview/CodeReview.php
    trunk/extensions/CodeReview/ui/CodeRevisionView.php

Added Paths:
-----------
    trunk/extensions/CodeReview/modules/ext.codereview.tags.css
    trunk/extensions/CodeReview/modules/ext.codereview.tags.js

Modified: trunk/extensions/CodeReview/CodeReview.i18n.php
===================================================================
--- trunk/extensions/CodeReview/CodeReview.i18n.php     2011-09-02 22:34:16 UTC 
(rev 96157)
+++ trunk/extensions/CodeReview/CodeReview.i18n.php     2011-09-02 22:41:01 UTC 
(rev 96158)
@@ -82,6 +82,8 @@
        'code-rev-tags' => 'Tags:',
        'code-rev-tag-add' => 'Add tags:',
        'code-rev-tag-remove' => 'Remove tags:',
+       'code-rev-tag-addtag-tooltip' => 'Add new tags to this revision',
+       'code-rev-tag-removetag-tooltip' => 'Click to remove tag "$1"',
        'code-rev-comment-by' => 'Comment by $1',
        'code-rev-comment-preview' => 'Preview',
        'code-rev-comment-preview-accesskey' => 'p',

Modified: trunk/extensions/CodeReview/CodeReview.php
===================================================================
--- trunk/extensions/CodeReview/CodeReview.php  2011-09-02 22:34:16 UTC (rev 
96157)
+++ trunk/extensions/CodeReview/CodeReview.php  2011-09-02 22:41:01 UTC (rev 
96158)
@@ -186,6 +186,12 @@
        'messages' => array( 'codereview-overview-title', 
'codereview-overview-desc' ),
 ) + $commonModuleInfo;
 
+// Add, remove tags from a revision view
+$wgResourceModules['ext.codereview.tags'] = array(
+       'scripts' => 'ext.codereview.tags.js',
+       'styles'  => 'ext.codereview.tags.css',
+) + $commonModuleInfo;
+
 // If you are running a closed svn, fill the following two lines with the 
username and password
 // of a user allowed to access it. Otherwise, leave it false.
 // This is only necessary if using the shell method to access Subversion

Added: trunk/extensions/CodeReview/modules/ext.codereview.tags.css
===================================================================
--- trunk/extensions/CodeReview/modules/ext.codereview.tags.css                 
        (rev 0)
+++ trunk/extensions/CodeReview/modules/ext.codereview.tags.css 2011-09-02 
22:41:01 UTC (rev 96158)
@@ -0,0 +1,17 @@
+/* Unique green box to add new tags */
+#codereview-add-tag {
+       color: #00FF00;
+       font-size: 1.2em;
+
+       background-color: #EDFFED;
+       padding: 0 0.5em;
+       border: 1px solid #00FF00;
+       cursor: pointer;
+}
+
+/* Red 'erase to the left' signs to remove a tag */
+.codereview-remove-tag {
+       color: #FF0000;
+       font-size: 1.2em;
+       cursor: crosshair;
+}

Added: trunk/extensions/CodeReview/modules/ext.codereview.tags.js
===================================================================
--- trunk/extensions/CodeReview/modules/ext.codereview.tags.js                  
        (rev 0)
+++ trunk/extensions/CodeReview/modules/ext.codereview.tags.js  2011-09-02 
22:41:01 UTC (rev 96158)
@@ -0,0 +1,59 @@
+( function( $ ) {
+var $rev = 0;
+
+window.CodeReview = $.extend( window.CodeReview, {
+
+       /* TODO we should probably add that click handling from PHP
+        * ui/CodeRevisionView.php */
+       tagInit: function( rev ) {
+               $rev = rev;
+               $('.codereview-remove-tag').click( function() {
+                       CodeReview.tagRemove( $(this).attr( 'id' ) )
+               });
+       },
+       tagAdd: function() {
+
+       },
+       tagRemove: function( HTMLId ) {
+               var tag = HTMLId.replace( /codereview-remove-tag-(.*)/, "$1" );
+               $.ajax({
+                       url: mw.util.wikiScript( 'api' ),
+                       data: {
+                               'action': 'coderevisionupdate',
+
+                               'repo' : mw.config.get( 
'wgCodeReviewRepository' ),
+                               'rev'  : $rev,
+
+                               'removetags': tag,
+
+                               'format': 'json',
+                       },
+                       dataType: 'json',
+                       type: 'POST',
+                       success: function( data ) {
+                               var remover = $( '#'+HTMLId );
+                               // remove tag:
+                               remover.prev().fadeOut().remove();
+
+                               /**
+                                * tag might be followed by a text node ', '
+                                * which can not be reached with jQuery next()
+                                */
+                               var nextNode = remover[0].nextSibling;
+                               console.log( nextNode );
+                               if( nextNode.nodeType === 3
+                                       && nextNode.nodeValue === ", " ) {
+                                       nextNode.parentNode.removeChild( 
nextNode );
+                               }
+                               // finally remove the tag removal sign
+                               remover.fadeOut().remove();
+                       },
+                       error: function() {
+                               // TODO
+                       },
+               });
+       },
+
+
+}); // window.CodeReview
+})( jQuery );

Modified: trunk/extensions/CodeReview/ui/CodeRevisionView.php
===================================================================
--- trunk/extensions/CodeReview/ui/CodeRevisionView.php 2011-09-02 22:34:16 UTC 
(rev 96157)
+++ trunk/extensions/CodeReview/ui/CodeRevisionView.php 2011-09-02 22:41:01 UTC 
(rev 96158)
@@ -193,12 +193,19 @@
                }
                $html .= xml::closeElement( 'form' );
 
+               // Encode revision id for our modules
+               $encRev = Xml::encodeJsVar( $this->mRev->getId() );
+
                $wgOut->addModules( 'ext.codereview.linecomment' );
-               $encRev = Xml::encodeJsVar( $this->mRev->getId() );
                $wgOut->addInLineScript(
                        "CodeReview.lcInit( $encRev );"
                );
 
+               $wgOut->addModules( 'ext.codereview.tags' );
+               $wgOut->addInlineScript(
+                       "CodeReview.tagInit( $encRev );"
+       );
+
                $wgOut->addHTML( $html );
        }
 
@@ -337,6 +344,10 @@
                        ) . ' ';
                }
                if ( $wgUser->isAllowed( 'codereview-add-tag' ) ) {
+                       $list .= Xml::Element( 'span', array(
+                                       'id' => "codereview-add-tag",
+                                       'title' => wfMsg( 
'code-rev-tag-addtag-tooltip' ),
+                               ), '+' );  // TODO: replace '+' with a message
                        $list .= $this->addTagForm( $this->mAddTags, 
$this->mRemoveTags );
                }
                return $list;
@@ -415,9 +426,27 @@
         * @return string
         */
        protected function formatTag( $tag ) {
+               global $wgUser;
+
                $repo = $this->mRepo->getName();
                $special = SpecialPage::getTitleFor( 'Code', "$repo/tag/$tag" );
-               return $this->skin->link( $special, htmlspecialchars( $tag ) );
+               $link = $this->skin->link(
+                       $special,
+                       htmlspecialchars( $tag ),
+                       array( 'class' => 'mw-codereview-tag' )
+               );
+
+               # Let allowed users to remove tags using JS
+               if( $wgUser->isAllowed( 'codereview-add-tag' ) ) {
+                       $link .= ' '.
+                       Xml::Element( 'span', array(
+                               'id'    => "codereview-remove-tag-{$tag}",
+                               'class' => 'codereview-remove-tag',
+                               'title' => wfMsg( 
'code-rev-tag-removetag-tooltip', $tag ),
+                       ), '⌫' ); // TODO: replace '⌫' with a message
+               }
+
+               return $link;
        }
 
        /**


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

Reply via email to