self::changePrefix( $this->newTablePrefix );
$newTableName = $this->db->tableName( $tbl, 'raw' );
+ // Postgres: Temp tables are automatically deleted upon end of session
+ // Same Temp table name hides existing table for current session
if ( $this->dropCurrentTables
- && !in_array( $this->db->getType(), [ 'postgres', 'oracle' ] )
+ && !in_array( $this->db->getType(), [ 'oracle' ] )
) {
if ( $oldTableName === $newTableName ) {
// Last ditch check to avoid data loss
}
$title = UserGroupMembership::getGroupPage( $group );
if ( $title ) {
- return Linker::link( $title, htmlspecialchars( $text ) );
+ return MediaWikiServices::getInstance()
+ ->getLinkRenderer()->makeLink( $title, $text );
} else {
return htmlspecialchars( $text );
}
'jquery.accessKeyLabel',
'jquery.textSelection',
'jquery.byteLimit',
+ 'mediawiki.widgets.visibleByteLimit',
'mediawiki.api',
],
],
'mediawiki.special.movePage' => [
'scripts' => 'resources/src/mediawiki.special/mediawiki.special.movePage.js',
'dependencies' => [
- 'jquery.byteLimit',
+ 'mediawiki.widgets.visibleByteLimit',
'mediawiki.widgets',
],
],
],
'targets' => [ 'desktop', 'mobile' ],
],
+ 'mediawiki.widgets.visibleByteLimit' => [
+ 'scripts' => [
+ 'resources/src/mediawiki.widgets.visibleByteLimit/mediawiki.widgets.visibleByteLimit.js'
+ ],
+ 'dependencies' => [
+ 'oojs-ui-core',
+ 'jquery.byteLimit'
+ ],
+ 'targets' => [ 'desktop', 'mobile' ]
+ ],
'mediawiki.widgets.datetime' => [
'scripts' => [
'resources/src/mediawiki.widgets.datetime/mediawiki.widgets.datetime.js',
// TODO: This should be an OOjs UI feature, or somehow happen automatically after infusing.
wpSummary.$input.updateTooltipAccessKeys();
- // Make sure edit summary does not exceed byte limit
- wpSummary.$input.byteLimit( 255 );
-
// Show a byte-counter to users with how many bytes are left for their edit summary.
// TODO: This looks a bit weird, as there is no unit in the UI, just numbers; showing
// 'bytes' confused users in testing, and showing 'chars' would be a lie. See T42035.
- function updateSummaryLabelCount() {
- wpSummary.setLabel( String( 255 - $.byteLength( wpSummary.getValue() ) ) );
- }
- wpSummary.on( 'change', updateSummaryLabelCount );
- // Initialise value
- updateSummaryLabelCount();
+ mw.widgets.visibleByteLimit( wpSummary, 255 );
} );
} else {
// Make sure edit summary does not exceed byte limit
// Events
this.popup.connect( this, {
- ready: 'onPopupReady',
- toggle: 'onPopupToggle'
+ ready: 'onPopupReady'
} );
this.input.connect( this, { enter: 'onInputEnter' } );
this.input.$input.on( {
/*!
* JavaScript for Special:MovePage
*/
-jQuery( function ( $ ) {
- // Infuse for pretty dropdown
- OO.ui.infuse( 'wpNewTitle' );
- // Limit to 255 bytes, not characters
- OO.ui.infuse( 'wpReason' ).$input.byteLimit();
- // Infuse for nicer "help" popup
- if ( $( '#wpMovetalk-field' ).length ) {
- OO.ui.infuse( 'wpMovetalk-field' );
- }
-} );
+( function ( mw, $ ) {
+ $( function () {
+ // Infuse for pretty dropdown
+ OO.ui.infuse( $( '#wpNewTitle' ) );
+ // Limit to bytes, not characters
+ mw.widgets.visibleByteLimit( OO.ui.infuse( $( '#wpReason' ) ) );
+ // Infuse for nicer "help" popup
+ if ( $( '#wpMovetalk-field' ).length ) {
+ OO.ui.infuse( $( '#wpMovetalk-field' ) );
+ }
+ } );
+}( mediaWiki, jQuery ) );
--- /dev/null
+/**
+ * Add a visible byte limit label to a TextInputWidget
+ *
+ * Uses jQuery.byteLimit to enforce the limit.
+
+ * @param {OO.ui.TextInputWidget} textInputWidget Text input widget
+ * @param {number} [limit] Byte limit, defaults to $input's maxlength
+ */
+mediaWiki.widgets.visibleByteLimit = function ( textInputWidget, limit ) {
+ limit = limit || +textInputWidget.$input.attr( 'maxlength' );
+
+ function updateCount() {
+ textInputWidget.setLabel( ( limit - $.byteLength( textInputWidget.getValue() ) ).toString() );
+ }
+ textInputWidget.on( 'change', updateCount );
+ // Initialise value
+ updateCount();
+
+ // Actually enforce limit
+ textInputWidget.$input.byteLimit( limit );
+};