public function execute( $subpage ) {
$this->rcSubpage = $subpage;
- $this->setHeaders();
- $this->outputHeader();
- $this->addModules();
-
$rows = $this->getRows();
$opts = $this->getOptions();
if ( $rows === false ) {
$rows = new FakeResultWrapper( [] );
}
+ // Used by Structured UI app to get results without MW chrome
+ if ( $this->getRequest()->getVal( 'action' ) === 'render' ) {
+ $this->getOutput()->setArticleBodyOnly( true );
+ }
+
+ // Used by "live update" and "view newest" to check
+ // if there's new changes with minimal data transfer
+ if ( $this->getRequest()->getBool( 'peek' ) ) {
+ $code = $rows->numRows() > 0 ? 200 : 304;
+ $this->getOutput()->setStatusCode( $code );
+ return;
+ }
+
$batch = new LinkBatch;
foreach ( $rows as $row ) {
$batch->add( NS_USER, $row->rc_user_text );
}
}
$batch->execute();
+
+ $this->setHeaders();
+ $this->outputHeader();
+ $this->addModules();
$this->webOutput( $rows, $opts );
$rows->free();
'liveUpdate',
{
limit: 1,
+ peek: 1, // bypasses all UI
from: this.changesListModel.getNextFrom()
}
);
counterId = counterId || 'updateChangesList';
params = params || {};
+ params.action = 'render'; // bypasses MW chrome
uri.extend( params );
return $.ajax( uri.toString(), { contentType: 'html' } )
.then(
- function ( html ) {
+ function ( html, reason ) {
var $parsed,
pieces;
return $.Deferred().reject();
}
- $parsed = $( $.parseHTML( html ) );
+ if ( params.peek && reason === 'notmodified' ) {
+ return {
+ changes: 'NO_RESULTS'
+ };
+ }
+
+ // Because of action=render, the response is a list of nodes.
+ // It has to be put under a root node so it can be queried.
+ $parsed = $( '<div>' ).append( $( $.parseHTML( html ) ) );
pieces = {
// Changes list