r79905 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r79904‎ | r79905 | r79906 >
Date:17:14, 9 January 2011
Author:hartman
Status:resolved (Comments)
Tags:
Comment:
Convert LQT to resource loader.

This probably needs more work, but will do the job for now.
Mostly fixes #20934 because resourceloader automatically rtl's when needed.
Modified paths:
  • /trunk/extensions/LiquidThreads/LiquidThreads.php (modified) (history)
  • /trunk/extensions/LiquidThreads/classes/Hooks.php (modified) (history)
  • /trunk/extensions/LiquidThreads/classes/View.php (modified) (history)
  • /trunk/extensions/LiquidThreads/lqt.js (modified) (history)
  • /trunk/extensions/LiquidThreads/newmessages.js (modified) (history)
  • /trunk/extensions/LiquidThreads/pages/NewUserMessagesView.php (modified) (history)
  • /trunk/extensions/LiquidThreads/pages/TalkpageView.php (modified) (history)
  • /trunk/extensions/LiquidThreads/pages/ThreadHistoricalRevisionView.php (modified) (history)

Diff [purge]

Index: trunk/extensions/LiquidThreads/LiquidThreads.php
@@ -42,6 +42,58 @@
4343 $wgExtensionMessagesFiles['LiquidThreadsNamespaces'] = $dir . 'i18n/Lqt.namespaces.php';
4444 $wgExtensionAliasesFiles['LiquidThreads'] = $dir . 'i18n/Lqt.alias.php';
4545
 46+$lqtMessages = array(
 47+ 'lqt-quote-intro',
 48+ 'lqt-quote',
 49+ 'lqt-ajax-updated',
 50+ 'lqt-ajax-update-link',
 51+ 'watch',
 52+ 'unwatch',
 53+ 'lqt-thread-link-url',
 54+ 'lqt-thread-link-title',
 55+ 'lqt-thread-link-copy',
 56+ 'lqt-sign-not-necessary',
 57+ 'lqt-marked-as-read-placeholder',
 58+ 'lqt-email-undo',
 59+ 'lqt-change-subject',
 60+ 'lqt-save-subject',
 61+ 'lqt-ajax-no-subject',
 62+ 'lqt-ajax-invalid-subject',
 63+ 'lqt-save-subject-error-unknown',
 64+ 'lqt-cancel-subject-edit',
 65+ 'lqt-drag-activate',
 66+ 'lqt-drag-drop-zone',
 67+ 'lqt-drag-confirm',
 68+ 'lqt-drag-reparent',
 69+ 'lqt-drag-split',
 70+ 'lqt-drag-setsortkey',
 71+ 'lqt-drag-bump',
 72+ 'lqt-drag-save',
 73+ 'lqt-drag-reason',
 74+ 'lqt-drag-subject',
 75+ 'lqt-edit-signature',
 76+ 'lqt-preview-signature',
 77+ 'lqt_contents_title'
 78+);
 79+
 80+// ResourceLoader
 81+$lqtResourceTemplate = array(
 82+ 'localBasePath' => "$dir",
 83+ 'remoteExtPath' => 'LiquidThreads'
 84+);
 85+
 86+$wgResourceModules['ext.liquidThreads'] = $lqtResourceTemplate + array(
 87+ 'styles' => array( 'lqt.css', 'jquery/jquery.thread_collapse.css' ),
 88+ 'scripts' => array( 'lqt.js', 'js/lqt.toolbar.js', 'jquery/jquery.thread_collapse.js', 'jquery/jquery.autogrow.js' ),
 89+ 'dependencies' => array( 'jquery.ui.dialog' ),
 90+ 'messages' => $lqtMessages
 91+);
 92+
 93+$wgResourceModules['ext.liquidThreads.newMessages'] = $lqtResourceTemplate + array(
 94+ 'scripts' => array( 'newmessages.js' ),
 95+ 'dependancies' => array( 'ext.liquidThreads' )
 96+);
 97+
