MediaWiki:Vector.css: различия между версиями

Материал из Энциклопедия ТвГУ
Перейти к навигацииПерейти к поиску
 
 
(не показано 7 промежуточных версий этого же участника)
Строка 1: Строка 1:
 
/* Размещённый здесь CSS будет применяться к векторной теме оформления  */
 
/* Размещённый здесь CSS будет применяться к векторной теме оформления  */
/* Default styling for HTML elements */
+
<?php
dfn {
+
/**
    font-style: inherit; /* Reset default styling for <dfn> */
+
* VectorX - Derivative of Vector skin
}
+
  *
q {
+
* $wgVectorHiddenAnonPortals = array( 'TOOLBOX', 'navigation' );
    quotes: '"' '"' "'" "'"/* Straight quote marks for <q> */
+
* $wgVectorHiddenUserPortals = array( 'anonnavigation' );
}
+
* $wgVectorHiddenAnonNavigation = array( 'VIEWS', 'ACTIONS', 'NAMESPACES', 'VARIANTS' );
blockquote {
+
  * $wgVectorHiddenUserNavigation = array();
overflow: hidden; /* Avoid collision of background with floating elements */
+
*
}
+
* @todo document
strong.selflink {
+
  * @file
    font-weight: 700; /* Prevent the 'double bold' bug in Firefox when using DirectWrite */
+
  * @ingroup Skins
}
+
  */
   
 
/* Main page fixes */
 
#interwiki-completelist {
 
    font-weight: bold;
 
}
 
body.page-Main_Page #ca-delete {
 
    display: none !important;
 
}
 
body.page-Main_Page #mp-topbanner {
 
    clear: both;
 
}
 
 
   
 
   
/* Edit window toolbar */
+
if( !defined( 'MEDIAWIKI' ) ) {
#toolbar {
+
die( -1 );
    height: 22px;
 
    margin-bottom: 6px;
 
 
}
 
}
 
   
 
   
/* WikiEditor CSS for #wpTextbox1 is not loaded on .css/.js pages, so load here. [[phab:T97299]] */
+
require_once( "Vector.php" );
.wikiEditor-ui-text #wpTextbox1 {
 
    line-height: 1.5em;
 
    resize: vertical;
 
}
 
 
   
 
   
/* Hide charinsert base for those not using the gadget */
+
/**
#editpage-specialchars {
+
  * SkinTemplate class for VectorX skin
    display: none;
+
  * @ingroup Skins
}
+
*/
   
+
class SkinVectorX extends SkinVector {
/* Highlight data points in the info action if specified in the URL */
 
body.action-info :target {
 
    background: #DEF;
 
}
 
   
 
/* Make the list of references smaller */
 
ol.references,
 
div.reflist,
 
div.refbegin {
 
    font-size: 90%;            /* Default font-size */
 
    margin-bottom: 0.5em;
 
}
 
div.refbegin-100 {
 
    font-size: 100%;          /* Option for normal fontsize in {{refbegin}} */
 
}
 
div.reflist ol.references {
 
    font-size: 100%;          /* Reset font-size when nested in div.reflist */
 
    list-style-type: inherit;  /* Enable custom list style types */
 
}
 
 
   
 
   
/* Highlight clicked reference in blue to help navigation */
+
var $skinname = 'vectorx', $stylename = 'vectorx',
span.citation:target {
+
$template = 'VectorXTemplate', $useHeadElement = true;
    background-color: #DEF;
 
}
 
 
   
 
   
/* Ensure refs in table headers and the like aren't bold or italic */
+
/**
sup.reference {
+
* Initializes output page and sets up skin-specific parameters
    font-weight: normal;
+
* @param $out OutputPage object to initialize
    font-style: normal;
+
*/
}
+
public function initPage( OutputPage $out ) {
 +
global $wgLocalStylePath, $wgRequest;
 
   
 
   
/* Allow hidden ref errors to be shown by user CSS */
+
parent::initPage( $out );
span.brokenref {
 
    display: none;
 
}
 
 
   
 
   
/* Styling for citations (CSS3). Breaks long urls, etc., rather than overflowing box */
+
// Append CSS which includes IE only behavior fixes for hover support -
.citation {
+
// this is better than including this in a CSS fille since it doesn't
    word-wrap: break-word;
+
// wait for the CSS file to load before fetching the HTC file.
}
+
$min = $wgRequest->getFuzzyBool( 'debug' ) ? '' : '.min';
 +
$out->addHeadItem( 'csshover',
 +
'<!--[if lt IE 7]><style type="text/css">body{behavior:url("' .
 +
htmlspecialchars( $wgLocalStylePath ) .
 +
"/{$this->stylename}/csshover{$min}.htc\")}</style><![endif]-->"
 +
);
 
   
 
   
/* For linked citation numbers and document IDs, where
+
$out->addModuleScripts( 'skins.vectorx' );
  the number need not be shown on a screen or a handheld,
+
}
  but should be included in the printed version */
 
@media screen, handheld {
 
    .citation .printonly {
 
        display: none;
 
    }
 
}
 
 
   
 
   
/* Reset top margin for lists embedded in columns */
+
/**
div.columns {
+
* Load skin and user CSS files in the correct order
    margin-top: 0.3em;
+
* fixes bug 22916
}
+
* @param $out OutputPage object
div.columns dl,
+
*/
div.columns ol,
+
function setupSkinUserCss( OutputPage $out ){
div.columns ul {
+
parent::setupSkinUserCss( $out );
    margin-top: 0;
+
$out->addModuleStyles( 'skins.vectorx' );
 +
}
 
}
 
}
 
   
 
   
/* Avoid elements from breaking between columns */
+
/**
.nocolbreak,
+
  * Derivative of VectorTemplate class for VectorX skin
div.columns li,
+
  * @ingroup Skins
div.columns dd dd {
 
    -webkit-column-break-inside: avoid;
 
    page-break-inside: avoid;
 
    break-inside: avoid-column;
 
}
 
   
 
/* Style for [[Template:Flowlist]] that Lets lists flow around floating objecs */
 
.flowlist ul {
 
    overflow-x: hidden;
 
    margin-left: 0;
 
    padding-left: 1.6em;
 
}
 
.flowlist ol {
 
    overflow-x: hidden;
 
    margin-left: 0;
 
    padding-left: 3.2em;
 
}
 
.flowlist dl {
 
    overflow-x: hidden;
 
}
 
   
 
/* Style for horizontal lists (separator following item).
 
  IE8-specific classes are assigned in [[MediaWiki:Common.js/IEFixes.js]].
 
  @source mediawiki.org/wiki/Snippets/Horizontal_lists
 
  @revision 6 (2014-05-09)
 
  @author [[User:Edokter]]
 
 
  */
 
  */
.hlist dl,
+
class VectorXTemplate extends VectorTemplate {
.hlist ol,
 
.hlist ul {
 
    margin: 0;
 
    padding: 0;
 
}
 
/* Display list items inline */
 
.hlist dd,
 
.hlist dt,
 
.hlist li {
 
    margin: 0;
 
    display: inline;
 
}
 
/* Display nested lists inline */
 
.hlist.inline,
 
.hlist.inline dl,
 
.hlist.inline ol,
 
.hlist.inline ul,
 
.hlist dl dl, .hlist dl ol, .hlist dl ul,
 
.hlist ol dl, .hlist ol ol, .hlist ol ul,
 
.hlist ul dl, .hlist ul ol, .hlist ul ul {
 
    display: inline;
 
}
 
/* Generate interpuncts */
 
.hlist dt:after {
 
    content: ": ";
 
}
 
.hlist dd:after,
 
.hlist li:after {
 
    content: " · ";
 
    font-weight: bold;
 
}
 
.hlist dd:last-child:after,
 
.hlist dt:last-child:after,
 
.hlist li:last-child:after {
 
    content: none;
 
}
 
/* For IE8 */
 
.hlist dd.hlist-last-child:after,
 
.hlist dt.hlist-last-child:after,
 
.hlist li.hlist-last-child:after {
 
    content: none;
 
}
 
/* Add parentheses around nested lists */
 
.hlist dd dd:first-child:before, .hlist dd dt:first-child:before, .hlist dd li:first-child:before,
 
.hlist dt dd:first-child:before, .hlist dt dt:first-child:before, .hlist dt li:first-child:before,
 
.hlist li dd:first-child:before, .hlist li dt:first-child:before, .hlist li li:first-child:before {
 
    content: " (";
 
    font-weight: normal;
 
}
 
.hlist dd dd:last-child:after, .hlist dd dt:last-child:after, .hlist dd li:last-child:after,
 
.hlist dt dd:last-child:after, .hlist dt dt:last-child:after, .hlist dt li:last-child:after,
 
.hlist li dd:last-child:after, .hlist li dt:last-child:after, .hlist li li:last-child:after {
 
    content: ") ";
 
    font-weight: normal;
 
}
 
/* For IE8 */
 
.hlist dd dd.hlist-last-child:after, .hlist dd dt.hlist-last-child:after, .hlist dd li.hlist-last-child:after,
 
.hlist dt dd.hlist-last-child:after, .hlist dt dt.hlist-last-child:after, .hlist dt li.hlist-last-child:after,
 
.hlist li dd.hlist-last-child:after, .hlist li dt.hlist-last-child:after, .hlist li li.hlist-last-child:after {
 
    content: ") ";
 
    font-weight: normal;
 
}
 
/* Put ordinals in front of ordered list items */
 
.hlist ol {
 
    counter-reset: listitem;
 
}
 
.hlist ol > li {
 
    counter-increment: listitem;
 
}
 
.hlist ol > li:before {
 
    content: " " counter(listitem) " ";
 
    white-space: nowrap;
 
}
 
.hlist dd ol > li:first-child:before,
 
.hlist dt ol > li:first-child:before,
 
.hlist li ol > li:first-child:before {
 
    content: " (" counter(listitem) " ";
 
}
 
 
/* Unbulleted lists */
 
.plainlist ol,
 
.plainlist ul {
 
    line-height: inherit;
 
    list-style: none none;
 
    margin: 0;
 
}
 
.plainlist ol li,
 
.plainlist ul li {
 
    margin-bottom: 0;
 
}
 
 
/* Default style for navigation boxes */
 
.navbox {                    /* Navbox container style */
 
    border: 1px solid #aaa;
 
    width: 100%;
 
    margin: auto;
 
    clear: both;
 
    font-size: 88%;
 
    text-align: center;
 
    padding: 1px;
 
}
 
.navbox-inner,
 
.navbox-subgroup {
 
    width: 100%;
 
}
 
.navbox-group,
 
.navbox-title,
 
.navbox-abovebelow {
 
    padding: 0.25em 1em;      /* Title, group and above/below styles */
 
    line-height: 1.5em;
 
    text-align: center;
 
}
 
th.navbox-group {            /* Group style */
 
    white-space: nowrap;
 
    /* @noflip */
 
    text-align: right;
 
}
 
.navbox,
 
.navbox-subgroup {
 
    background: #fdfdfd;      /* Background color */
 
}
 
.navbox-list {
 
    line-height: 1.8em;
 
    border-color: #fdfdfd;    /* Must match background color */
 
}
 
.navbox th,
 
.navbox-title {
 
    background: #ccccff;      /* Level 1 color */
 
}
 
.navbox-abovebelow,
 
th.navbox-group,
 
.navbox-subgroup .navbox-title {
 
    background: #ddddff;      /* Level 2 color */
 
}
 
.navbox-subgroup .navbox-group,
 
.navbox-subgroup .navbox-abovebelow {
 
    background: #e6e6ff;      /* Level 3 color */
 
}
 
.navbox-even {
 
    background: #f7f7f7;      /* Even row striping */
 
}
 
.navbox-odd {
 
    background: transparent;  /* Odd row striping */
 
}
 
table.navbox + table.navbox {  /* Single pixel border between adjacent navboxes */
 
    margin-top: -1px;          /* (doesn't work for IE6, but that's okay)      */
 
}
 
.navbox .hlist td dl,
 
.navbox .hlist td ol,
 
.navbox .hlist td ul,
 
.navbox td.hlist dl,
 
.navbox td.hlist ol,
 
.navbox td.hlist ul {
 
    padding: 0.125em 0;      /* Adjust hlist padding in navboxes */
 
}
 
ol + table.navbox,
 
ul + table.navbox {
 
    margin-top: 1em;        /* Prevent lists from clinging to navboxes */
 
}
 
 
/* Default styling for Navbar template */
 
.navbar {
 
    display: inline;
 
    font-size: 88%;
 
    font-weight: normal;
 
}
 
.navbar ul {
 
    display: inline;
 
    white-space: nowrap;
 
}
 
.mw-body-content .navbar ul {
 
    line-height: inherit;
 
}
 
.navbar li {
 
    word-spacing: -0.125em;
 
}
 
.navbar.mini li span {
 
  font-variant: small-caps;
 
}
 
/* Navbar styling when nested in infobox and navbox */
 
.infobox .navbar {
 
    font-size: 100%;
 
}
 
.navbox .navbar {
 
    display: block;
 
    font-size: 100%;
 
}
 
.navbox-title .navbar {
 
    /* @noflip */
 
    float: left;
 
    /* @noflip */
 
    text-align: left;
 
    /* @noflip */
 
    margin-right: 0.5em;
 
    width: 6em;
 
}
 
 
/* 'show'/'hide' buttons created dynamically by the CollapsibleTables javascript
 
  in [[MediaWiki:Common.js]] are styled here so they can be customised. */
 
.collapseButton {
 
    /* @noflip */
 
    float: right;
 
    font-weight: normal;
 
    /* @noflip */
 
    margin-left: 0.5em;
 
    /* @noflip */
 
    text-align: right;
 
    width: auto;
 
}
 
/* In navboxes, the show/hide button balances the v·d·e links
 
  from [[Template:Navbar]], so they need to be the same width. */
 
.navbox .collapseButton {
 
    width: 6em;
 
}
 
 
/* Styling for JQuery makeCollapsible, matching that of collapseButton */
 
.mw-collapsible-toggle {
 
    font-weight: normal;
 
    /* @noflip */
 
    text-align: right;
 
}
 
.navbox .mw-collapsible-toggle {
 
    width: 6em;
 
}
 
 
   
 
   
/* Infobox template style */
+
/* Functions */
.infobox {
 
    border: 1px solid #aaa;
 
    border-spacing: 3px;
 
    background-color: #f9f9f9;
 
    color: black;
 
    /* @noflip */
 
    margin: 0.5em 0 0.5em 1em;
 
    padding: 0.2em;
 
    /* @noflip */
 
    float: right;
 
    /* @noflip */
 
    clear: right;
 
    /* @noflip */
 
    text-align: left;
 
    font-size: 88%;
 
    line-height: 1.5em;
 
}
 
.infobox caption {
 
    font-size: 125%;
 
    font-weight: bold;
 
    padding: 0.2em;
 
}
 
.infobox td,
 
.infobox th {
 
    vertical-align: top;
 
}
 
.infobox.bordered {
 
    border-collapse: collapse;
 
}
 
.infobox.bordered td,
 
.infobox.bordered th {
 
    border: 1px solid #aaa;
 
}
 
.infobox.bordered .borderless td,
 
.infobox.bordered .borderless th {
 
    border: 0;
 
}
 
 
   
 
   
.infobox.sisterproject {
+
  public function skipRendering( $name ) {
     width: 20em;
+
     global $wgVectorHiddenUserPortals, $wgVectorHiddenAnonPortals;
     font-size: 90%;
+
     if ( $this->data['loggedin'] ) { 
}
+
      if( is_array( $wgVectorHiddenUserPortals ) ){
 +
        if( in_array( $name, $wgVectorHiddenUserPortals ) ) {
 +
          return( true ); // skip if logged-in and in array
 +
        }
 +
      }
 +
    } else {
 +
      if( is_array( $wgVectorHiddenAnonPortals ) ){
 +
        if( in_array( $name, $wgVectorHiddenAnonPortals ) ) {
 +
          return( true ); // skip if not logged-in and in array
 +
        }
 +
      }
 +
    }
 +
    return( false );
 +
  }  
 
   
 
   
.infobox.standard-talk {
+
  public function skipNavigation( $name ) {
     border: 1px solid #c0c090;
+
     global $wgVectorHiddenUserNavigation, $wgVectorHiddenAnonNavigation;
     background-color: #f8eaba;
+
     if ( $this->data['loggedin'] ) { 
}
+
      if( is_array( $wgVectorHiddenUserNavigation ) ){
.infobox.standard-talk.bordered td,
+
        if( in_array( $name, $wgVectorHiddenUserNavigation ) ) {
.infobox.standard-talk.bordered th {
+
          return( true ); // skip if logged-in and in array
     border: 1px solid #c0c090;
+
        }
}
+
      }
 +
    } else {
 +
      if( is_array( $wgVectorHiddenAnonNavigation ) ){
 +
        if( in_array( $name, $wgVectorHiddenAnonNavigation ) ) {
 +
          return( true ); // skip if not logged-in and in array
 +
        }
 +
      }
 +
    }
 +
     return( false );
 +
  }  
 
   
 
   
/* styles for bordered infobox with merged rows */
+
  public function renderConditionalNavigation( $navarray ) {
.infobox.bordered .mergedtoprow td,
+
    foreach( $navarray as $navitem ) {
.infobox.bordered .mergedtoprow th {
+
      $hideitem = $this->skipNavigation( $navitem );
    border: 0;
+
      if( !$hideitem ) { 
    border-top: 1px solid #aaa;
+
        $this->renderNavigation( $navitem );
    /* @noflip */
+
      } 
     border-right: 1px solid #aaa;
+
    
}
+
  }  
 
   
 
   
.infobox.bordered .mergedrow td,
+
/**
.infobox.bordered .mergedrow th {
+
* Outputs the entire contents of the (X)HTML page
    border: 0;
+
*/
    /* @noflip */
+
public function execute() {
    border-right: 1px solid #aaa;
+
global $wgLang, $wgVectorUseIconWatch;
}
 
 
   
 
   
/* Styles for geography infoboxes, eg countries,
+
$this->skin = $this->data['skin'];
  country subdivisions, cities, etc.            */
 
.infobox.geography {
 
    border-collapse: collapse;
 
    line-height: 1.2em;
 
    font-size: 90%;
 
}
 
 
   
 
   
.infobox.geography  td,
+
// Build additional attributes for navigation urls
.infobox.geography  th {
+
//$nav = $this->skin->buildNavigationUrls();
    border-top: 1px solid #aaa;
+
$nav = $this->data['content_navigation'];
    padding: 0.4em 0.6em 0.4em 0.6em;
 
}
 
.infobox.geography .mergedtoprow td,
 
.infobox.geography .mergedtoprow th {
 
    border-top: 1px solid #aaa;
 
    padding: 0.4em 0.6em 0.2em 0.6em;
 
}
 
 
   
 
   
.infobox.geography .mergedrow td,
+
if ( $wgVectorUseIconWatch ) {
.infobox.geography .mergedrow th {
+
$mode = $this->skin->getTitle()->userIsWatching() ? 'unwatch' : 'watch';
    border: 0;
+
if ( isset( $nav['actions'][$mode] ) ) {
    padding: 0 0.6em 0.2em 0.6em;
+
$nav['views'][$mode] = $nav['actions'][$mode];
}
+
$nav['views'][$mode]['class'] = rtrim( 'icon ' . $nav['views'][$mode]['class'], ' ' );
 +
$nav['views'][$mode]['primary'] = true;
 +
unset( $nav['actions'][$mode] );
 +
}
 +
}
 
   
 
   
.infobox.geography .mergedbottomrow td,
+
$xmlID = '';
.infobox.geography .mergedbottomrow th {
+
    foreach ( $nav as $section => $links ) {
    border-top: 0;
+
      foreach ( $links as $key => $link ) {
    border-bottom: 1px solid #aaa;
+
        if ( $section == 'views' && !( isset( $link['primary'] ) && $link['primary'] ) ) {
    padding: 0 0.6em 0.4em 0.6em;
+
          $link['class'] = rtrim( 'collapsible ' . $link['class'], ' ' );
}
+
        }
 
   
 
   
.infobox.geography .maptable td,
+
        $xmlID = isset( $link['id'] ) ? $link['id'] : 'ca-' . $xmlID;
.infobox.geography .maptable th {
+
        $nav[$section][$key]['attributes'] =
    border: 0;
+
          ' id="' . Sanitizer::escapeId( $xmlID ) . '"';
    padding: 0;
+
        if ( $link['class'] ) {
}
+
          $nav[$section][$key]['attributes'] .=
 +
            ' class="' . htmlspecialchars( $link['class'] ) . '"';
 +
          unset( $nav[$section][$key]['class'] );
 +
        }
 +
        if ( isset( $link['tooltiponly'] ) && $link['tooltiponly'] ) {
 +
          $nav[$section][$key]['key'] =
 +
            Linker::tooltip( $xmlID );
 +
        } else {
 +
          $nav[$section][$key]['key'] =
 +
            Xml::expandAttributes( Linker::tooltipAndAccesskeyAttribs( $xmlID ) );
 +
        }
 +
      }
 +
    }
 +
    $this->data['namespace_urls'] = $nav['namespaces'];
 +
    $this->data['view_urls'] = $nav['views'];
 +
    $this->data['action_urls'] = $nav['actions'];
 +
    $this->data['variant_urls'] = $nav['variants'];
 
   
 
   
/* Normal font styling for table row headers with scope="row" tag */
+
  // Reverse horizontally rendered navigation elements
.wikitable.plainrowheaders th[scope=row] {
+
     if ( $wgLang->isRTL() ) {
     font-weight: normal;
+
      $this->data['view_urls'] =
    /* @noflip */
+
        array_reverse( $this->data['view_urls'] );
    text-align: left;
+
      $this->data['namespace_urls'] =
}
+
        array_reverse( $this->data['namespace_urls'] );
+
      $this->data['personal_urls'] =
/* Lists in data cells are always left-aligned */
+
        array_reverse( $this->data['personal_urls'] );
.wikitable td ul,
+
     }
.wikitable td ol,
 
.wikitable td dl {
 
    /* @noflip */
 
    text-align: left;
 
}
 
/* ...unless they also use the hlist class */
 
.toc.hlist ul,
 
#toc.hlist ul,
 
.wikitable.hlist td ul,
 
.wikitable.hlist td ol,
 
.wikitable.hlist td dl {
 
    text-align: inherit;
 
}
 
 
/* Icons for medialist templates [[Template:Listen]],
 
  [[Template:Multi-listen_start]], [[Template:Video]],
 
  [[Template:Multi-video_start]] */
 
div.listenlist {
 
    background: url("//upload.wikimedia.org/wikipedia/commons/4/47/Sound-icon.svg") no-repeat scroll 0 0 transparent;
 
    background-size: 30px;
 
     padding-left: 40px;
 
}
 
 
   
 
   
/* Fix for hieroglyphs specificality issue in infoboxes ([[Phabricator:43869]]) */
+
// Output HTML Page
table.mw-hiero-table td {
+
$this->html( 'headelement' );
    vertical-align: middle;
+
?>
}
+
<div id="mw-page-base" class="noprint"></div>
+
<div id="mw-head-base" class="noprint"></div>
/* Style rules for media list templates */
+
<!-- content -->
div.medialist {
+
<div id="content">
    min-height: 50px;
+
<a id="top"></a>
    margin: 1em;
+
<div id="mw-js-message" style="display:none;"<?php $this->html( 'userlangattributes' ) ?>></div>
    /* @noflip */
+
<?php if ( $this->data['sitenotice'] ): ?>
    background-position: top left;
+
<!-- sitenotice -->
    background-repeat: no-repeat;
+
<div id="siteNotice"><?php $this->html( 'sitenotice' ) ?></div>
}
+
<!-- /sitenotice -->
div.medialist ul {
+
<?php endif; ?>
    list-style-type: none;
+
<!-- firstHeading -->
    list-style-image: none;
+
<h1 id="firstHeading" class="firstHeading"><?php $this->html( 'title' ) ?></h1>
    margin: 0;
+
<!-- /firstHeading -->
}
+
<!-- bodyContent -->
div.medialist ul li {
+
<div id="bodyContent">
    padding-bottom: 0.5em;
+
<?php if ( $this->data['isarticle'] ): ?>
}
+
<!-- tagline -->
div.medialist ul li li {
+
<div id="siteSub"><?php $this->msg( 'tagline' ) ?></div>
    font-size: 91%;
+
<!-- /tagline -->
    padding-bottom: 0;
+
<?php endif; ?>
}
+
<!-- subtitle -->
 +
<div id="contentSub"<?php $this->html( 'userlangattributes' ) ?>><?php $this->html( 'subtitle' ) ?></div>
 +
<!-- /subtitle -->
 +
<?php if ( $this->data['undelete'] ): ?>
 +
<!-- undelete -->
 +
<div id="contentSub2"><?php $this->html( 'undelete' ) ?></div>
 +
<!-- /undelete -->
 +
<?php endif; ?>
 +
<?php if( $this->data['newtalk'] ): ?>
 +
<!-- newtalk -->
 +
<div class="usermessage"><?php $this->html( 'newtalk' )  ?></div>
 +
<!-- /newtalk -->
 +
<?php endif; ?>
 +
<?php if ( $this->data['showjumplinks'] ): ?>
 +
<!-- jumpto -->
 +
<div id="jump-to-nav">
 +
<?php $this->msg( 'jumpto' ) ?> <a href="#mw-head"><?php $this->msg( 'jumptonavigation' ) ?></a>,
 +
<a href="#p-search"><?php $this->msg( 'jumptosearch' ) ?></a>
 +
</div>
 +
<!-- /jumpto -->
 +
<?php endif; ?>
 +
<!-- bodycontent -->
 +
<?php $this->html( 'bodycontent' ) ?>
 +
<!-- /bodycontent -->
 
   
 
   
/* Change the external link icon to an Adobe icon for all PDF files
+
<?php
  in browsers that support these CSS selectors, like Mozilla and Opera */
+
        if ( !$this->skipRendering( 'printfooter' ) ):
div#content a[href$=".pdf"].external,
+
          if ( $this->data['printfooter'] ): ?>
div#content a[href*=".pdf?"].external,
+
<!-- printfooter -->
div#content a[href*=".pdf#"].external,
+
<div class="printfooter">
div#content a[href$=".PDF"].external,
+
<?php $this->html( 'printfooter' ); ?>
div#content a[href*=".PDF?"].external,
+
</div>
div#content a[href*=".PDF#"].external,
+
<!-- /printfooter -->
div#mw_content a[href$=".pdf"].external,
+
<?php endif; endif; ?>
div#mw_content a[href*=".pdf?"].external,
+
<?php if ( $this->data['catlinks'] ): ?>
div#mw_content a[href*=".pdf#"].external,
+
<!-- catlinks -->
div#mw_content a[href$=".PDF"].external,
+
<?php $this->html( 'catlinks' ); ?>
div#mw_content a[href*=".PDF?"].external,
+
<!-- /catlinks -->
div#mw_content a[href*=".PDF#"].external {
+
<?php endif; ?>
    background: url("//upload.wikimedia.org/wikipedia/commons/2/23/Icons-mini-file_acrobat.gif") no-repeat right;
+
<?php if ( $this->data['dataAfterContent'] ): ?>
    /* @noflip */
+
<!-- dataAfterContent -->
    padding-right: 18px;
+
<?php $this->html( 'dataAfterContent' ); ?>
}
+
<!-- /dataAfterContent -->
 +
<?php endif; ?>
 +
<div class="visualClear"></div>
 +
<!-- debughtml -->
 +
<?php $this->html( 'debughtml' ); ?>
 +
<!-- /debughtml -->
 +
</div>
 +
<!-- /bodyContent -->
 +
</div>
 +
<!-- /content -->
 
   
 
   
/* Change the external link icon to an Adobe icon anywhere the PDFlink class
+
<!-- header -->
  is used (notably Template:PDFlink). This works in IE, unlike the above. */
+
    <div id="mw-head" class="noprint">
div#content span.PDFlink a,
+
      <?php $this->renderConditionalNavigation( array( 'PERSONAL' ) ); ?> 
div#mw_content span.PDFlink a {
+
      <div id="left-navigation">
    background: url("//upload.wikimedia.org/wikipedia/commons/2/23/Icons-mini-file_acrobat.gif") no-repeat right;
+
        <?php $this->renderConditionalNavigation( array( 'NAMESPACES', 'VARIANTS' ) ); ?>
     /* @noflip */
+
      </div>
    padding-right: 18px;
+
      <div id="right-navigation">
}
+
        <?php $this->renderConditionalNavigation( array( 'VIEWS', 'ACTIONS', 'SEARCH' ) ); ?>
 +
      </div>
 +
     </div>
 +
  <!-- /header -->
 
   
 
   
/* Content in columns with CSS instead of tables ([[Template:Columns]]) */
+
<!-- panel -->
div.columns-2 div.column {
+
<div id="mw-panel" class="noprint">
    /* @noflip */
+
<!-- logo -->
    float: left;
+
<div id="p-logo"><a style="background-image: url(<?php $this->text( 'logopath' ) ?>);" href="<?php echo htmlspecialchars( $this->data['nav_urls']['mainpage']['href'] ) ?>" <?php echo Xml::expandAttributes( Linker::tooltipAndAccesskeyAttribs( 'p-logo' ) ) ?>></a></div>
    width: 50%;
+
<!-- /logo -->
    min-width: 300px;
+
<?php $this->renderPortals( $this->data['sidebar'] ); ?>
}
+
</div>
div.columns-3 div.column {
+
<!-- /panel -->
    /* @noflip */
+
<!-- footer -->
    float: left;
+
<div id="footer"<?php $this->html( 'userlangattributes' ) ?>>
    width: 33.3%;
+
<?php foreach( $this->getFooterLinks() as $category => $links ): ?>
    min-width: 200px;
+
<ul id="footer-<?php echo $category ?>">
}
+
<?php foreach( $links as $link ): ?>
div.columns-4 div.column {
+
<li id="footer-<?php echo $category ?>-<?php echo $link ?>"><?php $this->html( $link ) ?></li>
    /* @noflip */
+
<?php endforeach; ?>
    float: left;
+
</ul>
    width: 25%;
+
<?php endforeach; ?>
    min-width: 150px;
+
<?php $footericons = $this->getFooterIcons("icononly");
}
+
if ( count( $footericons ) > 0 ): ?>
div.columns-5 div.column {
+
<ul id="footer-icons" class="noprint">
    /* @noflip */
+
<?php foreach ( $footericons as $blockName => $footerIcons ): ?>
    float: left;
+
<li id="footer-<?php echo htmlspecialchars( $blockName ); ?>ico">
    width: 20%;
+
<?php foreach ( $footerIcons as $icon ): ?>
    min-width: 120px;
+
<?php echo $this->skin->makeFooterIcon( $icon ); ?>
}
+
<?php endforeach; ?>
 +
</li>
 +
<?php endforeach; ?>
 +
</ul>
 +
<?php endif; ?>
 +
<div style="clear:both"></div>
 +
</div>
 +
<!-- /footer -->
 +
<!-- fixalpha -->
 +
<script type="<?php $this->text( 'jsmimetype' ) ?>"> if ( window.isMSIE55 ) fixalpha(); </script>
 +
<!-- /fixalpha -->
 +
<?php $this->printTrail(); ?>
 
   
 
   
/* Messagebox templates */
+
</body>
.messagebox {
+
</html>
    border: 1px solid #aaa;
+
<?php
    background-color: #f9f9f9;
+
}
    width: 80%;
 
    margin: 0 auto 1em auto;
 
    padding: .2em;
 
}
 
.messagebox.merge {
 
    border: 1px solid #c0b8cc;
 
    background-color: #f0e5ff;
 
    text-align: center;
 
}
 
.messagebox.cleanup {
 
    border: 1px solid #9f9fff;
 
    background-color: #efefff;
 
    text-align: center;
 
}
 
.messagebox.standard-talk {
 
    border: 1px solid #c0c090;
 
    background-color: #f8eaba;
 
    margin: 4px auto;
 
}
 
/* For old WikiProject banners inside banner shells. */
 
.mbox-inside .standard-talk,
 
.messagebox.nested-talk {
 
    border: 1px solid #c0c090;
 
    background-color: #f8eaba;
 
    width: 100%;
 
    margin: 2px 0;
 
    padding: 2px;
 
}
 
.messagebox.small {
 
    width: 238px;
 
    font-size: 85%;
 
    /* @noflip */
 
    float: right;
 
    clear: both;
 
    /* @noflip */
 
    margin: 0 0 1em 1em;
 
    line-height: 1.25em;
 
}
 
.messagebox.small-talk {
 
    width: 238px;
 
    font-size: 85%;
 
    /* @noflip */
 
    float: right;
 
    clear: both;
 
    /* @noflip */
 
    margin: 0 0 1em 1em;
 
    line-height: 1.25em;
 
    background: #F8EABA;
 
}
 
 
   
 
   
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
+
/**
th.mbox-text, td.mbox-text {  /* The message body cell(s) */
+
* Render a series of portals
    border: none;
+
*
    /* @noflip */
+
* @param $portals array
    padding: 0.25em 0.9em;    /* 0.9em left/right */
+
*/
    width: 100%;              /* Make all mboxes the same width regardless of text length */
+
private function renderPortals( $portals ) {
}
+
     global $wgVectorHiddenAnonPortals, $wgVectorHiddenUserPortals;
