https://www.mediawiki.org/wiki/Special:Code/MediaWiki/115438
Revision: 115438
Author: krinkle
Date: 2012-05-26 07:14:33 +0000 (Sat, 26 May 2012)
Log Message:
-----------
Follow-up r115430
* Escape messages before inserting into the document with .html(). Not
just for security reasons but also for good function in general. As
otherwise special characters can cause the interface to break
unexpectedly. For example:
$("<div>").html( mw.msg('blabla') )
Will unexpectedly be interpreted as HTML and create a <blabla>
element in the DOM. Causing a blank spot in the interface instead of
text "<blabla>" (which is better than nothing at all). Usually the
best fix is to simply use .text() instead of .html(), but since one of
the msg parameters here is an <img>, instead escaping the other
parameters.
* Fix typo in .i18n.php: 'uknown' -> 'unknown'.
This caused the following in the front-end:
"<onlinestatusbar-status-unknown>",
because the module and js code didn't have the typo.
* Fix using global variables mw and $ (aliasing from mediaWiki and
jQuery instead). r115430 changed $() to jQuery(), but left inner code
still referring to the
$ global. Could be fixed by using jQuery(function ($) {}); (so that
no additional closure is needed). But since mediaWiki>mw should be
aliases as well, created a closure instead.
* Using .done() on the jqXHR (which inherits from $.Deferred) in
$.ajax.
The success/error/complete properties have been deprecated in favor
of Deferred methods done(), fail() and always(). (the old AJAX
properties are now aliases to these as of jQuery 1.7).
* Server can give status "online", "offline", "busy", "away"
and "unknown". However front-end had no handling for "unknown".
This caused a 404 error:
GET /mw/extensions/OnlineStatusBar/resources/images/undefined 404
Added a statusgrey.png for it.
Also added basic future proof check, never insert a 404 error.
* Moved addModules() call to where the html is added. No need to load
this module on all pages unconditionally.
* Don't use setInterval for asynchronous and/or potentially
long-running functions.
Instead call it once and schedule again from a callback. Otherwise
internet problems or slow connections can cause a long list of pending
requests to build up. Done by using the always() callback (which fires
both if the deferred is done or failed), and calling setTimeout
(instead of setInterval) from there.
* Fix indention level of javascript code.
* Using Title case in ExtensionCredits name (like the rest of the code
and documentation)
* Removed unused $wgOnlineStatusBarIcon configuration variable
* Removed unused $iconbar variable in JS.
* The HTML template inserted from PHP contained the (invisible)
<div class="onlinestatusbaricon"></div>
structure. I removed this since by default (no javascript) it is
invisible, and the javascript replaces the html of the parent of this
(thereby removing the element). So it wasn't used for anything at all.
Removed then unused css as well.
* Skin style fixes:
- standard: Using em instead of px, to match skin margin (it was slightly
hangout
outside the border in Chrome)
- monobook: Remove negative top margin. overlapped sitenotice if there is
a sitenotice. add 1em margin right. To match #content padding
- simple: Set 1em margin right. To match #content padding
- vector: Remove negative top margin. overlapped sitenotice if there is
a sitenotice.
* I'm not sure what the class "metadata" is for, but left it as it is. Although
it appears to be unused in the extension. Not used in core mediawiki either.
Modified Paths:
--------------
trunk/extensions/OnlineStatusBar/OnlineStatusBar.api.php
trunk/extensions/OnlineStatusBar/OnlineStatusBar.body.php
trunk/extensions/OnlineStatusBar/OnlineStatusBar.hooks.php
trunk/extensions/OnlineStatusBar/OnlineStatusBar.i18n.php
trunk/extensions/OnlineStatusBar/OnlineStatusBar.php
trunk/extensions/OnlineStatusBar/resources/OnlineStatusBar.css
trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarChick.css
trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarCologneBlue.css
trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarDefault.css
trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarModern.css
trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarMonobook.css
trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarNostalgia.css
trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarSimple.css
trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarStandard.css
trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarVector.css
trunk/extensions/OnlineStatusBar/resources/ext.onlinestatusbar.js
Added Paths:
-----------
trunk/extensions/OnlineStatusBar/resources/images/statusgrey.png
Modified: trunk/extensions/OnlineStatusBar/OnlineStatusBar.api.php
===================================================================
--- trunk/extensions/OnlineStatusBar/OnlineStatusBar.api.php 2012-05-25
20:22:40 UTC (rev 115437)
+++ trunk/extensions/OnlineStatusBar/OnlineStatusBar.api.php 2012-05-26
07:14:33 UTC (rev 115438)
@@ -31,7 +31,7 @@
}
public function getAllowedParams() {
- // params
+ // params
return array(
'user' => array (
ApiBase::PARAM_TYPE => 'string',
Modified: trunk/extensions/OnlineStatusBar/OnlineStatusBar.body.php
===================================================================
--- trunk/extensions/OnlineStatusBar/OnlineStatusBar.body.php 2012-05-25
20:22:40 UTC (rev 115437)
+++ trunk/extensions/OnlineStatusBar/OnlineStatusBar.body.php 2012-05-26
07:14:33 UTC (rev 115438)
@@ -16,9 +16,7 @@
* return HTML
**/
public static function getStatusBarHtml() {
- return '<div class="onlinestatusbarbody metadata
onlinestatusbartop" id="status-top">
-<div class="onlinestatusbaricon">
-</div></div>';
+ return '<div class="onlinestatusbar-pagetop
onlinestatusbar-field metadata"></div>';
}
/**
Modified: trunk/extensions/OnlineStatusBar/OnlineStatusBar.hooks.php
===================================================================
--- trunk/extensions/OnlineStatusBar/OnlineStatusBar.hooks.php 2012-05-25
20:22:40 UTC (rev 115437)
+++ trunk/extensions/OnlineStatusBar/OnlineStatusBar.hooks.php 2012-05-26
07:14:33 UTC (rev 115438)
@@ -93,6 +93,7 @@
}
$context = $article->getContext();
$context->getOutput()->addHtml(
OnlineStatusBar::getStatusBarHtml() );
+ $context->getOutput()->addModules( 'ext.OnlineStatusBar' );
return true;
}
@@ -166,16 +167,6 @@
}
/**
- * @param $out OutputPage
- * @param $skin Skin
- * @return bool
- */
- public static function stylePage( &$out, &$skin ) {
- $out->addModules( 'ext.OnlineStatusBar' );
- return true;
- }
-
- /**
* @param $vars array
* @return bool
*/
Modified: trunk/extensions/OnlineStatusBar/OnlineStatusBar.i18n.php
===================================================================
--- trunk/extensions/OnlineStatusBar/OnlineStatusBar.i18n.php 2012-05-25
20:22:40 UTC (rev 115437)
+++ trunk/extensions/OnlineStatusBar/OnlineStatusBar.i18n.php 2012-05-26
07:14:33 UTC (rev 115438)
@@ -32,11 +32,11 @@
'prefs-onlinestatus' => 'Online status',
// Message in config
'onlinestatusbar-hide' => 'Hide the status bar on user pages in order
to use just the magic word (For advanced users)',
- 'onlinestatusbar-status-online' => 'on-line',
+ 'onlinestatusbar-status-online' => 'online',
'onlinestatusbar-status-busy' => 'busy',
'onlinestatusbar-status-away' => 'away',
'onlinestatusbar-status-offline' => 'offline',
- 'onlinestatusbar-status-uknown' => 'status is unknown',
+ 'onlinestatusbar-status-unknown' => 'status is unknown',
'onlinestatusbar-status-hidden' => 'hidden',
);
@@ -64,7 +64,7 @@
'onlinestatusbar-status-hidden' => 'Status for users who mark
themselves as hidden (used on preferences only)',
);
-/** Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
+/** Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
* @author Wizardist
*/
$messages['be-tarask'] = array(
@@ -112,7 +112,7 @@
'onlinestatusbar-status-hidden' => 'Versteckt',
);
-/** German (formal address) (Deutsch (Sie-Form))
+/** German (formal address) (Deutsch (Sie-Form))
* @author Kghbln
*/
$messages['de-formal'] = array(
Modified: trunk/extensions/OnlineStatusBar/OnlineStatusBar.php
===================================================================
--- trunk/extensions/OnlineStatusBar/OnlineStatusBar.php 2012-05-25
20:22:40 UTC (rev 115437)
+++ trunk/extensions/OnlineStatusBar/OnlineStatusBar.php 2012-05-26
07:14:33 UTC (rev 115438)
@@ -16,7 +16,7 @@
$wgExtensionCredits['other'][] = array(
'path' => __FILE__,
- 'name' => 'Online status bar',
+ 'name' => 'Online Status Bar',
'version' => '1.1.0',
'author' => array( 'Petr Bena' ),
'descriptionmsg' => 'onlinestatusbar-desc',
@@ -28,6 +28,7 @@
$wgExtensionMessagesFiles['OnlineStatusBarMagic'] =
"$dir/OnlineStatusBar.i18n.magic.php";
$wgResourceModules['ext.OnlineStatusBar'] = array(
+ 'styles' => 'resources/OnlineStatusBar.css',
'skinStyles' => array(
'default' => array( 'resources/OnlineStatusBarDefault.css' ),
'chick' => array( 'resources/OnlineStatusBarChick.css' ),
@@ -39,18 +40,20 @@
'cologneblue' => array(
'resources/OnlineStatusBarCologneBlue.css' ),
'nostalgia' => array( 'resources/OnlineStatusBarNostalgia.css'
),
),
- 'styles' => 'resources/OnlineStatusBar.css',
'scripts' => 'resources/ext.onlinestatusbar.js',
- 'localBasePath' => dirname ( __FILE__ ),
- 'remoteExtPath' => 'OnlineStatusBar',
+ 'dependencies' => array(
+ 'mediawiki.util',
+ ),
'messages' => array(
'onlinestatusbar-status-offline',
'onlinestatusbar-status-online',
'onlinestatusbar-status-unknown',
'onlinestatusbar-status-busy',
'onlinestatusbar-status-away',
- 'onlinestatusbar-line'
+ 'onlinestatusbar-line',
),
+ 'localBasePath' => dirname( __FILE__ ),
+ 'remoteExtPath' => 'OnlineStatusBar',
);
// Load other files of extension
@@ -93,14 +96,6 @@
'away' => 10,
'offline' => 60,
);
-// Icons
-$wgOnlineStatusBarIcon = array(
- 'online' => 'statusgreen.png',
- 'busy' => 'statusorange.png',
- 'away' => 'statusorange.png',
- 'hidden' => 'statusred.png',
- 'offline' => 'statusred.png',
-);
$wgHooks['LoadExtensionSchemaUpdates'][] = 'OnlineStatusBarHooks::ckSchema';
$wgHooks['UserLogout'][] = 'OnlineStatusBarHooks::logout';
@@ -108,6 +103,5 @@
$wgHooks['UserLoginComplete'][] = 'OnlineStatusBarHooks::updateStatus';
$wgHooks['GetPreferences'][] = 'OnlineStatusBarHooks::preferencesHook';
$wgHooks['UserGetDefaultOptions'][] =
'OnlineStatusBarHooks::setDefaultOptions';
-$wgHooks['BeforePageDisplay'][] = 'OnlineStatusBarHooks::stylePage';
$wgHooks['MagicWordwgVariableIDs'][] = 'OnlineStatusBarHooks::magicWordSet';
$wgHooks['ParserGetVariableValueSwitch'][] =
'OnlineStatusBarHooks::parserGetVariable';
Modified: trunk/extensions/OnlineStatusBar/resources/OnlineStatusBar.css
===================================================================
--- trunk/extensions/OnlineStatusBar/resources/OnlineStatusBar.css
2012-05-25 20:22:40 UTC (rev 115437)
+++ trunk/extensions/OnlineStatusBar/resources/OnlineStatusBar.css
2012-05-26 07:14:33 UTC (rev 115438)
@@ -1,15 +1,6 @@
/* OnlineStatusBar Styles for all skins */
-.onlinestatusbartop {
+.onlinestatusbar-pagetop {
position: absolute;
display: block;
}
-
-.onlinestatusbaricon {
- border: 0 solid black;
- background: transparent;
- float: right;
- position: relative;
- top: 0;
- padding: 5px;
-}
Modified: trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarChick.css
===================================================================
--- trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarChick.css
2012-05-25 20:22:40 UTC (rev 115437)
+++ trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarChick.css
2012-05-26 07:14:33 UTC (rev 115438)
@@ -1,11 +1,8 @@
/* OnlineStatusBar Styles for Chick */
-.onlinestatusbartop {
+.onlinestatusbar-pagetop {
top: 32px;
- margin-right: 4px;
-}
-
-.onlinestatusbarbody {
right: 0;
margin-top: 0;
+ margin-right: 4px;
}
Modified:
trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarCologneBlue.css
===================================================================
--- trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarCologneBlue.css
2012-05-25 20:22:40 UTC (rev 115437)
+++ trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarCologneBlue.css
2012-05-26 07:14:33 UTC (rev 115438)
@@ -1,12 +1,9 @@
/* OnlineStatusBar Styles for CologneBlue */
-.onlinestatusbartop {
- top: 122px;
- margin-right: 10px;
-}
-
-.onlinestatusbarbody {
+.onlinestatusbar-pagetop {
position: absolute;
+ top: 122px;
right: 0;
margin-top: 0;
+ margin-right: 10px;
}
Modified: trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarDefault.css
===================================================================
--- trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarDefault.css
2012-05-25 20:22:40 UTC (rev 115437)
+++ trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarDefault.css
2012-05-26 07:14:33 UTC (rev 115438)
@@ -1,11 +1,8 @@
/* OnlineStatusBar Styles for other skins */
-.onlinestatusbartop {
+.onlinestatusbar-pagetop {
top: 2em;
- margin-right: 0;
-}
-
-.onlinestatusbarbody {
right: 0;
margin-top: 0;
+ margin-right: 0;
}
Modified: trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarModern.css
===================================================================
--- trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarModern.css
2012-05-25 20:22:40 UTC (rev 115437)
+++ trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarModern.css
2012-05-26 07:14:33 UTC (rev 115438)
@@ -1,12 +1,9 @@
/* OnlineStatusBar Styles for Modern */
-.onlinestatusbartop {
+.onlinestatusbar-pagetop {
top: 6px;
+ right: 0;
+ margin-top: -3px;
margin-right: 2px;
color: white;
}
-
-.onlinestatusbarbody {
- right: 0;
- margin-top: -3px;
-}
Modified: trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarMonobook.css
===================================================================
--- trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarMonobook.css
2012-05-25 20:22:40 UTC (rev 115437)
+++ trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarMonobook.css
2012-05-26 07:14:33 UTC (rev 115438)
@@ -1,11 +1,8 @@
/* OnlineStatusBar Styles for Monobook */
-.onlinestatusbartop {
+.onlinestatusbar-pagetop {
z-index: 10;
top: 10px;
-}
-
-.onlinestatusbarbody {
right: 0;
- margin-top: -2px;
+ margin-right: 1em;
}
Modified:
trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarNostalgia.css
===================================================================
--- trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarNostalgia.css
2012-05-25 20:22:40 UTC (rev 115437)
+++ trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarNostalgia.css
2012-05-26 07:14:33 UTC (rev 115438)
@@ -1,11 +1,8 @@
/* OnlineStatusBar Styles for Nostalgia */
-.onlinestatusbartop {
+.onlinestatusbar-pagetop {
top: 18px;
- margin-right: 261px;
-}
-
-.onlinestatusbarbody {
right: 0;
margin-top: 0;
+ margin-right: 261px;
}
Modified: trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarSimple.css
===================================================================
--- trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarSimple.css
2012-05-25 20:22:40 UTC (rev 115437)
+++ trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarSimple.css
2012-05-26 07:14:33 UTC (rev 115438)
@@ -1,11 +1,8 @@
/* OnlineStatusBar Styles for Simple */
-.onlinestatusbartop {
+.onlinestatusbar-pagetop {
top: 0;
- margin-right: 2px;
-}
-
-.onlinestatusbarbody {
right: 0;
- margin-top: 2px;
+ margin-top: 1em;
+ margin-right: 1em;
}
Modified: trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarStandard.css
===================================================================
--- trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarStandard.css
2012-05-25 20:22:40 UTC (rev 115437)
+++ trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarStandard.css
2012-05-26 07:14:33 UTC (rev 115438)
@@ -1,11 +1,8 @@
/* OnlineStatusBar Styles for Standard */
-.onlinestatusbartop {
+.onlinestatusbar-pagetop {
top: 4em;
- margin-right: 4px;
-}
-
-.onlinestatusbarbody {
right: 0;
- margin-top: 6px;
+ margin-top: 0.5em;
+ margin-right: 1em;
}
Modified: trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarVector.css
===================================================================
--- trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarVector.css
2012-05-25 20:22:40 UTC (rev 115437)
+++ trunk/extensions/OnlineStatusBar/resources/OnlineStatusBarVector.css
2012-05-26 07:14:33 UTC (rev 115438)
@@ -1,11 +1,7 @@
/* OnlineStatusBar Styles for Vector */
-.onlinestatusbartop {
+.onlinestatusbar-pagetop {
top: -2em;
+ right: 0;
margin-right: 0;
}
-
-.onlinestatusbarbody {
- right: 0;
- margin-top: -10px;
-}
Modified: trunk/extensions/OnlineStatusBar/resources/ext.onlinestatusbar.js
===================================================================
--- trunk/extensions/OnlineStatusBar/resources/ext.onlinestatusbar.js
2012-05-25 20:22:40 UTC (rev 115437)
+++ trunk/extensions/OnlineStatusBar/resources/ext.onlinestatusbar.js
2012-05-26 07:14:33 UTC (rev 115438)
@@ -6,54 +6,70 @@
* @author Petr Bena
* @author Trevor Parscal
*/
+( function ( mw, $ ) {
-jQuery( function() {
+ $( document ).ready( function () {
+ var $statusbarFields = $( '.onlinestatusbar-field' ),
+ imagePath = mw.config.get( 'wgExtensionAssetsPath' ) +
+ '/OnlineStatusBar/resources/images',
+ statusImages = {
+ 'offline': 'statusred.png',
+ 'online': 'statusgreen.png',
+ 'away': 'statusorange.png',
+ 'busy': 'statusorange.png',
+ 'unknown': 'statusgrey.png'
+ },
+ apiPath = mw.util.wikiScript( 'api' ),
+ // WARNING: This way of determining a username is
limited to user pages and user talk pages
+ username = mw.config.get( 'wgTitle' );
-var $statusbar = $( '#status-top' ),
- $iconbar = $( '.onlinestatusbaricon' ),
- imagePath = mw.config.get( 'wgExtensionAssetsPath' ) +
- '/OnlineStatusBar/resources/images/status',
- statusImages = {
- 'offline': imagePath + 'red.png',
- 'online': imagePath + 'green.png',
- 'away': imagePath + 'orange.png',
- 'busy': imagePath + 'orange.png'
- },
- apiUrl = mw.config.get( 'wgScriptPath' ) + '/api' + mw.config.get(
'wgScriptExtension' ),
- // WARNING: This way of determining a username is limited to user pages
and user talk pages
- username = mw.config.get( 'wgTitle' );
+ /**
+ * Fetch the status of the user that owns this page or talk
page and
+ * update the status bar.
+ * @return jqXHR
+ */
+ function updateOnlineStatusBar() {
+ return $.ajax({
+ url: apiPath,
+ data: {
+ format: 'json',
+ action: 'query',
+ prop: 'onlinestatus',
+ onlinestatususer: username
+ }
+ }).done( function ( data ) {
+ var image, text,
+ status = data.onlinestatus.result;
-/**
- * Fetch the status of the user that owns this page or talk page and update
the status bar.
- *
- * @function
- */
-function updateOnlineStatusBar() {
- $.ajax( {
- 'url': apiUrl,
- 'data': {
- 'action': 'query',
- 'prop': 'onlinestatus',
- 'onlinestatususer': username,
- 'format': 'json'
- },
- 'success': function( data ) {
- // Update the statusbar
- var status = data.onlinestatus.result,
- image = mw.html.element( 'img', { 'src':
statusImages[status] } ),
+ // Future proof: If new statuses are introduced,
+ // gracefully degrade by showing nothing in a
cached js state.
+ // (otherwise it would try to insert a 404
error to ./images/undefined)
+ if ( statusImages[status] === undefined ) {
+ return;
+ }
+
+ image = mw.html.element( 'img', { src:
imagePath + '/' + statusImages[status] } );
text = mw.msg( 'onlinestatusbar-status-' +
status );
- $statusbar.html( mw.msg( 'onlinestatusbar-line',
username, image, text ) );
+
+ // Update the statusbar
+ $statusbarFields.html( mw.msg(
+ 'onlinestatusbar-line',
+ mw.html.escape( username ), image,
mw.html.escape( text )
+ ) );
+ }).always( function () {
+ // Whether ajax succeeded or failed, once done,
schedule the
+ // update (for if the user leaves the page open)
+ setTimeout( updateOnlineStatusBar, 2 * 60 *
1000 );
+ });
}
- } );
-}
-// Only intialize the status bar if we are on the right page - this is
controlled on the server side
-// so the presence of an element with #status-top is sufficient proof we are
on the right page
-if ( $statusbar.length > 0 ) {
- // Update the status every couple minutes if we leave the page open
- setInterval( updateOnlineStatusBar, 120 * 1000 );
- // Update immediately as well
- updateOnlineStatusBar();
-}
+ // Only intialize the status bar if we are on the right page.
+ // This is controlled on the server side.
+ // Initialize if there is one or more of these body
placeholders.
+ if ( $statusbarFields.length > 0 ) {
+ // Update now
+ updateOnlineStatusBar();
+ }
+ });
-} );
+}( mediaWiki, jQuery ) );
Added: trunk/extensions/OnlineStatusBar/resources/images/statusgrey.png
===================================================================
(Binary files differ)
Property changes on:
trunk/extensions/OnlineStatusBar/resources/images/statusgrey.png
___________________________________________________________________
Added: svn:mime-type
+ image/png
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs