mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Popups
synced 2024-11-15 03:34:03 +00:00
0282b9648f
Improving Hovercards' settings dialog to fulfill design specification. Also fixing HTML structure by removing invalid `radiogroup` element and adding missing `</div>` element, fixing related QUnit test. Changes: * Add close icon instead of using text * Style header as a table for alignment * Remove redundant "OK" button and have it replace "Save" instead * Update text of "OK" button to "Done" * Fix description for translation of "Done" button * Fix qunit and selenium tests * Remove unnecessary markup and less * Add mediawiki-ui-button and mediawiki-ui-icon dependencies * Shrink dialog width some per design spec * Fix dialog horizontal position calculation to remove hard-coded value Bug: T138612 Change-Id: I7395e3438836149becdd576942bdaf6f21b4163f
187 lines
4.6 KiB
JavaScript
187 lines
4.6 KiB
JavaScript
( function ( $, mw ) {
|
|
|
|
var currentLinkLogData,
|
|
/**
|
|
* @class mw.popups.settings
|
|
* @singleton
|
|
*/
|
|
settings = {};
|
|
|
|
/**
|
|
* The settings' dialog's section element.
|
|
* Defined in settings.open
|
|
* @property $element
|
|
*/
|
|
settings.$element = null;
|
|
|
|
/**
|
|
* Renders the relevant form and labels in the settings dialog
|
|
*
|
|
* @method render
|
|
*/
|
|
settings.render = function () {
|
|
var path = mw.config.get( 'wgExtensionAssetsPath' ) + '/Popups/resources/',
|
|
choices = [
|
|
{
|
|
id: 'simple',
|
|
name: mw.message( 'popups-settings-option-simple' ).text(),
|
|
description: mw.message( 'popups-settings-option-simple-description' ).text(),
|
|
image: path + 'images/hovercard.svg',
|
|
isChecked: true
|
|
},
|
|
{
|
|
id: 'advanced',
|
|
name: mw.message( 'popups-settings-option-advanced' ).text(),
|
|
description: mw.message( 'popups-settings-option-advanced-description' ).text(),
|
|
image: path + 'images/navpop.svg'
|
|
},
|
|
{
|
|
id: 'off',
|
|
name: mw.message( 'popups-settings-option-off' ).text()
|
|
}
|
|
];
|
|
|
|
// Check if NavigationPopups is enabled
|
|
/*global pg: false*/
|
|
if ( typeof pg === 'undefined' || pg.fn.disablePopups === undefined ) {
|
|
// remove the advanced option
|
|
choices.splice( 1, 1 );
|
|
}
|
|
|
|
// render the template
|
|
settings.$element = mw.template.get( 'ext.popups.desktop', 'settings.mustache' ).render( {
|
|
heading: mw.message( 'popups-settings-title' ).text(),
|
|
closeLabel: mw.message( 'popups-settings-cancel' ).text(),
|
|
saveLabel: mw.message( 'popups-settings-save' ).text(),
|
|
helpText: mw.message( 'popups-settings-help' ).text(),
|
|
okLabel: mw.message( 'popups-settings-help-ok' ).text(),
|
|
descriptionText: mw.message( 'popups-settings-description' ).text(),
|
|
choices: choices
|
|
} );
|
|
|
|
// setup event bindings
|
|
settings.$element.find( '.save' ).click( settings.save );
|
|
settings.$element.find( '.close' ).click( settings.close );
|
|
settings.$element.find( '.okay' ).click( function () {
|
|
settings.close();
|
|
settings.reloadPage();
|
|
} );
|
|
|
|
$( 'body' ).append( settings.$element );
|
|
};
|
|
|
|
/**
|
|
* Save the setting to the device and close the dialog
|
|
*
|
|
* @method save
|
|
*/
|
|
settings.save = function () {
|
|
var v = $( 'input[name=mwe-popups-setting]:checked', '#mwe-popups-settings' ).val();
|
|
if ( v === 'simple' ) {
|
|
mw.popups.saveEnabledState( true );
|
|
settings.reloadPage();
|
|
settings.close();
|
|
} else {
|
|
mw.popups.saveEnabledState( false );
|
|
$( '#mwe-popups-settings-form, #mwe-popups-settings .save' ).hide();
|
|
$( '#mwe-popups-settings-help, #mwe-popups-settings .okay' ).show();
|
|
mw.track( 'ext.popups.schemaPopups', $.extend( {}, currentLinkLogData, {
|
|
action: 'disabled'
|
|
} ) );
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Show the settings element and position it correctly
|
|
*
|
|
* @method open
|
|
* @param {Object} logData data to log
|
|
*/
|
|
settings.open = function ( logData ) {
|
|
var
|
|
h = $( window ).height(),
|
|
w = $( window ).width();
|
|
|
|
currentLinkLogData = logData;
|
|
|
|
$( 'body' ).append( $( '<div>' ).addClass( 'mwe-popups-overlay' ) );
|
|
|
|
if ( !settings.$element ) {
|
|
settings.render();
|
|
}
|
|
|
|
// FIXME: Should recalc on browser resize
|
|
settings.$element
|
|
.show()
|
|
.css( 'left', ( w - settings.$element.outerWidth( true ) ) / 2 )
|
|
.css( 'top', ( h - settings.$element.outerHeight( true ) ) / 2 );
|
|
|
|
return false;
|
|
};
|
|
|
|
/**
|
|
* Close the setting dialog and remove the overlay.
|
|
* If the close button is clicked on the help dialog
|
|
* save the setting and reload the page.
|
|
*
|
|
* @method close
|
|
*/
|
|
settings.close = function () {
|
|
if ( $( '#mwe-popups-settings-help' ).is( ':visible' ) ) {
|
|
settings.reloadPage();
|
|
} else {
|
|
$( '.mwe-popups-overlay' ).remove();
|
|
settings.$element.hide();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Adds a link to the footer to re-enable hovercards
|
|
*
|
|
* @method addFooterLink
|
|
*/
|
|
settings.addFooterLink = function () {
|
|
var $setting, $footer;
|
|
|
|
if ( mw.popups.enabled ) {
|
|
return false;
|
|
}
|
|
|
|
$setting = $( '<li>' ).append(
|
|
$( '<a>' )
|
|
.attr( 'href', '#' )
|
|
.text( mw.message( 'popups-settings-enable' ).text() )
|
|
.click( function ( e ) {
|
|
settings.open();
|
|
e.preventDefault();
|
|
} )
|
|
);
|
|
$footer = $( '#footer-places, #f-list' );
|
|
|
|
// From https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js
|
|
if ( $footer.length === 0 ) {
|
|
$footer = $( '#footer li' ).parent();
|
|
}
|
|
$footer.append( $setting );
|
|
};
|
|
|
|
/**
|
|
* Wrapper around window.location.reload. Exposed for testing purposes only.
|
|
*
|
|
* @private
|
|
* @ignore
|
|
*/
|
|
settings.reloadPage = function () {
|
|
location.reload();
|
|
};
|
|
|
|
$( function () {
|
|
if ( !mw.popups.enabled ) {
|
|
settings.addFooterLink();
|
|
}
|
|
} );
|
|
|
|
mw.popups.settings = settings;
|
|
|
|
} )( jQuery, mediaWiki );
|