Move Vector skin from core

This is the final step of the process described at
<https://www.mediawiki.org/wiki/Separating_skins_from_core_MediaWiki>.

Corresponding core change: Idfc38503.

Change-Id: I84fcf7ce6385b8323544cafe6912a00f1886d20d
This commit is contained in:
Bartosz Dziewoński 2014-08-07 13:38:34 +02:00
parent 743c868aee
commit d28f09df31
411 changed files with 9547 additions and 0 deletions

342
COPYING Normal file
View File

@ -0,0 +1,342 @@
== GNU GENERAL PUBLIC LICENSE ==
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
=== Preamble ===
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
== TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ==
'''0.''' This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
'''1.''' You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
'''2.''' You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
'''a)''' You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
'''b)''' You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
'''c)''' If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
'''3.''' You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
'''a)''' Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
'''b)''' Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
'''c)''' Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
'''4.''' You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
'''5.''' You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
'''6.''' Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
'''7.''' If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
'''8.''' If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
'''9.''' The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
'''10.''' If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
=== NO WARRANTY ===
'''11.''' BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
'''12.''' IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
'''END OF TERMS AND CONDITIONS'''
== How to Apply These Terms to Your New Programs ==
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
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
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

83
SkinVector.php Normal file
View File

@ -0,0 +1,83 @@
<?php
/**
* Vector - Modern version of MonoBook 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
*
* @file
* @ingroup Skins
*/
/**
* SkinTemplate class for Vector skin
* @ingroup Skins
*/
class SkinVector extends SkinTemplate {
public $skinname = 'vector';
public $stylename = 'Vector';
public $template = 'VectorTemplate';
protected static $bodyClasses = array( 'vector-animateLayout' );
/**
* Initializes output page and sets up skin-specific parameters
* @param OutputPage $out 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 file 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->addModules( array( 'skins.vector.js' ) );
}
/**
* Loads skin and user CSS files.
* @param OutputPage $out
*/
function setupSkinUserCss( OutputPage $out ) {
parent::setupSkinUserCss( $out );
$styles = array( 'mediawiki.skinning.interface', 'skins.vector.styles' );
wfRunHooks( 'SkinVectorStyleModules', array( $this, &$styles ) );
$out->addModuleStyles( $styles );
}
/**
* Adds classes to the body element.
*
* @param OutputPage $out
* @param array &$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 );
}
}
}

104
Vector.php Normal file
View File

@ -0,0 +1,104 @@
<?php
/**
* Vector - Modern version of MonoBook 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
*
* @file
* @ingroup Skins
*/
$wgExtensionCredits['skin'][] = array(
'path' => __FILE__,
'name' => 'Vector',
'namemsg' => 'skinname-vector',
'descriptionmsg' => 'vector-skin-desc',
'url' => 'https://www.mediawiki.org/wiki/Skin:Vector',
'author' => array( 'Trevor Parscal', 'Roan Kattouw', '...' ),
'license-name' => 'GPLv2+',
);
// Register files
$wgAutoloadClasses['SkinVector'] = __DIR__ . '/SkinVector.php';
$wgAutoloadClasses['VectorTemplate'] = __DIR__ . '/VectorTemplate.php';
$wgMessagesDirs['Vector'] = __DIR__ . '/i18n';
// Register skin
$wgValidSkinNames['vector'] = 'Vector';
// Register modules
$wgResourceModules['skins.vector.styles'] = array(
'styles' => array(
'screen.less' => array( 'media' => 'screen' ),
'screen-hd.less' => array( 'media' => 'screen and (min-width: 982px)' ),
),
'remoteSkinPath' => 'Vector',
'localBasePath' => __DIR__,
);
$wgResourceModules['skins.vector.js'] = array(
'scripts' => array(
'collapsibleTabs.js',
'vector.js',
),
'position' => 'top',
'dependencies' => array(
'jquery.throttle-debounce',
'jquery.tabIndex',
),
'remoteSkinPath' => 'Vector',
'localBasePath' => __DIR__,
);
// Apply module customizations
$wgResourceModuleSkinStyles['vector'] = array(
'jquery.tipsy' => 'skinStyles/jquery.tipsy.less',
'jquery.ui.core' => array(
'skinStyles/jquery.ui/jquery.ui.core.css',
'skinStyles/jquery.ui/jquery.ui.theme.css',
),
'jquery.ui.accordion' => 'skinStyles/jquery.ui/jquery.ui.accordion.css',
'jquery.ui.autocomplete' => 'skinStyles/jquery.ui/jquery.ui.autocomplete.css',
'jquery.ui.button' => 'skinStyles/jquery.ui/jquery.ui.button.css',
'jquery.ui.datepicker' => 'skinStyles/jquery.ui/jquery.ui.datepicker.css',
'jquery.ui.dialog' => 'skinStyles/jquery.ui/jquery.ui.dialog.css',
'jquery.ui.progressbar' => 'skinStyles/jquery.ui/jquery.ui.progressbar.css',
'jquery.ui.resizable' => 'skinStyles/jquery.ui/jquery.ui.resizable.css',
'jquery.ui.selectable' => 'skinStyles/jquery.ui/jquery.ui.selectable.css',
'jquery.ui.slider' => 'skinStyles/jquery.ui/jquery.ui.slider.css',
'jquery.ui.tabs' => 'skinStyles/jquery.ui/jquery.ui.tabs.css',
'mediawiki.notification' => 'skinStyles/mediawiki.notification.less',
'mediawiki.special' => 'skinStyles/mediawiki.special.less',
'mediawiki.special.preferences' => 'skinStyles/mediawiki.special.preferences.less',
'remoteSkinPath' => 'Vector',
'localBasePath' => __DIR__,
);
// Configuration options
/**
* Search form look.
* - true = use an icon search button
* - false = use Go & Search buttons
*/
$wgVectorUseSimpleSearch = true;
/**
* Watch and unwatch as an icon rather than a link.
* - true = use an icon watch/unwatch button
* - false = use watch/unwatch text link
*/
$wgVectorUseIconWatch = true;

591
VectorTemplate.php Normal file
View File

@ -0,0 +1,591 @@
<?php
/**
* Vector - Modern version of MonoBook 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
*
* @file
* @ingroup Skins
*/
/**
* 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()->getUser()->isWatched( $this->getSkin()->getRelevantTitle() )
? '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' );
?>
<div id="mw-page-base" class="noprint"></div>
<div id="mw-head-base" class="noprint"></div>
<div id="content" class="mw-body" role="main">
<a id="top"></a>
<?php
if ( $this->data['sitenotice'] ) {
?>
<div id="siteNotice"><?php $this->html( 'sitenotice' ) ?></div>
<?php
}
?>
<h1 id="firstHeading" class="firstHeading" lang="<?php
$this->data['pageLanguage'] =
$this->getSkin()->getTitle()->getPageViewLanguage()->getHtmlCode();
$this->text( 'pageLanguage' );
?>"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1>
<?php $this->html( 'prebodyhtml' ) ?>
<div id="bodyContent" class="mw-body-content">
<?php
if ( $this->data['isarticle'] ) {
?>
<div id="siteSub"><?php $this->msg( 'tagline' ) ?></div>
<?php
}
?>
<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
}
?>
<?php
if ( $this->data['newtalk'] ) {
?>
<div class="usermessage"><?php $this->html( 'newtalk' ) ?></div>
<?php
}
?>
<div id="jump-to-nav" class="mw-jump">
<?php $this->msg( 'jumpto' ) ?>
<a href="#mw-navigation"><?php
$this->msg( 'jumptonavigation' )
?></a><?php
$this->msg( 'comma-separator' )
?>
<a href="#p-search"><?php $this->msg( 'jumptosearch' ) ?></a>
</div>
<?php $this->html( 'bodycontent' ) ?>
<?php
if ( $this->data['printfooter'] ) {
?>
<div class="printfooter">
<?php $this->html( 'printfooter' ); ?>
</div>
<?php
}
?>
<?php
if ( $this->data['catlinks'] ) {
?>
<?php
$this->html( 'catlinks' );
?>
<?php
}
?>
<?php
if ( $this->data['dataAfterContent'] ) {
?>
<?php
$this->html( 'dataAfterContent' );
?>
<?php
}
?>
<div class="visualClear"></div>
<?php $this->html( 'debughtml' ); ?>
</div>
</div>
<div id="mw-navigation">
<h2><?php $this->msg( 'navigation-heading' ) ?></h2>
<div id="mw-head">
<?php $this->renderNavigation( 'PERSONAL' ); ?>
<div id="left-navigation">
<?php $this->renderNavigation( array( 'NAMESPACES', 'VARIANTS' ) ); ?>
</div>
<div id="right-navigation">
<?php $this->renderNavigation( array( 'VIEWS', 'ACTIONS', 'SEARCH' ) ); ?>
</div>
</div>
<div id="mw-panel">
<div id="p-logo" role="banner"><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>
<?php $this->renderPortals( $this->data['sidebar'] ); ?>
</div>
</div>
<div id="footer" role="contentinfo"<?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
}
?>
</ul>
<?php
}
?>
<?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
}
?>
</li>
<?php
}
?>
</ul>
<?php
}
?>
<div style="clear:both"></div>
</div>
<?php $this->printTrail(); ?>
</body>
</html>
<?php
}
/**
* Render a series of portals
*
* @param array $portals
*/
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'] !== false ) {
$this->renderPortal( 'lang', $this->data['language_urls'], 'otherlanguages' );
}
break;
default:
$this->renderPortal( $name, $content );
break;
}
}
}
/**
* @param string $name
* @param array $content
* @param null|string $msg
* @param null|string|array $hook
*/
protected function renderPortal( $name, $content, $msg = null, $hook = null ) {
if ( $msg === null ) {
$msg = $name;
}
$msgObj = wfMessage( $msg );
?>
<div class="portal" role="navigation" id='<?php
echo Sanitizer::escapeId( "p-$name" )
?>'<?php
echo Linker::tooltip( 'p-' . $name )
?> aria-labelledby='<?php echo Sanitizer::escapeId( "p-$name-label" ) ?>'>
<h3<?php
$this->html( 'userlangattributes' )
?> id='<?php
echo Sanitizer::escapeId( "p-$name-label" )
?>'><?php
echo htmlspecialchars( $msgObj->exists() ? $msgObj->text() : $msg );
?></h3>
<div class="body">
<?php
if ( is_array( $content ) ) {
?>
<ul>
<?php
foreach ( $content as $key => $val ) {
?>
<?php echo $this->makeListItem( $key, $val ); ?>
<?php
}
if ( $hook !== null ) {
wfRunHooks( $hook, array( &$this, true ) );
}
?>
</ul>
<?php
} else {
?>
<?php
echo $content; /* Allow raw HTML block to be defined by extensions */
}
$this->renderAfterPortlet( $name );
?>
</div>
</div>
<?php
}
/**
* Render one or more navigations elements by name, automatically reveresed
* when UI is in RTL mode
*
* @param array $elements
*/
protected 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 ) {
switch ( $element ) {
case 'NAMESPACES':
?>
<div id="p-namespaces" role="navigation" class="vectorTabs<?php
if ( count( $this->data['namespace_urls'] ) == 0 ) {
echo ' emptyPortlet';
}
?>" aria-labelledby="p-namespaces-label">
<h3 id="p-namespaces-label"><?php $this->msg( 'namespaces' ) ?></h3>
<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
}
?>
</ul>
</div>
<?php
break;
case 'VARIANTS':
?>
<div id="p-variants" role="navigation" class="vectorMenu<?php
if ( count( $this->data['variant_urls'] ) == 0 ) {
echo ' emptyPortlet';
}
?>" aria-labelledby="p-variants-label">
<?php
// Replace the label with the name of currently chosen variant, if any
$variantLabel = $this->getMsg( 'variants' )->text();
foreach ( $this->data['variant_urls'] as $link ) {
if ( stripos( $link['attributes'], 'selected' ) !== false ) {
$variantLabel = $link['text'];
break;
}
}
?>
<h3 id="p-variants-label"><span
style="display: block;" <?php /* Temporary WMF deployment hack, to be removed before 1.24 release */ ?>
><?php echo htmlspecialchars( $variantLabel ) ?></span><a href="#"></a></h3>
<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
}
?>
</ul>
</div>
</div>
<?php
break;
case 'VIEWS':
?>
<div id="p-views" role="navigation" class="vectorTabs<?php
if ( count( $this->data['view_urls'] ) == 0 ) {
echo ' emptyPortlet';
}
?>" aria-labelledby="p-views-label">
<h3 id="p-views-label"><?php $this->msg( 'views' ) ?></h3>
<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
}
?>
</ul>
</div>
<?php
break;
case 'ACTIONS':
?>
<div id="p-cactions" role="navigation" class="vectorMenu<?php
if ( count( $this->data['action_urls'] ) == 0 ) {
echo ' emptyPortlet';
}
?>" aria-labelledby="p-cactions-label">
<h3 id="p-cactions-label"><span><?php
$this->msg( 'vector-more-actions' )
?></span><a href="#"></a></h3>
<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
}
?>
</ul>
</div>
</div>
<?php
break;
case 'PERSONAL':
?>
<div id="p-personal" role="navigation" class="<?php
if ( count( $this->data['personal_urls'] ) == 0 ) {
echo ' emptyPortlet';
}
?>" aria-labelledby="p-personal-label">
<h3 id="p-personal-label"><?php $this->msg( 'personaltools' ) ?></h3>
<ul<?php $this->html( 'userlangattributes' ) ?>>
<?php
$personalTools = $this->getPersonalTools();
foreach ( $personalTools as $key => $item ) {
echo $this->makeListItem( $key, $item );
}
?>
</ul>
</div>
<?php
break;
case 'SEARCH':
?>
<div id="p-search" role="search">
<h3<?php $this->html( 'userlangattributes' ) ?>>
<label for="searchInput"><?php $this->msg( 'search' ) ?></label>
</h3>
<form action="<?php $this->text( 'wgScript' ) ?>" id="searchform">
<?php
if ( $wgVectorUseSimpleSearch ) {
?>
<div id="simpleSearch">
<?php
} else {
?>
<div>
<?php
}
?>
<?php
echo $this->makeSearchInput( array( 'id' => 'searchInput' ) );
echo Html::hidden( 'title', $this->get( 'searchtitle' ) );
// We construct two buttons (for 'go' and 'fulltext' search modes),
// but only one will be visible and actionable at a time (they are
// overlaid on top of each other in CSS).
// * Browsers will use the 'fulltext' one by default (as it's the
// first in tree-order), which is desirable when they are unable
// to show search suggestions (either due to being broken or
// having JavaScript turned off).
// * The mediawiki.searchSuggest module, after doing tests for the
// broken browsers, removes the 'fulltext' button and handles
// 'fulltext' search itself; this will reveal the 'go' button and
// cause it to be used.
echo $this->makeSearchButton(
'fulltext',
array( 'id' => 'mw-searchButton', 'class' => 'searchButton mw-fallbackSearchButton' )
);
echo $this->makeSearchButton(
'go',
array( 'id' => 'searchButton', 'class' => 'searchButton' )
);
?>
</div>
</form>
</div>
<?php
break;
}
}
}
}

207
collapsibleTabs.js Normal file
View File

@ -0,0 +1,207 @@
/**
* Collapsible tabs jQuery Plugin
*/
( function ( $ ) {
var rtl = $( 'html' ).attr( 'dir' ) === 'rtl';
$.fn.collapsibleTabs = function ( options ) {
// return if the function is called on an empty jquery object
if ( !this.length ) {
return this;
}
// Merge options into the defaults
var settings = $.extend( {}, $.collapsibleTabs.defaults, options );
this.each( function () {
var $el = $( this );
// add the element to our array of collapsible managers
$.collapsibleTabs.instances = ( $.collapsibleTabs.instances.length === 0 ?
$el : $.collapsibleTabs.instances.add( $el ) );
// attach the settings to the elements
$el.data( 'collapsibleTabsSettings', settings );
// attach data to our collapsible elements
$el.children( settings.collapsible ).each( function () {
$.collapsibleTabs.addData( $( this ) );
} );
} );
// if we haven't already bound our resize handler, bind it now
if ( !$.collapsibleTabs.boundEvent ) {
$( window ).on( 'resize', $.debounce( 500, function () {
$.collapsibleTabs.handleResize();
} ) );
$.collapsibleTabs.boundEvent = true;
}
// call our resize handler to setup the page
$.collapsibleTabs.handleResize();
return this;
};
$.collapsibleTabs = {
instances: [],
boundEvent: null,
defaults: {
expandedContainer: '#p-views ul',
collapsedContainer: '#p-cactions ul',
collapsible: 'li.collapsible',
shifting: false,
expandCondition: function ( eleWidth ) {
// If there are at least eleWidth + 1 pixels of free space, expand.
// We add 1 because .width() will truncate fractional values but .offset() will not.
return $.collapsibleTabs.calculateTabDistance() >= eleWidth + 1;
},
collapseCondition: function () {
// If there's an overlap, collapse.
return $.collapsibleTabs.calculateTabDistance() < 0;
}
},
addData: function ( $collapsible ) {
var settings = $collapsible.parent().data( 'collapsibleTabsSettings' );
if ( settings ) {
$collapsible.data( 'collapsibleTabsSettings', {
expandedContainer: settings.expandedContainer,
collapsedContainer: settings.collapsedContainer,
expandedWidth: $collapsible.width(),
prevElement: $collapsible.prev()
} );
}
},
getSettings: function ( $collapsible ) {
var settings = $collapsible.data( 'collapsibleTabsSettings' );
if ( !settings ) {
$.collapsibleTabs.addData( $collapsible );
settings = $collapsible.data( 'collapsibleTabsSettings' );
}
return settings;
},
handleResize: function () {
$.collapsibleTabs.instances.each( function () {
var $el = $( this ),
data = $.collapsibleTabs.getSettings( $el );
if ( data.shifting ) {
return;
}
// if the two navigations are colliding
if ( $el.children( data.collapsible ).length > 0 && data.collapseCondition() ) {
$el.trigger( 'beforeTabCollapse' );
// move the element to the dropdown menu
$.collapsibleTabs.moveToCollapsed( $el.children( data.collapsible + ':last' ) );
}
// if there are still moveable items in the dropdown menu,
// and there is sufficient space to place them in the tab container
if ( $( data.collapsedContainer + ' ' + data.collapsible ).length > 0 &&
data.expandCondition( $.collapsibleTabs.getSettings( $( data.collapsedContainer ).children(
data.collapsible + ':first' ) ).expandedWidth ) ) {
//move the element from the dropdown to the tab
$el.trigger( 'beforeTabExpand' );
$.collapsibleTabs
.moveToExpanded( data.collapsedContainer + ' ' + data.collapsible + ':first' );
}
} );
},
moveToCollapsed: function ( ele ) {
var outerData, expContainerSettings, target,
$moving = $( ele );
outerData = $.collapsibleTabs.getSettings( $moving );
if ( !outerData ) {
return;
}
expContainerSettings = $.collapsibleTabs.getSettings( $( outerData.expandedContainer ) );
if ( !expContainerSettings ) {
return;
}
expContainerSettings.shifting = true;
// Remove the element from where it's at and put it in the dropdown menu
target = outerData.collapsedContainer;
$moving.css( 'position', 'relative' )
.css( ( rtl ? 'left' : 'right' ), 0 )
.animate( { width: '1px' }, 'normal', function () {
var data, expContainerSettings;
$( this ).hide();
// add the placeholder
$( '<span class="placeholder" style="display: none;"></span>' ).insertAfter( this );
$( this ).detach().prependTo( target ).data( 'collapsibleTabsSettings', outerData );
$( this ).attr( 'style', 'display: list-item;' );
data = $.collapsibleTabs.getSettings( $( ele ) );
if ( data ) {
expContainerSettings = $.collapsibleTabs.getSettings( $( data.expandedContainer ) );
if ( expContainerSettings ) {
expContainerSettings.shifting = false;
$.collapsibleTabs.handleResize();
}
}
} );
},
moveToExpanded: function ( ele ) {
var data, expContainerSettings, $target, expandedWidth,
$moving = $( ele );
data = $.collapsibleTabs.getSettings( $moving );
if ( !data ) {
return;
}
expContainerSettings = $.collapsibleTabs.getSettings( $( data.expandedContainer ) );
if ( !expContainerSettings ) {
return;
}
expContainerSettings.shifting = true;
// grab the next appearing placeholder so we can use it for replacing
$target = $( data.expandedContainer ).find( 'span.placeholder:first' );
expandedWidth = data.expandedWidth;
$moving.css( 'position', 'relative' ).css( ( rtl ? 'right' : 'left' ), 0 ).css( 'width', '1px' );
$target.replaceWith(
$moving
.detach()
.css( 'width', '1px' )
.data( 'collapsibleTabsSettings', data )
.animate( { width: expandedWidth + 'px' }, 'normal', function () {
$( this ).attr( 'style', 'display: block;' );
var data, expContainerSettings;
data = $.collapsibleTabs.getSettings( $( this ) );
if ( data ) {
expContainerSettings = $.collapsibleTabs.getSettings( $( data.expandedContainer ) );
if ( expContainerSettings ) {
expContainerSettings.shifting = false;
$.collapsibleTabs.handleResize();
}
}
} )
);
},
/**
* Returns the amount of horizontal distance between the two tabs groups
* (#left-navigation and #right-navigation), in pixels. If negative, this
* means that the tabs overlap, and the value is the width of overlapping
* parts.
*
* Used in default expandCondition and collapseCondition.
*
* @return {Numeric} distance/overlap in pixels
*/
calculateTabDistance: function () {
var $leftTab, $rightTab, leftEnd, rightStart;
// In RTL, #right-navigation is actually on the left and vice versa.
// Hooray for descriptive naming.
if ( !rtl ) {
$leftTab = $( '#left-navigation' );
$rightTab = $( '#right-navigation' );
} else {
$leftTab = $( '#right-navigation' );
$rightTab = $( '#left-navigation' );
}
leftEnd = $leftTab.offset().left + $leftTab.width();
rightStart = $rightTab.offset().left;
return rightStart - leftEnd;
}
};
}( jQuery ) );

View File

@ -0,0 +1,28 @@
/* Animate between standard and high definition layouts */
body.vector-animateLayout {
div#content,
div#footer,
#left-navigation {
.transition(margin-left 250ms, padding 250ms;);
}
#p-logo {
.transition(left 250ms);
}
#mw-panel {
.transition(padding-right 250ms);
}
#p-search {
.transition(margin-right 250ms);
}
#p-personal {
.transition(right 250ms);
}
#mw-head-base {
.transition(margin-left 250ms);
}
}

134
components/common.less Normal file
View File

@ -0,0 +1,134 @@
/*
* Any rules which should not be flipped automatically in right-to-left situations should be
* prepended with @noflip in a comment block.
*
* This stylesheet employs a few CSS trick to accomplish compatibility with a wide range of web
* browsers. The most common trick is to use some styles in IE6 only. This is accomplished by using
* a rule that makes things work in IE6, and then following it with a rule that begins with
* "html > body" or use a child selector ">", which is ignored by IE6 because it does not support
* the child selector. You can spot this by looking for the "OVERRIDDEN BY COMPLIANT BROWSERS" and
* "IGNORED BY IE6" comments.
*/
@import "mediawiki.mixins";
/* Framework */
html {
font-size: @html-font-size;
}
html,
body {
height: 100%;
margin: 0;
padding: 0;
font-family: @content-font-family;
}
body {
background-color: @menu-background-color;
}
/* Content */
div#content {
margin-left: 10em;
padding: @content-padding;
/* Border on top, left, and bottom side */
border: 1px solid @content-border-color;
border-right-width: 0;
/* Merge the border with tabs' one (in their background image) */
margin-top: -1px;
background-color: @body-background-color;
color: @content-font-color;
direction: ltr;
.mw-editsection,
.mw-editsection-like {
font-family: @content-font-family;
}
p {
line-height: inherit;
margin: 0.5em 0;
}
h1,
h2,
#firstHeading {
font-family: @content-heading-font-family;
line-height: @heading-line-height;
margin-bottom: 0.25em;
padding: 0;
}
h1,
#firstHeading {
font-size: @content-heading-font-size;
}
h2 {
font-size: 1.5em;
margin-top: 1em;
}
h3,
h4,
h5,
h6 {
line-height: @content-line-height;
margin-top: 0.3em;
margin-bottom: 0;
padding-bottom: 0;
}
h3 {
font-size: 1.17em;
}
h3,
h4 {
font-weight: bold;
}
h4,
h5,
h6 {
font-size: 100%; /* (reset) */
}
#toc h2,
.toc h2 {
font-size: 100%; /* (reset) */
font-family: @content-font-family;
}
}
/* Hide empty portlets */
div.emptyPortlet {
display: none;
}
ul {
list-style-type: disc;
.list-style-image('images/bullet-icon.png');
}
pre, .mw-code {
line-height: 1.3em;
}
/* Site Notice (includes notices from CentralNotice extension) */
#siteNotice {
font-size: 0.8em;
}
.redirectText {
font-size: 140%;
}
.redirectMsg img {
vertical-align: text-bottom;
}
.mw-body-content {
position: relative;
line-height: @content-line-height;
font-size: @content-font-size;
}

View File

@ -0,0 +1,10 @@
@import "mediawiki.mixins.less";
// External links
#content {
.external {
background-position: center right;
background-repeat: no-repeat;
.background-image-svg('images/external-link-ltr-icon.svg', 'images/external-link-ltr-icon.png');
padding-right: 13px;
}
}

57
components/footer.less Normal file
View File

@ -0,0 +1,57 @@
/* Footer */
div#footer {
margin-left: 10em;
margin-top: 0;
padding: 0.75em;
direction: ltr;
ul {
list-style-type: none;
list-style-image: none;
margin: 0;
padding: 0;
li {
margin: 0;
padding: 0;
padding-top: 0.5em;
padding-bottom: 0.5em;
color: #333;
font-size: 0.7em;
}
}
#footer-icons {
float: right;
li {
float: left;
margin-left: 0.5em;
line-height: 2em;
text-align: right;
}
}
#footer-info {
li {
line-height: 1.4em;
}
}
#footer-places {
li {
float: left;
margin-right: 1em;
line-height: 2em;
}
}
}
body.ltr {
div#footer {
#footer-places {
/* @noflip */
float: left;
}
}
}

144
components/navigation.less Normal file
View File

@ -0,0 +1,144 @@
@import "mediawiki.mixins";
@import "personalMenu";
@import "search";
@import "tabs";
/* Hide, but keep accessible for screen-readers */
#mw-navigation h2 {
position: absolute;
top: -9999px;
}
/* Head */
#mw-page-base {
height: 5em;
background-position: bottom left;
background-repeat: repeat-x;
/* This image is only a fallback (for IE 6-9), so we do not @embed it. */
background-image: url('images/page-fade.png');
.vertical-gradient(@body-background-color, @menu-background-color, 50%, 100%);
background-color: @body-background-color;
}
#mw-head-base {
margin-top: -5em;
margin-left: 10em;
height: 5em;
}
div#mw-head {
position: absolute;
top: 0;
right: 0;
width: 100%;
h3 {
margin: 0;
padding: 0;
}
}
/* Navigation Containers */
#left-navigation {
float: left;
margin-left: 10em;
margin-top: 2.5em;
/* When right nav would overlap left nav, it's placed below it
(normal CSS floats behavior). This rule ensures that no empty space
is shown between them due to right nav's margin-top. Page layout
is still broken, but at least the nav overlaps only the page title
instead of half the content. */
margin-bottom: -2.5em;
/* IE 6 double-margin bug fix */
display: inline;
}
#right-navigation {
float: right;
margin-top: 2.5em;
}
/* Logo */
#p-logo {
position: absolute;
top: -160px;
left: 0;
width: 10em;
height: 160px;
a {
display: block;
width: 10em;
height: 160px;
background-repeat: no-repeat;
background-position: center center;
text-decoration: none;
}
}
/* Panel */
div#mw-panel {
font-size: @menu-main-font-size;
position: absolute;
top: 160px;
padding-top: 1em;
width: 10em;
left: 0;
div.portal {
margin: 0 0.6em 0 0.7em;
padding: 0.25em 0;
direction: ltr;
background-position: top left;
background-repeat: no-repeat;
.background-image('images/portal-break.png');
h3 {
font-size: @menu-main-heading-font-size;
color: @menu-main-heading-color;
font-weight: normal;
margin: 0;
padding: @menu-main-heading-padding;
cursor: default;
border: none;
}
div.body {
margin: @menu-main-body-margin;
padding-top: 0;
ul {
list-style-type: none;
list-style-image: none;
margin: 0;
padding: @menu-main-body-padding;
li {
line-height: 1.125em;
margin: 0;
padding: 0.25em 0;
font-size: @menu-main-body-font-size;
word-wrap: break-word;
a {
color: @menu-main-body-link-color;
&:visited {
color: @menu-main-body-link-visited-color;
}
}
}
}
}
&.first {
background-image: none;
margin-top: 0;
h3 {
display: none;
}
div.body {
margin-left: 0.5em;
}
}
}
}

View File

@ -0,0 +1,41 @@
/* Personal */
#p-personal {
position: absolute;
top: 0.33em;
right: 0.75em;
/* Display on top of page tabs - bugs 37158, 48078 */
z-index: 100;
h3 {
display: none;
}
ul {
list-style-type: none;
list-style-image: none;
margin: 0;
padding-left: 10em; /* Keep from overlapping logo */
}
li {
line-height: 1.125em;
/* @noflip */
float: left;
margin-left: 0.75em;
margin-top: 0.5em;
font-size: @menu-personal-font-size;
white-space: nowrap;
}
}
/* Icon for Usernames */
#pt-userpage,
#pt-anonuserpage,
#pt-login {
background-position: left top;
background-repeat: no-repeat;
/* SVG support using a transparent gradient to guarantee cross-browser
* compatibility (browsers able to understand gradient syntax support also SVG) */
.background-image-svg('images/user-icon.svg', 'images/user-icon.png');
padding-left: 15px !important;
}

113
components/search.less Normal file
View File

@ -0,0 +1,113 @@
/* Search */
#p-search {
/* @noflip */
float: left;
margin-right: 0.5em;
margin-left: 0.5em;
h3 {
display: none;
}
form,
input {
margin: 0;
margin-top: 0.4em;
}
}
div#simpleSearch {
display: block;
width: 14em;
height: 1.4em;
margin-top: 0.65em;
position: relative;
min-height: 1px; /* Gotta trigger hasLayout for IE7 */
border: solid 1px #aaa;
color: black;
background-color: white;
.background-image('images/search-fade.png');
background-position: top left;
background-repeat: repeat-x;
// Styles for both the search input and the button
input {
position: absolute;
margin: 0;
padding: 0;
border: 0;
background-color: transparent;
color: black;
}
// The search input
#searchInput {
top: 0;
left: 0;
width: 90%;
padding: 0.2em 0 0.2em 0.2em;
font-size: 13px;
direction: ltr;
&:focus {
outline: none;
}
// These rules MAY NOT be merged because of how CSS requires browsers
// to parse unrecognized selectors!
// Note these rules ensure that placeholder text can be distinguished from
// standard text. In browsers which make this distinction clear these rules
// are not necessary.
// For inputs that use jquery.placeholder.js e.g. IE9-
&.placeholder {
color: #999;
}
// Distinguish placeholder text in IE10+
&:-ms-input-placeholder {
color: #999;
}
// Distinguish placeholder text in Firefox 18-
&:-moz-placeholder {
color: #999;
}
// Undo the styles Webkit browsers apply to type=search fields,
// we provide our own
-webkit-appearance: textfield;
&::-webkit-search-decoration,
&::-webkit-search-cancel-button,
&::-webkit-search-results-button,
&::-webkit-search-results-decoration {
-webkit-appearance: textfield;
}
}
// The buttons. They are displayed in the same position, and if both are
// present the fulltext search one obscures the 'Go' one.
#searchButton,
#mw-searchButton {
top: 0;
right: 0;
width: 10%;
height: 100%;
cursor: pointer;
/* Hide button text and replace it with the image. */
/* This would be 100% if not for Firefox shenanigans (bug 60900). */
text-indent: 200%;
/* Needed to make IE6 respect the text-indent. */
line-height: 1;
/* Opera 12 on RTL flips the text in a funny way without this. */
/* @noflip */
direction: ltr;
white-space: nowrap;
overflow: hidden;
.background-image-svg('images/search-ltr.svg', 'images/search-ltr.png');
background-position: center center;
background-repeat: no-repeat;
}
#mw-searchButton {
z-index: 1;
}
}

265
components/tabs.less Normal file
View File

@ -0,0 +1,265 @@
/*
Styling for namespace tabs (page, discussion) and views (read, edit, view history, watch and other actions)
*/
/* Navigation Labels */
div.vectorTabs h3 {
display: none;
}
/* Namespaces and Views */
div.vectorTabs {
/* @noflip */
float: left;
height: 2.5em;
.background-image('images/tab-break.png');
background-position: bottom left;
background-repeat: no-repeat;
padding-left: 1px;
ul {
/* @noflip */
float: left;
height: 100%;
list-style-type: none;
list-style-image: none;
margin: 0;
padding: 0;
.background-image('images/tab-break.png');
background-position: right bottom;
background-repeat: no-repeat;
li {
/* @noflip */
float: left;
line-height: 1.125em;
/* For IE6, overridden later to display:block by modern browsers */
display: inline-block;
height: 100%;
margin: 0;
padding: 0;
background-color: #f3f3f3;
.background-image('images/tab-normal-fade.png');
background-position: bottom left;
background-repeat: repeat-x;
white-space: nowrap;
}
/* IGNORED BY IE6 which doesn't support child selector */
> li {
display: block;
}
}
li {
&.new {
a,
a:visited{
color: #a55858;
}
}
&.selected {
.background-image('images/tab-current-fade.png');
a,
a:visited{
color: #333;
text-decoration: none;
}
}
&.icon {
a {
background-position: bottom right;
background-repeat: no-repeat;
}
}
a {
/* For IE6, overridden later to display:block by modern browsers */
display: inline-block;
height: 1.9em;
padding-left: 0.5em;
padding-right: 0.5em;
color: @menu-link-color;
cursor: pointer;
font-size: 0.8em;
}
/* Ignored by IE6 which doesn't support child selector */
> a {
display: block;
}
}
span {
display: inline-block;
.background-image('images/tab-break.png');
background-position: bottom right;
background-repeat: no-repeat;
a {
/* For IE6, overridden later to display:block by modern browsers */
display: inline-block;
padding-top: 1.25em;
}
/* Ignored by IE6 which doesn't support child selector */
> a {
/* @noflip */
float: left;
display: block;
}
}
}
/* Variants and Actions */
div.vectorMenu {
/* @noflip */
direction: ltr;
/* @noflip */
float: left;
cursor: pointer;
position: relative;
}
body.rtl div.vectorMenu {
/* @noflip */
direction: rtl;
}
div#mw-head div.vectorMenu h3 {
/* @noflip */
float: left;
.background-image('images/tab-break.png');
background-repeat: no-repeat;
background-position: bottom right;
margin-left: -1px;
font-size: 1em;
height: 2.5em;
// This effectively moves the "background border" outside of the element to act like a real
// border. It is necessary for the dropdown (div.vectorMenu div.menu) to align well.
padding-right: 1px;
margin-right: -1px;
}
// The "Variants" menu has a really funny structure
// Temporary WMF deployment hack, to be removed before 1.24 release
div#mw-head div.vectorMenu#p-variants {
#p-variants-label span {
display: none;
}
#mw-vector-current-variant {
display: inline-block;
float: left;
padding-right: 20px;
font-size: 0.8em;
padding-left: 0.5em;
padding-top: 1.375em;
font-weight: normal;
border: none;
background-image: none;
}
}
div.vectorMenu h3 span {
display: block;
font-size: 0.8em;
padding-left: 0.7em;
padding-top: 1.375em;
margin-right: 20px;
font-weight: normal;
color: @menu-main-heading-color;
}
div.vectorMenu h3 a {
position: absolute;
top: 0;
right: 0;
width: 20px;
height: 2.5em;
.background-image-svg('images/arrow-down-icon.svg', 'images/arrow-down-icon.png');
background-position: 100% 70%;
background-repeat: no-repeat;
.transition(background-position 250ms);
}
div.vectorMenu.menuForceShow h3 a {
background-position: 100% 100%;
}
div.vectorMenuFocus h3 a {
.background-image-svg('images/arrow-down-focus-icon.svg', 'images/arrow-down-focus-icon.png');
}
div.vectorMenu div.menu {
// Match the width of the dropdown "heading" (the tab)
min-width: 100%;
position: absolute;
top: 2.5em;
left: -1px;
background-color: white;
border: solid 1px silver;
border-top-width: 0;
clear: both;
text-align: left;
display: none;
}
/* Enable forcing showing of the menu for accessibility */
div.vectorMenu:hover div.menu,
div.vectorMenu.menuForceShow div.menu {
display: block;
}
div.vectorMenu ul {
list-style-type: none;
list-style-image: none;
padding: 0;
margin: 0;
text-align: left;
}
/* Fixes old versions of FireFox */
div.vectorMenu ul,
x:-moz-any-link {
min-width: 5em;
}
/* Returns things back to normal in modern versions of FireFox */
div.vectorMenu ul,
x:-moz-any-link,
x:default {
min-width: 0;
}
div.vectorMenu li {
padding: 0;
margin: 0;
text-align: left;
line-height: 1em;
}
/* OVERRIDDEN BY COMPLIANT BROWSERS */
div.vectorMenu li a {
display: inline-block;
padding: 0.5em;
white-space: nowrap;
color: @menu-link-color;
cursor: pointer;
font-size: 0.8em;
}
/* IGNORED BY IE6 */
div.vectorMenu li > a {
display: block;
}
div.vectorMenu li.selected a,
div.vectorMenu li.selected a:visited {
color: #333;
text-decoration: none;
}
@import 'watchstar.less';

48
components/watchstar.less Normal file
View File

@ -0,0 +1,48 @@
@import "mediawiki.mixins.rotation"
/* Watch/Unwatch Icon Styling */
#ca-unwatch.icon a,
#ca-watch.icon a {
margin: 0;
padding: 0;
display: block;
width: 26px;
/* This hides the text but shows the background image */
padding-top: 3.1em;
margin-top: 0;
/* Only applied in IE6 */
margin-top: -0.8em !ie;
height: 0;
overflow: hidden;
background-position: 5px 60%;
}
#ca-unwatch.icon a {
.background-image-svg('images/unwatch-icon.svg', 'images/unwatch-icon.png');
}
#ca-watch.icon a {
.background-image-svg('images/watch-icon.svg', 'images/watch-icon.png');
}
#ca-unwatch.icon a:hover,
#ca-unwatch.icon a:focus {
.background-image-svg('images/unwatch-icon-hl.svg', 'images/unwatch-icon-hl.png');
}
#ca-watch.icon a:hover,
#ca-watch.icon a:focus {
.background-image-svg('images/watch-icon-hl.svg', 'images/watch-icon-hl.png');
}
#ca-unwatch.icon a.loading,
#ca-watch.icon a.loading {
.background-image-svg('images/watch-icon-loading.svg', 'images/watch-icon-loading.png');
.rotation(700ms);
/* Suppress the hilarious rotating focus outline on Firefox */
outline: none;
cursor: default;
pointer-events: none;
background-position: 50% 60%;
-webkit-transform-origin: 50% 57%;
transform-origin: 50% 57%;
}
#ca-unwatch.icon a span,
#ca-watch.icon a span {
display: none;
}

284
csshover.htc Normal file
View File

