From ba0fc4fa20067528effd4802e53ceeb959640825 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Thu, 12 Jan 2012 13:42:29 +0100 Subject: Update to MediaWiki 1.18.1 --- RELEASE-NOTES-1.18 | 43 +- docs/hooks.txt | 7 + extensions/ConfirmEdit/FancyCaptcha.class.php | 3 + extensions/ConfirmEdit/QuestyCaptcha.class.php | 2 +- includes/AjaxDispatcher.php | 9 +- includes/DefaultSettings.php | 6 +- includes/OutputPage.php | 70 +- includes/RequestContext.php | 25 + includes/Skin.php | 21 +- includes/SkinTemplate.php | 24 +- includes/SpecialPage.php | 9 + includes/Title.php | 5 +- includes/User.php | 3 +- includes/UserMailer.php | 116 +- includes/Wiki.php | 20 +- includes/api/ApiQueryRevisions.php | 2 +- includes/db/Database.php | 13 + includes/db/DatabaseMysql.php | 2 +- includes/db/DatabaseOracle.php | 4 +- includes/filerepo/File.php | 12 +- includes/installer/CliInstaller.php | 8 + includes/installer/Installer.php | 9 +- includes/installer/MysqlInstaller.php | 2 +- includes/installer/OracleUpdater.php | 32 + includes/installer/PostgresUpdater.php | 2 + includes/media/Bitmap.php | 8 +- includes/media/GIF.php | 12 +- includes/media/Generic.php | 18 +- includes/objectcache/DBABagOStuff.php | 11 +- includes/parser/Parser.php | 22 +- includes/parser/StripState.php | 7 +- includes/search/SearchUpdate.php | 2 +- includes/specials/SpecialAllmessages.php | 10 +- includes/specials/SpecialBlockList.php | 6 +- includes/specials/SpecialLinkSearch.php | 32 +- includes/specials/SpecialMovepage.php | 2 +- languages/messages/MessagesAf.php | 20 +- languages/messages/MessagesAn.php | 485 ++- languages/messages/MessagesAr.php | 74 +- languages/messages/MessagesArc.php | 35 +- languages/messages/MessagesArn.php | 734 ++-- languages/messages/MessagesAs.php | 729 ++-- languages/messages/MessagesAst.php | 42 +- languages/messages/MessagesAz.php | 10 +- languages/messages/MessagesBa.php | 400 ++- languages/messages/MessagesBar.php | 111 +- languages/messages/MessagesBe.php | 525 ++- languages/messages/MessagesBe_tarask.php | 45 +- languages/messages/MessagesBg.php | 62 +- languages/messages/MessagesBjn.php | 308 +- languages/messages/MessagesBn.php | 70 +- languages/messages/MessagesBr.php | 49 +- languages/messages/MessagesCa.php | 34 +- languages/messages/MessagesCkb.php | 19 +- languages/messages/MessagesCrh_cyrl.php | 227 +- languages/messages/MessagesCrh_latn.php | 237 +- languages/messages/MessagesCs.php | 25 +- languages/messages/MessagesCu.php | 29 +- languages/messages/MessagesCy.php | 28 +- languages/messages/MessagesDa.php | 24 +- languages/messages/MessagesDe.php | 56 +- languages/messages/MessagesDe_ch.php | 2 +- languages/messages/MessagesDe_formal.php | 11 +- languages/messages/MessagesDiq.php | 77 +- languages/messages/MessagesDsb.php | 18 +- languages/messages/MessagesEl.php | 39 +- languages/messages/MessagesEn.php | 29 +- languages/messages/MessagesEo.php | 61 +- languages/messages/MessagesEs.php | 21 +- languages/messages/MessagesEt.php | 40 +- languages/messages/MessagesEu.php | 92 +- languages/messages/MessagesFa.php | 434 +-- languages/messages/MessagesFi.php | 82 +- languages/messages/MessagesFo.php | 1295 +++++-- languages/messages/MessagesFr.php | 76 +- languages/messages/MessagesFrp.php | 619 ++-- languages/messages/MessagesFrr.php | 16 +- languages/messages/MessagesGan_hans.php | 225 +- languages/messages/MessagesGan_hant.php | 37 +- languages/messages/MessagesGd.php | 20 +- languages/messages/MessagesGl.php | 101 +- languages/messages/MessagesGsw.php | 18 +- languages/messages/MessagesGu.php | 257 +- languages/messages/MessagesGv.php | 41 +- languages/messages/MessagesHe.php | 41 +- languages/messages/MessagesHi.php | 470 ++- languages/messages/MessagesHif_latn.php | 87 +- languages/messages/MessagesHr.php | 107 +- languages/messages/MessagesHsb.php | 27 +- languages/messages/MessagesHu.php | 73 +- languages/messages/MessagesIa.php | 37 +- languages/messages/MessagesId.php | 22 +- languages/messages/MessagesIe.php | 122 +- languages/messages/MessagesIlo.php | 3536 ++++++++++---------- languages/messages/MessagesInh.php | 12 +- languages/messages/MessagesIs.php | 24 +- languages/messages/MessagesIt.php | 92 +- languages/messages/MessagesJa.php | 249 +- languages/messages/MessagesKa.php | 44 +- languages/messages/MessagesKg.php | 182 +- languages/messages/MessagesKiu.php | 65 +- languages/messages/MessagesKk_cyrl.php | 171 +- languages/messages/MessagesKm.php | 12 +- languages/messages/MessagesKn.php | 173 +- languages/messages/MessagesKo.php | 34 +- languages/messages/MessagesKri.php | 548 +-- languages/messages/MessagesKsh.php | 12 +- languages/messages/MessagesKu_latn.php | 107 +- languages/messages/MessagesKy.php | 610 +++- languages/messages/MessagesLa.php | 12 +- languages/messages/MessagesLad.php | 398 ++- languages/messages/MessagesLb.php | 27 +- languages/messages/MessagesLi.php | 22 +- languages/messages/MessagesLiv.php | 3 +- languages/messages/MessagesLn.php | 88 +- languages/messages/MessagesLt.php | 1 + languages/messages/MessagesLv.php | 146 +- languages/messages/MessagesMai.php | 210 +- languages/messages/MessagesMap_bms.php | 1327 +++++++- languages/messages/MessagesMdf.php | 80 +- languages/messages/MessagesMg.php | 123 +- languages/messages/MessagesMk.php | 34 +- languages/messages/MessagesMl.php | 32 +- languages/messages/MessagesMr.php | 868 +++-- languages/messages/MessagesMs.php | 143 +- languages/messages/MessagesMt.php | 32 +- languages/messages/MessagesMyv.php | 61 +- languages/messages/MessagesNah.php | 10 +- languages/messages/MessagesNan.php | 555 ++- languages/messages/MessagesNb.php | 3474 ++++++++++++++++++- languages/messages/MessagesNds.php | 2 +- languages/messages/MessagesNds_nl.php | 25 +- languages/messages/MessagesNe.php | 47 +- languages/messages/MessagesNl.php | 30 +- languages/messages/MessagesNn.php | 36 +- languages/messages/MessagesOr.php | 1385 ++++++-- languages/messages/MessagesPa.php | 39 +- languages/messages/MessagesPcd.php | 4 +- languages/messages/MessagesPdc.php | 6 +- languages/messages/MessagesPl.php | 31 +- languages/messages/MessagesPms.php | 134 +- languages/messages/MessagesPnb.php | 12 +- languages/messages/MessagesPrg.php | 138 +- languages/messages/MessagesPs.php | 153 +- languages/messages/MessagesPt.php | 42 +- languages/messages/MessagesPt_br.php | 13 +- languages/messages/MessagesQqq.php | 92 +- languages/messages/MessagesQu.php | 160 +- languages/messages/MessagesQug.php | 4 +- languages/messages/MessagesRo.php | 21 +- languages/messages/MessagesRoa_tara.php | 364 +- languages/messages/MessagesRu.php | 46 +- languages/messages/MessagesRue.php | 37 +- languages/messages/MessagesSa.php | 283 +- languages/messages/MessagesSah.php | 12 +- languages/messages/MessagesScn.php | 49 +- languages/messages/MessagesSh.php | 12 +- languages/messages/MessagesShi.php | 3 +- languages/messages/MessagesSi.php | 195 +- languages/messages/MessagesSk.php | 29 +- languages/messages/MessagesSl.php | 26 +- languages/messages/MessagesSo.php | 75 +- languages/messages/MessagesSq.php | 764 +++-- languages/messages/MessagesSr_ec.php | 56 +- languages/messages/MessagesSr_el.php | 3139 +++++++++-------- languages/messages/MessagesSv.php | 18 +- languages/messages/MessagesSw.php | 19 +- languages/messages/MessagesSzl.php | 10 +- languages/messages/MessagesTa.php | 1256 +++++-- languages/messages/MessagesTcy.php | 273 +- languages/messages/MessagesTe.php | 35 +- languages/messages/MessagesTet.php | 12 +- languages/messages/MessagesTg_latn.php | 43 +- languages/messages/MessagesTh.php | 182 +- languages/messages/MessagesTl.php | 37 +- languages/messages/MessagesTr.php | 64 +- languages/messages/MessagesTt_cyrl.php | 3 +- languages/messages/MessagesUk.php | 72 +- languages/messages/MessagesVep.php | 360 +- languages/messages/MessagesVi.php | 47 +- languages/messages/MessagesVo.php | 28 +- languages/messages/MessagesWar.php | 352 +- languages/messages/MessagesXmf.php | 2 +- languages/messages/MessagesYi.php | 45 +- languages/messages/MessagesYo.php | 944 ++++-- languages/messages/MessagesZea.php | 634 +++- languages/messages/MessagesZh.php | 6 + languages/messages/MessagesZh_cn.php | 3 + languages/messages/MessagesZh_hans.php | 325 +- languages/messages/MessagesZh_hant.php | 76 +- maintenance/Maintenance.php | 27 +- maintenance/cleanupUploadStash.php | 2 +- maintenance/eval.php | 2 +- maintenance/importDump.php | 2 +- .../archives/patch_recentchanges_fk2_cascade.sql | 5 + maintenance/oracle/tables.sql | 2 +- .../postgres/archives/patch-uploadstash.sql | 24 + .../archives/patch-uploadstash_sequence.sql | 2 + maintenance/postgres/tables.sql | 25 + maintenance/update.php | 6 +- resources/Resources.php | 2 +- resources/jquery/jquery.delayedBind.js | 5 + resources/mediawiki/mediawiki.js | 49 +- resources/mediawiki/mediawiki.util.js | 3 +- skins/common/images/sort_both.gif | Bin 0 -> 1184 bytes skins/common/images/sort_down.gif | Bin 0 -> 464 bytes skins/common/images/sort_up.gif | Bin 0 -> 466 bytes skins/common/mwsuggest.js | 19 +- tests/parser/parserTest.inc | 2 +- tests/phpunit/includes/XmlTest.php | 4 + tests/phpunit/includes/search/SearchUpdateTest.php | 10 + tests/phpunit/skins/SideBarTest.php | 30 + tests/qunit/index.html | 2 + .../resources/jquery/jquery.delayedBind.test.js | 41 + 214 files changed, 24506 insertions(+), 11139 deletions(-) create mode 100644 maintenance/oracle/archives/patch_recentchanges_fk2_cascade.sql create mode 100644 maintenance/postgres/archives/patch-uploadstash.sql create mode 100644 maintenance/postgres/archives/patch-uploadstash_sequence.sql create mode 100644 skins/common/images/sort_both.gif create mode 100644 skins/common/images/sort_down.gif create mode 100644 skins/common/images/sort_up.gif create mode 100644 tests/qunit/suites/resources/jquery/jquery.delayedBind.test.js diff --git a/RELEASE-NOTES-1.18 b/RELEASE-NOTES-1.18 index 182d3152..01f750b2 100644 --- a/RELEASE-NOTES-1.18 +++ b/RELEASE-NOTES-1.18 @@ -3,6 +3,41 @@ Security reminder: MediaWiki does not require PHP's register_globals setting since version 1.2.0. If you have it on, turn it '''off''' if you can. +== MediaWiki 1.18.1 == +2012-01-11 + +This a maintenance and security release of the MediaWiki 1.18 branch. + +=== Security changes === +* (bug 33117) prop=revisions allows deleted text to be exposed through cache pollution. + +=== Changes since 1.18.0 === +* (bug 32712) Fix for search indexing of pages with certain unicode chars following URL. +* (bug 3901) Lang, hreflang attribs added to sidebar interlanguage links for screen readers. +* (bug 30774) mediawiki.html: Add support for numbers and booleans in the + attribute values and element contents. +* (bug 32473) [[Special:PasswordReset]] can not be used on private wiki. +* (bug 32853) Fixed CACHE_DBA object cache type. +* (bug 32786) Backward compatibility for extension using 1.17's Database::newFromType(). +* Fixed exception when using Special:WhatLinksHere on a Media: file. +* (bug 32709) Private Wiki users were always taken to Special:Badtitle on login. +* (bug 33240) Sort images are missing but referenced in css. +* (bug 31921) Magic words REVISIONDAY, REVISIONMONTH and REVISIONYEAR were + not showing their values on preview. +* (bug 32702) Removed method Skin::makeGlobalVariablesScript() has been readded + for backward compatibility. +* (bug 30172) The check for posix_isatty() in maintenance scripts did not detect + when the function exists but is disabled. Introduced Maintenance::posix_isatty(). +* (bug 33305) Make mw.util.addCSS resistant to IE's @font-face bug by setting + cssText after DOM insertion. +* (bug 29102) Upgrades no longer fail with the error "Unknown character set: 'mysql4'. +* (bug 25355) Parser generates edit section links for special pages. +* (bug 33321) Adding a line to MediaWiki:Sidebar that contains a pipe, but doesn't + have any pipes after being transformed by MessageCache, causes exception on + all pages. +* Fixed recentchanges FK violation on page delete and cache purge error in updater + for Oracle DB. + == MediaWiki 1.18 == 2011-11-24 @@ -150,8 +185,6 @@ Selected changes since MediaWiki 1.17 that may be of interest: create a page or new section. * (bug 8130) Query pages should limit to content namespaces, not just main namespace. -* Search suggestions (other than in the Vector skin) will now use the HTML5 - datalist feature where supported, currently only Firefox 4. * Special:Contribs now redirects to Special:Contributions. * (bug 6672) Images are now autorotated according to their EXIF orientation. This only affects thumbnails; the source remains unrotated. @@ -287,10 +320,10 @@ Selected changes since MediaWiki 1.17 that may be of interest: Same for signupend on the account creation page. * (bug 31233) New OutputPage::addJsConfigVars() method to make the output page specific mw.config map extendable. +* mw.util.wikiScript has been implemented (like wfScript in GlobalFunctions.php). === Bug fixes in 1.18 === * (bug 27860) Minor edit after clicking 'new section' tab. -* mw.util.getScript has been implemented (like wfScript in GlobalFunctions.php). * (bug 23119) WikiError class and subclasses are now marked as deprecated. * (bug 10871) Javascript and CSS pages in MediaWiki namespace are no longer treated as wikitext on preview. @@ -711,8 +744,8 @@ changes to languages because of Bugzilla reports. * (bug 27681) Set $namespaceGenderAliases for Portuguese (pt and pt-br). * (bug 27785) Fallback language for Kabardian (kbd) is English now. * (bug 27825) Raw watchlist edit message now uses formatted numbers. -* (bug 28040) Turkish: properly lower case 'I' to 'ı' (dotless i) and - uppercase 'i' to 'İ' (dotted i). +* (bug 28040) Turkish: properly lower case 'I' to 'i' (dotless i) and + uppercase 'i' to 'I' (dotted i). * Conversion script between Syllabics and Latin for the Inuktitut language. * Date formats for Indonesian (id) updated. * Bhojpuri (bho) (renamed from "bh"). diff --git a/docs/hooks.txt b/docs/hooks.txt index ca938555..aca0844a 100644 --- a/docs/hooks.txt +++ b/docs/hooks.txt @@ -567,6 +567,13 @@ $mediaWiki: Mediawiki object &$out: OutputPage object &$skin: Skin object +'BeforePageRedirect': Prior to sending an HTTP redirect. Gives a chance to +override how the redirect is output by modifying, or by returning false and +taking over the output. +$out: OutputPage object +&$redirect: URL, modifiable +&$code: HTTP code (eg '301' or '302'), modifiable + 'BeforeParserFetchFileAndTitle': before an image is rendered by Parser $parser: Parser object $nt: the image title diff --git a/extensions/ConfirmEdit/FancyCaptcha.class.php b/extensions/ConfirmEdit/FancyCaptcha.class.php index b2f5c10e..61723656 100644 --- a/extensions/ConfirmEdit/FancyCaptcha.class.php +++ b/extensions/ConfirmEdit/FancyCaptcha.class.php @@ -72,6 +72,9 @@ class FancyCaptcha extends SimpleCaptcha { Xml::element( 'input', array( 'name' => 'wpCaptchaWord', 'id' => 'wpCaptchaWord', + 'autocorrect' => 'off', + 'autocapitalize' => 'off', + 'required', 'tabindex' => 1 ) ) . // tab in before the edit textarea "

\n"; } diff --git a/extensions/ConfirmEdit/QuestyCaptcha.class.php b/extensions/ConfirmEdit/QuestyCaptcha.class.php index 478fcf34..90e4b186 100644 --- a/extensions/ConfirmEdit/QuestyCaptcha.class.php +++ b/extensions/ConfirmEdit/QuestyCaptcha.class.php @@ -64,7 +64,7 @@ class QuestyCaptcha extends SimpleCaptcha { global $wgOut; $wgOut->setPageTitle( wfMsg( 'captchahelp-title' ) ); $wgOut->addWikiText( wfMsg( 'questycaptchahelp-text' ) ); - if ( $this->storage->cookiesNeeded() ) { + if ( CaptchaStore::get()->cookiesNeeded() ) { $wgOut->addWikiText( wfMsg( 'captchahelp-cookies-needed' ) ); } } diff --git a/includes/AjaxDispatcher.php b/includes/AjaxDispatcher.php index 17b154d6..5bc9f067 100644 --- a/includes/AjaxDispatcher.php +++ b/includes/AjaxDispatcher.php @@ -68,7 +68,7 @@ class AjaxDispatcher { * request. */ function performAction() { - global $wgAjaxExportList, $wgOut; + global $wgAjaxExportList, $wgOut, $wgUser; if ( empty( $this->mode ) ) { return; @@ -84,6 +84,13 @@ class AjaxDispatcher { 'Bad Request', "unknown function " . (string) $this->func_name ); + } elseif ( !in_array( 'read', User::getGroupPermissions( array( '*' ) ), true ) + && !$wgUser->isAllowed( 'read' ) ) + { + wfHttpError( + 403, + 'Forbidden', + 'You must log in to view pages.' ); } else { wfDebug( __METHOD__ . ' dispatching ' . $this->func_name . "\n" ); diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 4248add7..9d387fb5 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -33,7 +33,7 @@ $wgConf = new SiteConfiguration; /** @endcond */ /** MediaWiki version number */ -$wgVersion = '1.18.0'; +$wgVersion = '1.18.1'; /** Name of the site. It must be changed in LocalSettings.php */ $wgSitename = 'MediaWiki'; @@ -1410,6 +1410,8 @@ $wgQueryCacheLimit = 1000; $wgWantedPagesThreshold = 1; /** Enable slow parser functions */ $wgAllowSlowParserFunctions = false; +/** Allow schema updates */ +$wgAllowSchemaUpdates = true; /** * Do DELETE/INSERT for link updates instead of incremental @@ -1511,6 +1513,8 @@ $wgParserCacheType = CACHE_ANYTHING; * given, giving a callable function which will generate a suitable cache object. * * The other parameters are dependent on the class used. + * - CACHE_DBA uses $wgTmpDirectory by default. The 'dir' parameter let you + * overrides that. */ $wgObjectCaches = array( CACHE_NONE => array( 'class' => 'EmptyBagOStuff' ), diff --git a/includes/OutputPage.php b/includes/OutputPage.php index 419bbdf7..a3a9592d 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -1223,6 +1223,7 @@ class OutputPage extends ContextSource { public function parserOptions( $options = null ) { if ( !$this->mParserOptions ) { $this->mParserOptions = new ParserOptions; + $this->mParserOptions->setEditSection( false ); } return wfSetVar( $this->mParserOptions, $options ); } @@ -1799,27 +1800,34 @@ class OutputPage extends ContextSource { if ( $this->mRedirect != '' ) { # Standards require redirect URLs to be absolute $this->mRedirect = wfExpandUrl( $this->mRedirect, PROTO_CURRENT ); - if( $this->mRedirectCode == '301' || $this->mRedirectCode == '303' ) { - if( !$wgDebugRedirects ) { - $message = HttpStatus::getMessage( $this->mRedirectCode ); - $response->header( "HTTP/1.1 {$this->mRedirectCode} $message" ); + + $redirect = $this->mRedirect; + $code = $this->mRedirectCode; + + if( wfRunHooks( "BeforePageRedirect", array( $this, &$redirect, &$code ) ) ) { + if( $code == '301' || $code == '303' ) { + if( !$wgDebugRedirects ) { + $message = HttpStatus::getMessage( $code ); + $response->header( "HTTP/1.1 $code $message" ); + } + $this->mLastModified = wfTimestamp( TS_RFC2822 ); + } + if ( $wgVaryOnXFP ) { + $this->addVaryHeader( 'X-Forwarded-Proto' ); + } + $this->sendCacheControl(); + + $response->header( "Content-Type: text/html; charset=utf-8" ); + if( $wgDebugRedirects ) { + $url = htmlspecialchars( $redirect ); + print "\n\nRedirect\n\n\n"; + print "

Location: $url

\n"; + print "\n\n"; + } else { + $response->header( 'Location: ' . $redirect ); } - $this->mLastModified = wfTimestamp( TS_RFC2822 ); - } - if ( $wgVaryOnXFP ) { - $this->addVaryHeader( 'X-Forwarded-Proto' ); - } - $this->sendCacheControl(); - - $response->header( "Content-Type: text/html; charset=utf-8" ); - if( $wgDebugRedirects ) { - $url = htmlspecialchars( $this->mRedirect ); - print "\n\nRedirect\n\n\n"; - print "

Location: $url

\n"; - print "\n\n"; - } else { - $response->header( 'Location: ' . $this->mRedirect ); } + wfProfileOut( __METHOD__ ); return; } elseif ( $this->mStatusCode ) { @@ -1959,6 +1967,8 @@ class OutputPage extends ContextSource { * Produce the stock "please login to use the wiki" page */ public function loginToUse() { + global $wgRequest; + if( $this->getUser()->isLoggedIn() ) { throw new PermissionsError( 'read' ); } @@ -1968,12 +1978,18 @@ class OutputPage extends ContextSource { $this->setRobotPolicy( 'noindex,nofollow' ); $this->setArticleRelated( false ); + $returnto = Title::newFromURL( $wgRequest->getVal( 'title', '' ) ); + $returntoquery = array(); + if( $returnto ) { + $returntoquery = array( 'returnto' => $returnto->getPrefixedText() ); + } + $loginTitle = SpecialPage::getTitleFor( 'Userlogin' ); $loginLink = Linker::linkKnown( $loginTitle, wfMsgHtml( 'loginreqlink' ), array(), - array( 'returnto' => $this->getTitle()->getPrefixedText() ) + $returntoquery ); $this->addHTML( wfMessage( 'loginreqpagetext' )->rawParams( $loginLink )->parse() . "\n' ); @@ -2387,7 +2403,8 @@ $templates foreach ( (array) $modules as $name ) { $module = $resourceLoader->getModule( $name ); # Check that we're allowed to include this module on this page - if ( ( $module->getOrigin() > $this->getAllowedModules( ResourceLoaderModule::TYPE_SCRIPTS ) + if ( !$module + || ( $module->getOrigin() > $this->getAllowedModules( ResourceLoaderModule::TYPE_SCRIPTS ) && $only == ResourceLoaderModule::TYPE_SCRIPTS ) || ( $module->getOrigin() > $this->getAllowedModules( ResourceLoaderModule::TYPE_STYLES ) && $only == ResourceLoaderModule::TYPE_STYLES ) @@ -2603,12 +2620,15 @@ $templates /** * Get an array containing the variables to be set in mw.config in JavaScript. * + * DO NOT CALL THIS FROM OUTSIDE OF THIS CLASS OR Skin::makeGlobalVariablesScript(). + * This is only public until that function is removed. You have been warned. + * * Do not add things here which can be evaluated in ResourceLoaderStartupScript * - in other words, page-indendent/site-wide variables (without state). * You will only be adding bloat to the html page and causing page caches to * have to be purged on configuration changes. */ - protected function getJSVars() { + public function getJSVars() { global $wgUseAjax, $wgEnableMWSuggest, $wgContLang; $title = $this->getTitle(); @@ -2955,7 +2975,11 @@ $templates $styles = array( 'other' => array(), 'user' => array(), 'site' => array(), 'private' => array(), 'noscript' => array() ); $resourceLoader = $this->getResourceLoader(); foreach ( $this->getModuleStyles() as $name ) { - $group = $resourceLoader->getModule( $name )->getGroup(); + $module = $resourceLoader->getModule( $name ); + if ( !$module ) { + continue; + } + $group = $module->getGroup(); // Modules in groups named "other" or anything different than "user", "site" or "private" // will be placed in the "other" group $styles[isset( $styles[$group] ) ? $group : 'other'][] = $name; diff --git a/includes/RequestContext.php b/includes/RequestContext.php index 37617457..441a9aec 100644 --- a/includes/RequestContext.php +++ b/includes/RequestContext.php @@ -64,6 +64,13 @@ interface IContextSource { */ public function getLang(); + /** + * Get the Language object + * + * @return Language + */ + public function getLanguage(); + /** * Get the Skin object * @@ -233,6 +240,15 @@ class RequestContext implements IContextSource { return $this->lang; } + /** + * Get the Language object + * + * @return Language + */ + public function getLanguage() { + return $this->getLang(); + } + /** * Set the Skin object * @@ -378,6 +394,15 @@ abstract class ContextSource implements IContextSource { return $this->getContext()->getLang(); } + /** + * Get the Language object + * + * @return Language + */ + public function getLanguage() { + return $this->getContext()->getLang(); + } + /** * Get the Skin object * diff --git a/includes/Skin.php b/includes/Skin.php index a713660c..62a63ebe 100644 --- a/includes/Skin.php +++ b/includes/Skin.php @@ -402,6 +402,20 @@ abstract class Skin extends ContextSource { wfProfileOut( __METHOD__ ); } + /** + * Make a + @@ -69,6 +70,7 @@ + diff --git a/tests/qunit/suites/resources/jquery/jquery.delayedBind.test.js b/tests/qunit/suites/resources/jquery/jquery.delayedBind.test.js new file mode 100644 index 00000000..8688f12e --- /dev/null +++ b/tests/qunit/suites/resources/jquery/jquery.delayedBind.test.js @@ -0,0 +1,41 @@ +test('jquery.delayedBind with data option', function() { + var $fixture = $('
').appendTo('body'), + data = { magic: "beeswax" }, + delay = 50; + + $fixture.delayedBind(delay, 'testevent', data, function(event) { + start(); // continue! + ok(true, 'testevent fired'); + ok(event.data === data, 'data is passed through delayedBind'); + }); + + expect(2); + stop(); // async! + + // We'll trigger it thrice, but it should only happen once. + $fixture.trigger('testevent', {}); + $fixture.trigger('testevent', {}); + $fixture.trigger('testevent', {}); + $fixture.trigger('testevent', {}); +}); + +test('jquery.delayedBind without data option', function() { + var $fixture = $('
').appendTo('body'), + data = { magic: "beeswax" }, + delay = 50; + + $fixture.delayedBind(delay, 'testevent', function(event) { + start(); // continue! + ok(true, 'testevent fired'); + }); + + expect(1); + stop(); // async! + + // We'll trigger it thrice, but it should only happen once. + $fixture.trigger('testevent', {}); + $fixture.trigger('testevent', {}); + $fixture.trigger('testevent', {}); + $fixture.trigger('testevent', {}); +}); + -- cgit v1.2.3-54-g00ecf