Bartosz Dziewoński has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/176517

Change subject: Added new skin called "Apex"
......................................................................

Added new skin called "Apex"

Change-Id: I37752493310358558727c9639584a56f7d1b2f8a
---
A languages/messages/MessagesEn.php
A resources/Resources.php
A skins/Apex.php
A skins/apex/apex.js
A skins/apex/images/menu-icon-hover.png
A skins/apex/images/menu-icon.png
A skins/apex/images/nav-icon-hover.png
A skins/apex/images/nav-icon.png
A skins/apex/images/search-icon.png
A skins/apex/images/toc-icon-hover.png
A skins/apex/images/toc-icon.png
A skins/apex/images/user-icon.png
A skins/apex/images/watch-icon-loading.gif
A skins/apex/images/watch-icons.png
A skins/apex/screen-narrow.css
A skins/apex/screen-wide.css
A skins/apex/screen.css
17 files changed, 919 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/skins/apex 
refs/changes/17/176517/1

diff --git a/languages/messages/MessagesEn.php 
b/languages/messages/MessagesEn.php
new file mode 100644
index 0000000..4118c13
--- /dev/null
+++ b/languages/messages/MessagesEn.php
@@ -0,0 +1,17 @@
+<?php
+# Apex skin
+'apex-action-addsection'       => 'Add topic',
+'apex-action-delete'           => 'Delete',
+'apex-action-move'             => 'Move',
+'apex-action-protect'          => 'Protect',
+'apex-action-undelete'         => 'Undelete',
+'apex-action-unprotect'        => 'Change protection',
+'apex-simplesearch-preference' => 'Enable enhanced search suggestions (Vector 
skin only)',
+'apex-view-create'             => 'Create',
+'apex-view-edit'               => 'Edit',
+'apex-view-history'            => 'View history',
+'apex-view-view'               => 'Read',
+'apex-view-viewsource'         => 'View source',
+'apex.css'              => '/* CSS placed here will affect users of the Apex 
skin */', # only translate this message to other languages if you have to 
change it
+'apex.js'              => '/* Any JavaScript here will be loaded for users 
using the Apex skin */', # only translate this message to other languages if 
you have to change it
+'skinname-apex'      => 'Apex', # only translate this message to other 
languages if you have to change it
diff --git a/resources/Resources.php b/resources/Resources.php
new file mode 100644
index 0000000..8b93fa9
--- /dev/null
+++ b/resources/Resources.php
@@ -0,0 +1,14 @@
+<?php
+       'skins.apex' => array(
+               'styles' => array(
+                       'common/commonElements.css' => array( 'media' => 
'screen' ),
+                       'common/commonContent.css' => array( 'media' => 
'screen' ),
+                       'common/commonInterface.css' => array( 'media' => 
'screen' ),
+                       'apex/screen.css' => array( 'media' => 'screen' ),
+                       'apex/screen-narrow.css' => array( 'media' => 'screen 
and (max-width: 700px)' ),
+                       'apex/screen-wide.css' => array( 'media' => 'screen and 
(min-width: 982px)' ),
+               ),
+               'scripts' => 'apex/apex.js',
+               'remoteBasePath' => $GLOBALS['wgStylePath'],
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+       ),
diff --git a/skins/Apex.php b/skins/Apex.php
new file mode 100644
index 0000000..ddb194e
--- /dev/null
+++ b/skins/Apex.php
@@ -0,0 +1,441 @@
+<?php
+/**
+ * Apex - Modern version of Vector with fresh look and many usability
+ * improvements.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @todo document
+ * @file
+ * @ingroup Skins
+ */
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+       die( -1 );
+}
+
+/**
+ * SkinTemplate class for Apex skin
+ * @ingroup Skins
+ */
+class SkinApex extends SkinTemplate {
+
+       protected static $bodyClasses = array( 'apex-animateLayout' );
+
+       var $skinname = 'apex', $stylename = 'apex',
+               $template = 'ApexTemplate', $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',
+                       '<!--[if lt IE 7]><style 
type="text/css">body{behavior:url("' .
+                               htmlspecialchars( $wgLocalStylePath ) .
+                               
"/{$this->stylename}/csshover{$min}.htc\")}</style><![endif]-->"
+               );
+               $out->addHeadItem( 'ie9-gradient',
+                       '<!--[if gte IE 9]><style type="text/css">' .
+                               '.gradient { filter: none; 
}</style><![endif]-->'
+               );
+
+               $out->addModuleScripts( 'skins.apex' );
+       }
+
+       /**
+        * 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.apex' );
+       }
+
+       /**
+        * Adds classes to the body element.
+        *
+        * @param $out OutputPage object
+        * @param &$bodyAttrs Array of attributes that will be set on the body 
element
+        */
+       function addToBodyAttributes( $out, &$bodyAttrs ) {
+               if ( isset( $bodyAttrs['class'] ) && strlen( 
$bodyAttrs['class'] ) > 0 ) {
+                       $bodyAttrs['class'] .= ' ' . implode( ' ', 
static::$bodyClasses );
+               } else {
+                       $bodyAttrs['class'] = implode( ' ', 
static::$bodyClasses );
+               }
+       }
+}
+
+/**
+ * QuickTemplate class for Apex skin
+ * @ingroup Skins
+ */
+class ApexTemplate extends BaseTemplate {
+
+       /* Functions */
+
+       /**
+        * Outputs the entire contents of the (X)HTML page
+        */
+       public function execute() {
+               global $wgSitename;
+
+               // Build additional attributes for navigation urls
+               $nav = $this->data['content_navigation'];
+               $mode = $this->getSkin()->getUser()->isWatched( 
$this->getSkin()->getRelevantTitle() ) ?
+                       'unwatch' : 'watch';
+               if ( isset( $nav['actions'][$mode] ) ) {
+                       $nav['views'][$mode] = $nav['actions'][$mode];
+                       $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' );
+?>
+               <div id="content" class="mw-body">
+                       <a id="top"></a>
+                       <div id="mw-js-message" style="display:none;"<?php 
$this->html( 'userlangattributes' ) ?>></div>
+                       <?php if ( $this->data['sitenotice'] ): ?>
+                       <div id="siteNotice"><?php $this->html( 'sitenotice' ) 
?></div>
+                       <?php endif; ?>
+                       <h1 id="firstHeading" class="firstHeading"><span 
dir="auto"><?php $this->html( 'title' ) ?></span></h1>
+                       <div id="bodyContent">
+                               <?php if ( $this->data['isarticle'] ): ?>
+                               <div id="siteSub"><?php $this->msg( 'tagline' ) 
?></div>
+                               <?php endif; ?>
+                               <div id="contentSub"<?php $this->html( 
'userlangattributes' ) ?>><?php $this->html( 'subtitle' ) ?></div>
+                               <?php if ( $this->data['undelete'] ): ?>
+                               <div id="contentSub2"><?php $this->html( 
'undelete' ) ?></div>
+                               <?php endif; ?>
+                               <?php if( $this->data['newtalk'] ): ?>
+                               <div class="usermessage"><?php $this->html( 
'newtalk' )  ?></div>
+                               <?php endif; ?>
+                               <?php if ( $this->data['showjumplinks'] ): ?>
+                               <div id="jump-to-nav" class="mw-jump">
+                                       <?php $this->msg( 'jumpto' ) ?>
+                                       <a href="#mw-head"><?php $this->msg( 
'jumptonavigation' ) ?></a><?php $this->msg( 'comma-separator' ) ?>
+                                       <a href="#p-search"><?php $this->msg( 
'jumptosearch' ) ?></a>
+                               </div>
+                               <?php endif; ?>
+                               <?php $this->html( 'bodycontent' ) ?>
+                               <?php if ( $this->data['printfooter'] ): ?>
+                               <div class="printfooter">
+                               <?php $this->html( 'printfooter' ); ?>
+                               </div>
+                               <?php endif; ?>
+                               <?php if ( $this->data['catlinks'] ): ?>
+                               <?php $this->html( 'catlinks' ); ?>
+                               <?php endif; ?>
+                               <?php if ( $this->data['dataAfterContent'] ): ?>
+                               <?php $this->html( 'dataAfterContent' ); ?>
+                               <?php endif; ?>
+                               <div class="visualClear"></div>
+                               <?php $this->html( 'debughtml' ); ?>
+                       </div>
+               </div>
+               <div id="mw-head" class="noprint">
+                       <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' ) ) 
?>><span><?php echo $wgSitename ?></span></a></div>
+                       <?php $this->renderNavigation( array( 'SEARCH', 
'PERSONAL' ) ); ?>
+                       <div class="apex-nav">
+                               <div class="apex-nav-left">
+                                       <?php $this->renderNavigation( array( 
'NAMESPACES', 'VARIANTS' ) ); ?>
+                               </div>
+                               <div class="apex-nav-right">
+                                       <?php $this->renderNavigation( array( 
'VIEWS', 'ACTIONS' ) ); ?>
+                               </div>
+                       </div>
+               </div>
+               <div id="mw-panel" class="noprint">
+                       <div class="apex-flyout-pull"></div>
+                       <?php $this->renderPortals( $this->data['sidebar'] ); ?>
+               </div>
+               <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; ?>
+                       <div style="clear:both"></div>
+               </div>
+               <?php $this->printTrail(); ?>
+       </body>
+</html>
+<?php
+       }
+
+       /**
+        * Render a series of portals
+        *
+        * @param $portals array
+        */
+       protected 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;
+                       }
+                       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;
+                       }
+               }
+       }
+
+       /**
+        * @param $name string
+        * @param $content array
+        * @param $msg null|string
+        * @param $hook null|string|array
+        */
+       protected 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 ); ?></h5>
+       <div class="body">
+<?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; ?>
+       </div>
+</div>
+<?php
+       }
+
+       /**
+        * Render one or more navigations elements by name, automatically 
reveresed
+        * when UI is in RTL mode
+        *
+        * @param $elements array
+        */
+       protected function renderNavigation( $elements ) {
+               // 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 $element ) {
+                       switch ( $element ) {
+                               case 'NAMESPACES':
+?>
+<div id="p-namespaces" class="apex-tabs<?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="apex-menu<?php if ( count( 
$this->data['variant_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
+       <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>
+       <h5><span><?php $this->msg( 'variants' ) ?></span><a href="#"></a></h5>
+       <div class="menu">
+               <ul>
+                       <?php foreach ( $this->data['variant_urls'] as $link ): 
?>
+                               <li<?php echo $link['attributes'] ?>><a 
href="<?php echo htmlspecialchars( $link['href'] ) ?>" lang="<?php echo 
htmlspecialchars( $link['lang'] ) ?>" hreflang="<?php echo htmlspecialchars( 
$link['hreflang'] ) ?>" <?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="apex-tabs<?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="apex-menu<?php if ( count( 
$this->data['action_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
+       <h5><span><?php $this->msg( 'actions' ) ?></span><a href="#"></a></h5>
+       <div class="apex-menu-popup">
+               <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 if ( $key === 'userpage' ): ?>
+                       <?php echo $this->makeListItem( $key, $item ); ?>
+                       <?php endif; ?>
+               <?php endforeach; ?>
+       </ul>
+       <ul<?php $this->html( 'userlangattributes' ) ?> class="apex-menu-popup">
+               <?php foreach( $this->getPersonalTools() as $key => $item ): ?>
+                       <?php if ( $key !== 'userpage' ): ?>
+                       <?php echo $this->makeListItem( $key, $item ); ?>
+                       <?php endif; ?>
+               <?php endforeach; ?>
+       </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">
+               <div id="simpleSearch">
+                       <?php echo $this->makeSearchInput( array( 'id' => 
'searchInput', 'type' => 'search' ) ); ?>
+                       <?php echo $this->makeSearchButton( 'image', array( 
'id' => 'searchButton', 'src' => $this->getSkin()->getSkinStylePath( 
'images/search-icon.png' ), 'width' => '12', 'height' => '13' ) ); ?>
+                       <input type='hidden' name="title" value="<?php 
$this->text( 'searchtitle' ) ?>"/>
+               </div>
+       </form>
+</div>
+<?php
+                               break;
+                       }
+               }
+       }
+}
diff --git a/skins/apex/apex.js b/skins/apex/apex.js
new file mode 100644
index 0000000..2eae1b4
--- /dev/null
+++ b/skins/apex/apex.js
@@ -0,0 +1,5 @@
+/*
+ * Apex-specific scripts
+ */
+jQuery( function( $ ) {
+});
diff --git a/skins/apex/images/menu-icon-hover.png 
b/skins/apex/images/menu-icon-hover.png
new file mode 100644
index 0000000..b232a2d
--- /dev/null
+++ b/skins/apex/images/menu-icon-hover.png
Binary files differ
diff --git a/skins/apex/images/menu-icon.png b/skins/apex/images/menu-icon.png
new file mode 100644
index 0000000..805817a
--- /dev/null
+++ b/skins/apex/images/menu-icon.png
Binary files differ
diff --git a/skins/apex/images/nav-icon-hover.png 
b/skins/apex/images/nav-icon-hover.png
new file mode 100644
index 0000000..ac42571
--- /dev/null
+++ b/skins/apex/images/nav-icon-hover.png
Binary files differ
diff --git a/skins/apex/images/nav-icon.png b/skins/apex/images/nav-icon.png
new file mode 100644
index 0000000..9d764b1
--- /dev/null
+++ b/skins/apex/images/nav-icon.png
Binary files differ
diff --git a/skins/apex/images/search-icon.png 
b/skins/apex/images/search-icon.png
new file mode 100644
index 0000000..1db2eb2
--- /dev/null
+++ b/skins/apex/images/search-icon.png
Binary files differ
diff --git a/skins/apex/images/toc-icon-hover.png 
b/skins/apex/images/toc-icon-hover.png
new file mode 100644
index 0000000..f60bd74
--- /dev/null
+++ b/skins/apex/images/toc-icon-hover.png
Binary files differ
diff --git a/skins/apex/images/toc-icon.png b/skins/apex/images/toc-icon.png
new file mode 100644
index 0000000..6f9f0f6
--- /dev/null
+++ b/skins/apex/images/toc-icon.png
Binary files differ
diff --git a/skins/apex/images/user-icon.png b/skins/apex/images/user-icon.png
new file mode 100644
index 0000000..57f9f8d
--- /dev/null
+++ b/skins/apex/images/user-icon.png
Binary files differ
diff --git a/skins/apex/images/watch-icon-loading.gif 
b/skins/apex/images/watch-icon-loading.gif
new file mode 100644
index 0000000..618c308
--- /dev/null
+++ b/skins/apex/images/watch-icon-loading.gif
Binary files differ
diff --git a/skins/apex/images/watch-icons.png 
b/skins/apex/images/watch-icons.png
new file mode 100644
index 0000000..3673054
--- /dev/null
+++ b/skins/apex/images/watch-icons.png
Binary files differ
diff --git a/skins/apex/screen-narrow.css b/skins/apex/screen-narrow.css
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/skins/apex/screen-narrow.css
diff --git a/skins/apex/screen-wide.css b/skins/apex/screen-wide.css
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/skins/apex/screen-wide.css
diff --git a/skins/apex/screen.css b/skins/apex/screen.css
new file mode 100644
index 0000000..53baca8
--- /dev/null
+++ b/skins/apex/screen.css
@@ -0,0 +1,442 @@
+html,
+body {
+       height: 100%;
+       margin: 0;
+       padding: 0;
+       font-family: sans-serif;
+       font-size: 100%;
+}
+
+a {
+       color: #006aae;
+}
+
+a:visited {
+       color: #0b0080;
+}
+
+#p-logo {
+       position: absolute;
+       top: 0;
+       left: 3em;
+}
+#p-logo a span {
+       display: block;
+       margin-top: 0.5em;
+       font-size: 1.5em;
+}
+
+#content {
+       margin: 7em 3em 3em 3em;
+       line-height: 2em;
+}
+
+.emptyPortlet {
+       display: none;
+}
+
+.apex-nav {
+       line-height: 1.5em;
+       position: absolute;
+       top: 4em;
+       left: 0;
+       right: 0;
+       padding: 0 3em;
+       border-top: solid 1px #d5eaed;
+       border-bottom: solid 1px #d5eaed;
+       background: #ffffff; /* Old browsers */
+       background: #ffffff; /* Old browsers */
+       background: #ffffff; /* Old browsers */
+       /* IE9 SVG, needs conditional override of 'filter' to 'none' */
+       background: 
url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlZGY4ZjkiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
+       background: -moz-linear-gradient(top,  #ffffff 0%, #edf8f9 100%); /* 
FF3.6+ */
+       background: -webkit-gradient(linear, left top, left bottom, 
color-stop(0%,#ffffff), color-stop(100%,#edf8f9)); /* Chrome,Safari4+ */
+       background: -webkit-linear-gradient(top,  #ffffff 0%,#edf8f9 100%); /* 
Chrome10+,Safari5.1+ */
+       background: -o-linear-gradient(top,  #ffffff 0%,#edf8f9 100%); /* Opera 
11.10+ */
+       background: -ms-linear-gradient(top,  #ffffff 0%,#edf8f9 100%); /* 
IE10+ */
+       background: linear-gradient(to bottom,  #ffffff 0%,#edf8f9 100%); /* 
W3C */
+       filter: progid:DXImageTransform.Microsoft.gradient( 
startColorstr='#ffffff', endColorstr='#edf8f9',GradientType=0 ); /* IE6-8 */
+}
+
+.apex-nav-left {
+       float: left;
+}
+
+.apex-nav-right {
+       float: right;
+}
+
+.apex-nav,
+.apex-nav-left,
+.apex-nav-right {
+       height: 2em;
+}
+
+.apex-tabs {
+       float: left;
+}
+
+.apex-tabs h5 {
+       display: none;
+}
+
+.apex-tabs ul,
+.apex-tabs li {
+       list-style: none;
+       margin: 0;
+       padding: 0;
+}
+
+.apex-tabs li {
+       float: left;
+       padding: 0.25em 0.75em;
+}
+
+.apex-tabs .selected {
+       background-color: white;
+       border: solid 1px #d5eaed;
+       border-bottom: solid 1px #ffffff;
+       -webkit-border-radius: 0.25em 0.25em 0 0;
+       -moz-border-radius: 0.25em 0.25em 0 0;
+       border-radius: 0.25em 0.25em 0 0;
+       padding-top: 0.5em;
+       margin-top: -0.33em;
+}
+
+.apex-tabs .selected a {
+       color: #333333;
+}
+
+.apex-menu {
+       float: left;
+}
+
+.apex-menu h5 {
+       float: left;
+       margin: 0;
+       padding: 0.25em 0.75em;
+       font-weight: normal;
+}
+
+.apex-menu-popup {
+       margin-top: 2em;
+       position: absolute;
+       display: none;
+       border: solid 1px #d5eaed;
+       -webkit-border-radius: 0 0 0.25em 0.25em;
+       -moz-border-radius: 0 0 0.25em 0.25em;
+       border-radius: 0 0 0.25em 0.25em;
+       background-color: #fff;
+       background-color: rgba(255, 255, 255, 0.98);
+       -webkit-box-shadow:  0 0.25em 1em 0 rgba(0, 0, 0, 0.25);
+       -moz-box-shadow:  0 0.25em 1em 0 rgba(0, 0, 0, 0.25);
+       box-shadow:  0 0.25em 1em 0 rgba(0, 0, 0, 0.25);
+}
+
+.apex-menu-popup ul,
+.apex-menu-popup li {
+       list-style: none;
+       margin: 0.25em 0;
+       padding: 0;
+}
+
+.apex-menu-popup a {
+       display: block;
+       padding: 0.25em 1.5em;
+}
+
+.apex-menu-popup a:hover {
+       background-color: #d5eaed;
+       background-color: rgba(213, 234, 237, 0.75);
+       text-decoration: none;
+}
+
+.apex-menu:hover .apex-menu-popup {
+       display: block;
+}
+
+#mw-head {
+       position: absolute;
+       top: 0;
+       left: 0;
+       right: 0;
+}
+
+#mw-panel,
+#toc {
+       position: absolute;
+       top: 6em;
+       margin: 0;
+       padding: 0;
+       margin-top: 1px;
+       height: 0;
+       border: solid 1px transparent;
+       background-color: transparent;
+       font-size: 1em;
+       z-index: 200;
+}
+
+#mw-panel {
+       left: 0;
+       border-left: none;
+}
+#toc {
+       right: 0;
+       border-right: none;
+}
+#p-navigation {
+       margin-top: 0.5em;
+}
+#p-navigation h5,
+#toctitle h2,
+#toctitle span {
+       display: none;
+}
+
+#toc:hover,
+#mw-panel:hover {
+       height: auto;
+       -webkit-box-shadow:  0 0.25em 1em 0 rgba(0, 0, 0, 0.25);
+       -moz-box-shadow:  0 0.25em 1em 0 rgba(0, 0, 0, 0.25);
+       box-shadow:  0 0.25em 1em 0 rgba(0, 0, 0, 0.25);
+       border-color: #d5eaed;
+       background-color: #fff;
+       background-color: rgba(255, 255, 255, 0.98);
+}
+#mw-panel:hover {
+       -webkit-border-radius: 0 0 0.25em 0;
+       -moz-border-radius: 0 0 0.25em 0;
+       border-radius: 0 0 0.25em 0;
+}
+#toc:hover {
+       -webkit-border-radius: 0 0 0 0.25em;
+       -moz-border-radius: 0 0 0 0.25em;
+       border-radius: 0 0 0 0.25em;
+}
+
+#mw-panel .apex-flyout-pull {
+       display: block;
+       position: absolute;
+       top: -2em;
+       left: 0;
+       width: 3em;
+       height: 2em;
+       background-image: url(images/nav-icon.png);
+       background-position: center center;
+       background-repeat: no-repeat;
+       cursor: pointer;
+}
+#toctitle {
+       position: absolute;
+       top: -2em;
+       right: 0;
+       width: 3em;
+       height: 2em;
+       background-image: url(images/toc-icon.png);
+       background-position: center center;
+       background-repeat: no-repeat;
+       cursor: pointer;
+}
+
+#mw-panel:hover .apex-flyout-pull {
+       background-image: url(images/nav-icon-hover.png);
+}
+
+#toc:hover #toctitle {
+       background-image: url(images/toc-icon-hover.png);
+}
+
+#toc ul,
+#mw-panel .portal {
+       padding: 0.5em 1.5em 1em 1.5em;
+       display: none;
+}
+
+#toc:hover ul {
+       margin-top: 0.5em;
+       display: block;
+}
+
+#toc ul ul {
+       padding: 0 0 0 0;
+}
+
+#mw-panel:hover .portal {
+       display: block;
+}
+
+#mw-panel ul {
+       list-style: none;
+       margin: 0;
+       padding: 0;
+}
+
+#p-personal {
+       float: right;
+       margin-right: 2em;
+       margin-top: 1em;
+       position: relative;
+}
+#p-personal h5 {
+       display: none;
+}
+#p-personal ul {
+       margin: 0;
+       padding: 0;
+       list-style: none;
+       padding-bottom: 0;
+}
+#p-personal li {
+       white-space: nowrap;
+}
+
+#p-personal ul.apex-menu-popup {
+       position: absolute;
+       left: -0.5em;
+       display: none;
+       z-index: 100;
+}
+#p-personal:hover .apex-menu-popup {
+       display: block;
+}
+#pt-userpage {
+       padding-right: 18px;
+       background-image: url(images/menu-icon.png);
+       background-position: right center;
+       background-repeat: no-repeat;
+}
+#p-personal:hover #pt-userpage {
+       background-image: url(images/menu-icon-hover.png);
+}
+
+#pt-userpage a {
+       padding-left: 18px;
+       background-image: url(images/user-icon.png);
+       background-position: left 40%;
+       background-repeat: no-repeat;
+}
+
+#p-search {
+       float: right;
+       margin-right: 3em;
+       margin-top: 1em;
+}
+#p-search h5 {
+       display: none;
+}
+#searchInput{
+       width: 15em;
+       font-size: 1em;
+}
+#searchButton {
+       background-color: white;
+       border: none;
+       font-size: 1em;
+       opacity: 0.75;
+       cursor: pointer;
+}
+#searchButton:hover {
+       opacity: 1;
+}
+
+#ca-watch,
+#ca-unwatch {
+       padding-left: 0.25em;
+       padding-right: 0.25em;
+}
+#ca-watch a,
+#ca-unwatch a {
+       display: inline-block;
+       padding-left: 26px;
+       width: 0;
+       overflow: hidden;
+       background-image: url(images/watch-icons.png);
+       background-position: left center;
+       background-repeat: no-repeat;
+}
+#ca-unwatch a {
+       background-position: -43px 50%;
+}
+#ca-watch a {
+       background-position: 5px 50%;
+}
+#ca-unwatch a:hover,
+#ca-unwatch a:focus {
+       background-position: -67px 50%;
+}
+#ca-watch a:hover,
+#ca-watch a:focus {
+       background-position: -19px 50%;
+}
+#ca-unwatch .loading,
+#ca-watch .loading {
+       /* @embed */
+       background-image: url(images/watch-icon-loading.gif);
+       background-position: 5px 50%;
+}
+
+#p-cactions {
+       position: relative;
+       padding-right: 0.5em;
+}
+
+#p-cactions h5 {
+       padding-right: 18px;
+       background-image: url(images/menu-icon.png);
+       background-position: right center;
+       background-repeat: no-repeat;
+       cursor: pointer;
+}
+
+#p-cactions:hover h5 {
+       background-image: url(images/menu-icon-hover.png);
+}
+
+#p-cactions .apex-menu-popup {
+       position: absolute;
+       right: -0.5em;
+       white-space: nowrap;
+}
+
+#footer {
+       background-color: #eaf2f7;
+       border-top: solid 1px #d5eaed;
+       font-size: 0.8em;
+}
+
+#footer ul {
+       float: left;
+       list-style: none;
+       margin: 1em 3em;
+       padding: 0;
+}
+
+ul#footer-icons {
+       float: right;
+}
+
+#footer li {
+       list-style: none;
+       margin: 0;
+       padding: 0.25em;
+}
+
+div#mw-js-message {
+       background-color: #fff;
+       background-color: rgba(255, 255, 255, 0.93);
+       font-size: 0.8em;
+       position: absolute;
+       margin: 0;
+       padding: 1em 2em;
+       right: 3em;
+       top: 8.5em;
+       width: 20em;
+       z-index: 10000;
+       border: solid 1px #a7d7f9;
+       -webkit-border-radius: 0.25em;
+       -moz-border-radius: 0.25em;
+       border-radius: 0.25em;
+       -webkit-box-shadow: 0 0.125em 0.5em 0 rgba(0, 0, 0, 0.25);
+       -moz-box-shadow: 0 0.125em 0.5em 0 rgba(0, 0, 0, 0.25);
+       box-shadow: 0 0.125em 0.5em 0 rgba(0, 0, 0, 0.25);
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/176517
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I37752493310358558727c9639584a56f7d1b2f8a
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/skins/apex
Gerrit-Branch: master
Gerrit-Owner: Bartosz Dziewoński <[email protected]>
Gerrit-Reviewer: Trevor Parscal <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to