td.mbox-image {               /* The left image cell */
+
// Force the rendering of the following portals
     border: none;
+
if ( !isset( $portals['SEARCH'] ) ) {
    /* @noflip */
+
$portals['SEARCH'] = true;
    padding: 2px 0 2px 0.9em;  /* 0.9em left, 0px right */
+
}
    text-align: center;
+
if ( !isset( $portals['TOOLBOX'] ) ) {
}
+
$portals['TOOLBOX'] = true;
td.mbox-imageright {           /* The right image cell */
+
}
    border: none;
+
if ( !isset( $portals['LANGUAGES'] ) ) {
    /* @noflip */
+
$portals['LANGUAGES'] = true;
    padding: 2px 0.9em 2px 0;  /* 0px left, 0.9em right */
+
}
    text-align: center;
+
// Render portals
}
+
foreach ( $portals as $name => $content ) {
td.mbox-empty-cell {          /* An empty narrow cell */
+
if ( $content === false  ||  $this->skipRendering( $name ) )
    border: none;
+
continue;
    padding: 0;
 
    width: 1px;
 
}
 
 
   
 
   
/* Article message box styles */
+
      echo "\n<!-- {$name} -->\n";
table.ambox {
+
switch( $name ) {
    margin: 0 10%;                  /* 10% = Will not overlap with other elements */
+
case 'SEARCH':
    border: 1px solid #aaa;
+
break;
    /* @noflip */
+
case 'TOOLBOX':
    border-left: 10px solid #1e90ff;  /* Default "notice" blue */
+
$this->renderPortal( 'tb', $this->getToolbox(), 'toolbox', 'SkinTemplateToolboxEnd' );
    background: #fbfbfb;
+
break;
}
+
case 'LANGUAGES':
table.ambox + table.ambox {     /* Single border between stacked boxes. */
+
if ( $this->data['language_urls'] ) {
    margin-top: -1px;
+
$this->renderPortal( 'lang', $this->data['language_urls'], 'otherlanguages' );
}
+
}
.ambox th.mbox-text,
+
break;
.ambox td.mbox-text {            /* The message body cell(s) */
 
    padding: 0.25em 0.5em;       /* 0.5em left/right */
 
}
 
.ambox td.mbox-image {           /* The left image cell */
 
    /* @noflip */
 
    padding: 2px 0 2px 0.5em;   /* 0.5em left, 0px right */
 
}
 
.ambox td.mbox-imageright {      /* The right image cell */
 
    /* @noflip */
 
    padding: 2px 0.5em 2px 0;   /* 0px left, 0.5em right */
 
}
 
 
   
 
   
table.ambox-notice {
+
default:
    /* @noflip */
+
$this->renderPortal( $name, $content );
    border-left: 10px solid #1e90ff;    /* Blue */
+
break;
}
+
}
table.ambox-speedy {
+
echo "\n<!-- /{$name} -->\n";
    /* @noflip */
+
}
    border-left: 10px solid #b22222;    /* Red */
+
}
    background: #fee;                   /* Pink */
 
}
 
table.ambox-delete {
 
    /* @noflip */
 
    border-left: 10px solid #b22222;   /* Red */
 
}
 
table.ambox-content {
 
    /* @noflip */
 
    border-left: 10px solid #f28500;    /* Orange */
 
}
 
table.ambox-style {
 
    /* @noflip */
 
    border-left: 10px solid #f4c430;    /* Yellow */
 
}
 
table.ambox-move {
 
    /* @noflip */
 
    border-left: 10px solid #9932cc;   /* Purple */
 
}
 
table.ambox-protection {
 
    /* @noflip */
 
    border-left: 10px solid #bba;      /* Gray-gold */
 
}
 
 
   
 
   
/* Image message box styles */
+
// If renderPortal in Vector was public we could have avoided it here...
table.imbox {
+
private function renderPortal( $name, $content, $msg = null, $hook = null ) {
    margin: 4px 10%;
+
if ( !isset( $msg ) ) {
    border-collapse: collapse;
+
$msg = $name;
    border: 3px solid #1e90ff;   /* Default "notice" blue */
+
}
    background: #fbfbfb;
+
?>
}
+
<div class="portal" id='<?php echo Sanitizer::escapeId( "p-$name" ) ?>'<?php echo Linker::tooltip( 'p-' . $name ) ?>>
.imbox .mbox-text .imbox { /* For imboxes inside imbox-text cells. */
+
<h5<?php $this->html( 'userlangattributes' ) ?>><?php $msgObj = wfMessage( $msg ); echo htmlspecialchars( $msgObj->exists() ? $msgObj->text() : $msg ); ?></h5>
    margin: 0 -0.5em;       /* 0.9 - 0.5 = 0.4em left/right.        */
+
<div class="body">
    display: block;         /* Fix for webkit to force 100% width.  */
+
<?php
}
+
if ( is_array( $content ) ): ?>
.mbox-inside .imbox {      /* For imboxes inside other templates.  */
+
<ul>
    margin: 4px;
+
<?php
}
+
foreach( $content as $key => $val ):  
 +
        echo $this->makeListItem( $key, $val );  
 +
endforeach;
 +
if ( isset( $hook ) ) {
 +
wfRunHooks( $hook, array( &$this, true ) );
 +
}
 +
?>
 +
</ul>
 +
<?php
 +
else:  
 +
      echo $content; /* Allow raw HTML block to be defined by extensions */
 +
endif; ?>
 +
</div>
 +
</div>
 +
<?php
 +
}
 
   
 
   
table.imbox-notice {
+
/**
    border: 3px solid #1e90ff;    /* Blue */
+
* Render one or more navigations elements by name, automatically reveresed
}
+
* when UI is in RTL mode
table.imbox-speedy {
+
*/
    border: 3px solid #b22222;    /* Red */
+
private function renderNavigation( $elements ) {
    background: #fee;            /* Pink */
+
// If renderNavigation in Vector was public we could have avoided renderNavigation here...  
}
+
global $wgVectorUseSimpleSearch, $wgVectorShowVariantName, $wgUser, $wgLang;
table.imbox-delete {
 
    border: 3px solid #b22222;    /* Red */
 
}
 
table.imbox-content {
 
    border: 3px solid #f28500;    /* Orange */
 
}
 
table.imbox-style {
 
    border: 3px solid #f4c430;    /* Yellow */
 
}
 
table.imbox-move {
 
    border: 3px solid #9932cc;    /* Purple */
 
}
 
table.imbox-protection {
 
    border: 3px solid #bba;      /* Gray-gold */
 
}
 
table.imbox-license {
 
    border: 3px solid #88a;      /* Dark gray */
 
    background: #f7f8ff;          /* Light gray */
 
}
 
table.imbox-featured {
 
    border: 3px solid #cba135;   /* Brown-gold */
 
}
 
 
   
 
   
/* Category message box styles */
+
// If only one element was given, wrap it in an array, allowing more
table.cmbox {
+
// flexible arguments
    margin: 3px 10%;
+
if ( !is_array( $elements ) ) {
    border-collapse: collapse;
+
$elements = array( $elements );
    border: 1px solid #aaa;
+
// If there's a series of elements, reverse them when in RTL mode
    background: #DFE8FF;   /* Default "notice" blue */
+
} elseif ( $wgLang->isRTL() ) {
}
+
$elements = array_reverse( $elements );
 +
}
 +
// Render elements
 +
foreach ( $elements as $name => $element ) {
 +
echo "\n<!-- {$name} -->\n";
 +
switch ( $element ) {
 +
case 'NAMESPACES':
 +
?>
 +
<div id="p-namespaces" class="vectorTabs<?php if ( count( $this->data['namespace_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
 +
<h5><?php $this->msg( 'namespaces' ) ?></h5>
 +
<ul<?php $this->html( 'userlangattributes' ) ?>>
 +
<?php foreach ( $this->data['namespace_urls'] as $link ): ?>
 +
<li <?php echo $link['attributes'] ?>><span><a href="<?php echo htmlspecialchars( $link['href'] ) ?>" <?php echo $link['key'] ?>><?php echo htmlspecialchars( $link['text'] ) ?></a></span></li>
 +
<?php endforeach; ?>
 +
</ul>
 +
</div>
 +
<?php
 +
break;
 +
case 'VARIANTS':
 +
?>
 +
<div id="p-variants" class="vectorMenu<?php if ( count( $this->data['variant_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
 +
<?php if ( $wgVectorShowVariantName ): ?>
 +
<h4>
 +
<?php foreach ( $this->data['variant_urls'] as $link ): ?>
 +
<?php if ( stripos( $link['attributes'], 'selected' ) !== false ): ?>
 +
<?php echo htmlspecialchars( $link['text'] ) ?>
 +
<?php endif; ?>
 +
<?php endforeach; ?>
 +
</h4>
 +
<?php endif; ?>
 +
<h5><span><?php $this->msg( 'variants' ) ?></span><a href="#"></a></h5>
 +
<div class="menu">
 +
<ul<?php $this->html( 'userlangattributes' ) ?>>
 +
<?php foreach ( $this->data['variant_urls'] as $link ): ?>
 +
<li<?php echo $link['attributes'] ?>><a href="<?php echo htmlspecialchars( $link['href'] ) ?>" <?php echo $link['key'] ?>><?php echo htmlspecialchars( $link['text'] ) ?></a></li>
 +
<?php endforeach; ?>
 +
</ul>
 +
</div>
 +
</div>
 +
<?php
 +
break;
 +
case 'VIEWS':
 +
?>
 +
<div id="p-views" class="vectorTabs<?php if ( count( $this->data['view_urls'] ) == 0 ) { echo ' emptyPortlet'; } ?>">
 +
<h5><?php $this->msg('views') ?></h5>
 +
<ul<?php $this->html('userlangattributes') ?>>
 +
<?php foreach ( $this->data['view_urls'] as $link ): ?>
 +
<li<?php echo $link['attributes'] ?>><span><a href="<?php echo htmlspecialchars( $link['href'] ) ?>" <?php echo $link['key'] ?>><?php
 +
// $link['text'] can be undefined - bug 27764
 +
if ( array_key_exists( 'text', $link ) ) {
 +
echo array_key_exists( 'img', $link ) ?  '<img src="' . $link['img'] . '" alt="' . $link['text'] . '" />' : htmlspecialchars( $link['text'] );
 +
}
 +
?></a></span></li>
 +
<?php endforeach; ?>
 +
</ul>
 +
</div>
 +
<?php
 +
break;
 +
case 'ACTIONS':
 +
?>
 +
<div id="p-cactions" class="vectorMenu<?php if ( count( $this->data['action_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
 +
<h5><span><?php $this->msg( 'actions' ) ?></span><a href="#"></a></h5>
 +
<div class="menu">
 +
<ul<?php $this->html( 'userlangattributes' ) ?>>
 +
<?php foreach ( $this->data['action_urls'] as $link ): ?>
 +
<li<?php echo $link['attributes'] ?>><a href="<?php echo htmlspecialchars( $link['href'] ) ?>" <?php echo $link['key'] ?>><?php echo htmlspecialchars( $link['text'] ) ?></a></li>
 +
<?php endforeach; ?>
 +
</ul>
 +
</div>
 +
</div>
 +
<?php
 +
break;
 +
case 'PERSONAL':
 +
?>
 +
<div id="p-personal" class="<?php if ( count( $this->data['personal_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
 +
<h5><?php $this->msg( 'personaltools' ) ?></h5>
 +
<ul<?php $this->html( 'userlangattributes' ) ?>>
 +
<?php foreach( $this->getPersonalTools() as $key => $item ) { ?>
 +
<?php echo $this->makeListItem( $key, $item ); ?>
 
   
 
   
table.cmbox-notice {
+
<?php } ?>
    background: #D8E8FF;    /* Blue */
+
</ul>
}
+
</div>
table.cmbox-speedy {
+
<?php
    margin-top: 4px;
+
break;
    margin-bottom: 4px;
+
case 'SEARCH':
    border: 4px solid #b22222;    /* Red */
+
?>
    background: #FFDBDB;          /* Pink */
+
<div id="p-search">
}
+
<h5<?php $this->html( 'userlangattributes' ) ?>><label for="searchInput"><?php $this->msg( 'search' ) ?></label></h5>
table.cmbox-delete {
+
<form action="<?php $this->text( 'wgScript' ) ?>" id="searchform">
    background: #FFDBDB;   /* Red */
+
<input type='hidden' name="title" value="<?php $this->text( 'searchtitle' ) ?>"/>
}
+
<?php if ( $wgVectorUseSimpleSearch && $wgUser->getOption( 'vector-simplesearch' ) ): ?>
table.cmbox-content {
+
<div id="simpleSearch">
    background: #FFE7CE;    /* Orange */
+
<?php if ( $this->data['rtl'] ): ?>
}
+
<?php echo $this->makeSearchButton( 'image', array( 'id' => 'searchButton', 'src' => $this->skin->getSkinStylePath( 'images/search-rtl.png' ) ) ); ?>
table.cmbox-style {
+
<?php endif; ?>
    background: #FFF9DB;    /* Yellow */
+
<?php echo $this->makeSearchInput( array( 'id' => 'searchInput', 'type' => 'text' ) ); ?>
}
+
<?php if ( !$this->data['rtl'] ): ?>
table.cmbox-move {
+
<?php echo $this->makeSearchButton( 'image', array( 'id' => 'searchButton', 'src' => $this->skin->getSkinStylePath( 'images/search-ltr.png' ) ) ); ?>
    background: #E4D8FF;    /* Purple */
+
<?php endif; ?>
}
+
</div>
table.cmbox-protection {
+
<?php else: ?>
    background: #EFEFE1;    /* Gray-gold */
+
<?php echo $this->makeSearchInput( array( 'id' => 'searchInput' ) ); ?>
}
+
<?php echo $this->makeSearchButton( 'go', array( 'id' => 'searchGoButton', 'class' => 'searchButton' ) ); ?>
+
<?php echo $this->makeSearchButton( 'fulltext', array( 'id' => 'mw-searchButton', 'class' => 'searchButton' ) ); ?>
/* Other pages message box styles */
+
<?php endif; ?>
table.ombox {
+
</form>
    margin: 4px 10%;
+
</div>
    border-collapse: collapse;
+
<?php
    border: 1px solid #aaa;      /* Default "notice" gray */
 
    background: #f9f9f9;
 
}
 
 
table.ombox-notice {
 
    border: 1px solid #aaa;      /* Gray */
 
}
 
table.ombox-speedy {
 
    border: 2px solid #b22222;    /* Red */
 
    background: #fee;            /* Pink */
 
}
 
table.ombox-delete {
 
    border: 2px solid #b22222;    /* Red */
 
}
 
table.ombox-content {
 
    border: 1px solid #f28500;    /* Orange */
 
}
 
table.ombox-style {
 
    border: 1px solid #f4c430;    /* Yellow */
 
}
 
table.ombox-move {
 
    border: 1px solid #9932cc;    /* Purple */
 
}
 
table.ombox-protection {
 
    border: 2px solid #bba;      /* Gray-gold */
 
}
 
 
/* Talk page message box styles */
 
table.tmbox {
 
    margin: 4px 10%;
 
    border-collapse: collapse;
 
    border: 1px solid #c0c090;    /* Default "notice" gray-brown */
 
    background: #f8eaba;
 
}
 
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The "mediawiki" class ensures that */
 
    margin: 2px 0;              /* this declaration overrides other styles (including mbox-small above)   */
 
    width: 100%;                /* For Safari and Opera */
 
}
 
.mbox-inside .tmbox.mbox-small { /* "small" tmboxes should not be small when  */
 
    line-height: 1.5em;          /* also "nested", so reset styles that are  */
 
    font-size: 100%;            /* set in "mbox-small" above.                */
 
}
 
 
table.tmbox-speedy {
 
    border: 2px solid #b22222;    /* Red */
 
    background: #fee;            /* Pink */
 
}
 
table.tmbox-delete {
 
    border: 2px solid #b22222;    /* Red */
 
}
 
table.tmbox-content {
 
    border: 2px solid #f28500;    /* Orange */
 
}
 
table.tmbox-style {
 
    border: 2px solid #f4c430;    /* Yellow */
 
}
 
table.tmbox-move {
 
    border: 2px solid #9932cc;    /* Purple */
 
}
 
table.tmbox-protection,
 
table.tmbox-notice {
 
    border: 1px solid #c0c090;    /* Gray-brown */
 
}
 
 
/* Disambig and set index box styles */
 
table.dmbox {
 
    clear: both;
 
    margin: 0.9em 1em;
 
    border-top: 1px solid #ccc;
 
    border-bottom: 1px solid #ccc;
 
    background: transparent;
 
}
 
 
/* Footer and header message box styles */
 
table.fmbox {
 
    clear: both;
 
    margin: 0.2em 0;
 
    width: 100%;
 
    border: 1px solid #aaa;
 
    background: #f9f9f9;    /* Default "system" gray */
 
}
 
table.fmbox-system {
 
    background: #f9f9f9;
 
}
 
table.fmbox-warning {
 
    border: 1px solid #bb7070;  /* Dark pink */
 
    background: #ffdbdb;        /* Pink */
 
}
 
table.fmbox-editnotice {
 
    background: transparent;
 
}
 
/* Div based "warning" style fmbox messages. */
 
div.mw-warning-with-logexcerpt,
 
div.mw-lag-warn-high,
 
div.mw-cascadeprotectedwarning,
 
div#mw-protect-cascadeon,
 
div.titleblacklist-warning {
 
    clear: both;
 
    margin: 0.2em 0;
 
    border: 1px solid #bb7070;
 
    background: #ffdbdb;
 
    padding: 0.25em 0.9em;
 
}
 
/* Div based "system" style fmbox messages.
 
  Used in [[MediaWiki:Readonly lag]]. */
 
div.mw-lag-warn-normal,
 
div.fmbox-system {
 
    clear: both;
 
    margin: 0.2em 0;
 
    border: 1px solid #aaa;
 
    background: #f9f9f9;
 
    padding: 0.25em 0.9em;
 
}
 
 
/* These mbox-small classes must be placed after all other
 
  ambox/tmbox/ombox etc classes. "body.mediawiki" is so
 
  they override "table.ambox + table.ambox" above. */
 
body.mediawiki table.mbox-small {  /* For the "small=yes" option. */
 
    /* @noflip */
 
    clear: right;
 
    /* @noflip */
 
    float: right;
 
    /* @noflip */
 
    margin: 4px 0 4px 1em;
 
    width: 238px;
 
    font-size: 88%;
 
    line-height: 1.25em;
 
}
 
body.mediawiki table.mbox-small-left {  /* For the "small=left" option. */
 
    /* @noflip */
 
    margin: 4px 1em 4px 0;
 
    width: 238px;
 
    border-collapse: collapse;
 
    font-size: 88%;
 
    line-height: 1.25em;
 
}
 
 
/* Style for compact ambox */
 
/* Hide the images */
 
.compact-ambox table .mbox-image,
 
.compact-ambox table .mbox-imageright,
 
.compact-ambox table .mbox-empty-cell {
 
    display: none;
 
}
 
/* Remove borders, backgrounds, padding, etc. */
 
.compact-ambox table.ambox {
 
    border: none;
 
    border-collapse: collapse;
 
    background: transparent;
 
    margin: 0 0 0 1.6em !important;
 
    padding: 0 !important;
 
    width: auto;
 
    display: block;
 
}
 
body.mediawiki .compact-ambox table.mbox-small-left {
 
    font-size: 100%;
 
    width: auto;
 
    margin: 0;
 
}
 
/* Style the text cell as a list item and remove its padding */
 
.compact-ambox table .mbox-text {
 
    padding: 0 !important;
 
    margin: 0 !important;
 
}
 
.compact-ambox table .mbox-text-span {
 
    display: list-item;
 
    line-height: 1.5em;
 
    list-style-type: square;
 
    list-style-image: url(//bits.wikimedia.org/static-current/skins/MonoBook/bullet.gif);
 
}
 
.skin-vector .compact-ambox table .mbox-text-span {
 
    list-style-type: disc;
 
    list-style-image: url(//bits.wikimedia.org/static-current/skins/Vector/images/bullet-icon.png)
 
}
 
/* Allow for hiding text in compact form */
 
.compact-ambox .hide-when-compact {
 
    display: none;
 
}
 
 
/* Remove default styles for [[MediaWiki:Noarticletext]]. */
 
div.noarticletext {
 
    border: none;
 
    background: transparent;
 
    padding: 0;
 
}
 
 
/* Hide (formatting) elements from screen, but not from screenreaders */
 
.visualhide {
 
    position: absolute;
 
    left: -10000px;
 
    top: auto;
 
    width: 1px;
 
    height: 1px;
 
    overflow: hidden;
 
}
 
 
/* Bold save button */
 
#wpSave {
 
    font-weight: bold;
 
}
 
 
/* class hiddenStructure is defunct. See [[Wikipedia:hiddenStructure]] */
 
.hiddenStructure {
 
    display: inline !important;
 
    color: #f00;
 
    background-color: #0f0;
 
}
 
 
/* suppress missing interwiki image links where #ifexist cannot
 
  be used due to high number of requests see .hidden-redlink on
 
  [[m:MediaWiki:Common.css]] */
 
.check-icon a.new {
 
    display: none;
 
    speak: none;
 
}
 
 
/* Removes underlines from certain links */
 
.nounderlines a,
 
.IPA a:link, .IPA a:visited {
 
    text-decoration: none !important;
 
}
 
 
/* Standard Navigationsleisten, aka box hiding thingy
 
  from .de.  Documentation at [[Wikipedia:NavFrame]]. */
 
div.NavFrame {
 
    margin: 0;
 
    padding: 4px;
 
    border: 1px solid #aaa;
 
    text-align: center;
 
    border-collapse: collapse;
 
    font-size: 95%;
 
}
 
div.NavFrame + div.NavFrame {
 
    border-top-style: none;
 
    border-top-style: hidden;
 
}
 
div.NavPic {
 
    background-color: #fff;
 
    margin: 0;
 
    padding: 2px;
 
    /* @noflip */
 
    float: left;
 
}
 
div.NavFrame div.NavHead {
 
    line-height: 1.6em;
 
    font-weight: bold;
 
    background-color: #ccf;
 
    position: relative;
 
}
 
div.NavFrame p,
 
div.NavFrame div.NavContent,
 
div.NavFrame div.NavContent p {
 
    font-size: 100%;
 
}
 
div.NavEnd {
 
    margin: 0;
 
    padding: 0;
 
    line-height: 1px;
 
    clear: both;
 
}
 
a.NavToggle {
 
    position: absolute;
 
    top: 0;
 
    /* @noflip */
 
    right: 3px;
 
    font-weight: normal;
 
    font-size: 90%;
 
}
 
 
/* Hatnotes and disambiguation notices */
 
.hatnote {
 
    font-style: italic;
 
}
 
.hatnote i {
 
    font-style: normal;
 
}
 
div.hatnote {
 
    /* @noflip */
 
    padding-left: 1.6em;
 
    margin-bottom: 0.5em;
 
}
 
div.hatnote + div.hatnote {
 
    margin-top: -0.5em;
 
}
 
 
/* Allow transcluded pages to display in lists rather than a table.
 
  Compatible in Firefox; incompatible in IE6. */
 
.listify td    { display: list-item; }
 
.listify tr    { display: block; }
 
.listify table { display: block; }
 
 
/* Geographical coordinates defaults. See [[Template:Coord/link]]
 
  for how these are used. The classes "geo", "longitude", and
 
  "latitude" are used by the [[Geo microformat]]. */
 
.geo-default, .geo-dms, .geo-dec  { display: inline; }
 
.geo-nondefault, .geo-multi-punct { display: none; }
 
.longitude, .latitude            { white-space: nowrap; }
 
 
/* When <div class="nonumtoc"> is used on the table of contents,
 
  the ToC will display without numbers */
 
.nonumtoc .tocnumber {
 
    display: none;
 
}
 
.nonumtoc #toc ul,
 
.nonumtoc .toc ul {
 
    line-height: 1.5em;
 
    list-style: none none;
 
    margin: .3em 0 0;
 
    padding: 0;
 
}
 
.hlist.nonumtoc #toc ul ul,
 
.hlist.nonumtoc .toc ul ul {
 
    /* @noflip */
 
    margin: 0;
 
}
 
 
/* Allow limiting of which header levels are shown in a TOC;
 
  <div class="toclimit-3">, for instance, will limit to
 
  showing ==headings== and ===headings=== but no further
 
  (as long as there are no =headings= on the page, which
 
  there shouldn't be according to the MoS). */
 
.toclimit-2 .toclevel-1 ul,
 
.toclimit-3 .toclevel-2 ul,
 
.toclimit-4 .toclevel-3 ul,
 
.toclimit-5 .toclevel-4 ul,
 
.toclimit-6 .toclevel-5 ul,
 
.toclimit-7 .toclevel-6 ul {
 
    display: none;
 
}
 
 
/* Styling for Template:Quote */
 
blockquote.templatequote {
 
    margin-top: 0;
 
}
 
blockquote.templatequote div.templatequotecite {
 
    line-height: 1.5em;
 
    /* @noflip */
 
    text-align: left;
 
    /* @noflip */
 
    padding-left: 1.6em;
 
    margin-top: 0;
 
}
 
 
/* User block messages */
 
div.user-block {
 
    padding: 5px;
 
    margin-bottom: 0.5em;
 
    border: 1px solid #A9A9A9;
 
    background-color: #FFEFD5;
 
}
 
 
/* Prevent line breaks in silly places:
 
  1) Where desired
 
  2) Links when we don't want them to
 
  3) Bold "links" to the page itself
 
  4) Ref tags with group names <ref group="Note"> --> "[Note 1]" */
 
.nowrap,
 
.nowraplinks a,
 
.nowraplinks .selflink,
 
sup.reference a {
 
    white-space: nowrap;
 
}
 
/* But allow wrapping where desired: */
 
.wrap,
 
.wraplinks a {
 
    white-space: normal;
 
}
 
 
/* For template documentation */
 
.template-documentation {
 
    clear: both;
 
    margin: 1em 0 0 0;
 
    border: 1px solid #aaa;
 
    background-color: #ecfcf4;
 
    padding: 1em;
 
}
 
 
/* Inline divs in ImageMaps (code borrowed from de.wiki) */
 
.imagemap-inline div {
 
    display: inline;
 
}
 
 
/* Increase the height of the image upload box */
 
#wpUploadDescription {
 
    height: 13em;
 
}
 
 
/* Minimum thumb width */
 
.thumbinner {
 
    min-width: 100px;
 
}
 
 
/* Makes the background of a framed image white instead of gray.
 
  Only visible with transparent images. */
 
div.thumb .thumbimage {
 
    background-color: #fff;
 
}
 
 
/* The backgrounds for galleries. */
 
div#content .gallerybox div.thumb {
 
    /* Light gray padding */
 
    background-color: #F9F9F9;
 
}
 
/* Put a chequered background behind images, only visible if they have transparency.
 
  '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
 
.gallerybox .thumb img {
 
    background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
 
}
 
/* But not on articles, user pages, portals or with opt-out. */
 
.ns-0 .gallerybox .thumb img,
 
.ns-2 .gallerybox .thumb img,
 
.ns-100 .gallerybox .thumb img,
 
.nochecker .gallerybox .thumb img {
 
    background: #fff;
 
}
 
 
/* Prevent floating boxes from overlapping any category listings,
 
  file histories, edit previews, and edit [Show changes] views. */
 
#mw-subcategories, #mw-pages, #mw-category-media,
 
#filehistory, #wikiPreview, #wikiDiff {
 
    clear: both;
 
}
 
 
body.rtl #mw-articlefeedbackv5, body.rtl #mw-articlefeedback {
 
    display: block;  /* Override inline block mode */
 
    margin-bottom: 1em;
 
    /* @noflip */
 
    clear: right;    /* Clear any info boxes that stick out */
 
    /* @noflip */
 
    float: right;    /* Prevents margin collapsing */
 
}
 
 
/* Selectively hide headers in WikiProject banners */
 
.wpb .wpb-header            { display: none; }
 
.wpbs-inner .wpb .wpb-header { display: block; }    /* for IE */
 
.wpbs-inner .wpb .wpb-header { display: table-row; } /* for real browsers */
 
.wpbs-inner .wpb-outside    { display: none; }      /* hide things that should only display outside shells */
 
 
/* Styling for Abuse Filter tags */
 
.mw-tag-markers {
 
    font-family:sans-serif;
 
    font-style:italic;
 
    font-size:90%;
 
}
 
 
/* Hide stuff meant for accounts with special permissions. Made visible again in
 
  [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-accountcreator.css]],
 
  [[MediaWiki:Group-templateeditor.css]] and [[Mediawiki:Group-autoconfirmed.css]]. */
 
.sysop-show,
 
.accountcreator-show,
 
.templateeditor-show,
 
.autoconfirmed-show {
 
    display: none;
 
}
 
 
/**
 
* Hide the redlink generated by {{Editnotice}},
 
* this overrides the ".sysop-show { display: none; }" above that applies
 
* to the same link as well.
 
*
 
* See [[Phabricator:45013]].
 
*/
 
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .mw-ve-editNotice .editnotice-redlink {
 
    display: none !important;
 
}
 
 
/* Remove bullets when there are multiple edit page warnings */
 
ul.permissions-errors > li {
 
    list-style: none none;
 
}
 
ul.permissions-errors {
 
    margin: 0;
 
}
 
 
/* No linewrap on the labels of the login/signup page */
 
body.page-Special_UserLogin .mw-label label,
 
body.page-Special_UserLogin_signup .mw-label label {
 
    white-space: nowrap;
 
}
 
 
/* Pie chart test: Transparent borders */
 
.transborder {
 
    border: solid transparent;
 
}
 
* html .transborder {  /* IE6 */
 
    border: solid #000001;
 
    filter: chroma(color=#000001);
 
}
 
 
/* Styling for updated markers on watchlist, history and recent/related changes.
 
  Bullets are handled in skin-specific stylesheets. */
 
.updatedmarker {
 
    background-color: transparent;
 
    color: #006400;
 
}
 
li.mw-changeslist-line-watched .mw-title,
 
table.mw-changeslist-line-watched .mw-title,
 
table.mw-enhanced-watch .mw-enhanced-rctime {
 
    font-weight: normal;
 
}
 
 
/* Generic class for Times-based serif, texhtml class for inline math */
 
.times-serif,
 
span.texhtml {
 
    font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
 
    font-size: 118%;
 
    line-height: 1;
 
}
 
span.texhtml {
 
    white-space: nowrap;
 
}
 
span.texhtml span.texhtml {
 
    font-size: 100%;
 
}
 
 
/* Force tabular and lining display for digits and texhtml */
 
.digits,
 
.texhtml {
 
    -moz-font-feature-settings: "lnum", "tnum";
 
    -webkit-font-feature-settings: "lnum", "tnum";
 
    font-feature-settings: "lnum", "tnum";
 
}
 
 
/* Display tabs with 4 spaces, see [[Phabricator:59824]] and [[Phabricator:59825]] */
 
div.mw-geshi div,
 
div.mw-geshi div pre,
 
span.mw-geshi,
 
pre.source-css,
 
pre.source-javascript,
 
pre.source-lua {
 
    -moz-tab-size: 4;
 
    -o-tab-size: 4;
 
    tab-size: 4;
 
}
 
 
/* Fix styling of transcluded prefindex tables */
 
table#mw-prefixindex-list-table,
 
table#mw-prefixindex-nav-table {
 
    width: 98%;
 
}
 
 
/* For portals, added 2011-12-07 -bv
 
  On wide screens, show these as two columns
 
  On narrow and mobile screens, let them collapse into a single column */
 
.portal-column-left {
 
    float: left;
 
    width: 50%;
 
}
 
.portal-column-right {
 
    float: right;
 
    width: 49%;
 
}
 
.portal-column-left-wide {
 
    float: left;
 
    width: 60%;
 
}
 
.portal-column-right-narrow {
 
    float: right;
 
    width: 39%;
 
}
 
.portal-column-left-extra-wide {
 
    float: left;
 
    width: 70%;
 
}
 
.portal-column-right-extra-narrow {
 
    float: right;
 
    width: 29%;
 
}
 
@media only screen and (max-width: 800px) {
 
    /* Decouple the columns on narrow screens */
 
    .portal-column-left,
 
    .portal-column-right,
 
    .portal-column-left-wide,
 
    .portal-column-right-narrow,
 
    .portal-column-left-extra-wide,
 
    .portal-column-right-extra-narrow {
 
        float: inherit;
 
        width: inherit;
 
    }
 
}
 
 
/* For announcements */
 
#bodyContent .letterhead {
 
    background-image:url('//upload.wikimedia.org/wikipedia/commons/e/e0/Tan-page-corner.png');
 
    background-repeat:no-repeat;
 
    padding: 2em;
 
    background-color: #faf9f2;
 
}
 
 
/* Tree style lists */
 
.treeview ul {
 
    padding: 0;
 
    margin: 0;
 
}
 
.treeview li {
 
    padding: 0;
 
    margin: 0;
 
    list-style-type: none;
 
    list-style-image: none;
 
    zoom: 1; /* BE KIND TO IE6 */;
 
}
 
.treeview li li {
 
    background: url("//upload.wikimedia.org/wikipedia/commons/f/f2/Treeview-grey-line.png") no-repeat 0 -2981px;
 
    /* @noflip */
 
    padding-left: 20px;
 
    text-indent: 0.3em;
 
}
 
.treeview li li.lastline {
 
    background-position: 0 -5971px
 
}
 
.treeview li.emptyline > ul {
 
    /* @noflip */
 
    margin-left: -1px;
 
}
 
.treeview li.emptyline > ul > li:first-child {
 
    background-position: 0 9px
 
}
 
 
/* hidden sortkey for tablesorter */
 
td .sortkey,
 
th .sortkey {
 
    display: none;
 
    speak: none;
 
}
 
 
/* Make it possible to hide checkboxes in <inputbox> */
 
.inputbox-hidecheckboxes form .inputbox-element {
 
    display: none !important;
 
}
 
 
/* Work-around for [[Phabricator:25965]] (Kaltura advertisement) */
 
.k-player .k-attribution {
 
    visibility: hidden;
 
}
 
 
/* Move 'play' button of video player to bottom left corner */
 
.PopUpMediaTransform a .play-btn-large {
 
    margin: 0;
 
    top: auto;
 
    right: auto;
 
    bottom: 0;
 
    left: 0;
 
}
 
 
   
 
   
/* Workaround to keep editnotices readable in VE view.
+
break;
  Long term, editnotices should become a core feature so that they can be designed responsive. */
+
}
.mw-ve-editNotice .mbox-image {
+
echo "\n<!-- /{$name} -->\n";
display: none;
+
}
 +
}
 
}
 
}

Текущая версия на 22:48, 5 мая 2015

/* Размещённый здесь CSS будет применяться к векторной теме оформления  */
<?php
/**
 * VectorX - Derivative of Vector skin
 *  
 * $wgVectorHiddenAnonPortals = array( 'TOOLBOX', 'navigation' );
 * $wgVectorHiddenUserPortals = array( 'anonnavigation' );
 * $wgVectorHiddenAnonNavigation = array( 'VIEWS', 'ACTIONS', 'NAMESPACES', 'VARIANTS' );
 * $wgVectorHiddenUserNavigation = array();
 *
 * @todo document
 * @file
 * @ingroup Skins
 */
 
if( !defined( 'MEDIAWIKI' ) ) {
	die( -1 );
}
 
require_once( "Vector.php" );
 
/**
 * SkinTemplate class for VectorX skin
 * @ingroup Skins
 */
class SkinVectorX extends SkinVector {
 
	var $skinname = 'vectorx', $stylename = 'vectorx',
		$template = 'VectorXTemplate', $useHeadElement = true;
 
	/**
	 * Initializes output page and sets up skin-specific parameters
	 * @param $out OutputPage object to initialize
	 */
	public function initPage( OutputPage $out ) {
		global $wgLocalStylePath, $wgRequest;
 
		parent::initPage( $out );
 
		// Append CSS which includes IE only behavior fixes for hover support -
		// this is better than including this in a CSS fille since it doesn't
		// wait for the CSS file to load before fetching the HTC file.
		$min = $wgRequest->getFuzzyBool( 'debug' ) ? '' : '.min';
		$out->addHeadItem( 'csshover',
			'<!--[if lt IE 7]><style type="text/css">body{behavior:url("' .
				htmlspecialchars( $wgLocalStylePath ) .
				"/{$this->stylename}/csshover{$min}.htc\")}</style><![endif]-->"
		);
 
		$out->addModuleScripts( 'skins.vectorx' );
	}
 
	/**
	 * Load skin and user CSS files in the correct order
	 * fixes bug 22916
	 * @param $out OutputPage object
	 */
	function setupSkinUserCss( OutputPage $out ){
		parent::setupSkinUserCss( $out );
		$out->addModuleStyles( 'skins.vectorx' );
	}
}
 
/**
 * Derivative of VectorTemplate class for VectorX skin
 * @ingroup Skins
 */
class VectorXTemplate extends VectorTemplate {
 
	/* Functions */
 
  public function skipRendering( $name ) {
    global $wgVectorHiddenUserPortals, $wgVectorHiddenAnonPortals;
    if ( $this->data['loggedin'] ) {  
      if( is_array( $wgVectorHiddenUserPortals ) ){
        if( in_array( $name, $wgVectorHiddenUserPortals ) ) {
          return( true ); // skip if logged-in and in array
        }
      }
    } else {
      if( is_array( $wgVectorHiddenAnonPortals ) ){
        if( in_array( $name, $wgVectorHiddenAnonPortals ) ) {
          return( true ); // skip if not logged-in and in array
        }
      }
    } 
    return( false );
  }    
 
  public function skipNavigation( $name ) {
    global $wgVectorHiddenUserNavigation, $wgVectorHiddenAnonNavigation;
    if ( $this->data['loggedin'] ) {  
      if( is_array( $wgVectorHiddenUserNavigation ) ){
        if( in_array( $name, $wgVectorHiddenUserNavigation ) ) {
          return( true ); // skip if logged-in and in array
        }
      }
    } else {
      if( is_array( $wgVectorHiddenAnonNavigation ) ){
        if( in_array( $name, $wgVectorHiddenAnonNavigation ) ) {
          return( true ); // skip if not logged-in and in array
        }
      }
    } 
    return( false );
  }    
 
  public function renderConditionalNavigation( $navarray ) {
    foreach( $navarray as $navitem ) {
      $hideitem = $this->skipNavigation( $navitem );
      if( !$hideitem ) {  
        $this->renderNavigation( $navitem );
      }  
    }  
  }    
 
	/**
	 * Outputs the entire contents of the (X)HTML page
	 */
	public function execute() {
		global $wgLang, $wgVectorUseIconWatch;
 
		$this->skin = $this->data['skin'];
 
		// Build additional attributes for navigation urls
		//$nav = $this->skin->buildNavigationUrls();
		$nav = $this->data['content_navigation'];
 
		if ( $wgVectorUseIconWatch ) {
			$mode = $this->skin->getTitle()->userIsWatching() ? 'unwatch' : 'watch';
			if ( isset( $nav['actions'][$mode] ) ) {
				$nav['views'][$mode] = $nav['actions'][$mode];
				$nav['views'][$mode]['class'] = rtrim( 'icon ' . $nav['views'][$mode]['class'], ' ' );
				$nav['views'][$mode]['primary'] = true;
				unset( $nav['actions'][$mode] );
			}
		}
 
		$xmlID = '';
    foreach ( $nav as $section => $links ) {
      foreach ( $links as $key => $link ) {
        if ( $section == 'views' && !( isset( $link['primary'] ) && $link['primary'] ) ) {
          $link['class'] = rtrim( 'collapsible ' . $link['class'], ' ' );
        }
 
        $xmlID = isset( $link['id'] ) ? $link['id'] : 'ca-' . $xmlID;
        $nav[$section][$key]['attributes'] =
          ' id="' . Sanitizer::escapeId( $xmlID ) . '"';
        if ( $link['class'] ) {
          $nav[$section][$key]['attributes'] .=
            ' class="' . htmlspecialchars( $link['class'] ) . '"';
          unset( $nav[$section][$key]['class'] );
        }
        if ( isset( $link['tooltiponly'] ) && $link['tooltiponly'] ) {
          $nav[$section][$key]['key'] =
            Linker::tooltip( $xmlID );
        } else {
          $nav[$section][$key]['key'] =
            Xml::expandAttributes( Linker::tooltipAndAccesskeyAttribs( $xmlID ) );
        }
      }
    }
    $this->data['namespace_urls'] = $nav['namespaces'];
    $this->data['view_urls'] = $nav['views'];
    $this->data['action_urls'] = $nav['actions'];
    $this->data['variant_urls'] = $nav['variants'];
 
  // Reverse horizontally rendered navigation elements
    if ( $wgLang->isRTL() ) {
      $this->data['view_urls'] =
        array_reverse( $this->data['view_urls'] );
      $this->data['namespace_urls'] =
        array_reverse( $this->data['namespace_urls'] );
      $this->data['personal_urls'] =
        array_reverse( $this->data['personal_urls'] );
    }
 
		// Output HTML Page
		$this->html( 'headelement' );
?>
		<div id="mw-page-base" class="noprint"></div>
		<div id="mw-head-base" class="noprint"></div>
		<!-- content -->
		<div id="content">
			<a id="top"></a>
			<div id="mw-js-message" style="display:none;"<?php $this->html( 'userlangattributes' ) ?>></div>
			<?php if ( $this->data['sitenotice'] ): ?>
			<!-- sitenotice -->
			<div id="siteNotice"><?php $this->html( 'sitenotice' ) ?></div>
			<!-- /sitenotice -->
			<?php endif; ?>
			<!-- firstHeading -->
			<h1 id="firstHeading" class="firstHeading"><?php $this->html( 'title' ) ?></h1>
			<!-- /firstHeading -->
			<!-- bodyContent -->
			<div id="bodyContent">
				<?php if ( $this->data['isarticle'] ): ?>
				<!-- tagline -->
				<div id="siteSub"><?php $this->msg( 'tagline' ) ?></div>
				<!-- /tagline -->
				<?php endif; ?>
				<!-- subtitle -->
				<div id="contentSub"<?php $this->html( 'userlangattributes' ) ?>><?php $this->html( 'subtitle' ) ?></div>
				<!-- /subtitle -->
				<?php if ( $this->data['undelete'] ): ?>
				<!-- undelete -->
				<div id="contentSub2"><?php $this->html( 'undelete' ) ?></div>
				<!-- /undelete -->
				<?php endif; ?>
				<?php if( $this->data['newtalk'] ): ?>
				<!-- newtalk -->
				<div class="usermessage"><?php $this->html( 'newtalk' )  ?></div>
				<!-- /newtalk -->
				<?php endif; ?>
				<?php if ( $this->data['showjumplinks'] ): ?>
				<!-- jumpto -->
				<div id="jump-to-nav">
					<?php $this->msg( 'jumpto' ) ?> <a href="#mw-head"><?php $this->msg( 'jumptonavigation' ) ?></a>,
					<a href="#p-search"><?php $this->msg( 'jumptosearch' ) ?></a>
				</div>
				<!-- /jumpto -->
				<?php endif; ?>
				<!-- bodycontent -->
				<?php $this->html( 'bodycontent' ) ?>
				<!-- /bodycontent -->
 
				<?php 
        if ( !$this->skipRendering( 'printfooter' ) ): 
           if ( $this->data['printfooter'] ): ?>
				<!-- printfooter -->
				<div class="printfooter">
				<?php $this->html( 'printfooter' ); ?>
				</div>
				<!-- /printfooter -->
				<?php endif; endif; ?>
				<?php if ( $this->data['catlinks'] ): ?>
				<!-- catlinks -->
				<?php $this->html( 'catlinks' ); ?>
				<!-- /catlinks -->
				<?php endif; ?>
				<?php if ( $this->data['dataAfterContent'] ): ?>
				<!-- dataAfterContent -->
				<?php $this->html( 'dataAfterContent' ); ?>
				<!-- /dataAfterContent -->
				<?php endif; ?>
				<div class="visualClear"></div>
				<!-- debughtml -->
				<?php $this->html( 'debughtml' ); ?>
				<!-- /debughtml -->
			</div>
			<!-- /bodyContent -->
		</div>
		<!-- /content -->
 
		<!-- header -->
    <div id="mw-head" class="noprint">
      <?php $this->renderConditionalNavigation( array( 'PERSONAL' ) ); ?>   
      <div id="left-navigation">
         <?php $this->renderConditionalNavigation( array( 'NAMESPACES', 'VARIANTS' ) ); ?>
      </div>
      <div id="right-navigation">
        <?php $this->renderConditionalNavigation( array( 'VIEWS', 'ACTIONS', 'SEARCH' ) ); ?>
      </div>
    </div>
   	<!-- /header -->
 
		<!-- panel -->
			<div id="mw-panel" class="noprint">
				<!-- logo -->
					<div id="p-logo"><a style="background-image: url(<?php $this->text( 'logopath' ) ?>);" href="<?php echo htmlspecialchars( $this->data['nav_urls']['mainpage']['href'] ) ?>" <?php echo Xml::expandAttributes( Linker::tooltipAndAccesskeyAttribs( 'p-logo' ) ) ?>></a></div>
				<!-- /logo -->
				<?php $this->renderPortals( $this->data['sidebar'] ); ?>
			</div>
		<!-- /panel -->
		<!-- footer -->
		<div id="footer"<?php $this->html( 'userlangattributes' ) ?>>
			<?php foreach( $this->getFooterLinks() as $category => $links ): ?>
				<ul id="footer-<?php echo $category ?>">
					<?php foreach( $links as $link ): ?>
						<li id="footer-<?php echo $category ?>-<?php echo $link ?>"><?php $this->html( $link ) ?></li>
					<?php endforeach; ?>
				</ul>
			<?php endforeach; ?>
			<?php $footericons = $this->getFooterIcons("icononly");
			if ( count( $footericons ) > 0 ): ?>
				<ul id="footer-icons" class="noprint">
<?php			foreach ( $footericons as $blockName => $footerIcons ): ?>
					<li id="footer-<?php echo htmlspecialchars( $blockName ); ?>ico">
<?php				foreach ( $footerIcons as $icon ): ?>
						<?php echo $this->skin->makeFooterIcon( $icon ); ?>
<?php				endforeach; ?>
					</li>
<?php			endforeach; ?>
				</ul>
			<?php endif; ?>
			<div style="clear:both"></div>
		</div>
		<!-- /footer -->
		<!-- fixalpha -->
		<script type="<?php $this->text( 'jsmimetype' ) ?>"> if ( window.isMSIE55 ) fixalpha(); </script>
		<!-- /fixalpha -->
		<?php $this->printTrail(); ?>
 
	</body>
</html>
<?php
	}
 
	/**
	 * Render a series of portals
	 *
	 * @param $portals array
	 */
	private function renderPortals( $portals ) {
    global $wgVectorHiddenAnonPortals, $wgVectorHiddenUserPortals;
		// Force the rendering of the following portals
		if ( !isset( $portals['SEARCH'] ) ) {
			$portals['SEARCH'] = true;
		}
		if ( !isset( $portals['TOOLBOX'] ) ) {
			$portals['TOOLBOX'] = true;
		}
		if ( !isset( $portals['LANGUAGES'] ) ) {
			$portals['LANGUAGES'] = true;
		}
		// Render portals
		foreach ( $portals as $name => $content ) {
			if ( $content === false  ||  $this->skipRendering( $name ) )
				continue;
 
      echo "\n<!-- {$name} -->\n";
			switch( $name ) {
				case 'SEARCH':
					break;
				case 'TOOLBOX':
					$this->renderPortal( 'tb', $this->getToolbox(), 'toolbox', 'SkinTemplateToolboxEnd' );
					break;
				case 'LANGUAGES':
					if ( $this->data['language_urls'] ) {
						$this->renderPortal( 'lang', $this->data['language_urls'], 'otherlanguages' );
					}
					break;
 
				default:
					$this->renderPortal( $name, $content );
				break;
			}
			echo "\n<!-- /{$name} -->\n";
		}
	}
 
		// If renderPortal in Vector was public we could have avoided it here... 
	private function renderPortal( $name, $content, $msg = null, $hook = null ) {
		if ( !isset( $msg ) ) {
			$msg = $name;
		}
		?>
<div class="portal" id='<?php echo Sanitizer::escapeId( "p-$name" ) ?>'<?php echo Linker::tooltip( 'p-' . $name ) ?>>
	<h5<?php $this->html( 'userlangattributes' ) ?>><?php $msgObj = wfMessage( $msg ); echo htmlspecialchars( $msgObj->exists() ? $msgObj->text() : $msg ); ?></h5>
	<div class="body">
<?php
		if ( is_array( $content ) ): ?>
		<ul>
<?php
			foreach( $content as $key => $val ): 
        echo $this->makeListItem( $key, $val ); 
			endforeach;
			if ( isset( $hook ) ) {
				wfRunHooks( $hook, array( &$this, true ) );
			}
?>
		</ul>
<?php
		else: 
      echo $content; /* Allow raw HTML block to be defined by extensions */
		endif; ?>
	</div>
</div>
<?php
	}
 
	/**
	 * Render one or more navigations elements by name, automatically reveresed
	 * when UI is in RTL mode
	 */
	private function renderNavigation( $elements ) {
		// If renderNavigation in Vector was public we could have avoided renderNavigation here... 
		global $wgVectorUseSimpleSearch, $wgVectorShowVariantName, $wgUser, $wgLang;
 
		// If only one element was given, wrap it in an array, allowing more
		// flexible arguments
		if ( !is_array( $elements ) ) {
			$elements = array( $elements );
		// If there's a series of elements, reverse them when in RTL mode
		} elseif ( $wgLang->isRTL() ) {
			$elements = array_reverse( $elements );
		}
		// Render elements
		foreach ( $elements as $name => $element ) {
			echo "\n<!-- {$name} -->\n";
			switch ( $element ) {
				case 'NAMESPACES':
?>
<div id="p-namespaces" class="vectorTabs<?php if ( count( $this->data['namespace_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
	<h5><?php $this->msg( 'namespaces' ) ?></h5>
	<ul<?php $this->html( 'userlangattributes' ) ?>>
		<?php foreach ( $this->data['namespace_urls'] as $link ): ?>
			<li <?php echo $link['attributes'] ?>><span><a href="<?php echo htmlspecialchars( $link['href'] ) ?>" <?php echo $link['key'] ?>><?php echo htmlspecialchars( $link['text'] ) ?></a></span></li>
		<?php endforeach; ?>
	</ul>
</div>
<?php
				break;
				case 'VARIANTS':
?>
<div id="p-variants" class="vectorMenu<?php if ( count( $this->data['variant_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
	<?php if ( $wgVectorShowVariantName ): ?>
		<h4>
		<?php foreach ( $this->data['variant_urls'] as $link ): ?>
			<?php if ( stripos( $link['attributes'], 'selected' ) !== false ): ?>
				<?php echo htmlspecialchars( $link['text'] ) ?>
			<?php endif; ?>
		<?php endforeach; ?>
		</h4>
	<?php endif; ?>
	<h5><span><?php $this->msg( 'variants' ) ?></span><a href="#"></a></h5>
	<div class="menu">
		<ul<?php $this->html( 'userlangattributes' ) ?>>
			<?php foreach ( $this->data['variant_urls'] as $link ): ?>
				<li<?php echo $link['attributes'] ?>><a href="<?php echo htmlspecialchars( $link['href'] ) ?>" <?php echo $link['key'] ?>><?php echo htmlspecialchars( $link['text'] ) ?></a></li>
			<?php endforeach; ?>
		</ul>
	</div>
</div>
<?php
				break;
				case 'VIEWS':
?>
<div id="p-views" class="vectorTabs<?php if ( count( $this->data['view_urls'] ) == 0 ) { echo ' emptyPortlet'; } ?>">
	<h5><?php $this->msg('views') ?></h5>
	<ul<?php $this->html('userlangattributes') ?>>
		<?php foreach ( $this->data['view_urls'] as $link ): ?>
			<li<?php echo $link['attributes'] ?>><span><a href="<?php echo htmlspecialchars( $link['href'] ) ?>" <?php echo $link['key'] ?>><?php
				// $link['text'] can be undefined - bug 27764
				if ( array_key_exists( 'text', $link ) ) {
					echo array_key_exists( 'img', $link ) ?  '<img src="' . $link['img'] . '" alt="' . $link['text'] . '" />' : htmlspecialchars( $link['text'] );
				}
				?></a></span></li>
		<?php endforeach; ?>
	</ul>
</div>
<?php
				break;
				case 'ACTIONS':
?>
<div id="p-cactions" class="vectorMenu<?php if ( count( $this->data['action_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
	<h5><span><?php $this->msg( 'actions' ) ?></span><a href="#"></a></h5>
	<div class="menu">
		<ul<?php $this->html( 'userlangattributes' ) ?>>
			<?php foreach ( $this->data['action_urls'] as $link ): ?>
				<li<?php echo $link['attributes'] ?>><a href="<?php echo htmlspecialchars( $link['href'] ) ?>" <?php echo $link['key'] ?>><?php echo htmlspecialchars( $link['text'] ) ?></a></li>
			<?php endforeach; ?>
		</ul>
	</div>
</div>
<?php
				break;
				case 'PERSONAL':
?>
<div id="p-personal" class="<?php if ( count( $this->data['personal_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
	<h5><?php $this->msg( 'personaltools' ) ?></h5>
	<ul<?php $this->html( 'userlangattributes' ) ?>>
<?php			foreach( $this->getPersonalTools() as $key => $item ) { ?>
		<?php echo $this->makeListItem( $key, $item ); ?>
 
<?php			} ?>
	</ul>
</div>
<?php
				break;
				case 'SEARCH':
?>
<div id="p-search">
	<h5<?php $this->html( 'userlangattributes' ) ?>><label for="searchInput"><?php $this->msg( 'search' ) ?></label></h5>
	<form action="<?php $this->text( 'wgScript' ) ?>" id="searchform">
		<input type='hidden' name="title" value="<?php $this->text( 'searchtitle' ) ?>"/>
		<?php if ( $wgVectorUseSimpleSearch && $wgUser->getOption( 'vector-simplesearch' ) ): ?>
		<div id="simpleSearch">
			<?php if ( $this->data['rtl'] ): ?>
			<?php echo $this->makeSearchButton( 'image', array( 'id' => 'searchButton', 'src' => $this->skin->getSkinStylePath( 'images/search-rtl.png' ) ) ); ?>
			<?php endif; ?>
			<?php echo $this->makeSearchInput( array( 'id' => 'searchInput', 'type' => 'text' ) ); ?>
			<?php if ( !$this->data['rtl'] ): ?>
			<?php echo $this->makeSearchButton( 'image', array( 'id' => 'searchButton', 'src' => $this->skin->getSkinStylePath( 'images/search-ltr.png' ) ) ); ?>
			<?php endif; ?>
		</div>
		<?php else: ?>
		<?php echo $this->makeSearchInput( array( 'id' => 'searchInput' ) ); ?>
		<?php echo $this->makeSearchButton( 'go', array( 'id' => 'searchGoButton', 'class' => 'searchButton' ) ); ?>
		<?php echo $this->makeSearchButton( 'fulltext', array( 'id' => 'mw-searchButton', 'class' => 'searchButton' ) ); ?>
		<?php endif; ?>
	</form>
</div>
<?php
 
				break;
			}
			echo "\n<!-- /{$name} -->\n";
		}
	}
}