Cenarium has uploaded a new change for review. https://gerrit.wikimedia.org/r/317280
Change subject: Split advanced.js in view.js, edit.js and edit.review.js ...................................................................... Split advanced.js in view.js, edit.js and edit.review.js This splits the advanced module in three modules that are loaded when viewing or editing, with an additional module for reviewers when editing. This avoids loading unecessary JS. Change-Id: I7266ca45b751c9cde5f45bfd4081c087526a06ba --- M FlaggedRevs.php M frontend/FlaggedRevsUI.hooks.php D frontend/modules/ext.flaggedRevs.advanced.js A frontend/modules/ext.flaggedRevs.edit.js A frontend/modules/ext.flaggedRevs.edit.review.js M frontend/modules/ext.flaggedRevs.review.js A frontend/modules/ext.flaggedRevs.view.js 7 files changed, 339 insertions(+), 247 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/FlaggedRevs refs/changes/80/317280/1 diff --git a/FlaggedRevs.php b/FlaggedRevs.php index 6f56c21..3d939ee 100644 --- a/FlaggedRevs.php +++ b/FlaggedRevs.php @@ -368,13 +368,28 @@ 'localBasePath' => $localModulePath, 'remoteExtPath' => $remoteModulePath, ); -$wgResourceModules['ext.flaggedRevs.advanced'] = array( - 'scripts' => array( 'ext.flaggedRevs.advanced.js' ), +$wgResourceModules['ext.flaggedRevs.view'] = array( + 'scripts' => array( 'ext.flaggedRevs.view.js' ), 'messages' => array( 'revreview-toggle-show', 'revreview-toggle-hide', + ), + 'localBasePath' => $localModulePath, + 'remoteExtPath' => $remoteModulePath, +); +$wgResourceModules['ext.flaggedRevs.edit'] = array( + 'scripts' => array( 'ext.flaggedRevs.edit.js' ), + 'messages' => array( 'revreview-diff-toggle-show', 'revreview-diff-toggle-hide', - 'revreview-log-toggle-show', 'revreview-log-toggle-hide', 'revreview-log-details-show', 'revreview-log-details-hide' + ), + 'localBasePath' => $localModulePath, + 'remoteExtPath' => $remoteModulePath, +); +$wgResourceModules['ext.flaggedRevs.edit.review'] = array( + 'scripts' => array( 'ext.flaggedRevs.edit.review.js' ), + 'messages' => array( + 'savearticle', 'tooltip-save', + 'revreview-submitedit', 'revreview-submitedit-title', ), 'dependencies' => array( 'jquery.accessKeyLabel' ), 'localBasePath' => $localModulePath, @@ -383,8 +398,7 @@ $wgResourceModules['ext.flaggedRevs.review'] = array( 'scripts' => array( 'ext.flaggedRevs.review.js' ), 'messages' => array( - 'savearticle', 'tooltip-save', - 'revreview-submitedit', 'revreview-submitedit-title', + 'revreview-log-toggle-show', 'revreview-log-toggle-hide', 'revreview-submit-review', 'revreview-submit-unreview', 'revreview-submit-reviewed', 'revreview-submit-unreviewed', 'revreview-submitting', 'actioncomplete', 'actionfailed', diff --git a/frontend/FlaggedRevsUI.hooks.php b/frontend/FlaggedRevsUI.hooks.php index 0abe3be..edf68f3 100644 --- a/frontend/FlaggedRevsUI.hooks.php +++ b/frontend/FlaggedRevsUI.hooks.php @@ -3,32 +3,6 @@ * Class containing hooked functions for a FlaggedRevs environment */ class FlaggedRevsUIHooks { - /** - * Add FlaggedRevs css/js. - */ - protected static function injectStyleAndJS() { - global $wgOut, $wgUser; - static $loadedModules = false; - if ( $loadedModules ) { - return true; // don't double-load - } - $loadedModules = true; - $fa = FlaggablePageView::globalArticleInstance(); - # Try to only add to relevant pages - if ( !$fa || !$fa->isReviewable() ) { - return true; - } - # Add main CSS & JS files - $wgOut->addModuleStyles( 'ext.flaggedRevs.basic' ); - $wgOut->addModules( 'ext.flaggedRevs.advanced' ); - # Add review form JS for reviewers - if ( $wgUser->isAllowed( 'review' ) ) { - $wgOut->addModules( 'ext.flaggedRevs.review' ); - $wgOut->addModuleStyles( 'ext.flaggedRevs.review.styles' ); - } - return true; - } - public static function injectGlobalJSVars( array &$globalVars, OutputPage $out ) { # Get the review tags on this wiki $rTags = FlaggedRevs::getJSTagParams(); @@ -80,7 +54,6 @@ } } $view->setRobotPolicy(); // set indexing policy - self::injectStyleAndJS(); // full CSS/JS } else { self::maybeAddBacklogNotice( $out ); // RC/Watchlist notice self::injectStyleForSpecial( $out ); // try special page CSS @@ -191,8 +164,23 @@ public static function onArticleViewHeader( &$article, &$outputDone, &$useParserCache ) { $view = FlaggablePageView::singleton(); - $view->addStableLink( $outputDone, $useParserCache ); + $view->addStableLink(); $view->setPageContent( $outputDone, $useParserCache ); + $fa = FlaggablePageView::globalArticleInstance(); + # Try to only add to relevant pages + if ( !$fa || !$fa->isReviewable() ) { + return true; + } + $out = $article->getContext()->getOutput(); + # Add main CSS file + $out->addModuleStyles( 'ext.flaggedRevs.basic' ); + # Add view JS + $out->addModules( 'ext.flaggedRevs.view' ); + # Add review form JS for reviewers + if ( $article->getContext()->getUser()->isAllowed( 'review' ) ) { + $out->addModules( 'ext.flaggedRevs.review' ); + $out->addModuleStyles( 'ext.flaggedRevs.review.styles' ); + } return true; } @@ -248,9 +236,23 @@ return true; } - public static function addToEditView( &$editPage ) { + public static function addToEditView( &$editPage, &$out ) { + global $wgUser; $view = FlaggablePageView::singleton(); $view->addToEditView( $editPage ); + $fa = FlaggablePageView::globalArticleInstance(); + # Try to only add to relevant pages + if ( !$fa || !$fa->isReviewable() ) { + return true; + } + # Add main CSS file + $out->addModuleStyles( 'ext.flaggedRevs.basic' ); + # Add editing JS + $out->addModules( 'ext.flaggedRevs.edit' ); + # Add editing JS for reviewers + if ( $wgUser->isAllowed( 'review' ) ) { + $out->addModules( 'ext.flaggedRevs.edit.review' ); + } return true; } @@ -585,10 +587,22 @@ } public static function onDiffViewHeader( $diff, $oldRev, $newRev ) { - self::injectStyleAndJS(); $view = FlaggablePageView::singleton(); $view->setViewFlags( $diff, $oldRev, $newRev ); $view->addToDiffView( $diff, $oldRev, $newRev ); + $fa = FlaggablePageView::globalArticleInstance(); + # Try to only add to relevant pages + if ( !$fa || !$fa->isReviewable() ) { + return true; + } + $out = $diff->getContext()->getOutput(); + # Add main CSS file + $out->addModuleStyles( 'ext.flaggedRevs.basic' ); + # Add review form JS for reviewers + if ( $diff->getContext()->getUser()->isAllowed( 'review' ) ) { + $out->addModules( 'ext.flaggedRevs.review' ); + $out->addModuleStyles( 'ext.flaggedRevs.review.styles' ); + } return true; } diff --git a/frontend/modules/ext.flaggedRevs.advanced.js b/frontend/modules/ext.flaggedRevs.advanced.js deleted file mode 100644 index 98796f5..0000000 --- a/frontend/modules/ext.flaggedRevs.advanced.js +++ /dev/null @@ -1,212 +0,0 @@ -/** - * FlaggedRevs Advanced JavaScript - * @author Aaron Schulz - * @author Krinkle <krinklem...@gmail.com> 2011 - */ -( function ( mw, $ ) { - "use strict"; - -var fr = { - /* Dropdown collapse timer */ - boxCollapseTimer: null, - - /* Expands flag info box details */ - showBoxDetails: function () { - $( '#mw-fr-revisiondetails' ).css( 'display', 'block' ); - }, - - /* Collapses flag info box details */ - hideBoxDetails: function () { - $( '#mw-fr-revisiondetails' ).css( 'display', 'none' ); - }, - - /** - * Toggles flag info box details for (+/-) control - * @context {jQuery} - * @param e {jQuery.Event} - */ - toggleBoxDetails: function () { - var toggle = $( '#mw-fr-revisiontoggle' ), - ratings = $( '#mw-fr-revisiondetails' ); - - if ( toggle.length && ratings.length ) { - // Collapsed -> expand - if ( ratings.css( 'display' ) === 'none' ) { - fr.showBoxDetails(); - toggle.text( mw.msg( 'revreview-toggle-hide' ) ); - // Expanded -> collapse - } else { - fr.hideBoxDetails(); - toggle.text( mw.msg( 'revreview-toggle-show' ) ); - } - } - }, - - /** - * Checks if mouseOut event is for a child of parentId - * @param e {jQuery.Event} - * @param parentId {String} - * @return {Boolean} True if given event object originated from a (direct or indirect) - * child element of an element with an id of parentId. - */ - isMouseOutBubble: function ( e, parentId ) { - var toNode = e.relatedTarget; - - if ( toNode ) { - var nextParent = toNode.parentNode; - while ( nextParent ) { - if ( nextParent.id === parentId ) { - return true; - } - // next up - nextParent = nextParent.parentNode; - } - } - return false; - }, - - /** - * Expands flag info box details on mouseOver - * @context {jQuery} - * @param e {jQuery.Event} - */ - onBoxMouseOver: function () { - /*global window*/ - window.clearTimeout( fr.boxCollapseTimer ); - fr.boxCollapseTimer = null; - fr.showBoxDetails(); - }, - - /** - * Hides flag info box details on mouseOut *except* for event bubbling - * @context {jQuery} - * @param e {jQuery.Event} - */ - onBoxMouseOut: function ( e ) { - if ( !fr.isMouseOutBubble( e, 'mw-fr-revisiontag' ) ) { - /*global window*/ - fr.boxCollapseTimer = window.setTimeout( fr.hideBoxDetails, 150 ); - } - }, - - /** - * Toggles diffs - * @context {jQuery} - * @param e {jQuery.Event} - */ - toggleDiff: function () { - var diff = $( '#mw-fr-stablediff' ), - toggle = $( '#mw-fr-difftoggle' ); - - if ( diff.length && toggle.length ) { - if ( diff.css( 'display' ) === 'none' ) { - diff.show( 'slow' ); - toggle.children( 'a' ).text( mw.msg( 'revreview-diff-toggle-hide' ) ); - } else { - diff.hide( 'slow' ); - toggle.children( 'a' ).text( mw.msg( 'revreview-diff-toggle-show' ) ); - } - } - }, - - /** - * Toggles log excerpts - * @context {jQuery} - * @param e {jQuery.Event} - */ - toggleLog: function () { - var hideMsg, showMsg, - log = $( '#mw-fr-logexcerpt' ), - toggle = $( '#mw-fr-logtoggle' ); - - if ( log.length && toggle.length ) { - // Two different message sets used here... - if ( toggle.hasClass( 'fr-logtoggle-details' ) ) { - hideMsg = mw.msg( 'revreview-log-details-hide' ); - showMsg = mw.msg( 'revreview-log-details-show' ); - } else { - hideMsg = mw.msg( 'revreview-log-toggle-hide' ); - showMsg = mw.msg( 'revreview-log-toggle-show' ); - } - - if ( log.css( 'display' ) === 'none' ) { - log.show(); - toggle.children( 'a' ).text( hideMsg ); - } else { - log.hide(); - toggle.children( 'a' ).text( showMsg ); - } - } - }, - - /** - * Update save button when "review this" checkbox changes - * @context {jQuery} - * @param e {jQuery.Event} - */ - updateSaveButton: function () { - var $save = $( '#wpSave' ), - $checkbox = $( '#wpReviewEdit' ); - - if ( $save.length && $checkbox.length ) { - // Review pending changes - if ( $checkbox.prop( 'checked' ) ) { - $save - .val( mw.msg( 'savearticle' ) ) - .attr( 'title', - mw.msg( 'tooltip-save' ) - ); - // Submit for review - } else { - $save - .val( mw.msg( 'revreview-submitedit' ) ) - .attr( 'title', - mw.msg( 'revreview-submitedit-title' ) - ); - } - $save.updateTooltipAccessKeys(); - } - }, - - /* Startup function */ - init: function () { - // Enables rating detail box - var toggle = $( '#mw-fr-revisiontoggle' ); - - if ( toggle.length ) { - toggle.css( 'display', 'inline' ); // show toggle control - fr.hideBoxDetails(); // hide the initially displayed ratings - } - - // Bar UI: Toggle the box when the toggle is clicked - $( '.fr-toggle-symbol#mw-fr-revisiontoggle' ).click( fr.toggleBoxDetails ); - - // Simple UI: Show the box on mouseOver - $( '.fr-toggle-arrow#mw-fr-revisiontoggle' ).mouseover( fr.onBoxMouseOver ); - $( '.flaggedrevs_short#mw-fr-revisiontag' ).mouseout( fr.onBoxMouseOut ); - - // Enables diff detail box and toggle - toggle = $( '#mw-fr-difftoggle' ); - if ( toggle.length ) { - toggle.css( 'display', 'inline' ); // show toggle control - $( '#mw-fr-stablediff' ).hide(); - } - toggle.children( 'a' ).click( fr.toggleDiff ); - - // Enables log detail box and toggle - toggle = $( '#mw-fr-logtoggle' ); - if ( toggle.length ) { - toggle.css( 'display', 'inline' ); // show toggle control - $( '#mw-fr-logexcerpt' ).hide(); - } - toggle.children( 'a' ).click( fr.toggleLog ); - - // Enables changing of save button when "review this" checkbox changes - $( '#wpReviewEdit' ).click( fr.updateSaveButton ); - } -}; - -// Perform some onload events: -$( fr.init ); - -}( mediaWiki, jQuery ) ); diff --git a/frontend/modules/ext.flaggedRevs.edit.js b/frontend/modules/ext.flaggedRevs.edit.js new file mode 100644 index 0000000..065a180 --- /dev/null +++ b/frontend/modules/ext.flaggedRevs.edit.js @@ -0,0 +1,80 @@ +/** + * FlaggedRevs Advanced JavaScript + * @author Aaron Schulz + * @author Krinkle <krinklem...@gmail.com> 2011 + */ +( function ( mw, $ ) { + "use strict"; + +var fr = { + /** + * Toggles diffs + * @context {jQuery} + * @param e {jQuery.Event} + */ + toggleDiff: function () { + var diff = $( '#mw-fr-stablediff' ), + toggle = $( '#mw-fr-difftoggle' ); + + if ( diff.length && toggle.length ) { + if ( diff.css( 'display' ) === 'none' ) { + diff.show( 'slow' ); + toggle.children( 'a' ).text( mw.msg( 'revreview-diff-toggle-hide' ) ); + } else { + diff.hide( 'slow' ); + toggle.children( 'a' ).text( mw.msg( 'revreview-diff-toggle-show' ) ); + } + } + }, + + /** + * Toggles log excerpts + * @context {jQuery} + * @param e {jQuery.Event} + */ + toggleLog: function () { + var hideMsg, showMsg, + log = $( '#mw-fr-logexcerpt' ), + toggle = $( '#mw-fr-logtoggle' ); + + if ( log.length && toggle.length ) { + hideMsg = mw.msg( 'revreview-log-details-hide' ); + showMsg = mw.msg( 'revreview-log-details-show' ); + + if ( log.css( 'display' ) === 'none' ) { + log.show(); + toggle.children( 'a' ).text( hideMsg ); + } else { + log.hide(); + toggle.children( 'a' ).text( showMsg ); + } + } + }, + + /* Startup function */ + init: function () { + // Enables rating detail box + var toggle; + + // Enables diff detail box and toggle + toggle = $( '#mw-fr-difftoggle' ); + if ( toggle.length ) { + toggle.css( 'display', 'inline' ); // show toggle control + $( '#mw-fr-stablediff' ).hide(); + } + toggle.children( 'a' ).click( fr.toggleDiff ); + + // Enables log detail box and toggle + toggle = $( '#mw-fr-logtoggle' ); + if ( toggle.length ) { + toggle.css( 'display', 'inline' ); // show toggle control + $( '#mw-fr-logexcerpt' ).hide(); + } + toggle.children( 'a' ).click( fr.toggleLog ); + } +}; + +// Perform some onload events: +$( fr.init ); + +}( mediaWiki, jQuery ) ); diff --git a/frontend/modules/ext.flaggedRevs.edit.review.js b/frontend/modules/ext.flaggedRevs.edit.review.js new file mode 100644 index 0000000..dfa143c --- /dev/null +++ b/frontend/modules/ext.flaggedRevs.edit.review.js @@ -0,0 +1,50 @@ +/** + * FlaggedRevs Advanced JavaScript + * @author Aaron Schulz + * @author Krinkle <krinklem...@gmail.com> 2011 + */ +( function ( mw, $ ) { + "use strict"; + +var fr = { + + /** + * Update save button when "review this" checkbox changes + * @context {jQuery} + * @param e {jQuery.Event} + */ + updateSaveButton: function () { + var $save = $( '#wpSave' ), + $checkbox = $( '#wpReviewEdit' ); + + if ( $save.length && $checkbox.length ) { + // Review pending changes + if ( $checkbox.prop( 'checked' ) ) { + $save + .val( mw.msg( 'savearticle' ) ) + .attr( 'title', + mw.msg( 'tooltip-save' ) + ); + // Submit for review + } else { + $save + .val( mw.msg( 'revreview-submitedit' ) ) + .attr( 'title', + mw.msg( 'revreview-submitedit-title' ) + ); + } + $save.updateTooltipAccessKeys(); + } + }, + + /* Startup function */ + init: function () { + // Enables changing of save button when "review this" checkbox changes + $( '#wpReviewEdit' ).click( fr.updateSaveButton ); + } +}; + +// Perform some onload events: +$( fr.init ); + +}( mediaWiki, jQuery ) ); diff --git a/frontend/modules/ext.flaggedRevs.review.js b/frontend/modules/ext.flaggedRevs.review.js index c90afc6..7dd21ee 100644 --- a/frontend/modules/ext.flaggedRevs.review.js +++ b/frontend/modules/ext.flaggedRevs.review.js @@ -377,6 +377,30 @@ $( '#mw-fr-reviewing-status' ).show(); }, + /** + * Toggles log excerpts + * @context {jQuery} + * @param e {jQuery.Event} + */ + toggleLog: function () { + var hideMsg, showMsg, + log = $( '#mw-fr-logexcerpt' ), + toggle = $( '#mw-fr-logtoggle' ); + + if ( log.length && toggle.length ) { + hideMsg = mw.msg( 'revreview-log-toggle-hide' ); + showMsg = mw.msg( 'revreview-log-toggle-show' ); + + if ( log.css( 'display' ) === 'none' ) { + log.show(); + toggle.children( 'a' ).text( hideMsg ); + } else { + log.hide(); + toggle.children( 'a' ).text( showMsg ); + } + } + }, + /* Startup function */ init: function () { var form = $( '#mw-fr-reviewform' ); @@ -411,6 +435,14 @@ fr.deadvertiseReviewing(); } } ); + + // Enables log box and toggle + var toggle = $( '#mw-fr-logtoggle' ); + if ( toggle.length ) { + toggle.css( 'display', 'inline' ); // show toggle control + $( '#mw-fr-logexcerpt' ).hide(); + } + toggle.children( 'a' ).click( fr.toggleLog ); } }; diff --git a/frontend/modules/ext.flaggedRevs.view.js b/frontend/modules/ext.flaggedRevs.view.js new file mode 100644 index 0000000..b176e34 --- /dev/null +++ b/frontend/modules/ext.flaggedRevs.view.js @@ -0,0 +1,114 @@ +/** + * FlaggedRevs Advanced JavaScript + * @author Aaron Schulz + * @author Krinkle <krinklem...@gmail.com> 2011 + */ +( function ( mw, $ ) { + "use strict"; + +var fr = { + /* Dropdown collapse timer */ + boxCollapseTimer: null, + + /* Expands flag info box details */ + showBoxDetails: function () { + $( '#mw-fr-revisiondetails' ).css( 'display', 'block' ); + }, + + /* Collapses flag info box details */ + hideBoxDetails: function () { + $( '#mw-fr-revisiondetails' ).css( 'display', 'none' ); + }, + + /** + * Toggles flag info box details for (+/-) control + * @context {jQuery} + * @param e {jQuery.Event} + */ + toggleBoxDetails: function () { + var toggle = $( '#mw-fr-revisiontoggle' ), + ratings = $( '#mw-fr-revisiondetails' ); + + if ( toggle.length && ratings.length ) { + // Collapsed -> expand + if ( ratings.css( 'display' ) === 'none' ) { + fr.showBoxDetails(); + toggle.text( mw.msg( 'revreview-toggle-hide' ) ); + // Expanded -> collapse + } else { + fr.hideBoxDetails(); + toggle.text( mw.msg( 'revreview-toggle-show' ) ); + } + } + }, + + /** + * Checks if mouseOut event is for a child of parentId + * @param e {jQuery.Event} + * @param parentId {String} + * @return {Boolean} True if given event object originated from a (direct or indirect) + * child element of an element with an id of parentId. + */ + isMouseOutBubble: function ( e, parentId ) { + var toNode = e.relatedTarget; + + if ( toNode ) { + var nextParent = toNode.parentNode; + while ( nextParent ) { + if ( nextParent.id === parentId ) { + return true; + } + // next up + nextParent = nextParent.parentNode; + } + } + return false; + }, + + /** + * Expands flag info box details on mouseOver + * @context {jQuery} + * @param e {jQuery.Event} + */ + onBoxMouseOver: function () { + /*global window*/ + window.clearTimeout( fr.boxCollapseTimer ); + fr.boxCollapseTimer = null; + fr.showBoxDetails(); + }, + + /** + * Hides flag info box details on mouseOut *except* for event bubbling + * @context {jQuery} + * @param e {jQuery.Event} + */ + onBoxMouseOut: function ( e ) { + if ( !fr.isMouseOutBubble( e, 'mw-fr-revisiontag' ) ) { + /*global window*/ + fr.boxCollapseTimer = window.setTimeout( fr.hideBoxDetails, 150 ); + } + }, + + /* Startup function */ + init: function () { + // Enables rating detail box + var toggle = $( '#mw-fr-revisiontoggle' ); + + if ( toggle.length ) { + toggle.css( 'display', 'inline' ); // show toggle control + fr.hideBoxDetails(); // hide the initially displayed ratings + } + + // Bar UI: Toggle the box when the toggle is clicked + $( '.fr-toggle-symbol#mw-fr-revisiontoggle' ).click( fr.toggleBoxDetails ); + + // Simple UI: Show the box on mouseOver + $( '.fr-toggle-arrow#mw-fr-revisiontoggle' ).mouseover( fr.onBoxMouseOver ); + $( '.flaggedrevs_short#mw-fr-revisiontag' ).mouseout( fr.onBoxMouseOut ); + } +}; + +// Perform some onload events: +$( fr.init ); + +}( mediaWiki, jQuery ) ); -- To view, visit https://gerrit.wikimedia.org/r/317280 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I7266ca45b751c9cde5f45bfd4081c087526a06ba Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/FlaggedRevs Gerrit-Branch: master Gerrit-Owner: Cenarium <cenarium.sy...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits