wiki.techinc.nl/includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php
Timo Tijhof eddbcab08a UserCSSPrefsModule: Remove redundant inline text-decoration:none css rules
By default user option 'underline' is '2' which means no skin override.

Once a upon a time, none of the popular MediaWiki skins specified whether links should have
underlines, and most browsers default to having an underline on links (when not hovering).

As such, there was an exception added for languages where underlines cause text to be unreadable.

Nowadays however all modern skins explicitly specify the intended design for links.
Neither the default skin (Vector) nor other popular skins I checked have underlines by default.
As such, this rule is redundant.

If a skin comes along that does specify underlines by default, then these rules should be placed
in that skins' stylesheet. Not in the HTML of all pages.

Incidentally, this was the last code branch in ResourceLoaderUserCSSPrefsModule that is true by
default. Which means from now on this <style> tag is automatically omitted from the HTML for
logged-out users and users that haven't changed the 'underline' or 'editfont' preference.

Implement the missing isKnownEmpty() method so that OutputPage does the automatic omission.

To test the new text-decoration rule in mediawiki.skinning:
* Change user preference language to "ar" and observe anchor links in the interface
  not having underlines on-hover.
* Change $wgLanguageCode to "ar" and observe anchor links in the content not having
  underlines on-hover.

History:
* 2011 (043f98a3; r101445) Move overrides from shared.css to ResourceLoaderUserOptionsModule
                           Also remove "!important" from underline css
* 2011 (33293c9b; r96261) Apply "!important" to underline user option css
* 2011 (81446abc; r91432; T31712) Move overrides from MessageXX.php to skins/common/shared.css
* 2006 (43b2fb56; r15823) Move overrides from LanguageXX.php to MessageX.php
* 2004 (f9f3e915) Add override to LanguageAr.php

Bug: T105313
Change-Id: I94dda30fb80b30e9c12a74a8b09065da55681929
2015-12-22 15:00:40 -08:00

86 lines
2.4 KiB
PHP

<?php
/**
* ResourceLoader module for user preference customizations.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @file
* @author Trevor Parscal
* @author Roan Kattouw
*/
/**
* Module for user preference customizations
*/
class ResourceLoaderUserCSSPrefsModule extends ResourceLoaderModule {
protected $origin = self::ORIGIN_CORE_INDIVIDUAL;
/**
* @return bool
*/
public function enableModuleContentVersion() {
return true;
}
/**
* @param ResourceLoaderContext $context
* @return array
*/
public function getStyles( ResourceLoaderContext $context ) {
if ( !$this->getConfig()->get( 'AllowUserCssPrefs' ) ) {
return array();
}
$options = $context->getUserObj()->getOptions();
// Build CSS rules
$rules = array();
// Underline: 2 = skin default, 1 = always, 0 = never
if ( $options['underline'] < 2 ) {
$rules[] = "a { text-decoration: " .
( $options['underline'] ? 'underline' : 'none' ) . "; }";
}
if ( $options['editfont'] !== 'default' ) {
// Double-check that $options['editfont'] consists of safe characters only
if ( preg_match( '/^[a-zA-Z0-9_, -]+$/', $options['editfont'] ) ) {
$rules[] = "textarea { font-family: {$options['editfont']}; }\n";
}
}
$style = implode( "\n", $rules );
if ( $this->getFlip( $context ) ) {
$style = CSSJanus::transform( $style, true, false );
}
return array( 'all' => $style );
}
/**
* @param ResourceLoaderContext $context
* @return bool
*/
public function isKnownEmpty( ResourceLoaderContext $context ) {
$styles = $this->getStyles( $context );
return isset( $styles['all'] ) && $styles['all'] === '';
}
/**
* @return string
*/
public function getGroup() {
return 'private';
}
}