$this->outputHeader();
$out = $this->getOutput();
+ $out->addModules( 'mediawiki.special.newFiles' );
$this->addHelpLink( 'Help:New images' );
$opts = new FormOptions();
$opts->add( 'hidepatrolled', false );
$opts->add( 'limit', 50 );
$opts->add( 'offset', '' );
+ $opts->add( 'start', '' );
+ $opts->add( 'end', '' );
$opts->fetchValuesFromRequest( $this->getRequest() );
$opts->setValue( is_numeric( $par ) ? 'limit' : 'like', $par );
}
+ // If start date comes after end date chronologically, swap them.
+ // They are swapped in the interface by JS.
+ $start = $opts->getValue( 'start' );
+ $end = $opts->getValue( 'end' );
+ if ( $start !== '' && $end !== '' && $start > $end ) {
+ $temp = $end;
+ $end = $start;
+ $start = $temp;
+
+ $opts->setValue( 'start', $start, true );
+ $opts->setValue( 'end', $end, true );
+ }
+
$opts->validateIntBounds( 'limit', 0, 500 );
$this->opts = $opts;
'default' => $this->opts->getValue( 'offset' ),
'name' => 'offset',
],
+
+ 'start' => [
+ 'type' => 'date',
+ 'label-message' => 'date-range-from',
+ 'name' => 'start',
+ ],
+
+ 'end' => [
+ 'type' => 'date',
+ 'label-message' => 'date-range-to',
+ 'name' => 'end',
+ ],
];
if ( $this->getConfig()->get( 'MiserMode' ) ) {
*/
use MediaWiki\MediaWikiServices;
-class NewFilesPager extends ReverseChronologicalPager {
+class NewFilesPager extends RangeChronologicalPager {
/**
* @var ImageGalleryBase
* @param FormOptions $opts
*/
function __construct( IContextSource $context, FormOptions $opts ) {
- $this->opts = $opts;
+ parent::__construct( $context );
+ $this->opts = $opts;
$this->setLimit( $opts->getValue( 'limit' ) );
- parent::__construct( $context );
+ $startTimestamp = '';
+ $endTimestamp = '';
+ if ( $opts->getValue( 'start' ) ) {
+ $startTimestamp = $opts->getValue( 'start' ) . ' 00:00:00';
+ }
+ if ( $opts->getValue( 'end' ) ) {
+ $endTimestamp = $opts->getValue( 'end' ) . ' 23:59:59';
+ }
+ $this->getDateRangeCond( $startTimestamp, $endTimestamp );
}
function getQueryInfo() {
'mediawiki.page.patrol.ajax' => [
'scripts' => 'resources/src/mediawiki/page/patrol.ajax.js',
'dependencies' => [
- 'mediawiki.page.startup',
'mediawiki.api',
'mediawiki.util',
'mediawiki.Title',
'mediawiki.special.movePage.styles' => [
'styles' => 'resources/src/mediawiki.special/mediawiki.special.movePage.css',
],
+ 'mediawiki.special.newFiles' => [
+ 'scripts' => 'resources/src/mediawiki.special/mediawiki.special.newFiles.js',
+ 'dependencies' => [
+ 'mediawiki.widgets.datetime',
+ ],
+ ],
'mediawiki.special.pageLanguage' => [
'scripts' => 'resources/src/mediawiki.special/mediawiki.special.pageLanguage.js',
'dependencies' => [
--- /dev/null
+/*!
+ * JavaScript for Special:NewFiles
+ */
+( function ( mw, $ ) {
+ $( function () {
+ var start = mw.widgets.datetime.DateTimeInputWidget.static.infuse( 'mw-input-start' ),
+ end = mw.widgets.datetime.DateTimeInputWidget.static.infuse( 'mw-input-end' ),
+ temp;
+
+ // If the start date comes after the end date, swap the two values.
+ // This swap is already done internally when the form is submitted with a start date that
+ // comes after the end date, but this swap makes the change visible in the HTMLForm.
+ if ( start.getValue() !== '' &&
+ end.getValue() !== '' &&
+ start.getValue() > end.getValue() ) {
+ temp = start.getValue();
+ start.setValue( end.getValue() );
+ end.setValue( temp );
+ }
+ } );
+}( mediaWiki, jQuery ) );