getUser(), 'revisionslider' ) ) { return true; } /** * Do not show the RevisionSlider when revisions from two different pages are being compared */ if ( !$oldRev->getTitle()->equals( $newRev->getTitle() ) ) { return true; } $stats = MediaWikiServices::getInstance()->getStatsdDataFactory(); $stats->increment( 'RevisionSlider.event.hookinit' ); $config = MediaWikiServices::getInstance()->getMainConfig(); $timeOffset = $config->get( 'LocalTZoffset' ); if ( is_null( $config->get( 'Localtimezone' ) ) ) { $timeOffset = 0; } elseif ( is_null( $timeOffset ) ) { $timeOffset = 0; } $autoExpand = $diff->getUser()->getBoolOption( 'userjs-revslider-autoexpand' ); $out = RequestContext::getMain()->getOutput(); $out->addModules( 'ext.RevisionSlider.init' ); $out->addModuleStyles( 'ext.RevisionSlider.noscript' ); $out->addJsConfigVars( 'extRevisionSliderOldRev', $oldRev->getId() ); $out->addJsConfigVars( 'extRevisionSliderNewRev', $newRev->getId() ); $out->addJsConfigVars( 'extRevisionSliderTimeOffset', intval( $timeOffset ) ); $out->enableOOUI(); // FIXME: this really not nice to inject those elements to ButtonWidget like that // but this is only done to have inline styles set for those elements, so they are // rendered as intended before RL loads all CSS styles (avoid jumping after CSS is loaded). // Some better and more future-proof solution (what if ButtonWidget switches to use other tags?) // should be used if possible. $button = new OOUI\Tag( 'a' ); $label = new OOUI\Tag( 'span' ); $icon = new OOUI\Tag( 'span' ); $button->setAttributes( [ 'style' => 'width: 100%;' ] ); $label->setAttributes( [ 'style' => 'line-height: 1.875em;' ] ); $icon->setAttributes( [ 'style' => 'float: right;' ] ); $toggleButton = new OOUI\ButtonWidget( [ 'label' => ( new Message( 'revisionslider-toggle-label' ) )->text(), 'icon' => $autoExpand ? 'collapse' : 'expand', 'button' => $button, 'labelElement' => $label, 'iconElement' => $icon, 'classes' => [ 'mw-revslider-toggle-button' ], 'infusable' => true, 'framed' => false, 'title' => ( new Message( 'revisionslider-toggle-title-expand' ) )->text(), ] ); $toggleButton->setAttributes( [ 'style' => 'width: 100%; text-align: center;' ] ); $progressBar = new OOUI\ProgressBarWidget( [ 'progress' => false ] ); $progressBar->setAttributes( [ 'style' => 'margin: 0 auto;', ] ); $out->addHTML( Html::rawElement( 'div', [ 'class' => 'mw-revslider-container', 'style' => 'border: 1px solid #cccccc;' ], $toggleButton . Html::rawElement( 'div', [ 'class' => 'mw-revslider-slider-wrapper', 'style' => 'min-height: 142px; border-top: 1px solid #cccccc; padding: 10px;' . ( !$autoExpand ? ' display: none;' : '' ), ], Html::rawElement( 'div', [ 'style' => 'text-align: center; margin-top: 60px;', 'class' => 'mw-revslider-placeholder' ], $progressBar ) ) ) ); return true; } public static function getBetaFeaturePreferences( User $user, array &$prefs ) { global $wgExtensionAssetsPath; $prefs['revisionslider'] = [ 'label-message' => 'revisionslider-beta-feature-message', 'desc-message' => 'revisionslider-beta-feature-description', 'screenshot' => [ 'ltr' => "$wgExtensionAssetsPath/RevisionSlider/resources/RevisionSlider-beta-features-ltr.png", 'rtl' => "$wgExtensionAssetsPath/RevisionSlider/resources/RevisionSlider-beta-features-rtl.png", ], 'info-link' => 'https://www.mediawiki.org/wiki/Extension:RevisionSlider', 'discussion-link' => 'https://www.mediawiki.org/wiki/Extension_talk:RevisionSlider', ]; } public static function onResourceLoaderTestModules( array &$testModules, ResourceLoader $rl ) { $testModules['qunit']['ext.RevisionSlider.tests'] = [ 'scripts' => [ 'tests/qunit/QUnit.revisionSlider.testOrSkip.js', 'tests/qunit/RevisionSlider.Revision.test.js', 'tests/qunit/RevisionSlider.Pointer.test.js', 'tests/qunit/RevisionSlider.PointerView.test.js', 'tests/qunit/RevisionSlider.Slider.test.js', 'tests/qunit/RevisionSlider.SliderView.test.js', 'tests/qunit/RevisionSlider.RevisionList.test.js', 'tests/qunit/RevisionSlider.RevisionListView.test.js', 'tests/qunit/RevisionSlider.DiffPage.test.js', 'tests/qunit/RevisionSlider.HelpDialog.test.js', ], 'dependencies' => [ 'ext.RevisionSlider.Revision', 'ext.RevisionSlider.Pointer', 'ext.RevisionSlider.PointerView', 'ext.RevisionSlider.Slider', 'ext.RevisionSlider.SliderView', 'ext.RevisionSlider.RevisionList', 'ext.RevisionSlider.RevisionListView', 'ext.RevisionSlider.DiffPage', 'ext.RevisionSlider.HelpDialog', 'jquery.ui.draggable', 'jquery.ui.tooltip', 'oojs-ui' ], 'localBasePath' => __DIR__, 'remoteExtPath' => 'RevisionSlider', ]; return true; } }