4698 // Parser Function Setup
4799 $wgHooks['ParserFirstCallInit'][] = 'lqtSetupParserFunctions';
48100
Index: trunk/extensions/LiquidThreads/newmessages.js
@@ -7,8 +7,8 @@
88 var right_col = row.find('td.lqt-newmessages-right');
99 $j(button).closest('td').empty();
1010
11 - var msg = wgLqtMessages['lqt-marked-as-read-placeholder'];
12 - var undoMsg = wgLqtMessages['lqt-email-undo'];
 11+ var msg = mediaWiki.msg('lqt-marked-as-read-placeholder');
 12+ var undoMsg = mediaWiki.msg('lqt-email-undo');
1313 // We have to split the message to the part before the
1414 // $1 and the part after the $1
1515 var placeholderIndex = msg.indexOf( '$1' );
Index: trunk/extensions/LiquidThreads/classes/View.php
@@ -1220,107 +1220,6 @@
12211221 return $commands;
12221222 }
12231223
1224 - /*************************
1225 - * Output methods *
1226 - *************************/
1227 -
1228 - static function addJSandCSS() {
1229 - if ( self::$stylesAndScriptsDone ) {
1230 - return;
1231 - }
1232 -
1233 - global $wgOut;
1234 - global $wgStyleVersion;
1235 -
1236 - LqtHooks::$scriptVariables['wgLqtMessages'] = self::exportJSLocalisation();
1237 -
1238 - if ( method_exists( $wgOut, 'includeJQuery' ) ) {
1239 - $wgOut->includeJQuery();
1240 - }
1241 -
1242 - $output = self::getJSAndCSS();
1243 -
1244 - foreach( $output['scripts'] as $script ) {
1245 - $wgOut->addScriptFile( "$script?$wgStyleVersion" );
1246 - }
1247 -
1248 - foreach( $output['styles'] as $style ) {
1249 - $wgOut->addExtensionStyle( "$style?$wgStyleVersion" );
1250 - }
1251 -
1252 - self::$stylesAndScriptsDone = true;
1253 - }
1254 -
1255 - static function getJSAndCSS() {
1256 - global $wgLiquidThreadsExtensionPath, $wgOut;
1257 - // Returns an associative array, with the keys: styles, scripts
1258 -
1259 - $styles = array(
1260 - "$wgLiquidThreadsExtensionPath/jquery/jquery-ui-1.7.2.css",
1261 - "$wgLiquidThreadsExtensionPath/jquery/jquery.thread_collapse.css",
1262 - "$wgLiquidThreadsExtensionPath/lqt.css",
1263 - );
1264 -
1265 - $scripts = array(
1266 - "$wgLiquidThreadsExtensionPath/lqt.js",
1267 - "$wgLiquidThreadsExtensionPath/js/lqt.toolbar.js",
1268 - "$wgLiquidThreadsExtensionPath/jquery/jquery.thread_collapse.js",
1269 - "$wgLiquidThreadsExtensionPath/jquery/jquery.autogrow.js"
1270 - );
1271 -
1272 - if ( method_exists( $wgOut, 'includeJQuery' ) ) {
1273 - $scripts[] = "$wgLiquidThreadsExtensionPath/jquery/plugins.js";
1274 - } else {
1275 - $scripts[] = "$wgLiquidThreadsExtensionPath/jquery/js2.combined.js";
1276 - }
1277 -
1278 - return array( 'scripts' => $scripts, 'styles' => $styles );
1279 - }
1280 -
1281 - static function exportJSLocalisation() {
1282 - $messages = array(
1283 - 'lqt-quote-intro',
1284 - 'lqt-quote',
1285 - 'lqt-ajax-updated',
1286 - 'lqt-ajax-update-link',
1287 - 'watch',
1288 - 'unwatch',
1289 - 'lqt-thread-link-url',
1290 - 'lqt-thread-link-title',
1291 - 'lqt-thread-link-copy',
1292 - 'lqt-sign-not-necessary',
1293 - 'lqt-marked-as-read-placeholder',
1294 - 'lqt-email-undo',
1295 - 'lqt-change-subject',
1296 - 'lqt-save-subject',
1297 - 'lqt-ajax-no-subject',
1298 - 'lqt-ajax-invalid-subject',
1299 - 'lqt-save-subject-error-unknown',
1300 - 'lqt-cancel-subject-edit',
1301 - 'lqt-drag-activate',
1302 - 'lqt-drag-drop-zone',
1303 - 'lqt-drag-confirm',
1304 - 'lqt-drag-reparent',
1305 - 'lqt-drag-split',
1306 - 'lqt-drag-setsortkey',
1307 - 'lqt-drag-bump',
1308 - 'lqt-drag-save',
1309 - 'lqt-drag-reason',
1310 - 'lqt-drag-subject',
1311 - 'lqt-edit-signature',
1312 - 'lqt-preview-signature',
1313 - 'lqt_contents_title',
1314 - );
1315 -
1316 - $data = array();
1317 -
1318 - foreach ( $messages as $msg ) {
1319 - $data[$msg] = wfMsgNoTrans( $msg );
1320 - }
1321 -
1322 - return $data;
1323 - }
1324 -
13251224 /* @return False if the article and revision do not exist. The HTML of the page to
13261225 * display if it exists. Note that this impacts the state out OutputPage by adding
13271226 * all the other relevant parts of the parser output. If you don't want this, call
@@ -1872,6 +1771,7 @@
18731772
18741773 function showThread( $thread, $levelNum = 1, $totalInLevel = 1,
18751774 $options = array() ) {
 1775+ global $wgOut;
18761776
18771777 // Safeguard
18781778 if ( $thread->type() & Threads::TYPE_DELETED ||
@@ -1941,7 +1841,7 @@
19421842 ) );
19431843 $replyTo = $this->methodAppliesToThread( 'reply', $thread );
19441844
1945 - self::addJSandCSS();
 1845+ $this->output->addModules( 'ext.liquidThreads' );
19461846
19471847 $html = '';
19481848 wfRunHooks( 'EditPageBeforeEditToolbar', array( &$html ) );
Index: trunk/extensions/LiquidThreads/classes/Hooks.php
@@ -29,10 +29,9 @@
3030 return true;
3131 }
3232
33 - LqtView::addJSandCSS();
34 -
35 - global $wgUser, $wgLang;
 33+ global $wgUser, $wgLang, $wgOut;
3634 $sk = $wgUser->getSkin();
 35+ $wgOut->addModules( 'ext.liquidThreads' );
3736
3837 // Custom display for new posts.
3938 if ( $rc->mAttribs['rc_new'] ) {
@@ -108,7 +107,7 @@
109108 if ( $tn == 0 && $wn == 0 )
110109 return true;
111110
112 - LqtView::addJSandCSS();
 111+ $wgOut->addModules( 'ext.liquidThreads' );
113112 $messages_title = SpecialPage::getTitleFor( 'NewMessages' );
114113 $new_messages = wfMsgExt( 'lqt-new-messages', 'parseinline' );
115114
Index: trunk/extensions/LiquidThreads/pages/ThreadHistoricalRevisionView.php
@@ -120,7 +120,7 @@
121121
122122 $this->showHistoryInfo();
123123
124 - self::addJSandCSS();
 124+ $this->output->addModules( 'ext.liquidThreads' );
125125 $this->output->setSubtitle( $this->getSubtitle() );
126126
127127 $changedObject = $this->mDisplayRevision->getChangeObject();
Index: trunk/extensions/LiquidThreads/pages/NewUserMessagesView.php
@@ -189,12 +189,7 @@
190190 $mustShowThreads = $this->highlightThreads;
191191
192192 $this->showThread( $t, 1, 1, array( 'mustShowThreads' => $mustShowThreads ) );
193 - static $scriptDone = false;
194 - if ( !$scriptDone ) {
195 - global $wgLiquidThreadsExtensionPath;
196 - $this->output->addScriptFile( "$wgLiquidThreadsExtensionPath/newmessages.js" );
197 - $scriptDone = true;
198 - }
 193+ $this->output->addModules( 'ext.liquidThreads.newMessages' );
199194 $this->output->addHTML( "</td></tr>" );
200195 }
201196 }
Index: trunk/extensions/LiquidThreads/pages/TalkpageView.php
@@ -225,7 +225,7 @@
226226 }
227227
228228 function show() {
229 - LqtView::addJSandCSS();
 229+ $this->output->addModules( 'ext.liquidThreads' );
230230
231231 $this->output->setPageTitle( $this->title->getPrefixedText() );
232232
Index: trunk/extensions/LiquidThreads/lqt.js
@@ -160,7 +160,7 @@
161161 $j(container).find('input[name=wpLqtSignature]').hide();
162162 $j(container).find('.lqt-signature-preview').show();
163163 var editLink = $j('<a class="lqt-signature-edit-button"/>' );
164 - editLink.text( wgLqtMessages['lqt-edit-signature'] );
 164+ editLink.text( mediaWiki.msg('lqt-edit-signature') );
165165 editLink.click( liquidThreads.handleEditSignature );
166166 editLink.attr('href', '#');
167167 $j(container).find('.lqt-signature-preview').after(editLink);
@@ -248,22 +248,7 @@
249249 function(result) {
250250 var content = $j(result.threadaction.inlineeditform.html);
251251 $j(container).empty().append(content);
252 -
253 - // Add resources if necessary
254 - if ( typeof wgLqtMessages == 'undefined' || !wgLqtMessages ) {
255 - wgLqtMessages = result.threadaction.resources.messages;
256 -
257 - $j.each( result.threadaction.resources.scripts,
258 - function(index,value) {
259 - $j.getScript( value );
260 - } );
261 -
262 - $j.each( result.threadaction.resources.styles,
263 - function(index,value) {
264 - $j.getCSS( value );
265 - } );
266 - }
267 -
 252+
268253 callback();
269254 } );
270255 },
@@ -351,7 +336,7 @@
352337
353338 // Add "Drag to new location" to menu
354339 var dragLI = $j('<li class="lqt-command-drag lqt-command" />' );
355 - var dragLink = $j('<a/>').text( wgLqtMessages['lqt-drag-activate'] );
 340+ var dragLink = $j('<a/>').text( mediaWiki.msg('lqt-drag-activate') );
356341 dragLink.attr('href','#');
357342 dragLI.append(dragLink);
358343 dragLink.click( liquidThreads.activateDragDrop );
@@ -398,7 +383,7 @@
399384
400385 var editSubjectField = $j('<li/>');
401386 var editSubjectLink = $j('<a href="#"/>');
402 - editSubjectLink.text( wgLqtMessages['lqt-change-subject'] );
 387+ editSubjectLink.text( mediaWiki.msg('lqt-change-subject') );
403388 editSubjectField.append( editSubjectLink );
404389 editSubjectField.click( liquidThreads.handleChangeSubject );
405390 editSubjectField.data( 'thread-id', id )
@@ -423,13 +408,13 @@
424409 textbox.attr('size', '75');
425410 textbox.val(headerText);
426411
427 - var saveText = wgLqtMessages['lqt-save-subject'];
 412+ var saveText = mediaWiki.msg('lqt-save-subject');
428413 var saveButton = $j('<input type="button" />');
429414 saveButton.val( saveText );
430415 saveButton.click( liquidThreads.handleSubjectSave );
431416
432417 var cancelButton = $j('<input type="button" />');
433 - cancelButton.val( wgLqtMessages['lqt-cancel-subject-edit'] );
 418+ cancelButton.val( mediaWiki.msg('lqt-cancel-subject-edit') );
434419 cancelButton.click( function(e) {
435420 var form = $j(this).closest('.mw-subject-editor');
436421 var header = form.closest('.lqt_header');
@@ -462,7 +447,7 @@
463448 var newSubject = textbox.val().trim();
464449
465450 if (!newSubject) {
466 - alert( wgLqtMessages['lqt-ajax-no-subject'] );
 451+ alert( mediaWiki.msg('lqt-ajax-no-subject') );
467452 return;
468453 }
469454
@@ -484,16 +469,15 @@
485470 description = reply.error.info;
486471
487472 if (code == 'invalid-subject') {
488 - alert( wgLqtMessages['lqt-ajax-invalid-subject'] );
 473+ alert( mediaWiki.msg('lqt-ajax-invalid-subject') );
489474 } else {
490 - var msg = wgLqtMessages['lqt-save-subject-failed'];
491 - msg.replace( '$1', description );
 475+ var msg = mediaWiki.msg('lqt-save-subject-failed', $description );
492476 }
493477
494478 subjectForm.show();
495479 spinner.remove();
496480 } catch (err) {
497 - alert( wgLqtMessages['lqt-save-subject-error-unknown'] );
 481+ alert( mediaWiki.msg('lqt-save-subject-error-unknown') );
498482 subjectForm.remove();
499483 spinner.remove();
500484 header.contents().filter('.mw-headline').show();
@@ -575,11 +559,11 @@
576560 }
577561
578562 var notifier = $j('<div/>');
579 - notifier.text( wgLqtMessages['lqt-ajax-updated'] + ' ' );
 563+ notifier.text( mediaWiki.msg('lqt-ajax-updated') + ' ' );
580564 notifier.addClass( 'lqt-updated-notification' );
581565
582566 var updateButton = $j('<a href="#"/>');
583 - updateButton.text( wgLqtMessages['lqt-ajax-update-link'] );
 567+ updateButton.text( mediaWiki.msg('lqt-ajax-update-link') );
584568 updateButton.addClass( 'lqt-update-link' );
585569 updateButton.click( liquidThreads.updateThread );
586570
@@ -862,12 +846,12 @@
863847 linkTitle = '[['+linkTitle+']]';
864848
865849 // Build dialog
866 - var urlLabel = $j('<th/>').text(wgLqtMessages['lqt-thread-link-url']);
 850+ var urlLabel = $j('<th/>').text(mediaWiki.msg('lqt-thread-link-url'));
867851 var urlField = $j('<td/>').addClass( 'lqt-thread-link-url' );
868852 urlField.text(linkURL);
869853 var urlRow = $j('<tr/>').append(urlLabel).append(urlField );
870854
871 - var titleLabel = $j('<th/>').text(wgLqtMessages['lqt-thread-link-title']);
 855+ var titleLabel = $j('<th/>').text(mediaWiki.msg('lqt-thread-link-title'));
872856 var titleField = $j('<td/>').addClass( 'lqt-thread-link-title' );
873857 titleField.text(linkTitle);
874858 var titleRow = $j('<tr/>').append(titleLabel).append(titleField );
@@ -1034,7 +1018,7 @@
10351019 $j('.lqt-new-thread').after(toc);
10361020
10371021 var contentsHeading = $j('<h2/>');
1038 - contentsHeading.text(wgLqtMessages['lqt_contents_title']);
 1022+ contentsHeading.text(mediaWiki.msg('lqt_contents_title'));
10391023 toc.before(contentsHeading);
10401024 }
10411025
@@ -1138,7 +1122,7 @@
11391123 }
11401124
11411125 // Show the warning
1142 - var msg = wgLqtMessages['lqt-sign-not-necessary'];
 1126+ var msg = mediaWiki.msg('lqt-sign-not-necessary');
11431127 var elem = $j('<div id="lqt-sign-warning" class="error"/>');
11441128 elem.text(msg);
11451129
@@ -1220,7 +1204,7 @@
12211205 // other thread, and as a subthread of every post.
12221206 var createDropZone = function( sortKey, parent ) {
12231207 return $j( '<div class="lqt-drop-zone" />' )
1224 - .text( wgLqtMessages['lqt-drag-drop-zone'] )
 1208+ .text( mediaWiki.msg('lqt-drag-drop-zone') )
12251209 .data( 'sortkey', sortKey )
12261210 .data( 'parent', parent );
12271211 };
@@ -1308,7 +1292,7 @@
13091293 var confirmDialog = $j( '<div class="lqt-drag-confirm" />' );
13101294
13111295 // Add an intro
1312 - var intro = $j( '<p/>' ).text( wgLqtMessages['lqt-drag-confirm'] );
 1296+ var intro = $j( '<p/>' ).text( mediaWiki.msg('lqt-drag-confirm') );
13131297 confirmDialog.append( intro );
13141298
13151299 // Summarize changes to be made
@@ -1316,7 +1300,7 @@
13171301
13181302 var addAction = function(msg) {
13191303 var li = $j('<li/>');
1320 - li.text( wgLqtMessages[msg] );
 1304+ li.text( mediaWiki.msg(msg) );
13211305 actionSummary.append(li);
13221306 };
13231307
@@ -1340,7 +1324,7 @@
13411325
13421326 // Summary prompt
13431327 var summaryWrapper = $j('<p/>');
1344 - var summaryPrompt = $j('<label for="reason" />').text( wgLqtMessages['lqt-drag-reason'] );
 1328+ var summaryPrompt = $j('<label for="reason" />').text( mediaWiki.msg('lqt-drag-reason') );
13451329 var summaryField = $j('<input type="text" size="45"/>');
13461330 summaryField.addClass( 'lqt-drag-confirm-reason' )
13471331 .attr( 'name', 'reason' )
@@ -1355,7 +1339,7 @@
13561340
13571341 // New subject prompt, if appropriate
13581342 if ( !wasTopLevel && topLevel ) {
1359 - var subjectPrompt = $j('<p/>').text( wgLqtMessages['lqt-drag-subject'] );
 1343+ var subjectPrompt = $j('<p/>').text( mediaWiki.msg('lqt-drag-subject') );
13601344 var subjectField = $j('<input type="text" size="45"/>');
13611345 subjectField.addClass( 'lqt-drag-confirm-subject' )
13621346 .attr( 'name', 'subject' );
@@ -1374,7 +1358,7 @@
13751359 liquidThreads.reloadTOC();
13761360 };
13771361
1378 - var buttonLabel = wgLqtMessages['lqt-drag-save']
 1362+ var buttonLabel = mediaWiki.msg('lqt-drag-save');
13791363 var buttons = {};
13801364 buttons[buttonLabel] =
13811365 function() {
@@ -1399,7 +1383,7 @@
14001384 liquidThreads.submitDragDrop( thread, params,
14011385 successCallback );
14021386 };
1403 - confirmDialog.dialog( { 'title': wgLqtMessages['lqt-drag-title'],
 1387+ confirmDialog.dialog( { 'title': mediaWiki.msg('lqt-drag-title'),
14041388 'buttons' : buttons, 'modal' : true, 'width': 550 } );
14051389 },
14061390
@@ -1558,7 +1542,7 @@
15591543
15601544 // Add a save button
15611545 var saveButton = $j('<a href="#"/>');
1562 - saveButton.text( wgLqtMessages['lqt-preview-signature'] );
 1546+ saveButton.text( mediaWiki.msg('lqt-preview-signature') );
15631547 saveButton.click( liquidThreads.handlePreviewSignature );
15641548
15651549 container.find('input[name=wpLqtSignature]').after(saveButton);

Follow-up revisions

RevisionCommit summaryAuthorDate
r79940Followup to r79905. Removing space chars from url() because of bug #26611hartman17:17, 10 January 2011
r79941Follow up to r79905. Disabling resource inclusion of LQT api. Don't know how ...hartman17:18, 10 January 2011
r80108Fix typo in r79905catrope19:31, 12 January 2011
r80117Follow up r79905, remove unneeded globalhartman20:43, 12 January 2011
r81025* Drop pre-1.17 compat; this extensions requires 1.17+ since r79905...ialex14:37, 26 January 2011

Comments

#Comment by TheDJ (talk | contribs)   18:17, 9 January 2011

Path of thread_collapse_control_expanded.gif in jquery.thread_collapse.css is broken, but cause unknown.

#Comment by TheDJ (talk | contribs)   22:56, 9 January 2011

Caused by ' ' chars inside the url() of this specific CSS file. Resourceloader bug.

#Comment by Catrope (talk | contribs)   14:10, 10 January 2011

Filed as bug 26611

#Comment by Raymond (talk | contribs)   19:42, 9 January 2011

Seen on Translatewiki:

PHP Fatal error: Call to undefined method LqtView::getjsandcss() in /www/w/extensions/LiquidThreads/api/ApiThreadAction.php on line 789
#Comment by TheDJ (talk | contribs)   22:50, 9 January 2011

Right, I can remove that, the question is how do you add resource dependencies to the api using resource loader.....

#Comment by Catrope (talk | contribs)   19:52, 12 January 2011
+		global $wgOut;
[...]
+		$this->output->addModules( 'ext.liquidThreads' );

One of them must be wrong.

The resource dependencies thing hasn't been fixed properly yet, AFAICT, so don't merge this to 1.17 just yet.

#Comment by Werdna (talk | contribs)   01:12, 19 January 2011

Just a quick note…

While projects like this are incredibly helpful, we're still evaluating to what extent the current LiquidThreads codebase will be a part of the collaboration system that is eventually deployed to Wikimedia projects. As such if you'd like to make the best use of your time, you might want to wait and see what the decision is on continued development and maintenance of LiquidThreads as it exists today.

Status & tagging log