36 $this->data[
'namespace_urls'] = $this->data[
'content_navigation'][
'namespaces'];
37 $this->data[
'view_urls'] = $this->data[
'content_navigation'][
'views'];
38 $this->data[
'action_urls'] = $this->data[
'content_navigation'][
'actions'];
39 $this->data[
'variant_urls'] = $this->data[
'content_navigation'][
'variants'];
42 if ( $this->config->get(
'VectorUseIconWatch' ) ) {
43 $mode = $this->
getSkin()->getUser()->isWatched( $this->
getSkin()->getRelevantTitle() )
47 if ( isset( $this->data[
'action_urls'][$mode] ) ) {
48 $this->data[
'view_urls'][$mode] = $this->data[
'action_urls'][$mode];
49 unset( $this->data[
'action_urls'][$mode] );
52 $this->data[
'pageLanguage'] =
53 $this->
getSkin()->getTitle()->getPageViewLanguage()->getHtmlCode();
56 $this->
html(
'headelement' );
58 <
div id=
"mw-page-base" class=
"noprint"></
div>
59 <
div id=
"mw-head-base" class=
"noprint"></
div>
60 <
div id=
"content" class=
"mw-body" role=
"main">
63 if ( $this->data[
'sitenotice'] ) {
64 echo Html::rawElement(
'div',
67 'class' =>
'mw-body-content',
70 $this->
get(
'sitenotice' )
73 if ( is_callable( [ $this,
'getIndicators' ] ) ) {
77 if ( $this->data[
'title'] !=
'' ) {
78 echo Html::rawElement(
'h1',
80 'id' =>
'firstHeading',
81 'class' =>
'firstHeading',
82 'lang' => $this->
get(
'pageLanguage' ),
89 $this->
html(
'prebodyhtml' );
91 <
div id=
"bodyContent" class=
"mw-body-content">
93 if ( $this->data[
'isarticle'] ) {
94 echo Html::element(
'div',
103 <
div id=
"contentSub"<?php $this->
html(
'userlangattributes' ) ?>><?php
104 $this->
html(
'subtitle' )
107 if ( $this->data[
'undelete'] ) {
108 echo Html::rawElement(
'div',
109 [
'id' =>
'contentSub2' ],
111 $this->
get(
'undelete' )
114 if ( $this->data[
'newtalk'] ) {
115 echo Html::rawElement(
'div',
116 [
'class' =>
'usermessage' ],
118 $this->
get(
'newtalk' )
123 echo Html::element(
'div', [
'id' =>
'jump-to-nav' ] );
125 <a
class=
"mw-jump-link" href=
"#mw-head"><?php $this->
msg(
'vector-jumptonavigation' ) ?></a>
126 <a
class=
"mw-jump-link" href=
"#p-search"><?php $this->
msg(
'vector-jumptosearch' ) ?></a>
128 $this->
html(
'bodycontent' );
130 if ( $this->data[
'printfooter'] ) {
132 <
div class=
"printfooter">
133 <?php $this->
html(
'printfooter' ); ?>
138 if ( $this->data[
'catlinks'] ) {
139 $this->
html(
'catlinks' );
142 if ( $this->data[
'dataAfterContent'] ) {
143 $this->
html(
'dataAfterContent' );
146 <
div class=
"visualClear"></
div>
147 <?php $this->
html(
'debughtml' ); ?>
150 <
div id=
"mw-navigation">
151 <h2><?php $this->
msg(
'navigation-heading' ) ?></h2>
154 <
div id=
"left-navigation">
157 <
div id=
"right-navigation">
162 <
div id=
"p-logo" role=
"banner"><a
class=
"mw-wiki-logo" href=
"<?php
163 echo htmlspecialchars( $this->data['nav_urls']['mainpage']['href'] )
170 <?php Hooks::run(
'VectorBeforeFooter' ); ?>
171 <
div id=
"footer" role=
"contentinfo"<?php $this->
html(
'userlangattributes' ) ?>>
175 <ul
id=
"footer-<?php echo $category ?>">
177 foreach ( $links as
$link ) {
179 <li
id=
"footer-<?php echo $category ?>-<?php echo $link ?>"><?php $this->
html( $link ) ?></li>
188 if ( count( $footericons ) > 0 ) {
190 <ul
id=
"footer-icons" class=
"noprint">
192 foreach ( $footericons as $blockName => $footerIcons ) {
194 <li
id=
"footer-<?php echo htmlspecialchars( $blockName ); ?>ico">
196 foreach ( $footerIcons as $icon ) {
197 echo $this->
getSkin()->makeFooterIcon( $icon );
224 if ( !isset( $portals[
'TOOLBOX'] ) ) {
225 $portals[
'TOOLBOX'] =
true;
227 if ( !isset( $portals[
'LANGUAGES'] ) ) {
228 $portals[
'LANGUAGES'] =
true;
231 foreach ( $portals as $name =>
$content ) {
244 Hooks::run(
'VectorAfterToolbox' );
247 if ( $this->data[
'language_urls'] !==
false ) {
248 $this->
renderPortal(
'lang', $this->data[
'language_urls'],
'otherlanguages' );
265 if ( $msg ===
null ) {
268 $msgObj = $this->
getMsg( $msg );
269 $labelId = Sanitizer::escapeIdForAttribute(
"p-$name-label" );
271 <
div class=
"portal" role=
"navigation" id=
"<?php
272 echo htmlspecialchars( Sanitizer::escapeIdForAttribute( "p-$name
" ) )
275 ?> aria-labelledby=
"<?php echo htmlspecialchars( $labelId ) ?>">
276 <h3<?php $this->
html(
'userlangattributes' ) ?>
id=
"<?php echo htmlspecialchars( $labelId )
278 echo htmlspecialchars( $msgObj->exists() ? $msgObj->text() : $msg );
286 foreach (
$content as $key => $val ) {
289 if ( $hook !==
null ) {
292 Hooks::run( $hook, [ &$skin,
true ] );
317 foreach ( $elements as $name => $element ) {
318 switch ( $element ) {
321 <
div id=
"p-namespaces" role=
"navigation" class=
"vectorTabs<?php
322 if ( count( $this->data['namespace_urls'] ) == 0 ) {
323 echo ' emptyPortlet';
325 ?>" aria-labelledby=
"p-namespaces-label">
326 <h3
id=
"p-namespaces-label"><?php $this->
msg(
'namespaces' ) ?></h3>
327 <ul<?php $this->
html(
'userlangattributes' ) ?>>
329 foreach ( $this->data[
'namespace_urls'] as $key => $item ) {
331 'vector-wrap' =>
true,
341 <
div id=
"p-variants" role=
"navigation" class=
"vectorMenu<?php
342 if ( count( $this->data['variant_urls'] ) == 0 ) {
343 echo ' emptyPortlet';
345 ?>" aria-labelledby=
"p-variants-label">
348 $variantLabel = $this->
getMsg(
'variants' )->text();
349 foreach ( $this->data[
'variant_urls'] as $item ) {
350 if ( isset( $item[
'class'] ) && stripos( $item[
'class'],
'selected' ) !==
false ) {
351 $variantLabel = $item[
'text'];
356 <input
type=
"checkbox" class=
"vectorMenuCheckbox" aria-labelledby=
"p-variants-label" />
357 <h3
id=
"p-variants-label">
358 <span><?php echo htmlspecialchars( $variantLabel ) ?></span>
363 foreach ( $this->data[
'variant_urls'] as $key => $item ) {
374 <
div id=
"p-views" role=
"navigation" class=
"vectorTabs<?php
375 if ( count( $this->data['view_urls'] ) == 0 ) {
376 echo ' emptyPortlet';
378 ?>" aria-labelledby=
"p-views-label">
379 <h3
id=
"p-views-label"><?php $this->
msg(
'views' ) ?></h3>
380 <ul<?php $this->
html(
'userlangattributes' ) ?>>
382 foreach ( $this->data[
'view_urls'] as $key => $item ) {
384 'vector-wrap' =>
true,
385 'vector-collapsible' =>
true,
395 <
div id=
"p-cactions" role=
"navigation" class=
"vectorMenu<?php
396 if ( count( $this->data['action_urls'] ) == 0 ) {
397 echo ' emptyPortlet';
399 ?>" aria-labelledby=
"p-cactions-label">
400 <input
type=
"checkbox" class=
"vectorMenuCheckbox" aria-labelledby=
"p-cactions-label" />
401 <h3
id=
"p-cactions-label"><span><?php
402 $this->
msg(
'vector-more-actions' )
405 <ul<?php $this->
html(
'userlangattributes' ) ?>>
407 foreach ( $this->data[
'action_urls'] as $key => $item ) {
418 <
div id=
"p-personal" role=
"navigation" class=
"<?php
419 if ( count( $this->data['personal_urls'] ) == 0 ) {
420 echo ' emptyPortlet';
422 ?>" aria-labelledby=
"p-personal-label">
423 <h3
id=
"p-personal-label"><?php $this->
msg(
'personaltools' ) ?></h3>
424 <ul<?php $this->
html(
'userlangattributes' ) ?>>
428 if ( !$this->
getSkin()->getUser()->isLoggedIn() &&
433 [
'id' =>
'pt-anonuserpage' ],
441 if ( array_key_exists(
'uls', $personalTools ) ) {
442 $langSelector = $this->
makeListItem(
'uls', $personalTools[
'uls' ] );
443 unset( $personalTools[
'uls' ] );
448 foreach ( $personalTools as $key => $item ) {
458 <
div id=
"p-search" role=
"search">
459 <h3<?php $this->
html(
'userlangattributes' ) ?>>
460 <label
for=
"searchInput"><?php $this->
msg(
'search' ) ?></label>
462 <
form action=
"<?php $this->text( 'wgScript' ) ?>" id=
"searchform">
463 <
div<?php echo $this->config->get(
'VectorUseSimpleSearch' ) ?
' id="simpleSearch"' :
'' ?>>
466 echo Html::hidden(
'title', $this->
get(
'searchtitle' ) );
481 [
'id' =>
'mw-searchButton',
'class' =>
'searchButton mw-fallbackSearchButton' ]
485 [
'id' =>
'searchButton',
'class' =>
'searchButton' ]
505 $html = Html::rawElement(
'span', [],
$html );
516 $this->config->get(
'VectorUseIconWatch' )
517 && ( $key ===
'watch' || $key ===
'unwatch' )
519 $item[
'class'] = rtrim(
'icon ' . $item[
'class'],
' ' );
520 $item[
'primary'] =
true;
525 isset(
$options[
'vector-collapsible'] ) &&
$options[
'vector-collapsible'] ) {
526 $item[
'class'] = rtrim(
'collapsible ' . $item[
'class'],
' ' );
530 unset( $item[
'redundant'] );
532 return parent::makeListItem( $key, $item,
$options );
This list may contain false positives That usually means there is additional text with links below the first Each row contains links to the first and second as well as the first line of the second redirect text
New base template for a skin's template extended from QuickTemplate this class features helper method...
getFooterLinks( $option=null)
Returns an array of footerlinks trimmed down to only those footer links that are valid.
makeSearchButton( $mode, $attrs=[])
renderAfterPortlet( $name)
getToolbox()
Create an array of common toolbox items from the data in the quicktemplate stored by SkinTemplate.
printTrail()
Output getTrail.
getPersonalTools()
Create an array of personal tools items from the data in the quicktemplate stored by SkinTemplate.
getFooterIcons( $option=null)
Returns an array of footer icons filtered down by options relevant to how the skin wishes to display ...
getMsg( $name)
Get a Message object with its context set.
getIndicators()
Get the suggested HTML for page status indicators: icons (or short text snippets) usually displayed i...
makeSearchInput( $attrs=[])
static tooltip( $name, $options=null)
Returns raw bits of HTML, use titleAttrib()
static tooltipAndAccesskeyAttribs( $name, array $msgParams=[], $options=null)
Returns the attributes for the tooltip and access key.
getSkin()
Get the Skin object related to this object.
static groupHasPermission( $group, $role)
Check, if the given group has the given permission.
QuickTemplate subclass for Vector.
makeLink( $key, $item, $options=[])
@inheritDoc
makeListItem( $key, $item, $options=[])
@inheritDoc
renderNavigation(array $elements)
Render one or more navigations elements by name, automatically reversed by css when UI is in RTL mode...
renderPortals(array $portals)
Render a series of portals.
execute()
Outputs the entire contents of the (X)HTML page.
renderPortal( $name, $content, $msg=null, $hook=null)
This code would result in ircNotify being run twice when an article is and once for brion Hooks can return three possible true was required This is the default since MediaWiki *some string
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped & $options
null means default in associative array form
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped noclasses just before the function returns a value If you return an< a > element with HTML attributes $attribs and contents $html will be returned If you return $ret will be returned and may include noclasses & $html
usually copyright or history_copyright This message must be in HTML not wikitext & $link
Allows to change the fields on the form that will be generated $name
The wiki should then use memcached to cache various data To use multiple just add more items to the array To increase the weight of a make its entry a array("192.168.0.1:11211", 2))
This document describes the state of Postgres support in and is fairly well maintained The main code is very well while extensions are very hit and miss it is probably the most supported database after MySQL Much of the work in making MediaWiki database agnostic came about through the work of creating Postgres as and are nearing end of but without copying over all the usage comments General notes on the but these can almost always be programmed around *Although Postgres has a true BOOLEAN type