From: Happy-melon Date: Mon, 27 Dec 2010 19:07:28 +0000 (+0000) Subject: Refactoring in RecentChanges/Watchlist: X-Git-Tag: 1.31.0-rc.0~33051 X-Git-Url: http://git.cyclocoop.org/ecrire?a=commitdiff_plain;h=ca15303c814a6c8925f5f647588ab572097765b0;p=lhc%2Fweb%2Fwiklou.git Refactoring in RecentChanges/Watchlist: * Use new jQuery/RL collapsible implementation, remove legacy JS. * Refactor ChangesList::flag() and ChangesList::recentChangesFlags(), the latter to now take an array rather than a growing list of out-of-order parameters. * Resolve the FIXME requested in r44421 (just passed its second birthday :D) by replacing extract() calls with direct references. --- diff --git a/includes/ChangesList.php b/includes/ChangesList.php index 5de3b06d41..544151c6e2 100644 --- a/includes/ChangesList.php +++ b/includes/ChangesList.php @@ -30,7 +30,7 @@ class RCCacheEntry extends RecentChange { class ChangesList { public $skin; protected $watchlist = false; - + /** * Changeslist contructor * @param $skin Skin @@ -81,21 +81,19 @@ class ChangesList { } } - /** * Returns the appropriate flags for new page, minor change and patrolling - * @param $new Boolean - * @param $minor Boolean - * @param $patrolled Boolean + * @param $flags Associative array of 'flag' => Bool * @param $nothing String to use for empty space - * @param $bot Boolean * @return String */ - protected function recentChangesFlags( $new, $minor, $patrolled, $nothing = ' ', $bot = false ) { - $f = $new ? self::flag( 'newpage' ) : $nothing; - $f .= $minor ? self::flag( 'minor' ) : $nothing; - $f .= $bot ? self::flag( 'bot' ) : $nothing; - $f .= $patrolled ? self::flag( 'unpatrolled' ) : $nothing; + protected function recentChangesFlags( $flags, $nothing = ' ' ) { + $f = ''; + foreach( array( 'newpage', 'minor', 'bot', 'unpatrolled' ) as $flag ){ + $f .= isset( $flags[$flag] ) && $flags[$flag] + ? self::flag( $flag ) + : $nothing; + } return $f; } @@ -108,25 +106,31 @@ class ChangesList { * @param $key String: 'newpage', 'unpatrolled', 'minor', or 'bot' * @return String: Raw HTML */ - public static function flag( $key ) { + public static function flag( $flag ) { static $messages = null; if ( is_null( $messages ) ) { - foreach ( explode( ' ', 'minoreditletter boteditletter newpageletter ' . - 'unpatrolledletter recentchanges-label-minor recentchanges-label-bot ' . - 'recentchanges-label-newpage recentchanges-label-unpatrolled' ) as $msg ) { - $messages[$msg] = wfMsgExt( $msg, 'escapenoentities' ); + $messages = array( + 'newpage' => array( 'newpageletter', 'recentchanges-label-newpage' ), + 'minoredit' => array( 'minoreditletter', 'recentchanges-label-minor' ), + 'botedit' => array( 'boteditletter', 'recentchanges-label-bot' ), + 'unpatrolled' => array( 'unpatrolledletter', 'recentchanges-label-unpatrolled' ), + ); + foreach( $messages as $key => &$value ) { + $value[0] = wfMsgExt( $value[0], 'escapenoentities' ); + $value[1] = wfMsgExt( $value[1], 'escapenoentities' ); } } + # Inconsistent naming, bleh - if ( $key == 'newpage' || $key == 'unpatrolled' ) { - $key2 = $key; - } else { - $key2 = $key . 'edit'; - } - return "" - . $messages["${key2}letter"] - . ''; + $map = array( + 'newpage' => 'newpage', + 'minor' => 'minor', + 'bot' => 'bot', + 'unpatrolled' => 'unpatrolled', + ); + $flag = $map[$flag]; + + return "" . $messages[$flag][0] . ''; } /** @@ -507,8 +511,15 @@ class OldChangesList extends ChangesList { } else { $this->insertDiffHist( $s, $rc, $unpatrolled ); # M, N, b and ! (minor, new, bot and unpatrolled) - $s .= $this->recentChangesFlags( $rc->mAttribs['rc_new'], $rc->mAttribs['rc_minor'], - $unpatrolled, '', $rc->mAttribs['rc_bot'] ); + $s .= $this->recentChangesFlags( + array( + 'newpage' => $rc->mAttribs['rc_new'], + 'minoredit' => $rc->mAttribs['rc_minor'], + 'unpatrolled' => $unpatrolled, + 'botedit' => $rc->mAttribs['rc_bot'] + ), + '' + ); $this->insertArticleLink( $s, $rc, $unpatrolled, $watched ); } # Edit/log timestamp @@ -566,7 +577,7 @@ class EnhancedChangesList extends ChangesList { $this->rcCacheIndex = 0; $this->lastdate = ''; $this->rclistOpen = false; - $wgOut->addModules( 'mediawiki.legacy.enhancedchanges' ); + $wgOut->addModuleStyles( 'mediawiki.special.changeslist' ); return ''; } /** @@ -580,14 +591,10 @@ class EnhancedChangesList extends ChangesList { # Create a specialised object $rc = RCCacheEntry::newFromParent( $baseRC ); - # Extract fields from DB into the function scope (rc_xxxx variables) - // FIXME: Would be good to replace this extract() call with something - // that explicitly initializes variables. - extract( $rc->mAttribs ); - $curIdEq = array( 'curid' => $rc_cur_id ); + $curIdEq = array( 'curid' => $rc->mAttribs['rc_cur_id'] ); # If it's a new day, add the headline and flush the cache - $date = $wgLang->date( $rc_timestamp, true ); + $date = $wgLang->date( $rc->mAttribs['rc_timestamp'], true ); $ret = ''; if( $date != $this->lastdate ) { # Process current cache @@ -599,36 +606,38 @@ class EnhancedChangesList extends ChangesList { # Should patrol-related stuff be shown? if( $wgUser->useRCPatrol() ) { - $rc->unpatrolled = !$rc_patrolled; + $rc->unpatrolled = !$rc->mAttribs['rc_patrolled']; } else { $rc->unpatrolled = false; } $showdifflinks = true; # Make article link + $type = $rc->mAttribs['rc_type']; + $logType = $rc->mAttribs['rc_log_type']; // Page moves - if( $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) { - $msg = ( $rc_type == RC_MOVE ) ? "1movedto2" : "1movedto2_redir"; + if( $type == RC_MOVE || $type == RC_MOVE_OVER_REDIRECT ) { + $msg = ( $type == RC_MOVE ) ? "1movedto2" : "1movedto2_redir"; $clink = wfMsg( $msg, $this->skin->linkKnown( $rc->getTitle(), null, array(), array( 'redirect' => 'no' ) ), $this->skin->linkKnown( $rc->getMovedToTitle() ) ); // New unpatrolled pages - } else if( $rc->unpatrolled && $rc_type == RC_NEW ) { + } else if( $rc->unpatrolled && $type == RC_NEW ) { $clink = $this->skin->linkKnown( $rc->getTitle(), null, array(), - array( 'rcid' => $rc_id ) ); + array( 'rcid' => $rc->mAttribs['rc_id'] ) ); // Log entries - } else if( $rc_type == RC_LOG ) { - if( $rc_log_type ) { - $logtitle = SpecialPage::getTitleFor( 'Log', $rc_log_type ); + } else if( $type == RC_LOG ) { + if( $logType ) { + $logtitle = SpecialPage::getTitleFor( 'Log', $logType ); $clink = '(' . $this->skin->linkKnown( $logtitle, - LogPage::logName($rc_log_type) ) . ')'; + LogPage::logName( $logType ) ) . ')'; } else { $clink = $this->skin->link( $rc->getTitle() ); } $watched = false; // Log entries (old format) and special pages - } elseif( $rc_namespace == NS_SPECIAL ) { - list( $specialName, $logtype ) = SpecialPage::resolveAliasWithSubpage( $rc_title ); + } elseif( $rc->mAttribs['rc_namespace'] == NS_SPECIAL ) { + list( $specialName, $logtype ) = SpecialPage::resolveAliasWithSubpage( $rc->mAttribs['rc_title'] ); if ( $specialName == 'Log' ) { # Log updates, etc $logname = LogPage::logName( $logtype ); @@ -647,7 +656,7 @@ class EnhancedChangesList extends ChangesList { $showdifflinks = false; } - $time = $wgLang->time( $rc_timestamp, true, true ); + $time = $wgLang->time( $rc->mAttribs['rc_timestamp'], true, true ); $rc->watched = $watched; $rc->link = $clink; $rc->timestamp = $time; @@ -655,20 +664,22 @@ class EnhancedChangesList extends ChangesList { # Make "cur" and "diff" links. Do not use link(), it is too slow if # called too many times (50% of CPU time on RecentChanges!). + $thisOldid = $rc->mAttribs['rc_this_oldid']; + $lastOldid = $rc->mAttribs['rc_last_oldid']; if( $rc->unpatrolled ) { - $rcIdQuery = array( 'rcid' => $rc_id ); + $rcIdQuery = array( 'rcid' => $rc->mAttribs['rc_id'] ); } else { $rcIdQuery = array(); } - $querycur = $curIdEq + array( 'diff' => '0', 'oldid' => $rc_this_oldid ); - $querydiff = $curIdEq + array( 'diff' => $rc_this_oldid, 'oldid' => - $rc_last_oldid ) + $rcIdQuery; + $querycur = $curIdEq + array( 'diff' => '0', 'oldid' => $thisOldid ); + $querydiff = $curIdEq + array( 'diff' => $thisOldid, 'oldid' => + $lastOldid ) + $rcIdQuery; if( !$showdifflinks ) { $curLink = $this->message['cur']; $diffLink = $this->message['diff']; - } else if( in_array( $rc_type, array(RC_NEW,RC_LOG,RC_MOVE,RC_MOVE_OVER_REDIRECT) ) ) { - if ( $rc_type != RC_NEW ) { + } else if( in_array( $type, array( RC_NEW, RC_LOG, RC_MOVE, RC_MOVE_OVER_REDIRECT ) ) ) { + if ( $type != RC_NEW ) { $curLink = $this->message['cur']; } else { $curUrl = htmlspecialchars( $rc->getTitle()->getLinkUrl( $querycur ) ); @@ -683,21 +694,21 @@ class EnhancedChangesList extends ChangesList { } # Make "last" link - if( !$showdifflinks || !$rc_last_oldid ) { + if( !$showdifflinks || !$lastOldid ) { $lastLink = $this->message['last']; - } else if( $rc_type == RC_LOG || $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) { + } else if( in_array( $type, array( RC_LOG, RC_MOVE, RC_MOVE_OVER_REDIRECT ) ) ) { $lastLink = $this->message['last']; } else { $lastLink = $this->skin->linkKnown( $rc->getTitle(), $this->message['last'], - array(), $curIdEq + array('diff' => $rc_this_oldid, 'oldid' => $rc_last_oldid) + $rcIdQuery ); + array(), $curIdEq + array('diff' => $thisOldid, 'oldid' => $lastOldid) + $rcIdQuery ); } # Make user links - if( $this->isDeleted($rc,Revision::DELETED_USER) ) { - $rc->userlink = ' ' . wfMsgHtml( 'rev-deleted-user' ) . ''; + if( $this->isDeleted( $rc, Revision::DELETED_USER ) ) { + $rc->userlink = ' ' . wfMsgHtml( 'rev-deleted-user' ) . ''; } else { - $rc->userlink = $this->skin->userLink( $rc_user, $rc_user_text ); - $rc->usertalklink = $this->skin->userToolLinks( $rc_user, $rc_user_text ); + $rc->userlink = $this->skin->userLink( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] ); + $rc->usertalklink = $this->skin->userToolLinks( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] ); } $rc->lastlink = $lastLink; @@ -708,13 +719,13 @@ class EnhancedChangesList extends ChangesList { # Page moves go on their own line $title = $rc->getTitle(); $secureName = $title->getPrefixedDBkey(); - if( $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) { + if( $type == RC_MOVE || $type == RC_MOVE_OVER_REDIRECT ) { # Use an @ character to prevent collision with page names $this->rc_cache['@@' . ($this->rcMoveIndex++)] = array($rc); } else { # Logs are grouped by type - if( $rc_type == RC_LOG ){ - $secureName = SpecialPage::getTitleFor( 'Log', $rc_log_type )->getPrefixedDBkey(); + if( $type == RC_LOG ){ + $secureName = SpecialPage::getTitleFor( 'Log', $logType )->getPrefixedDBkey(); } if( !isset( $this->rc_cache[$secureName] ) ) { $this->rc_cache[$secureName] = array(); @@ -739,9 +750,9 @@ class EnhancedChangesList extends ChangesList { # Add the namespace and title of the block as part of the class if ( $block[0]->mAttribs['rc_log_type'] ) { # Log entry - $classes = 'mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-log-' . $block[0]->mAttribs['rc_log_type'] . '-' . $block[0]->mAttribs['rc_title'] ); + $classes = 'mw-collapsible mw-collapsed mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-log-' . $block[0]->mAttribs['rc_log_type'] . '-' . $block[0]->mAttribs['rc_title'] ); } else { - $classes = 'mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-ns' . $block[0]->mAttribs['rc_namespace'] . '-' . $block[0]->mAttribs['rc_title'] ); + $classes = 'mw-collapsible mw-collapsed mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-ns' . $block[0]->mAttribs['rc_namespace'] . '-' . $block[0]->mAttribs['rc_title'] ); } $r = Html::openElement( 'table', array( 'class' => $classes ) ) . Html::openElement( 'tr' ); @@ -804,23 +815,28 @@ class EnhancedChangesList extends ChangesList { $users = ' [' . implode( $this->message['semicolon-separator'], $users ) . ']'; - # ID for JS visibility toggle - $jsid = $this->rcCacheIndex; - # onclick handler to toggle hidden/expanded - $toggleLink = "onclick='toggleVisibility($jsid); return false'"; # Title for tags $expandTitle = htmlspecialchars( wfMsg( 'rc-enhanced-expand' ) ); $closeTitle = htmlspecialchars( wfMsg( 'rc-enhanced-hide' ) ); - $tl = "" . $this->sideArrow() . ""; - $tl .= ""; - $r .= ''.$tl.' '; + $tl = "" + . "" + . "{$this->sideArrow()}" + . "" + . "{$this->downArrow()}" + . ""; + $r .= "$tl"; # Main line - $r .= $this->recentChangesFlags( $isnew, false, $unpatrolled, ' ', $bot ); + $r .= '' . $this->recentChangesFlags( array( + 'newpage' => $isnew, + 'minoredit' => false, + 'unpatrolled' => $unpatrolled, + 'botedit' => $bot , + ) ); # Timestamp - $r .= ' '.$block[0]->timestamp.' '; + $r .= ' '.$block[0]->timestamp.' '; # Article link if( $namehidden ) { @@ -908,39 +924,36 @@ class EnhancedChangesList extends ChangesList { $r .= $users; $r .= $this->numberofWatchingusers($block[0]->numberofWatchingusers); - $r .= "\n"; - # Sub-entries - $r .= '
'; - $r .= ''; foreach( $block as $rcObj ) { - # Extract fields from DB into the function scope (rc_xxxx variables) - // FIXME: Would be good to replace this extract() call with something - // that explicitly initializes variables. # Classes to apply -- TODO implement $classes = array(); - extract( $rcObj->mAttribs ); + $type = $rcObj->mAttribs['rc_type']; #$r .= '\n"; } - $r .= "
'.$this->spacerArrow(); - $r .= '
'; - $r .= $this->spacerIndent() . $this->spacerIndent(); - $r .= $this->recentChangesFlags( $rc_new, $rc_minor, $rcObj->unpatrolled, ' ', $rc_bot ); - $r .= ' '; + $r .= '
'; + $r .= $this->recentChangesFlags( array( + 'newpage' => $rcObj->mAttribs['rc_new'], + 'minoredit' => $rcObj->mAttribs['rc_minor'], + 'unpatrolled' => $rcObj->unpatrolled, + 'botedit' => $rcObj->mAttribs['rc_bot'], + ) ); + $r .= ' '; $params = $queryParams; - if( $rc_this_oldid != 0 ) { - $params['oldid'] = $rc_this_oldid; + if( $rcObj->mAttribs['rc_this_oldid'] != 0 ) { + $params['oldid'] = $rcObj->mAttribs['rc_this_oldid']; } # Log timestamp - if( $rc_type == RC_LOG ) { + if( $type == RC_LOG ) { $link = $rcObj->timestamp; # Revision link } else if( !ChangesList::userCan($rcObj,Revision::DELETED_TEXT) ) { $link = ''.$rcObj->timestamp.' '; } else { - if ( $rcObj->unpatrolled && $rc_type == RC_NEW) { + if ( $rcObj->unpatrolled && $type == RC_NEW) { $params['rcid'] = $rcObj->mAttribs['rc_id']; } @@ -956,7 +969,7 @@ class EnhancedChangesList extends ChangesList { } $r .= $link . ''; - if ( !$rc_type == RC_LOG || $rc_type == RC_NEW ) { + if ( !$type == RC_LOG || $type == RC_NEW ) { $r .= ' ('; $r .= $rcObj->curlink; $r .= $this->message['pipe-separator']; @@ -966,9 +979,10 @@ class EnhancedChangesList extends ChangesList { $r .= ' . . '; # Character diff - if( $wgRCShowChangedSize ) { - $r .= ( $rcObj->getCharacterDifference() == '' ? '' : $rcObj->getCharacterDifference() . ' . . ' ) ; + if( $wgRCShowChangedSize && $rcObj->getCharacterDifference() ) { + $r .= $rcObj->getCharacterDifference() . ' . . ' ; } + # User links $r .= $rcObj->userlink; $r .= $rcObj->usertalklink; @@ -983,7 +997,7 @@ class EnhancedChangesList extends ChangesList { $r .= "
\n"; + $r .= "\n"; $this->rcCacheIndex++; @@ -1035,14 +1049,6 @@ class EnhancedChangesList extends ChangesList { return $this->arrow( '', codepointToUtf8( 0xa0 ) ); // non-breaking space } - /** - * Add a set of spaces - * @return String: HTML tag - */ - protected function spacerIndent() { - return '     '; - } - /** * Enhanced RC ungrouped line. * @return String: a HTML formated line (generated using $r) @@ -1051,35 +1057,36 @@ class EnhancedChangesList extends ChangesList { global $wgRCShowChangedSize; wfProfileIn( __METHOD__ ); + $query['curid'] = $rcObj->mAttribs['rc_cur_id']; - # Extract fields from DB into the function scope (rc_xxxx variables) - // FIXME: Would be good to replace this extract() call with something - // that explicitly initializes variables. - // TODO implement - extract( $rcObj->mAttribs ); - $query['curid'] = $rc_cur_id; - - if( $rc_log_type ) { + $type = $rcObj->mAttribs['rc_type']; + $logType = $rcObj->mAttribs['rc_log_type']; + if( $logType ) { # Log entry - $classes = 'mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-log-' . $rc_log_type . '-' . $rcObj->mAttribs['rc_title'] ); + $classes = 'mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-log-' . $logType . '-' . $rcObj->mAttribs['rc_title'] ); } else { $classes = 'mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-ns' . $rcObj->mAttribs['rc_namespace'] . '-' . $rcObj->mAttribs['rc_title'] ); } $r = Html::openElement( 'table', array( 'class' => $classes ) ) . Html::openElement( 'tr' ); - $r .= '' . $this->spacerArrow() . ' '; + $r .= '' . $this->spacerArrow(); # Flag and Timestamp - if( $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) { + if( $type == RC_MOVE || $type == RC_MOVE_OVER_REDIRECT ) { $r .= '    '; // 4 flags -> 4 spaces } else { - $r .= $this->recentChangesFlags( $rc_type == RC_NEW, $rc_minor, $rcObj->unpatrolled, ' ', $rc_bot ); + $r .= $this->recentChangesFlags( array( + 'newpage' => $type == RC_NEW, + 'minoredit' => $rcObj->mAttribs['rc_minor'], + 'unpatrolled' => $rcObj->unpatrolled, + 'botedit' => $rcObj->mAttribs['rc_bot'], + ) ); } - $r .= ' '.$rcObj->timestamp.' '; + $r .= ' '.$rcObj->timestamp.' '; # Article or log link - if( $rc_log_type ) { - $logtitle = Title::newFromText( "Log/$rc_log_type", NS_SPECIAL ); - $logname = LogPage::logName( $rc_log_type ); + if( $logType ) { + $logtitle = Title::newFromText( "Log/$logType", NS_SPECIAL ); + $logname = LogPage::logName( $logType ); $r .= '(' . $this->skin->link( $logtitle, $logname, @@ -1091,7 +1098,7 @@ class EnhancedChangesList extends ChangesList { $this->insertArticleLink( $r, $rcObj, $rcObj->unpatrolled, $rcObj->watched ); } # Diff and hist links - if ( $rc_type != RC_LOG ) { + if ( $type != RC_LOG ) { $r .= ' ('. $rcObj->difflink . $this->message['pipe-separator']; $query['action'] = 'history'; $r .= $this->skin->link( @@ -1110,12 +1117,12 @@ class EnhancedChangesList extends ChangesList { # User/talk $r .= ' '.$rcObj->userlink . $rcObj->usertalklink; # Log action (if any) - if( $rc_log_type ) { + if( $logType ) { if( $this->isDeleted($rcObj,LogPage::DELETED_ACTION) ) { $r .= ' ' . wfMsgHtml('rev-deleted-event') . ''; } else { - $r .= ' ' . LogPage::actionText( $rc_log_type, $rc_log_action, $rcObj->getTitle(), - $this->skin, LogPage::extractParams($rc_params), true, true ); + $r .= ' ' . LogPage::actionText( $logType, $rcObj->mAttribs['rc_log_action'], $rcObj->getTitle(), + $this->skin, LogPage::extractParams( $rcObj->mAttribs['rc_params'] ), true, true ); } } $this->insertComment( $r, $rcObj ); diff --git a/resources/Resources.php b/resources/Resources.php index 27d94e65b7..4f87374dab 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -357,6 +357,10 @@ return array( 'scripts' => 'resources/mediawiki.special/mediawiki.special.preferences.js', 'styles' => 'resources/mediawiki.special/mediawiki.special.preferences.css', ), + 'mediawiki.special.changeslist' => array( + 'styles' => 'resources/mediawiki.special/mediawiki.special.changeslist.css', + 'dependencies' => array( 'jquery.makeCollapsible' ), + ), 'mediawiki.special.search' => array( 'scripts' => 'resources/mediawiki.special/mediawiki.special.search.js', ), @@ -447,10 +451,6 @@ return array( 'scripts' => 'skins/common/edit.js', 'dependencies' => 'mediawiki.legacy.wikibits', ), - 'mediawiki.legacy.enhancedchanges' => array( - 'scripts' => 'skins/common/enhancedchanges.js', - 'dependencies' => 'mediawiki.legacy.wikibits', - ), 'mediawiki.legacy.history' => array( 'scripts' => 'skins/common/history.js', 'dependencies' => 'mediawiki.legacy.wikibits', diff --git a/resources/mediawiki.special/mediawiki.special.changeslist.css b/resources/mediawiki.special/mediawiki.special.changeslist.css new file mode 100644 index 0000000000..9f07b2fe42 --- /dev/null +++ b/resources/mediawiki.special/mediawiki.special.changeslist.css @@ -0,0 +1,48 @@ +/** + * Styling for Special:Watchlist and Special:RecentChanges + */ + +table.mw-enhanced-rc { + background: none; + border:0; + border-spacing:0; +} + +table.mw-enhanced-rc th, table.mw-enhanced-rc td { + padding:0; + vertical-align:top; +} + +td.mw-enhanced-rc { + white-space:nowrap; + font-family:monospace; +} + +.mw-enhanced-rc-time { + font-family: monospace; +} + +table.mw-enhanced-rc td.mw-enhanced-rc-nested { + padding-left: 1em; +} + +/* Show/hide arrows in enhanced changeslist */ +.mw-enhanced-rc .collapsible-expander { + float: none; +} + +/* If JS is disabled, the arrow is still needed + for spacing, but ideally shouldn't be shown */ +.mw-enhanced-rc .mw-rc-openarrow { + visibility: hidden; +} + +.mw-enhanced-rc.mw-made-collapsible .mw-rc-openarrow, +.mw-enhanced-rc .mw-rc-closearrow { + visibility: visible; + display: none; +} +.mw-enhanced-rc.mw-made-collapsible .mw-collapsible-toggle-collapsed .mw-rc-openarrow, +.mw-enhanced-rc.mw-made-collapsible .mw-collapsible-toggle-expanded .mw-rc-closearrow { + display: inline; +} diff --git a/skins/common/enhancedchanges.js b/skins/common/enhancedchanges.js deleted file mode 100644 index bcc2cc88a6..0000000000 --- a/skins/common/enhancedchanges.js +++ /dev/null @@ -1,40 +0,0 @@ -/* - JavaScript file for enhanced recentchanges - */ - -/* - * Add the CSS to hide parts that should be collapsed - * - * We do this with JS so everything will be expanded by default - * if JS is disabled - */ -appendCSS('.mw-changeslist-hidden {'+ - ' display:none;'+ - '}'+ - 'div.mw-changeslist-expanded {'+ - ' display:block;'+ - '}'+ - 'span.mw-changeslist-expanded {'+ - ' display:inline !important;'+ - ' visibility:visible !important;'+ - '}' -); - -/* - * Switch an RC line between hidden/shown - * @param int idNumber : the id number of the RC group -*/ -window.toggleVisibility = function(idNumber) { - var openarrow = document.getElementById("mw-rc-openarrow-"+idNumber); - var closearrow = document.getElementById("mw-rc-closearrow-"+idNumber); - var subentries = document.getElementById("mw-rc-subentries-"+idNumber); - if (openarrow.className == 'mw-changeslist-expanded') { - openarrow.className = 'mw-changeslist-hidden'; - closearrow.className = 'mw-changeslist-expanded'; - subentries.className = 'mw-changeslist-expanded'; - } else { - openarrow.className = 'mw-changeslist-expanded'; - closearrow.className = 'mw-changeslist-hidden'; - subentries.className = 'mw-changeslist-hidden'; - } -}; diff --git a/skins/common/shared.css b/skins/common/shared.css index b32f578deb..eea9226c8b 100644 --- a/skins/common/shared.css +++ b/skins/common/shared.css @@ -831,18 +831,6 @@ div.gallerytext { word-wrap: break-word; } -table.mw-enhanced-rc { - background: none; - border:0; - border-spacing:0; -} -td.mw-enhanced-rc { - white-space:nowrap; - padding:0; - vertical-align:top; - font-family:monospace -} - #mw-addcategory-prompt { display: inline; margin-left: 1em;