jenkins-bot has submitted this change and it was merged. Change subject: Fixup qrcode-generating js, to stop race condition. ......................................................................
Fixup qrcode-generating js, to stop race condition. Previously there was a race condition where the qrcode would not show if the startup module finished loading prior to the div that should contain the qrcode being loaded. This quite commonly happened on wikipedia during a hit where js is cached (But does not happen locally, my theory is that that is due to how packets get split over the network but not from localhost). Change it to use a normal RL module, as that seems best practise. Also do not load the qrcode js on special pages that do not use it. Finially, remove position:top as its not needed. Bug: T136988 Change-Id: I5139f222207203d834bdc979b21c1fc94f242ac2 --- M extension.json A modules/ext.oath.showqrcode.js M special/SpecialOATHDisable.php M special/SpecialOATHEnable.php M special/SpecialOATHLogin.php 5 files changed, 30 insertions(+), 20 deletions(-) Approvals: Dpatrick: Looks good to me, approved jenkins-bot: Verified diff --git a/extension.json b/extension.json index f4081c9..242b2c8 100644 --- a/extension.json +++ b/extension.json @@ -51,14 +51,21 @@ "ResourceModules": { "ext.oathauth": { "scripts": [ - "modules/jquery.qrcode.js", - "modules/qrcode.js" + "jquery.qrcode.js", + "qrcode.js" + ] + }, + "ext.oath.showqrcode": { + "scripts": [ + "ext.oath.showqrcode.js" ], - "position": "top" + "dependencies": [ + "ext.oathauth" + ] } }, "ResourceFileModulePaths": { - "localBasePath": "", + "localBasePath": "modules", "remoteExtPath": "OATHAuth" }, "SpecialPages": { diff --git a/modules/ext.oath.showqrcode.js b/modules/ext.oath.showqrcode.js new file mode 100644 index 0000000..9c7d2b5 --- /dev/null +++ b/modules/ext.oath.showqrcode.js @@ -0,0 +1,6 @@ +(function ( $ ) { + $( function () { + var $elm = $( '.mw-display-qrcode' ); + $elm.qrcode( $elm.data( 'mw-qrcode-url' ) ); + } ); +} )( jQuery ); diff --git a/special/SpecialOATHDisable.php b/special/SpecialOATHDisable.php index aa7160f..3ae265c 100644 --- a/special/SpecialOATHDisable.php +++ b/special/SpecialOATHDisable.php @@ -37,7 +37,6 @@ $form->setMessagePrefix( 'oathauth' ); $form->setWrapperLegend( false ); $form->getOutput()->setPagetitle( $this->msg( 'oathauth-disable' ) ); - $form->getOutput()->addModules( 'ext.oathauth' ); } /** diff --git a/special/SpecialOATHEnable.php b/special/SpecialOATHEnable.php index 7e4a46a..49439e7 100644 --- a/special/SpecialOATHEnable.php +++ b/special/SpecialOATHEnable.php @@ -38,7 +38,7 @@ $form->setMessagePrefix( 'oathauth' ); $form->setWrapperLegend( false ); $form->getOutput()->setPagetitle( $this->msg( 'oathauth-enable' ) ); - $form->getOutput()->addModules( 'ext.oathauth' ); + $form->getOutput()->addModules( 'ext.oath.showqrcode' ); } /** @@ -80,19 +80,18 @@ } $secret = $key->getSecret(); + $qrcodeUrl = "otpauth://totp/" + . rawurlencode( $this->OATHUser->getAccount() ) + . "?secret=" + . rawurlencode( $secret ); - $this->getOutput()->addHTML( ResourceLoader::makeInlineScript( - Xml::encodeJsCall( 'mw.loader.using', array( - array( 'ext.oathauth' ), - new XmlJsCode( - 'function () {' - . '$("#qrcode").qrcode("otpauth://totp/' - . rawurlencode( $this->OATHUser->getAccount() ) - . '?secret=' . $secret . '");' - . '}' - ) - ) ) - ) ); + $qrcodeElement = Html::element( 'div', [ + 'data-mw-qrcode-url' => $qrcodeUrl, + 'class' => 'mw-display-qrcode', + // Include width/height, so js won't re-arrange layout + // OTOH, this will cause non-js browsers to see a big empty space. + 'style' => 'width: 256px; height: 256px;' + ] ); return array( 'app' => array( @@ -103,7 +102,7 @@ ), 'qrcode' => array( 'type' => 'info', - 'default' => '<div id="qrcode"></div>', + 'default' => $qrcodeElement, 'raw' => true, 'section' => 'step2', ), diff --git a/special/SpecialOATHLogin.php b/special/SpecialOATHLogin.php index 76f247a..0749535 100644 --- a/special/SpecialOATHLogin.php +++ b/special/SpecialOATHLogin.php @@ -39,7 +39,6 @@ $form->setMessagePrefix( 'oathauth' ); $form->setWrapperLegend( false ); $form->getOutput()->setPagetitle( $this->msg( 'oathauth-login' ) ); - $form->getOutput()->addModules( 'ext.oathauth' ); } /** -- To view, visit https://gerrit.wikimedia.org/r/295191 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I5139f222207203d834bdc979b21c1fc94f242ac2 Gerrit-PatchSet: 2 Gerrit-Project: mediawiki/extensions/OATHAuth Gerrit-Branch: master Gerrit-Owner: Brian Wolff <bawolff...@gmail.com> Gerrit-Reviewer: Dpatrick <dpatr...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits