MisesWiki:Vector.php

<?php /** * Vector - Modern version of MonoBook with fresh look and many usability * improvements. * * @todo document * @file * @ingroup Skins */

if( !defined( 'MEDIAWIKI' ) ) { die( -1 ); }

// This code is necessary to get it to produce a printable version that // doesn't have the Mises.org header taking up half the first page. if ( isset ( $_REQUEST[ 'printable' ] ) ) { // Vector.printable.php is simply the Vector.php from MW v1.19.2. require_once ( "Vector.printable.php" ); } else {

/** * SkinTemplate class for Vector skin * @ingroup Skins */ class SkinVector extends SkinTemplate {

var $skinname = 'vector', $stylename = 'vector', $template = 'VectorTemplate', $useHeadElement = true;

/**        * Initializes output page and sets up skin-specific parameters * @param $out OutputPage object to initialize */      	public function initPage( OutputPage $out ) { global $wgLocalStylePath;

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 = $this->getRequest->getFuzzyBool( 'debug' ) ? '' : '.min'; $out->addHeadItem( 'csshover',                      	'"                );

$out->addModuleScripts( 'skins.vector' ); }

/**        * 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.vector' ); $out->addStyle( 'misesskin/main.css', 'screen'); } }

/** * QuickTemplate class for Vector skin * @ingroup Skins */ class VectorTemplate extends BaseTemplate {

/* Functions */

/**        * Outputs the entire contents of the (X)HTML page */       public function execute { global $wgVectorUseIconWatch;

// Build additional attributes for navigation urls $nav = $this->data['content_navigation'];

if ( $wgVectorUseIconWatch ) { $mode = $this->getSkin->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 ( $this->data['rtl'] ) { $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' ); ?>

  $(document).ready(function{       $('#footer').wrap(' ');        $('#footer-icons').after('  518 West Magnolia Avenue � Auburn, Alabama 36832-4501 � Phone: 334.321.2100 � Fax: 334.321.2119 Contact Us:    Ludwig von Mises Institute  Mises.org Daily About</a></li> Blog</a></li> Literature</a></li> Audio / Video</a></li> Events</a></li> Donate</a></li> </ul> <ul> Store</a></li> Academy</a></li> <li><a href="http://wiki.mises.org">Wiki</a></li> </ul>

</a> <div id="mw-js-message" style="display:none;"<?php $this->html( 'userlangattributes' ) ?>> <?php if ( $this->data['sitenotice'] ): ?> <?php $this->html( 'sitenotice' ) ?> <?php endif; ?> <h1 id="firstHeading" class="firstHeading"> <?php $this->html( 'title' ) ?> <?php if ( $this->data['isarticle'] ): ?> <?php $this->msg( 'tagline' ) ?> <?php endif; ?> <div id="contentSub"<?php $this->html( 'userlangattributes' ) ?>><?php $this->html( 'subtitle' ) ?> <?php if ( $this->data['undelete'] ): ?> <?php $this->html( 'undelete' ) ?> <?php endif; ?> <?php if( $this->data['newtalk'] ): ?> <?php $this->html( 'newtalk' ) ?> <?php endif; ?> <?php if ( $this->data['showjumplinks'] ): ?> <?php $this->msg( 'jumpto' ) ?> <a href="#mw-head"><?php $this->msg( 'jumptonavigation' ) ?></a>, <a href="#p-search"><?php $this->msg( 'jumptosearch' ) ?></a> <?php endif; ?> <?php $this->html( 'bodycontent' ) ?> <?php if ( $this->data['printfooter'] ): ?> <?php $this->html( 'printfooter' ); ?> <?php endif; ?> <?php if ( $this->data['catlinks'] ): ?> <?php $this->html( 'catlinks' ); ?> <?php endif; ?> <?php if ( $this->data['dataAfterContent'] ): ?> <?php $this->html( 'dataAfterContent' ); ?> <?php endif; ?> <?php $this->html( 'debughtml' ); ?> <?php $this->renderNavigation( 'PERSONAL' ); ?> <?php $this->renderNavigation( array( 'NAMESPACES', 'VARIANTS' ) ); ?> <?php $this->renderNavigation( array( 'VIEWS', 'ACTIONS', 'SEARCH' ) ); ?> <a style="background-image: url(<?php $this->text( 'logopath' ) ?>);" href="<?php echo htmlspecialchars( $this->data['nav_urls']['mainpage']['href'] ) ?>" <?php echo Xml::expandAttribu$ <?php $this->renderPortals( $this->data['sidebar'] ); ?> <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->getSkin->makeFooterIcon( $icon ); ?>

<?php                         	endforeach; ?> </li> <?php                  endforeach; ?> </ul> <?php endif; ?> <?php $this->printTrail; ?>

<?php }

/**        * Render a series of portals *        * @param $portals array */       private function renderPortals( $portals ) { // 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 ) continue;

echo "\n\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\n"; }       }

private function renderPortal( $name, $content, $msg = null, $hook = null ) { if ( $msg === null ) { $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 ); ?> <?php if ( is_array( $content ) ): ?> <ul> <?php foreach( $content as $key => $val ): ?> <?php echo $this->makeListItem( $key, $val ); ?>

<?php endforeach; if ( $hook !== null ) { wfRunHooks( $hook, array( &$this, true ) ); }                       ?>                </ul> <?php else: ?> <?php echo $content; /* Allow raw HTML block to be defined by extensions */ ?> <?php endif; ?> <?php }

/**        * Render one or more navigations elements by name, automatically reveresed * when UI is in RTL mode *        * @param $elements array */       private function renderNavigation( $elements ) { global $wgVectorUseSimpleSearch;

// 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 ( $this->data['rtl'] ) { $elements = array_reverse( $elements ); }               // Render elements foreach ( $elements as $name => $element ) { echo "\n\n"; switch ( $element ) { case 'NAMESPACES': ?> <div id="p-namespaces" class="vectorTabs<?php if ( count( $this->data['namespace_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">

<ul<?php $this->html( 'userlangattributes' ) ?>> <?php foreach ( $this->data['namespace_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> <?php break; case 'VARIANTS': ?> <div id="p-variants" class="vectorMenu<?php if ( count( $this->data['variant_urls'] ) == 0 ) echo ' emptyPortlet'; ?>"> <?php foreach ( $this->data['variant_urls'] as $link ): ?> <?php if ( stripos( $link['attributes'], 'selected' ) !== false ): ?> <?php echo htmlspecialchars( $link['text'] ) ?> <?php endif; ?> <?php endforeach; ?> <?php $this->msg( 'variants' ) ?> <a href="#"></a> <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> <?php break; case 'VIEWS': ?> <div id="p-views" class="vectorTabs<?php if ( count( $this->data['view_urls'] ) == 0 ) { echo ' emptyPortlet'; } ?>">

<ul<?php $this->html('userlangattributes') ?>> <?php foreach ( $this->data['view_urls'] as $link ): ?> <li<?php echo $link['attributes'] ?>> <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> </li> <?php endforeach; ?> </ul> <?php break; case 'ACTIONS': ?> <div id="p-cactions" class="vectorMenu<?php if ( count( $this->data['action_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">

<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> <?php break; case 'PERSONAL': ?> <div id="p-personal" class="<?php if ( count( $this->data['personal_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">

<ul<?php $this->html( 'userlangattributes' ) ?>> <?php         	        foreach( $this->getPersonalTools as $key => $item ) { ?> <?php echo $this->makeListItem( $key, $item ); ?>

<?php                 	} ?> </ul> <?php break; case 'SEARCH': ?>

<form action="<?php $this->text( 'wgScript' ) ?>" id="searchform"> <?php if ( $wgVectorUseSimpleSearch && $this->getSkin->getUser->getOption( 'vector-simplesearch' ) ): ?> <?php if ( $this->data['rtl'] ): ?> <?php echo $this->makeSearchButton( 'image', array( 'id' => 'searchButton', 'src' => $this->getSkin->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->getSkin->getSkinStylePath( 'images/search-ltr.png' ) ) ); ?> <?php endif; ?> <?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; ?> <input type='hidden' name="title" value="<?php $this->text( 'searchtitle' ) ?>"/> <?php

break; }                      	echo "\n\n"; }      	} } }