@ -0,0 +1,284 @@
<public:attach event="ondocumentready" onevent="CSSHover()" />
<script>
/**
* Whatever:hover - V3.11
* ------------------------------------------------------------
* Author - Peter Nederlof, http://www.xs4all.nl/~peterned
* License - http://creativecommons.org/licenses/LGPL/2.1
*
* Special thanks to Sergiu Dumitriu, http://purl.org/net/sergiu,
* for fixing the expression loop.
*
* Whatever:hover is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Whatever:hover 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
* Lesser General Public License for more details.
*
* howto: body { behavior:url("csshover3.htc"); }
* ------------------------------------------------------------
*/
window.CSSHover = (function(){
// regular expressions, used and explained later on.
var REG_INTERACTIVE = /(^|\s)((([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active|focus))/i;
var REG_AFFECTED = /(.*?)\:(hover|active|focus)/i;
var REG_PSEUDO = /[^:]+:([a-z\-]+).*/i;
var REG_SELECT = /(\.([a-z0-9_\-]+):[a-z]+)|(:[a-z]+)/gi;
var REG_CLASS = /\.([a-z0-9_\-]*on(hover|active|focus))/i;
var REG_MSIE = /msie (5|6|7)/i;
var REG_COMPAT = /backcompat/i;
// property mapping, real css properties must be used in order to clear expressions later on...
// Uses obscure css properties that no-one is likely to use. The properties are borrowed to
// set an expression, and are then restored to the most likely correct value.
var Properties = {
index: 0,
list: ['text-kashida', 'text-kashida-space', 'text-justify'],
get: function() {
return this.list[(this.index++)%this.list.length];
}
};
// camelize is used to convert css properties from (eg) text-kashida to textKashida
var camelize = function(str) {
return str.replace(/-(.)/mg, function(result, match){
return match.toUpperCase();
});
};
/**
* Local CSSHover object
* --------------------------
*/
var CSSHover = {
// array of CSSHoverElements, used to unload created events
elements: [],
// buffer used for checking on duplicate expressions
callbacks: {},
// init, called once ondomcontentready via the exposed window.CSSHover function
init:function() {
// don't run in IE8 standards; expressions don't work in standards mode anyway,
// and the stuff we're trying to fix should already work properly
if(!REG_MSIE.test(navigator.userAgent) && !REG_COMPAT.test(window.document.compatMode)) {
return;
}
// start parsing the existing stylesheets
var sheets = window.document.styleSheets, l = sheets.length;
for(var i=0; i<l; i++) {
this.parseStylesheet(sheets[i]);
}
},
// called from init, parses individual stylesheets
parseStylesheet:function(sheet) {
// check sheet imports and parse those recursively
if(sheet.imports) {
try {
var imports = sheet.imports;
var l = imports.length;
for(var i=0; i<l; i++) {
this.parseStylesheet(sheet.imports[i]);
}
} catch(securityException){
// trycatch for various possible errors
}
}
// interate the sheet's rules and send them to the parser
try {
var rules = sheet.rules;
var r = rules.length;
for(var j=0; j<r; j++) {
this.parseCSSRule(rules[j], sheet);
}
} catch(someException){
// trycatch for various errors, most likely accessing the sheet's rules.
}
},
// magic starts here ...
parseCSSRule:function(rule, sheet) {
// The sheet is used to insert new rules into, this must be the same sheet the rule
// came from, to ensure that relative paths keep pointing to the right location.
// only parse a rule if it contains an interactive pseudo.
var select = rule.selectorText;
if(REG_INTERACTIVE.test(select)) {
var style = rule.style.cssText;
// affected elements are found by truncating the selector after the interactive pseudo,
// eg: "div li:hover" >> "div li"
var affected = REG_AFFECTED.exec(select)[1];
// that pseudo is needed for a classname, and defines the type of interaction (focus, hover, active)
// eg: "li:hover" >> "onhover"
var pseudo = select.replace(REG_PSEUDO, 'on$1');
// the new selector is going to use that classname in a new css rule,
// since IE6 doesn't support multiple classnames, this is merged into one classname
// eg: "li:hover" >> "li.onhover", "li.folder:hover" >> "li.folderonhover"
var newSelect = select.replace(REG_SELECT, '.$2' + pseudo);
// the classname is needed for the events that are going to be set on affected nodes
// eg: "li.folder:hover" >> "folderonhover"
var className = REG_CLASS.exec(newSelect)[1];
// no need to set the same callback more than once when the same selector uses the same classname
var hash = affected + className;
if(!this.callbacks[hash]) {
// affected elements are given an expression under a borrowed css property, because fake properties
// can't have their expressions cleared. Different properties are used per pseudo, to avoid
// expressions from overwriting eachother. The expression does a callback to CSSHover.patch,
// rerouted via the exposed window.CSSHover function.
var property = Properties.get();
var atRuntime = camelize(property);
// because the expression is added to the stylesheet, and styles are always applied to html that is
// dynamically added to the dom, the expression will also trigger for those new elements (provided
// they are selected by the affected selector).
sheet.addRule(affected, property + ':expression(CSSHover(this, "'+pseudo+'", "'+className+'", "'+atRuntime+'"))');
// hash it, so an identical selector/class combo does not duplicate the expression
this.callbacks[hash] = true;
}
// duplicate expressions need not be set, but the style could differ
sheet.addRule(newSelect, style);
}
},
// called via the expression, patches individual nodes
patch:function(node, type, className, property) {
// restores the borrowed css property to the value of its immediate parent, clearing
// the expression so that it's not repeatedly called.
try {
var value = node.parentNode.currentStyle[property];
node.style[property] = value;
} catch(e) {
// the above reset should never fail, but just in case, clear the runtimeStyle if it does.
// this will also stop the expression.
node.runtimeStyle[property] = '';
}
// just to make sure, also keep track of patched classnames locally on the node
if(!node.csshover) {
node.csshover = [];
}
// and check for it to prevent duplicate events with the same classname from being set
if(!node.csshover[className]) {
node.csshover[className] = true;
// create an instance for the given type and class
var element = new CSSHoverElement(node, type, className);
// and store that instance for unloading later on
this.elements.push(element);
}
// returns a dummy value to the expression
return type;
},
// unload stuff onbeforeunload
unload:function() {
try {
// remove events
var l = this.elements.length;
for(var i=0; i<l; i++) {
this.elements[i].unload();
}
// and set properties to null
this.elements = [];
this.callbacks = {};
} catch (e) {
}
}
};
/**
* CSSHoverElement
* --------------------------
*/
// the event types associated with the interactive pseudos
var CSSEvents = {
onhover: { activator: 'onmouseenter', deactivator: 'onmouseleave' },
onactive: { activator: 'onmousedown', deactivator: 'onmouseup' },
onfocus: { activator: 'onfocus', deactivator: 'onblur' }
};
// CSSHoverElement constructor, called via CSSHover.patch
function CSSHoverElement(node, type, className) {
// the CSSHoverElement patches individual nodes by manually applying the events that should
// have fired by the css pseudoclasses, eg mouseenter and mouseleave for :hover.
this.node = node;
this.type = type;
var replacer = new RegExp('(^|\\s)'+className+'(\\s|$)', 'g');
// store event handlers for removal onunload
this.activator = function(){ node.className += ' ' + className; };
this.deactivator = function(){ node.className = node.className.replace(replacer, ' '); };
// add the events
node.attachEvent(CSSEvents[type].activator, this.activator);
node.attachEvent(CSSEvents[type].deactivator, this.deactivator);
}
CSSHoverElement.prototype = {
// onbeforeunload, called via CSSHover.unload
unload:function() {
// remove events
this.node.detachEvent(CSSEvents[this.type].activator, this.activator);
this.node.detachEvent(CSSEvents[this.type].deactivator, this.deactivator);
// and set properties to null
this.activator = null;
this.deactivator = null;
this.node = null;
this.type = null;
}
};
// add the unload to the onbeforeunload event
window.attachEvent('onbeforeunload', function(){
CSSHover.unload();
});
/**
* Public hook
* --------------------------
*/
return function(node, type, className, property) {
if(node) {
// called via the css expression; patches individual nodes
return CSSHover.patch(node, type, className, property);
} else {
// called ondomcontentready via the public:attach node
CSSHover.init();
}
};
})();
</script>

12
csshover.min.htc Normal file
View File

@ -0,0 +1,12 @@
<public:attach event="ondocumentready" onevent="CSSHover()" />
<script>
/**
* Whatever:hover - V3.11
* http://www.xs4all.nl/~peterned/
*
* Copyright (c) 2009 Peter Nederlof
* Licensed under the LGPL license
* http://creativecommons.org/licenses/LGPL/2.1
*/
window.CSSHover=(function(){var m=/(^|\s)((([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active|focus))/i;var n=/(.*?)\:(hover|active|focus)/i;var o=/[^:]+:([a-z\-]+).*/i;var p=/(\.([a-z0-9_\-]+):[a-z]+)|(:[a-z]+)/gi;var q=/\.([a-z0-9_\-]*on(hover|active|focus))/i;var s=/msie (5|6|7)/i;var t=/backcompat/i;var u={index:0,list:['text-kashida','text-kashida-space','text-justify'],get:function(){return this.list[(this.index++)%this.list.length]}};var v=function(c){return c.replace(/-(.)/mg,function(a,b){return b.toUpperCase()})};var w={elements:[],callbacks:{},init:function(){if(!s.test(navigator.userAgent)&&!t.test(window.document.compatMode)){return}var a=window.document.styleSheets,l=a.length;for(var i=0;i<l;i++){this.parseStylesheet(a[i])}},parseStylesheet:function(a){if(a.imports){try{var b=a.imports;var l=b.length;for(var i=0;i<l;i++){this.parseStylesheet(a.imports[i])}}catch(securityException){}}try{var c=a.rules;var r=c.length;for(var j=0;j<r;j++){this.parseCSSRule(c[j],a)}}catch(someException){}},parseCSSRule:function(a,b){var c=a.selectorText;if(m.test(c)){var d=a.style.cssText;var e=n.exec(c)[1];var f=c.replace(o,'on$1');var g=c.replace(p,'.$2'+f);var h=q.exec(g)[1];var i=e+h;if(!this.callbacks[i]){var j=u.get();var k=v(j);b.addRule(e,j+':expression(CSSHover(this, "'+f+'", "'+h+'", "'+k+'"))');this.callbacks[i]=true}b.addRule(g,d)}},patch:function(a,b,c,d){try{var f=a.parentNode.currentStyle[d];a.style[d]=f}catch(e){a.runtimeStyle[d]=''}if(!a.csshover){a.csshover=[]}if(!a.csshover[c]){a.csshover[c]=true;var g=new CSSHoverElement(a,b,c);this.elements.push(g)}return b},unload:function(){try{var l=this.elements.length;for(var i=0;i<l;i++){this.elements[i].unload()}this.elements=[];this.callbacks={}}catch(e){}}};var x={onhover:{activator:'onmouseenter',deactivator:'onmouseleave'},onactive:{activator:'onmousedown',deactivator:'onmouseup'},onfocus:{activator:'onfocus',deactivator:'onblur'}};function CSSHoverElement(a,b,c){this.node=a;this.type=b;var d=new RegExp('(^|\\s)'+c+'(\\s|$)','g');this.activator=function(){a.className+=' '+c};this.deactivator=function(){a.className=a.className.replace(d,' ')};a.attachEvent(x[b].activator,this.activator);a.attachEvent(x[b].deactivator,this.deactivator)}CSSHoverElement.prototype={unload:function(){this.node.detachEvent(x[this.type].activator,this.activator);this.node.detachEvent(x[this.type].deactivator,this.deactivator);this.activator=null;this.deactivator=null;this.node=null;this.type=null}};window.attachEvent('onbeforeunload',function(){w.unload()});return function(a,b,c,d){if(a){return w.patch(a,b,c,d)}else{w.init()}}})();
</script>

13
i18n/ab.json Normal file
View File

@ -0,0 +1,13 @@
{
"@metadata": {
"authors": [
"Temuri rajavi"
]
},
"vector-action-move": "Ахьӡ аҧсахра",
"vector-view-create": "Арҿиара",
"vector-view-edit": "Ариашамҭа",
"vector-view-history": "Аҭоурых",
"vector-view-view": "Аҧхьара",
"vector-view-viewsource": "Ахәаҧшра"
}

19
i18n/ace.json Normal file
View File

@ -0,0 +1,19 @@
{
"@metadata": {
"authors": [
"Fadli Idris",
"Si Gam Acèh"
]
},
"vector-action-addsection": "Tamah bhaih",
"vector-action-delete": "Sampôh",
"vector-action-move": "Pupinah",
"vector-action-protect": "Peulindông",
"vector-action-undelete": "Bateuë sampôh",
"vector-action-unprotect": "Gantoe neulindông",
"vector-view-create": "Peugöt",
"vector-view-edit": "Andam",
"vector-view-history": "Eu riwayat",
"vector-view-view": "Beuët",
"vector-view-viewsource": "Eu nè"
}

21
i18n/ady-cyrl.json Normal file
View File

@ -0,0 +1,21 @@
{
"@metadata": {
"authors": [
"Adamsa123",
"Amire80",
"Celekan",
"Siklawy"
]
},
"vector-action-addsection": "1офтхьабз",
"vector-action-delete": "ЛъэкӀ",
"vector-action-move": "Хьы",
"vector-action-protect": "Иухъумэ",
"vector-action-undelete": "Умылъэк1",
"vector-action-unprotect": "Умыухъумэ",
"vector-view-create": "Игъэхъу",
"vector-view-edit": "Гъэтэрэзыжь",
"vector-view-history": "Тарихъым eплъ",
"vector-view-view": "Едж",
"vector-view-viewsource": "Еплъ лъапсэм"
}

19
i18n/aeb.json Normal file
View File

@ -0,0 +1,19 @@
{
"@metadata": {
"authors": [
"Csisc",
"Malekbr"
]
},
"vector-action-addsection": "أضف موضوعا",
"vector-action-delete": "احذف",
"vector-action-move": "انقل",
"vector-action-protect": "احم",
"vector-action-undelete": "استرجع الحذف",
"vector-action-unprotect": "غير الحماية",
"vector-view-create": "أنشئ",
"vector-view-edit": "Baddel",
"vector-view-history": "Warri l'historique",
"vector-view-view": "Aqra",
"vector-view-viewsource": "اعرض المصدر"
}

20
i18n/af.json Normal file
View File

@ -0,0 +1,20 @@
{
"@metadata": {
"authors": [
"Byeboer",
"Naudefj"
]
},
"vector-action-addsection": "Nuwe onderwerp",
"vector-action-delete": "Skrap",
"vector-action-move": "Skuif",
"vector-action-protect": "Beskerm",
"vector-action-undelete": "Ontskrap",
"vector-action-unprotect": "Wysig beskerming",
"vector-view-create": "Skep",
"vector-view-edit": "Wysig",
"vector-view-history": "Wys geskiedenis",
"vector-view-view": "Lees",
"vector-view-viewsource": "Wys bronteks",
"vector-more-actions": "Meer"
}

20
i18n/aln.json Normal file
View File

@ -0,0 +1,20 @@
{
"@metadata": {
"authors": [
"Bresta"
]
},
"vector.css": "/* CSSi i vednosun këtu ka me i prekë shfrytëzuesit e dukjes Vector */",
"vector.js": "/* Çdo JavaScript këtu ka me u ngarkue për shfrytëzuesit që përdorin dukjen Vector */",
"vector-action-addsection": "Shto temë",
"vector-action-delete": "Fshij",
"vector-action-move": "Zhvendos",
"vector-action-protect": "Mbroj",
"vector-action-undelete": "Kthe fshimjen mbrapsht",
"vector-action-unprotect": "Hiq mbrojtjen",
"vector-view-create": "Krijo",
"vector-view-edit": "Redakto",
"vector-view-history": "Shih historinë",
"vector-view-view": "Lexo",
"vector-view-viewsource": "Shih kodin"
}

22
i18n/am.json Normal file
View File

@ -0,0 +1,22 @@
{
"@metadata": {
"authors": [
"Codex Sinaiticus",
"Elfalem",
"Hinstein",
"Teferra"
]
},
"vector-action-addsection": "ርዕስ ጨምር",
"vector-action-delete": "አጥፋ",
"vector-action-move": "ለማዛወር",
"vector-action-protect": "ለመቆለፍ",
"vector-action-undelete": "አታጥፋ",
"vector-action-unprotect": "አለመቆለፍ",
"vector-view-create": "አዲስ ፍጠር",
"vector-view-edit": "አርም",
"vector-view-history": "ታሪኩን አሳይ",
"vector-view-view": "ለማንበብ",
"vector-view-viewsource": "ጥሬ ኮድ ለመመልከት",
"vector-more-actions": "ተጨማሪ"
}

21
i18n/an.json Normal file
View File

@ -0,0 +1,21 @@
{
"@metadata": {
"authors": [
"Juanpabl"
]
},
"skinname-vector": "Vector",
"vector.css": "/* Os estilos CSS colocaus aquí s'aplicarán ta totz os usuarios que faigan servir l'apariencia Vector */",
"vector.js": "/* Qualsiquier codigo Javascript escrito aquí se cargará ta totz os usuarios que usen a piel Vector */",
"vector-action-addsection": "Adhibir nueva sección",
"vector-action-delete": "Borrar",
"vector-action-move": "Tresladar",
"vector-action-protect": "Protecher",
"vector-action-undelete": "Restaurar",
"vector-action-unprotect": "Cambiar protección",
"vector-view-create": "Creyar",
"vector-view-edit": "Editar",
"vector-view-history": "Amostrar l'historial",
"vector-view-view": "Leyer",
"vector-view-viewsource": "Veyer o codigo fuent"
}

18
i18n/ang.json Normal file
View File

@ -0,0 +1,18 @@
{
"@metadata": {
"authors": [
"Gott wisst"
]
},
"vector-action-addsection": "Besettan mearcunge",
"vector-action-delete": "Forlēosan",
"vector-action-move": "Wegan",
"vector-action-protect": "Beorgan",
"vector-action-undelete": "Scieppan tramet eft",
"vector-action-unprotect": "Andwendan beorgunge",
"vector-view-create": "Scieppan",
"vector-view-edit": "Adihtan",
"vector-view-history": "Stǣr",
"vector-view-view": "Rǣdan",
"vector-view-viewsource": "Sēon fruman"
}

28
i18n/ar.json Normal file
View File

@ -0,0 +1,28 @@
{
"@metadata": {
"authors": [
"Abanima",
"Calak",
"Meno25",
"Mido",
"OsamaK",
"أحمد",
"زكريا"
]
},
"skinname-vector": "فكتور",
"vector.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة فكتور */",
"vector.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة فكتور */",
"vector-action-addsection": "أضف موضوعا",
"vector-action-delete": "احذف",
"vector-action-move": "انقل",
"vector-action-protect": "احم",
"vector-action-undelete": "ألغ الحذف",
"vector-action-unprotect": "غير الحماية",
"vector-view-create": "أنشئ",
"vector-view-edit": "عدل",
"vector-view-history": "اعرض التاريخ",
"vector-view-view": "اقرأ",
"vector-view-viewsource": "اعرض المصدر",
"vector-more-actions": "مزيد"
}

20
i18n/arc.json Normal file
View File

@ -0,0 +1,20 @@
{
"@metadata": {
"authors": [
"334a",
"Basharh",
"Michaelovic"
]
},
"vector-action-addsection": "ܐܘܣܦ ܡܠܘܐܐ",
"vector-action-delete": "ܫܘܦ",
"vector-action-move": "ܫܢܝ",
"vector-action-protect": "ܛܪ",
"vector-action-undelete": "ܠܐ ܫܘܦ",
"vector-action-unprotect": "ܫܚܠܦ ܢܛܝܪܘܬܐ",
"vector-view-create": "ܒܪܝ",
"vector-view-edit": "ܫܚܠܦ",
"vector-view-history": "ܚܙܝ ܬܫܥܝܬܐ",
"vector-view-view": "ܩܪܝ",
"vector-view-viewsource": "ܚܙܝ ܡܒܘܥܐ"
}

19
i18n/arn.json Normal file
View File

@ -0,0 +1,19 @@
{
"@metadata": {
"authors": [
"Clerc",
"Fiestoforo"
]
},
"vector-action-addsection": "Püñamtun dungu",
"vector-action-delete": "Liftun",
"vector-action-move": "Wiñamün",
"vector-action-protect": "Nürüfkünun",
"vector-action-undelete": "Wüñoñamümün",
"vector-action-unprotect": "Kalekünun Nürüfkünun",
"vector-view-create": "Dewman",
"vector-view-edit": "Kümeelün",
"vector-view-history": "Pengelün rupañmael",
"vector-view-view": "Chillkatun",
"vector-view-viewsource": "Kimam chew küpan chi wirin"
}

8
i18n/aro.json Normal file
View File

@ -0,0 +1,8 @@
{
"@metadata": {
"authors": [
"Ooswesthoesbes"
]
},
"vector-view-edit": "Imeakie"
}

19
i18n/arq.json Normal file
View File

@ -0,0 +1,19 @@
{
"@metadata": {
"authors": [
"Bachounda",
"Oldstoneage"
]
},
"vector-action-addsection": "زيد موضوع",
"vector-action-delete": "امحي",
"vector-action-move": "حول",
"vector-action-protect": "بروجي",
"vector-action-undelete": "ردّ كيما كان",
"vector-action-unprotect": "بدّل الـحماية",
"vector-view-create": "أصنع",
"vector-view-edit": "بدل",
"vector-view-history": "روح للتاريخي",
"vector-view-view": "أقرى",
"vector-view-viewsource": "شوف المصدر"
}

19
i18n/ary.json Normal file
View File

@ -0,0 +1,19 @@
{
"@metadata": {
"authors": [
"Enzoreg",
"Zanatos"
]
},
"vector-action-addsection": "Zid topic",
"vector-action-delete": "Suprimi",
"vector-action-move": "Neqel",
"vector-action-protect": "Ḫami",
"vector-action-undelete": "rja lhadf",
"vector-action-unprotect": "Ḫiyed l-ḫimaya",
"vector-view-create": "Ĥṫareĝ",
"vector-view-edit": "Ĝedel",
"vector-view-history": "Ṫariĥ l-fiċyé",
"vector-view-view": "Qra",
"vector-view-viewsource": "Ċof l-masdar"
}

22
i18n/arz.json Normal file
View File

@ -0,0 +1,22 @@
{
"@metadata": {
"authors": [
"Ghaly",
"Meno25",
"Ramsis II"
]
},
"vector.css": "/* CSS اللى هنا حتأثر على اليوزرز اللى بيستخدموا واجهة فكتور */",
"vector.js": "/* اى جافاسكريبت هنا حتتحمل لكل يوزر بيستخدم واجهة فكتور */",
"vector-action-addsection": "ضيف موضوع",
"vector-action-delete": "مسح",
"vector-action-move": "نقل",
"vector-action-protect": "حمايه",
"vector-action-undelete": "الغى المسح",
"vector-action-unprotect": "غير الحمايه",
"vector-view-create": "اعمل",
"vector-view-edit": "تعديل",
"vector-view-history": "استعراض التاريخ",
"vector-view-view": "قرايه",
"vector-view-viewsource": "استعراض المصدر"
}

21
i18n/as.json Normal file
View File

@ -0,0 +1,21 @@
{
"@metadata": {
"authors": [
"Bishnu Saikia",
"Chaipau",
"Gitartha.bordoloi"
]
},
"vector-action-addsection": "বিষয় যোগ",
"vector-action-delete": "বিলোপ কৰক",
"vector-action-move": "স্থানান্তৰ কৰক",
"vector-action-protect": "সুৰক্ষিত কৰক",
"vector-action-undelete": "পুনৰুদ্ধাৰ কৰক",
"vector-action-unprotect": "সুৰক্ষা সলনি কৰক",
"vector-view-create": "সৃষ্টি কৰক",
"vector-view-edit": "সম্পাদনা",
"vector-view-history": "ইতিহাস চাওক",
"vector-view-view": "পঢ়ক",
"vector-view-viewsource": "উৎস চাওক",
"vector-more-actions": "অধিক"
}

23
i18n/ase.json Normal file
View File

@ -0,0 +1,23 @@
{
"@metadata": {
"authors": [
"Icemandeaf"
]
},
"skinname-vector": "M509x575S10e20494x425S14a20493x459S16d20492x478S1fb20494x502S17620493x525S11a20493x545",
"vector-skin-desc": "M535x520S19a00507x481S19a08465x481S22f14465x506S22f04509x506 M515x598S18d20494x403S17620499x432S11920493x452S17620499x482S14720500x502S17620499x528S17620499x548S14020485x568 M521x508S1f748479x493S1f740501x493 M532x517S15a16505x505S2880f468x484S20e00491x495S1821d503x492 M534x547S2ff00482x483S10001513x517S2e305488x487 S38700463x496 M535x536S20300516x521S20308470x521S26500516x502S26510470x502S14c30511x465S14c38465x465 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M520x540S37606481x460S15a40508x513S28801499x491S20500488x492",
"vector.css": "/* M509x529S16d20492x471S20320493x495S20320493x514 M535x523S14c50508x492S14c58469x492S22520503x477S22520465x477 M525x525S10004510x475S22a04511x510S1000c476x475S22a14477x510 M534x518S2ff00482x483S15a10522x486S2b700514x458 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M521x508S1f748479x493S1f740501x493 M509x575S10e20494x425S14a20493x459S16d20492x478S1fb20494x502S17620493x525S11a20493x545 M517x524S15a02484x477S15a20489x484S21100504x492S22a04504x509 */",
"vector.js": "/* M520x523S1f540480x477S2a204497x495 M519x527S19220498x489S2a20c482x473S20320498x512 M525x525S10004510x475S22a04511x510S1000c476x475S22a14477x510 M534x518S2ff00482x483S15a10522x486S2b700514x458 M524x539S14402493x485S1440a486x461S22b00508x509S22b10476x483 M536x521S2ff00482x483S10011515x491S28108515x461 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M509x575S10e20494x425S14a20493x459S16d20492x478S1fb20494x502S17620493x525S11a20493x545 M517x524S15a02484x477S15a20489x484S21100504x492S22a04504x509 */",
"vector-action-addsection": "M532x517S15a16505x505S2880f468x484S20e00491x495S1821d503x492 M522x522S15a37478x479S10041485x492S20600500x492",
"vector-action-delete": "M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468",
"vector-action-move": "M552x509S18520488x494S18528449x494S26626522x492",
"vector-action-protect": "M512x519S15a19488x482S15a11489x482S20600488x508",
"vector-action-undelete": "M515x538S15a0a486x463S10050500x467S2330b485x516S20e00491x501 M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468",
"vector-action-unprotect": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M512x519S15a19488x482S15a11489x482S20600488x508",
"vector-view-create": "M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501",
"vector-view-edit": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468",
"vector-view-history": "M525x524S2ff00482x483S10e00507x494S26500511x474 M514x523S11541487x478S22f04489x509",
"vector-view-view": "M513x540S15a06486x459S10e50494x474S22b04493x510",
"vector-view-viewsource": "M525x524S2ff00482x483S10e00507x494S26500511x474 M509x545S16d20492x456S17620493x480S10120493x497S14a20494x530",
"vector-more-actions": "M526x508S18510501x493S18518475x493"
}

23
i18n/ast.json Normal file
View File

@ -0,0 +1,23 @@
{
"@metadata": {
"authors": [
"Esbardu",
"Xuacu"
]
},
"vector-skin-desc": "Versión moderna de MonoBook, con un aspeutu frescu y munchos ameyoramientos d'usabilidá",
"vector.css": "/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Vector */",
"vector.js": "/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu Vector */",
"vector-action-addsection": "Amestar seición",
"vector-action-delete": "Desaniciar",
"vector-action-move": "Treslladar",
"vector-action-protect": "Protexer",
"vector-action-undelete": "Restaurar",
"vector-action-unprotect": "Camudar la proteición",
"vector-view-create": "Crear",
"vector-view-edit": "Editar",
"vector-view-history": "Ver historial",
"vector-view-view": "Lleer",
"vector-view-viewsource": "Ver fonte",
"vector-more-actions": "Más"
}

8
i18n/av.json Normal file
View File

@ -0,0 +1,8 @@
{
"@metadata": {
"authors": [
"Умар"
]
},
"vector-view-edit": "Хисизабизе"
}

16
i18n/avk.json Normal file
View File

@ -0,0 +1,16 @@
{
"@metadata": {
"authors": [
"Wikimistusik"
]
},
"vector-action-addsection": "Loplekura va detce",
"vector-action-delete": "Sulara",
"vector-action-move": "Arrundara",
"vector-action-protect": "Nendara",
"vector-view-create": "Redura",
"vector-view-edit": "Betara",
"vector-view-history": "Wira va izvot",
"vector-view-view": "Belira",
"vector-view-viewsource": "klitawira"
}

28
i18n/az.json Normal file
View File

@ -0,0 +1,28 @@
{
"@metadata": {
"authors": [
"AZISS",
"Arystanbek",
"Gulmammad",
"Sortilegus",
"Vago",
"Vugar 1981",
"Wertuose"
]
},
"skinname-vector": "Vector",
"vector.css": "/* Burada yerləşən CSS Vector istifadəçilərinə tətbiq olunur */",
"vector.js": "/* Burada Vector skin istifadəçiləri üçün istənilən JavaScript yüklənəcək */",
"vector-action-addsection": "Mövzu əlavə et",
"vector-action-delete": "Sil",
"vector-action-move": "Adını dəyişdir",
"vector-action-protect": "Mühafizə et",
"vector-action-undelete": "Bərpa et",
"vector-action-unprotect": "Mühafizəni kənarlaşdır",
"vector-view-create": "Yarat",
"vector-view-edit": "Redaktə",
"vector-view-history": "Tarixçəyə bax",
"vector-view-view": "Oxu",
"vector-view-viewsource": "Mənbəyə bax",
"vector-more-actions": "Daha"
}

20
i18n/azb.json Normal file
View File

@ -0,0 +1,20 @@
{
"@metadata": {
"authors": [
"E THP",
"Ebrahimi-amir",
"Mousa"
]
},
"vector-action-addsection": "قوْنو آرتیر",
"vector-action-delete": "سیل",
"vector-action-move": "داشی",
"vector-action-protect": "قوْرو",
"vector-action-undelete": "سیلمگی قایتار",
"vector-action-unprotect": "قوْروماغی دَییشدیر",
"vector-view-create": "یارات",
"vector-view-edit": "دَییشدیر",
"vector-view-history": "گئچمیشه باخ",
"vector-view-view": "اوْخو",
"vector-view-viewsource": "قایناغا باخ"
}

20
i18n/ba.json Normal file
View File

@ -0,0 +1,20 @@
{
"@metadata": {
"authors": [
"Assele",
"Haqmar"
]
},
"skinname-vector": "Векторлы",
"vector-action-addsection": "Тема өҫтәргә",
"vector-action-delete": "Юйырға",
"vector-action-move": "Исемен үҙгәртергә",
"vector-action-protect": "Һаҡларға",
"vector-action-undelete": "Тергеҙергә",
"vector-action-unprotect": "Һаҡлауҙы үҙгәртергә",
"vector-view-create": "Яһау",
"vector-view-edit": "Үҙгәртергә",
"vector-view-history": "Тарихты ҡарау",
"vector-view-view": "Уҡыу",
"vector-view-viewsource": "Сығанаҡты ҡарарға"
}

17
i18n/ban.json Normal file
View File

@ -0,0 +1,17 @@
{
"@metadata": {
"authors": [
"Adi Mayndra",
"BASAbali"
]
},
"vector-action-addsection": "imbuhin indik wacana",
"vector-action-delete": "ngapus",
"vector-action-move": "kisidang",
"vector-action-protect": "nyaga",
"vector-view-create": "ngawe",
"vector-view-edit": "mecikang",
"vector-view-history": "indik sane lintang",
"vector-view-view": "Waca",
"vector-view-viewsource": "cingak witnyane"
}

19
i18n/bar.json Normal file
View File

@ -0,0 +1,19 @@
{
"@metadata": {
"authors": [
"Bua333",
"Mucalexx"
]
},
"vector-action-addsection": "An Obschnitt dazua doa",
"vector-action-delete": "Leschn",
"vector-action-move": "Vaschiabm",
"vector-action-protect": "Schitzn",
"vector-action-undelete": "Wiederherstön",
"vector-action-unprotect": "freigeem",
"vector-view-create": "Aufbaun",
"vector-view-edit": "Werkln",
"vector-view-history": "Gschicht oschaugn",
"vector-view-view": "Lesn",
"vector-view-viewsource": "Quejtext ozoagn"
}

21
i18n/bbc-latn.json Normal file
View File

@ -0,0 +1,21 @@
{
"@metadata": {
"authors": [
"Daniel Harahap",
"WBT003Bugari",
"WBT006Hendra",
"WBT009Anju"
]
},
"vector-action-addsection": "Bagian na imbaru",
"vector-action-delete": "Sesa",
"vector-action-move": "Pahusor",
"vector-action-protect": "Ramoti",
"vector-action-undelete": "unang sesa",
"vector-action-unprotect": "Uba parlindungan",
"vector-view-create": "Tompa",
"vector-view-edit": "Paubah",
"vector-view-history": "Patudu andorang na",
"vector-view-view": "Jaha",
"vector-view-viewsource": "Ida haroanna"
}

20
i18n/bcc.json Normal file
View File

@ -0,0 +1,20 @@
{
"@metadata": {
"authors": [
"Mostafadaneshvar",
"RigiMahnoor"
]
},
"vector-action-addsection": "هور کتن عنوان",
"vector-action-delete": "زورگ",
"vector-action-move": "جاه په جاه",
"vector-action-protect": "حفاظت",
"vector-action-undelete": "ترینگ",
"vector-action-unprotect": "پروتکشنء ٹگل بدئ",
"vector-view-create": "شرکتن",
"vector-view-edit": "اصلاح",
"vector-view-history": "چارتن تاریح",
"vector-view-view": "وانتن",
"vector-view-viewsource": "پیشدارگ بن جاه",
"vector-more-actions": "گیشتر"
}

19
i18n/bcl.json Normal file
View File

@ -0,0 +1,19 @@
{
"@metadata": {
"authors": [
"Filipinayzd",
"Geopoet"
]
},
"vector-action-addsection": "Idagdag an topic",
"vector-action-delete": "puráon",
"vector-action-move": "Ibalyó",
"vector-action-protect": "Protektaran",
"vector-action-undelete": "Bawion sa pagkapara",
"vector-action-unprotect": "Ribayan an proteksyon",
"vector-view-create": "Magmukna",
"vector-view-edit": "Liwatón",
"vector-view-history": "Tanawon sa historiya",
"vector-view-view": "Basáha",
"vector-view-viewsource": "Hilingón an ginikánan"
}

22
i18n/be-tarask.json Normal file
View File

@ -0,0 +1,22 @@
{
"@metadata": {
"authors": [
"EugeneZelenko",
"Red Winged Duck",
"Wizardist"
]
},
"skinname-vector": "Вэктар",
"vector-action-addsection": "Дадаць тэму",
"vector-action-delete": "Выдаліць",
"vector-action-move": "Перанесьці",
"vector-action-protect": "Абараніць",
"vector-action-undelete": "Аднавіць",
"vector-action-unprotect": "Зьмяніць абарону",
"vector-view-create": "Стварыць",
"vector-view-edit": "Рэдагаваць",
"vector-view-history": "Паказаць гісторыю",
"vector-view-view": "Чытаць",
"vector-view-viewsource": "Паказаць крыніцу",
"vector-more-actions": "Болей"
}

23
i18n/be.json Normal file
View File

@ -0,0 +1,23 @@
{
"@metadata": {
"authors": [
"Mikalai Udodau",
"Yury Tarasievich",
"Дзяніс Тутэйшы",
"Хомелка"
]
},
"vector-skin-desc": "Сучасная версія вокладкі Манабук, з абноўленым відам і шматлікімі зручнымі паляпшэннямі",
"vector-action-addsection": "Дадаць тэму",
"vector-action-delete": "Сцерці",
"vector-action-move": "Перанесці",
"vector-action-protect": "Ахова",
"vector-action-undelete": "Аднавіць",
"vector-action-unprotect": "Змяніць ахову",
"vector-view-create": "Стварыць",
"vector-view-edit": "Правіць",
"vector-view-history": "Паказаць гісторыю",
"vector-view-view": "Чытаць",
"vector-view-viewsource": "Паказаць зыходны тэкст",
"vector-more-actions": "Яшчэ"
}

11
i18n/bew.json Normal file
View File

@ -0,0 +1,11 @@
{
"@metadata": {
"authors": [
"Naval Scene"
]
},
"vector-action-delete": "Ngapus",
"vector-action-move": "Pindahin",
"vector-action-undelete": "Balikin nyang keapus",
"vector-view-create": "Bikin"
}

20
i18n/bg.json Normal file
View File

@ -0,0 +1,20 @@
{
"@metadata": {
"authors": [
"Borislav",
"DCLXVI",
"Spiritia"
]
},
"vector-action-addsection": "Добавяне на тема",
"vector-action-delete": "Изтриване",
"vector-action-move": "Преместване",
"vector-action-protect": "Защита",
"vector-action-undelete": "Възстановяване",
"vector-action-unprotect": "Промяна на защитата",
"vector-view-create": "Създаване",
"vector-view-edit": "Редактиране",
"vector-view-history": "История",
"vector-view-view": "Преглед",
"vector-view-viewsource": "Преглед на кода"
}

19
i18n/bho.json Normal file
View File

@ -0,0 +1,19 @@
{
"@metadata": {
"authors": [
"Ganesh",
"Nepaboy"
]
},
"vector-action-addsection": "विषय जोड़ीं",
"vector-action-delete": "मिटाईं",
"vector-action-move": "स्थांतरण",
"vector-action-protect": "संरक्षित करीं",
"vector-action-undelete": "मत मिटाईं",
"vector-action-unprotect": "सुरक्षा बदलीं",
"vector-view-create": "बनाईं",
"vector-view-edit": "सम्पादन",
"vector-view-history": "इतिहास देखीं",
"vector-view-view": "पढ़ीं",
"vector-view-viewsource": "स्त्रोत देखीं"
}

10
i18n/bi.json Normal file
View File

@ -0,0 +1,10 @@
{
"@metadata": {
"authors": [
"Sotiale"
]
},
"vector-action-move": "Muv",
"vector-view-history": "Lukluk histri",
"vector-view-view": "Rid"
}

19
i18n/bjn.json Normal file
View File

@ -0,0 +1,19 @@
{
"@metadata": {
"authors": [
"Ezagren",
"J Subhi"
]
},
"vector-action-addsection": "Tambahi tupik",
"vector-action-delete": "Hapus",
"vector-action-move": "Pindahakan",
"vector-action-protect": "Lindungi",
"vector-action-undelete": "Pawalangan pahapusan",
"vector-action-unprotect": "Palindungan",
"vector-view-create": "Ulah",
"vector-view-edit": "Babak",
"vector-view-history": "Tiringi halam",
"vector-view-view": "Baca",
"vector-view-viewsource": "Tiringi asal mula"
}

8
i18n/bm.json Normal file
View File

@ -0,0 +1,8 @@
{
"@metadata": {
"authors": [
"Amadouyoro.thiam"
]
},
"vector-view-view": "Kalan"
}

25
i18n/bn.json Normal file
View File

@ -0,0 +1,25 @@
{
"@metadata": {
"authors": [
"Aftab1995",
"Bellayet",
"Leemon2010",
"Nasir8891",
"Tauhid16",
"Wikitanvir"
]
},
"skinname-vector": "ভেক্টর",
"vector-action-addsection": "বিষয় যোগ",
"vector-action-delete": "অপসারণ",
"vector-action-move": "স্থানান্তর",
"vector-action-protect": "সুরক্ষা",
"vector-action-undelete": "পুনরুদ্ধার",
"vector-action-unprotect": "সুরক্ষা পরিবর্তন",
"vector-view-create": "তৈরি",
"vector-view-edit": "সম্পাদনা",
"vector-view-history": "ইতিহাস",
"vector-view-view": "পড়ুন",
"vector-view-viewsource": "উৎস দেখুন",
"vector-more-actions": "আরও"
}

19
i18n/bo.json Normal file
View File

@ -0,0 +1,19 @@
{
"@metadata": {
"authors": [
"Freeyak",
"Phurbutsering"
]
},
"vector-action-addsection": "བརྗོད་གཞི་ཁ་སྣོན།",
"vector-action-delete": "སུབས།",
"vector-action-move": "སྤོར་བ།",
"vector-action-protect": "འགོག་སྲུང།",
"vector-action-undelete": "མི་བསུབས་",
"vector-action-unprotect": "སྲུང་སྐྱོབ་གློད་པ།",
"vector-view-create": "གསར་བཟོ།",
"vector-view-edit": "རྩོམ་སྒྲིག",
"vector-view-history": "ལོ་རྒྱུས་ལ་ལྟ་བ།",
"vector-view-view": "ཀློག་པ།",
"vector-view-viewsource": "ཁུངས་ལ་ལྟ་བ།"
}

18
i18n/bpy.json Normal file
View File

@ -0,0 +1,18 @@
{
"@metadata": {
"authors": [
"Usingha"
]
},
"vector-action-addsection": "বিষয় তিলকর",
"vector-action-delete": "পুসে বেলা",
"vector-action-move": "থেইকর",
"vector-action-protect": "লুকর",
"vector-action-undelete": "নাপুসি",
"vector-action-unprotect": "লুকরানিহান সিলকর",
"vector-view-create": "হঙকরিক",
"vector-view-edit": "পতানি",
"vector-view-history": "ইতিহাস চেইক",
"vector-view-view": "পাকরিক",
"vector-view-viewsource": "সোর্স চেইক"
}

23
i18n/br.json Normal file
View File

@ -0,0 +1,23 @@
{
"@metadata": {
"authors": [
"Fulup",
"Y-M D"
]
},
"skinname-vector": "Vektor",
"vector.css": "/* Talvezout a raio ar CSS lakaet amañ evit implijerien ar gwiskadur Vektor */",
"vector.js": "/* Kement JavaScript amañ a vo karget evit an implijerien a ra gant ar gwiskadur Vektor */",
"vector-action-addsection": "Rannbennad nevez",
"vector-action-delete": "Diverkañ",
"vector-action-move": "Adenvel",
"vector-action-protect": "Gwareziñ",
"vector-action-undelete": "Diziverkañ",
"vector-action-unprotect": "Cheñch gwarez",
"vector-view-create": "Krouiñ",
"vector-view-edit": "Kemmañ",
"vector-view-history": "Gwelet an istor",
"vector-view-view": "Lenn",
"vector-view-viewsource": "Sellet ouzh tarzh an destenn",
"vector-more-actions": "Muioc'h"
}

16
i18n/brh.json Normal file
View File

@ -0,0 +1,16 @@
{
"@metadata": {
"authors": [
"Imdadb"
]
},
"vector-action-addsection": "Púskun sarhál",
"vector-action-delete": "Mesa",
"vector-action-move": "Surif",
"vector-action-protect": "Rakk",
"vector-view-create": "Biná",
"vector-view-edit": "Radbadal",
"vector-view-history": "Lekav e ur",
"vector-view-view": "Xuán",
"vector-view-viewsource": "Bumpad e ur"
}

22
i18n/bs.json Normal file
View File

@ -0,0 +1,22 @@
{
"@metadata": {
"authors": [
"CERminator",
"DzWiki",
"KWiki",
"Edinwiki"
]
},
"vector-action-addsection": "Dodaj temu",
"vector-action-delete": "Izbriši",
"vector-action-move": "Preusmjeri",
"vector-action-protect": "Zaštiti",
"vector-action-undelete": "Vrati obrisano",
"vector-action-unprotect": "Promijeni zaštitu",
"vector-view-create": "Napravi",
"vector-view-edit": "Uredi",
"vector-view-history": "Pregled historije",
"vector-view-view": "Čitanje",
"vector-view-viewsource": "Pogledaj izvor",
"vector-more-actions": "Više"
}

18
i18n/bto.json Normal file
View File

@ -0,0 +1,18 @@
{
"@metadata": {
"authors": [
"Filipinayzd"
]
},
"vector-action-delete": "Puraon",
"vector-action-move": "Ilipat",
"vector-action-protect": "Protektaran",
"vector-action-undelete": "Ibalik",
"vector-action-unprotect": "Ribayan a proteksyon",
"vector-view-create": "Gumibo",
"vector-view-edit": "Balyowan",
"vector-view-history": "Baydon a kasaysayan",
"vector-view-view": "Basahon",
"vector-view-viewsource": "Baydon a ginikanan",
"vector-more-actions": "Dakul pa"
}

12
i18n/bug.json Normal file
View File

@ -0,0 +1,12 @@
{
"@metadata": {
"authors": [
"Kurniasan"
]
},
"vector-action-move": "Paléccé'",
"vector-view-create": "Ebbu",
"vector-view-edit": "Padéccéng",
"vector-view-view": "Baca",
"vector-view-viewsource": "Ita sumber"
}

16
i18n/bxr.json Normal file
View File

@ -0,0 +1,16 @@
{
"@metadata": {
"authors": [
"Bjargal",
"Elvonudinium"
]
},
"vector-action-addsection": "Һэдэб нэмэхэ",
"vector-action-delete": "Усадхаха",
"vector-action-move": "Зөөхэ",
"vector-view-create": "Үүдхэхэ",
"vector-view-edit": "Заһабарилха",
"vector-view-history": "Түүхые хараха",
"vector-view-view": "Уншаха",
"vector-view-viewsource": "эшэ үндэһэндэнь хандаха"
}

26
i18n/ca.json Normal file
View File

@ -0,0 +1,26 @@
{
"@metadata": {
"authors": [
"Aleator",
"Anskar",
"Calak",
"Paucabot",
"Ssola",
"Vriullop",
"Toniher"
]
},
"vector-skin-desc": "Versió moderna del MonoBook amb un nou aspesctes i moltes millores en la usabilitat",
"vector-action-addsection": "Nova secció",
"vector-action-delete": "Esborra",
"vector-action-move": "Reanomena",
"vector-action-protect": "Protegeix",
"vector-action-undelete": "Restaura",
"vector-action-unprotect": "Desprotegeix",
"vector-view-create": "Crea",
"vector-view-edit": "Modifica",
"vector-view-history": "Mostra l'historial",
"vector-view-view": "Mostra",
"vector-view-viewsource": "Mostra el codi",
"vector-more-actions": "Més"
}

18
i18n/cdo.json Normal file
View File

@ -0,0 +1,18 @@
{
"@metadata": {
"authors": [
"Yejianfei"
]
},
"vector-action-addsection": "加話題",
"vector-action-delete": "刪掉咯",
"vector-action-move": "移動",
"vector-action-protect": "保護",
"vector-action-undelete": "取消刪除",
"vector-action-unprotect": "改變保護",
"vector-view-create": "創建",
"vector-view-edit": "修改",
"vector-view-history": "看歷史",
"vector-view-view": "讀",
"vector-view-viewsource": "看源代碼"
}

21
i18n/ce.json Normal file
View File

@ -0,0 +1,21 @@
{
"@metadata": {
"authors": [
"Sasan700",
"Умар"
]
},
"skinname-vector": "Векторан",
"vector-action-addsection": "ТӀетоха хьедар",
"vector-action-delete": "ДӀаяккха",
"vector-action-move": "ЦӀе хийца",
"vector-action-protect": "Гlаролла дé",
"vector-action-undelete": "МеттахӀоттае",
"vector-action-unprotect": "ГӀароллех къаста",
"vector-view-create": "Кхоллар",
"vector-view-edit": "Нисъе",
"vector-view-history": "АгӀона хийцамаш",
"vector-view-view": "Éшар",
"vector-view-viewsource": "Билглонашка хьажа",
"vector-more-actions": "Кхин"
}

18
i18n/ceb.json Normal file
View File

@ -0,0 +1,18 @@
{
"@metadata": {
"authors": [
"Jordz"
]
},
"vector-action-addsection": "Pagdugang og topiko",
"vector-action-delete": "Papasa",
"vector-action-move": "Ibalhin",
"vector-action-protect": "Protektahi",
"vector-action-undelete": "Ayaw papasa",
"vector-action-unprotect": "Ayaw protektahi",
"vector-view-create": "Himoa",
"vector-view-edit": "Usba",
"vector-view-history": "Tan-awa ang kaagi",
"vector-view-view": "Basaha",
"vector-view-viewsource": "Tan-awa ang ginikanan"
}

21
i18n/ckb.json Normal file
View File

@ -0,0 +1,21 @@
{
"@metadata": {
"authors": [
"Asoxor",
"Calak"
]
},
"skinname-vector": "ڤێکتۆر",
"vector-action-addsection": "بابەت دابنێ",
"vector-action-delete": "بیسڕەوە",
"vector-action-move": "بیگوازەوە",
"vector-action-protect": "بیپارێزە",
"vector-action-undelete": "سڕینەوە بگەڕێنەوە",
"vector-action-unprotect": "پاراستن بگۆڕە",
"vector-view-create": "دروستکردن",
"vector-view-edit": "دەستکاریی بکە",
"vector-view-history": "مێژووەکەی ببینە",
"vector-view-view": "بیخوێنەوە",
"vector-view-viewsource": "سەرچاوەکەی ببینە",
"vector-more-actions": "زیاتر"
}

17
i18n/co.json Normal file
View File

@ -0,0 +1,17 @@
{
"@metadata": {
"authors": [
"Paulu"
]
},
"vector-action-addsection": "Aghjunghje discussione",
"vector-action-delete": "Supprimà",
"vector-action-move": "Cullucà",
"vector-action-protect": "Pruteghje",
"vector-action-unprotect": "Cambià a prutezzione",
"vector-view-create": "Creà",
"vector-view-edit": "Mudificà",
"vector-view-history": "Vede a cronolugia",
"vector-view-view": "Leghje",
"vector-view-viewsource": "Vede a surghjente"
}

19
i18n/cps.json Normal file
View File

@ -0,0 +1,19 @@
{
"@metadata": {
"authors": [
"Capisano",
"Oxyzen"
]
},
"vector-action-addsection": "Magdugang sang topiko",
"vector-action-delete": "Panason",
"vector-action-move": "Isdogon",
"vector-action-protect": "Protektahan",
"vector-action-undelete": "Indi pag panason",
"vector-action-unprotect": "Islan ang proteksyon",
"vector-view-create": "Ubrahon",
"vector-view-edit": "Bag-uhon",
"vector-view-history": "Ipakita ang kasaysayan",
"vector-view-view": "Basahon",
"vector-view-viewsource": "Lantawon ang ginhalinan"
}

18
i18n/crh-cyrl.json Normal file
View File

@ -0,0 +1,18 @@
{
"@metadata": {
"authors": [
"Don Alessandro"
]
},
"vector-action-addsection": "Мевзу къош",
"vector-action-delete": "Ёкъ эт",
"vector-action-move": "Адыны денъиштир",
"vector-action-protect": "Къорчала",
"vector-action-undelete": "Янъыдан ярат",
"vector-action-unprotect": "Къорчалавны денъиштир",
"vector-view-create": "Ярат",
"vector-view-edit": "Денъиштир",
"vector-view-history": "Кечмишини косьтер",
"vector-view-view": "Окъу",
"vector-view-viewsource": "Менба кодуны косьтер"
}

18
i18n/crh-latn.json Normal file
View File

@ -0,0 +1,18 @@
{
"@metadata": {
"authors": [
"Don Alessandro"
]
},
"vector-action-addsection": "Mevzu qoş",
"vector-action-delete": "Yoq et",
"vector-action-move": "Adını deñiştir",
"vector-action-protect": "Qorçala",
"vector-action-undelete": "Yañıdan yarat",
"vector-action-unprotect": "Qorçalavnı deñiştir",
"vector-view-create": "Yarat",
"vector-view-edit": "Deñiştir",
"vector-view-history": "Keçmişini köster",
"vector-view-view": "Oqu",
"vector-view-viewsource": "Menba kodunı köster"
}

23
i18n/cs.json Normal file
View File

@ -0,0 +1,23 @@
{
"@metadata": {
"authors": [
"Mormegil"
]
},
"skinname-vector": "Vektor",
"vector-skin-desc": "Moderní verze MonoBooku s novějším vzhledem a vylepšenou použitelností",
"vector.css": "/* Zde uvedené CSS bude ovlivňovat pouze styl „Vektor“ */",
"vector.js": "/* JavaScript pro uživatele používající vzhled „Vektor“ */",
"vector-action-addsection": "Přidat téma",
"vector-action-delete": "Smazat",
"vector-action-move": "Přesunout",
"vector-action-protect": "Zamknout",
"vector-action-undelete": "Obnovit",
"vector-action-unprotect": "Změnit zámek",
"vector-view-create": "Založit",
"vector-view-edit": "Editovat",
"vector-view-history": "Zobrazit historii",
"vector-view-view": "Číst",
"vector-view-viewsource": "Zobrazit zdrojový kód",
"vector-more-actions": "Další"
}

19
i18n/csb.json Normal file
View File

@ -0,0 +1,19 @@
{
"@metadata": {
"authors": [
"Kaszeba",
"Kuvaly"
]
},
"vector-action-addsection": "Dodôj témã",
"vector-action-delete": "Rëmôj",
"vector-action-move": "Przeniesë",
"vector-action-protect": "Zazychrëjë",
"vector-action-undelete": "Doprowôdzë nazôd",
"vector-action-unprotect": "Òdzychrëjë",
"vector-view-create": "Ùsôdzë",
"vector-view-edit": "Edicëjô",
"vector-view-history": "Historëjô lopka",
"vector-view-view": "Czëtôj",
"vector-view-viewsource": "Zdrojowi tekst"
}

18
i18n/cu.json Normal file
View File

@ -0,0 +1,18 @@
{
"@metadata": {
"authors": [
"ОйЛ"
]
},
"vector-action-addsection": "новꙑ бєсѣдꙑ чѧсти сътворѥниѥ",
"vector-action-delete": "поничьжєниѥ",
"vector-action-move": "прѣимєнованиѥ",
"vector-action-protect": "ꙁабранѥниѥ",
"vector-action-unprotect": "иꙁмѣни ꙁабранѥниꙗ обраꙁъ",
"vector-view-create": "сътворѥниѥ",
"vector-view-edit": "исправи",
"vector-view-history": "їсторїꙗ",
"vector-view-view": "чьтѥниѥ",
"vector-view-viewsource": "страницѧ источьнъ обраꙁъ",
"vector-more-actions": "вѧщє"
}

17
i18n/cv.json Normal file
View File

@ -0,0 +1,17 @@
{
"@metadata": {
"authors": [
"Chavash",
"FLAGELLVM DEI"
]
},
"vector-action-addsection": "Тема хуш",
"vector-action-delete": "Кăларса пăрах",
"vector-action-move": "Ятне улăштар",
"vector-action-protect": "Хӳтĕле",
"vector-view-create": "Çĕннине ту",
"vector-view-edit": "Тӳрлет",
"vector-view-history": "Кун-çул",
"vector-view-view": "Вула",
"vector-view-viewsource": "пуçламăш текста пăх"
}

19
i18n/cy.json Normal file
View File

@ -0,0 +1,19 @@
{
"@metadata": {
"authors": [
"Lloffiwr"
]
},
"vector-action-addsection": "Ychwanegu adran",
"vector-action-delete": "Dileu",
"vector-action-move": "Symud",
"vector-action-protect": "Diogelu",
"vector-action-undelete": "Adfer",
"vector-action-unprotect": "Newid y diogelwch",
"vector-view-create": "Dechrau",
"vector-view-edit": "Golygu",
"vector-view-history": "Gweld yr hanes",
"vector-view-view": "Darllen",
"vector-view-viewsource": "Dangos côd y dudalen",
"vector-more-actions": "Rhagor"
}

22
i18n/da.json Normal file
View File

@ -0,0 +1,22 @@
{
"@metadata": {
"authors": [
"Byrial",
"Christian List",
"Peter Alberti"
]
},
"vector-skin-desc": "Moderne version af MonoBook med frisk udseende og mange forbedringer af brugervenligheden",
"vector-action-addsection": "Nyt emne",
"vector-action-delete": "Slet",
"vector-action-move": "Flyt",
"vector-action-protect": "Beskyt",
"vector-action-undelete": "Gendan",
"vector-action-unprotect": "Ændr beskyttelse",
"vector-view-create": "Opret",
"vector-view-edit": "Redigér",
"vector-view-history": "Se historik",
"vector-view-view": "Læs",
"vector-view-viewsource": "Se kilden",
"vector-more-actions": "Mere"
}

26
i18n/de.json Normal file
View File

@ -0,0 +1,26 @@
{
"@metadata": {
"authors": [
"Kghbln",
"Metalhead64",
"The Evil IP address",
"Umherirrender"
]
},
"skinname-vector": "Vector",
"vector-skin-desc": "Moderne Version von Monobook mit frischem Aussehen und vielen Verbesserungen an der Benutzerfreundlichkeit",
"vector.css": "/* Das folgende CSS wird für Benutzer der Vector-Benutzeroberfläche geladen. Für allgemeingültige Benutzeroberflächen-Anpassungen bitte [[MediaWiki:Common.css]] bearbeiten. */",
"vector.js": "/* Das folgende JavaScript wird für Benutzer der Vector-Benutzeroberfläche geladen. Allgemeingültiges JavaScript bitte in [[MediaWiki:Common.js]] eintragen. */",
"vector-action-addsection": "Abschnitt hinzufügen",
"vector-action-delete": "Löschen",
"vector-action-move": "Verschieben",
"vector-action-protect": "Schützen",
"vector-action-undelete": "Wiederherstellen",
"vector-action-unprotect": "Seitenschutz ändern",
"vector-view-create": "Erstellen",
"vector-view-edit": "Bearbeiten",
"vector-view-history": "Versionsgeschichte",
"vector-view-view": "Lesen",
"vector-view-viewsource": "Quelltext anzeigen",
"vector-more-actions": "Mehr"
}

23
i18n/diq.json Normal file
View File

@ -0,0 +1,23 @@
{
"@metadata": {
"authors": [
"Asmen",
"Calak",
"Erdemaslancan",
"Mirzali"
]
},
"skinname-vector": "Vektor",
"vector-action-addsection": "Mewzu vıraze",
"vector-action-delete": "Bestere",
"vector-action-move": "Bere",
"vector-action-protect": "Bışevekne",
"vector-action-undelete": "Esterıtışi peyser bıgê",
"vector-action-unprotect": "Starkerdışi bıvurne",
"vector-view-create": "Vıraze",
"vector-view-edit": "Bıvurne",
"vector-view-history": "Tarixê pele bıvêne",
"vector-view-view": "Bıwane",
"vector-view-viewsource": ımey bıvêne",
"vector-more-actions": "Zêde"
}

18
i18n/dsb.json Normal file
View File

@ -0,0 +1,18 @@
{
"@metadata": {
"authors": [
"Michawiki"
]
},
"vector-action-addsection": "Temu pśidaś",
"vector-action-delete": "Wulašowaś",
"vector-action-move": "Pśesunuś",
"vector-action-protect": "Šćitaś",
"vector-action-undelete": "Wótnowiś",
"vector-action-unprotect": "Šćit změniś",
"vector-view-create": "Napóraś",
"vector-view-edit": "Wobźěłaś",
"vector-view-history": "Wersije a awtory",
"vector-view-view": "Cytaś",
"vector-view-viewsource": "Žrědło se woglědaś"
}

19
i18n/dtp.json Normal file
View File

@ -0,0 +1,19 @@
{
"@metadata": {
"authors": [
"FRANCIS5091",
"FRANELYA"
]
},
"vector-action-addsection": "Ruhangai piboboroson",
"vector-action-delete": "Pugaso",
"vector-action-move": "Poundoliho",
"vector-action-protect": "Tingoligai",
"vector-action-undelete": "Kada pugaso",
"vector-action-unprotect": "Alanai tingolig",
"vector-view-create": "Pomonsoi",
"vector-view-edit": "Idito",
"vector-view-history": "Intaai susuyan",
"vector-view-view": "Basao",
"vector-view-viewsource": "Intaai wowonod"
}

17
i18n/dv.json Normal file
View File

@ -0,0 +1,17 @@
{
"@metadata": {
"authors": [
"Ushau97"
]
},
"vector-action-addsection": "ޚިޔާލެއް އިތުރުކުރައްވާ",
"vector-action-delete": "ފޮހެލައްވާ",
"vector-action-move": "ތަން ބަދަލުކުރައްވާ",
"vector-action-protect": "ދިފާޢުކުރައްވާ",
"vector-action-unprotect": "ދިފާޢުކުރުން ބަދަލުކުރައްވާ",
"vector-view-create": "ފަށްޓަވާ",
"vector-view-edit": "އުނިއިތުރު ގެންނަވާ",
"vector-view-history": "ޞަފްޙާގެ ތާރީޚް",
"vector-view-view": "ކިޔުއްވާ",
"vector-view-viewsource": "މަސްދަރު ބައްލަވާ"
}

14
i18n/ee.json Normal file
View File

@ -0,0 +1,14 @@
{
"@metadata": {
"authors": [
"Natsubee"
]
},
"vector-action-delete": "Tutui",
"vector-action-move": "Ɖɔli eƒe nɔƒe",
"vector-view-create": "Dze egɔme",
"vector-view-edit": "Trɔ asi le eŋu",
"vector-view-history": "Kpɔ xoxoawo",
"vector-view-view": "Xlẽ",
"vector-view-viewsource": "Kpɔ alesi woŋlɔe"
}

19
i18n/egl.json Normal file
View File

@ -0,0 +1,19 @@
{
"@metadata": {
"authors": [
"Lévi"
]
},
"vector-action-addsection": "Zûnta discusiòun",
"vector-action-delete": "Scanşèla",
"vector-action-move": "Spôsta",
"vector-action-protect": "Prutēz",
"vector-action-undelete": "Fà al recóper",
"vector-action-unprotect": "Câmbia la prutesiòun",
"vector-view-create": "Invèinta",
"vector-view-edit": "Mudéfica",
"vector-view-history": "Guêrda la stôria",
"vector-view-view": "Lēş",
"vector-view-viewsource": "Guêrda la surzéia",
"vector-more-actions": "Êter"
}

26
i18n/el.json Normal file
View File

@ -0,0 +1,26 @@
{
"@metadata": {
"authors": [
"Calak",
"Crazymadlover",
"Evropi",
"Omnipaedista",
"Protnet",
"ZaDiak"
]
},
"vector.css": "/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του Vector skin */",
"vector.js": "/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το Vector skin */",
"vector-action-addsection": "Προσθήκη θέματος",
"vector-action-delete": "Διαγραφή",
"vector-action-move": "Μετακίνηση",
"vector-action-protect": "Προστασία",
"vector-action-undelete": "Επαναφορά",
"vector-action-unprotect": "Αλλαγή προστασίας",
"vector-view-create": "Δημιουργία",
"vector-view-edit": "Επεξεργασία",
"vector-view-history": "Προβολή ιστορικού",
"vector-view-view": "Ανάγνωση",
"vector-view-viewsource": "Προβολή κώδικα",
"vector-more-actions": "Περισσότερα"
}

21
i18n/en.json Normal file
View File

@ -0,0 +1,21 @@
{
"@metadata": {
"authors": []
},
"skinname-vector": "Vector",
"vector-skin-desc": "Modern version of MonoBook with fresh look and many usability improvements",
"vector.css": "/* CSS placed here will affect users of the Vector skin */",
"vector.js": "/* Any JavaScript here will be loaded for users using the Vector skin */",
"vector-action-addsection": "Add topic",
"vector-action-delete": "Delete",
"vector-action-move": "Move",
"vector-action-protect": "Protect",
"vector-action-undelete": "Undelete",
"vector-action-unprotect": "Change protection",
"vector-view-create": "Create",
"vector-view-edit": "Edit",
"vector-view-history": "View history",
"vector-view-view": "Read",
"vector-view-viewsource": "View source",
"vector-more-actions": "More"
}

24
i18n/eo.json Normal file
View File

@ -0,0 +1,24 @@
{
"@metadata": {
"authors": [
"KuboF",
"Objectivesea",
"Yekrats"
]
},
"skinname-vector": "Vektoro",
"vector.css": "/* La jena CSS influos la paĝaspekton por uzantoj de la Vektora temo. */",
"vector.js": "/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Vektora temo. */",
"vector-action-addsection": "Aldoni temon",
"vector-action-delete": "Forigi",
"vector-action-move": "Alinomigi",
"vector-action-protect": "Protekti",
"vector-action-undelete": "Malforigi",
"vector-action-unprotect": "Ŝanĝi protektadon",
"vector-view-create": "Krei",
"vector-view-edit": "Redakti",
"vector-view-history": "Vidi historion",
"vector-view-view": "Legi",
"vector-view-viewsource": "Vidi fonton",
"vector-more-actions": "Pli"
}

10
i18n/es-formal.json Normal file
View File

@ -0,0 +1,10 @@
{
"@metadata": {
"authors": [
"XanaG"
]
},
"vector-view-edit": "Editar",
"vector-view-history": "Ver historial",
"vector-view-view": "Leer"
}

32
i18n/es.json Normal file
View File

@ -0,0 +1,32 @@
{
"@metadata": {
"authors": [
"Armando-Martin",
"Crazymadlover",
"Dalton2",
"Fitoschido",
"Locos epraix",
"Manuelt15",
"MarcoAurelio",
"Miguel2706",
"Platonides",
"Vivaelcelta"
]
},
"skinname-vector": "Vector",
"vector-skin-desc": "Versión moderna de MonoBook, con un aspecto actualizado y muchas mejoras de usabilidad",
"vector.css": "/* El CSS colocado en esta página afectará a los usuarios que usen la apariencia \"Vector\" */",
"vector.js": "/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios que usen la apariencia Vector */",
"vector-action-addsection": "Sección nueva",
"vector-action-delete": "Borrar",
"vector-action-move": "Trasladar",
"vector-action-protect": "Proteger",
"vector-action-undelete": "Restaurar",
"vector-action-unprotect": "Cambiar protección",
"vector-view-create": "Crear",
"vector-view-edit": "Editar",
"vector-view-history": "Ver historial",
"vector-view-view": "Leer",
"vector-view-viewsource": "Ver código",
"vector-more-actions": "Más"
}

9
i18n/esu.json Normal file
View File

@ -0,0 +1,9 @@
{
"@metadata": {
"authors": [
"82-145"
]
},
"vector-action-move": "Atra cimirtuq",
"vector-view-view": "Naaqe"
}

25
i18n/et.json Normal file
View File

@ -0,0 +1,25 @@
{
"@metadata": {
"authors": [
"Ker",
"Pikne",
"WikedKentaur"
]
},
"skinname-vector": "Vektor",
"vector-skin-desc": "MonoBooki uuem versioon värskema väljanägemise ja mitme kasutajasõbralikuma täiendusega",
"vector.css": "/* Siin asuv kaskaadilaadistik puudutab kõiki Vektori-kujunduse kasutajaid. */",
"vector.js": "/* Siin asuv JavaScript laaditakse kõigi Vektori-kujunduse kasutajate jaoks. */",
"vector-action-addsection": "Lisa teema",
"vector-action-delete": "Kustuta",
"vector-action-move": "Teisalda",
"vector-action-protect": "Kaitse",
"vector-action-undelete": "Taasta",
"vector-action-unprotect": "Muuda kaitset",
"vector-view-create": "Loo",
"vector-view-edit": "Muuda",
"vector-view-history": "Näita ajalugu",
"vector-view-view": "Vaata",
"vector-view-viewsource": "Vaata lähteteksti",
"vector-more-actions": "Veel"
}

21
i18n/eu.json Normal file
View File

@ -0,0 +1,21 @@
{
"@metadata": {
"authors": [
"Unai Fdz. de Betoño",
"Xabier Armendaritz",
"Fitoschido"
]
},
"vector-action-addsection": "Gehitu atala",
"vector-action-delete": "Ezabatu",
"vector-action-move": "Mugitu",
"vector-action-protect": "Babestu",
"vector-action-undelete": "Berreskuratu",
"vector-action-unprotect": "Babesa aldatu",
"vector-view-create": "Sortu",
"vector-view-edit": "Aldatu",
"vector-view-history": "Ikusi historia",
"vector-view-view": "Irakurri",
"vector-view-viewsource": "Kodea ikusia",
"vector-more-actions": "Gehiago"
}

18
i18n/ext.json Normal file
View File

@ -0,0 +1,18 @@
{
"@metadata": {
"authors": [
"Better"
]
},
"vector-action-addsection": "Añiil tema",
"vector-action-delete": "Esborral",
"vector-action-move": "Mual",
"vector-action-protect": "Protegel",
"vector-action-undelete": "Esborral",
"vector-action-unprotect": "Esprotegel",
"vector-view-create": "Crial",
"vector-view-edit": "Eital",
"vector-view-history": "Guipal estorial",
"vector-view-view": "Leyel",
"vector-view-viewsource": "Guipal cóigu"
}

25
i18n/fa.json Normal file
View File

@ -0,0 +1,25 @@
{
"@metadata": {
"authors": [
"Calak",
"Ebraminio",
"Huji",
"Reza1615",
"Zack90"
]
},
"skinname-vector": "برداری",
"vector-skin-desc": "نسخه مدرن منوبوک با نگاه تازه و بهبود قابلیت استفاده",
"vector-action-addsection": "افزودن بخش",
"vector-action-delete": "حذف",
"vector-action-move": "انتقال",
"vector-action-protect": "محافظت",
"vector-action-undelete": "احیا",
"vector-action-unprotect": "تغییر سطح حفاظت",
"vector-view-create": "ایجاد",
"vector-view-edit": "ویرایش",
"vector-view-history": "نمایش تاریخچه",
"vector-view-view": "خواندن",
"vector-view-viewsource": "نمایش مبدأ",
"vector-more-actions": "بیشتر"
}

14
i18n/ff.json Normal file
View File

@ -0,0 +1,14 @@
{
"@metadata": {
"authors": [
"Ibrahima"
]
},
"vector-action-addsection": "Ɓeydi toɓɓere",
"vector-action-move": "Dirtin",
"vector-view-create": "Sos",
"vector-view-edit": "Taƴto",
"vector-view-history": "Yiyto aslol",
"vector-view-view": "Tar",
"vector-view-viewsource": "Yiyto ɗaɗol"
}

24
i18n/fi.json Normal file
View File

@ -0,0 +1,24 @@
{
"@metadata": {
"authors": [
"Crt",
"Nedergard",
"Nike",
"Pxos"
]
},
"vector.css": "/* Tämä sivu sisältää Vector-ulkoasua muuttavia tyylejä. */",
"vector.js": "/* Tämän sivun JavaScript-koodi liitetään Vector-tyyliin */",
"vector-action-addsection": "Lisää aihe",
"vector-action-delete": "Poista",
"vector-action-move": "Siirrä",
"vector-action-protect": "Suojaa",
"vector-action-undelete": "Palauta",
"vector-action-unprotect": "Muuta suojausta",
"vector-view-create": "Luo",
"vector-view-edit": "Muokkaa",
"vector-view-history": "Näytä historia",
"vector-view-view": "Lue",
"vector-view-viewsource": "Näytä lähdekoodi",
"vector-more-actions": "Muut"
}

18
i18n/fit.json Normal file
View File

@ -0,0 +1,18 @@
{
"@metadata": {
"authors": [
"Mestos"
]
},
"vector-action-addsection": "Lissää aine",
"vector-action-delete": "Ota poies",
"vector-action-move": "Siirä",
"vector-action-protect": "Suojaa",
"vector-action-undelete": "Pane takashiin",
"vector-action-unprotect": "Muuta suojaa",
"vector-view-create": "Luo",
"vector-view-edit": "Mookkaa",
"vector-view-history": "Näytä histuuria",
"vector-view-view": "Lue",
"vector-view-viewsource": "Näytä lähekooti"
}

20
i18n/fo.json Normal file
View File

@ -0,0 +1,20 @@
{
"@metadata": {
"authors": [
"Diupwijk",
"EileenSanda"
]
},
"vector-action-addsection": "Nýtt evni",
"vector-action-delete": "Strika",
"vector-action-move": "Flyt",
"vector-action-protect": "Friða",
"vector-action-undelete": "Endurstovna",
"vector-action-unprotect": "Broyt verju",
"vector-view-create": "Stovna",
"vector-view-edit": "Rætta",
"vector-view-history": "Vís søgu",
"vector-view-view": "Les",
"vector-view-viewsource": "Vís keldu",
"vector-more-actions": "Meira"
}

28
i18n/fr.json Normal file
View File

@ -0,0 +1,28 @@
{
"@metadata": {
"authors": [
"Akeron",
"Crochet.david",
"DavidL",
"Gomoko",
"Jean-Frédéric",
"Od1n"
]
},
"skinname-vector": "Vector",
"vector-skin-desc": "Version moderne de MonoBook avec un aspect rajeuni et beaucoup daméliorations ergonomiques",
"vector.css": "/* Le CSS placé ici affectera les utilisateurs de lhabillage Vector. */",
"vector.js": "/* Tout code JavaScript placé ici sera chargé pour les utilisateurs de lhabillage Vector */",
"vector-action-addsection": "Ajouter un sujet",
"vector-action-delete": "Supprimer",
"vector-action-move": "Renommer",
"vector-action-protect": "Protéger",
"vector-action-undelete": "Rétablir",
"vector-action-unprotect": "Changer la protection",
"vector-view-create": "Créer",
"vector-view-edit": "Modifier",
"vector-view-history": "Historique",
"vector-view-view": "Lire",
"vector-view-viewsource": "Voir la source",
"vector-more-actions": "Plus"
}

9
i18n/frc.json Normal file
View File

@ -0,0 +1,9 @@
{
"@metadata": {
"authors": [
"Ebe123"
]
},
"vector-action-delete": "Supprimer",
"vector-action-protect": "Protéger"
}

Some files were not shown because too many files have changed in this diff Show More