Merge branch 'REL1_33' into devel/golem-custom

This commit is contained in:
giomba 2021-12-05 18:42:00 +01:00
commit 34bfa714c9
67 changed files with 746 additions and 486 deletions

View File

@ -1,7 +1,10 @@
{
"extends": "wikimedia",
"env": {
"browser": true,
"jquery": true
"root": true,
"extends": [
"wikimedia/client",
"wikimedia/jquery"
],
"globals": {
"mw": false
}
}

2
.gitignore vendored
View File

@ -22,7 +22,6 @@ sftp-config.json
/docs
/node_modules
/vendor
/tests/phan/issues
# Operating systems
## Mac OS X
@ -40,3 +39,4 @@ Thumbs.db
/tags
/.htaccess
/.htpasswd
.eslintcache

View File

@ -16,9 +16,4 @@
*
*/
$cfg = require __DIR__ . '/../../vendor/mediawiki/mediawiki-phan-config/src/config.php';
// phan doesn't support @inheritDoc yet
$cfg['suppress_issue_types'][] = 'PhanParamSignatureMismatch';
return $cfg;
return require __DIR__ . '/../vendor/mediawiki/mediawiki-phan-config/src/config.php';

View File

@ -1,8 +1,6 @@
<?xml version="1.0"?>
<ruleset>
<rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
<exclude name="Squiz.Scope.MethodScope.Missing" />
</rule>
<rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki" />
<file>.</file>
<arg name="extensions" value="php,php5,inc"/>
<arg name="encoding" value="UTF-8"/>

View File

@ -8,6 +8,10 @@ module.exports = function ( grunt ) {
grunt.initConfig( {
eslint: {
options: {
reportUnusedDisableDirectives: true,
cache: true
},
all: [
'*.js',
'**/*.js',

233
collapsibleTabs.js Normal file
View File

@ -0,0 +1,233 @@
/**
* Collapsible Tabs for the Vector skin.
*
* @class jQuery.plugin.collapsibleTabs
*/
( function () {
var isRTL = document.documentElement.dir === 'rtl',
boundEvent = false,
rAF = window.requestAnimationFrame || setTimeout;
/**
* @event beforeTabCollapse
*/
/**
* @event afterTabCollapse
*/
/**
* @param {Object} [options]
* @param {string} [options.expandedContainer="#p-views ul"] List of tabs
* @param {string} [options.collapsedContainer="#p-cactions ul"] List of menu items
* @param {string} [options.collapsible="li.collapsible"] Match tabs that are collapsible
* @param {Function} [options.expandCondition]
* @param {Function} [options.collapseCondition]
* @return {jQuery}
* @chainable
*/
$.fn.collapsibleTabs = function ( options ) {
// Merge options into the defaults
var settings = $.extend( {}, $.collapsibleTabs.defaults, options );
// return if the function is called on an empty jquery object
if ( !this.length ) {
return this;
}
this.each( function () {
var $el = $( this );
// add the element to our array of collapsible managers
$.collapsibleTabs.instances.push( $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 ( !boundEvent ) {
boundEvent = true;
$( window ).on( 'resize', $.debounce( 100, function () {
rAF( $.collapsibleTabs.handleResize );
} ) );
}
// call our resize handler to setup the page
rAF( $.collapsibleTabs.handleResize );
return this;
};
$.collapsibleTabs = {
instances: [],
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()
} );
}
},
getSettings: function ( $collapsible ) {
var settings = $collapsible.data( 'collapsibleTabsSettings' );
if ( !settings ) {
$.collapsibleTabs.addData( $collapsible );
settings = $collapsible.data( 'collapsibleTabsSettings' );
}
return settings;
},
handleResize: function () {
$.collapsibleTabs.instances.forEach( function ( $el ) {
var data = $.collapsibleTabs.getSettings( $el );
if ( data.shifting ) {
return;
}
// if the two navigations are colliding
if ( $el.children( data.collapsible ).length && 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 &&
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 ( $moving ) {
var outerData, expContainerSettings, target;
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;
// eslint-disable-next-line no-jquery/no-animate
$moving.css( 'position', 'relative' )
.css( ( isRTL ? 'left' : 'right' ), 0 )
.animate( { width: '1px' }, 'normal', function () {
$( this ).hide();
// add the placeholder
$( '<span>' ).addClass( 'placeholder' ).css( 'display', 'none' ).insertAfter( this );
$( this ).detach().prependTo( target ).data( 'collapsibleTabsSettings', outerData );
$( this ).attr( 'style', 'display: list-item;' );
expContainerSettings.shifting = false;
rAF( $.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( ( isRTL ? 'right' : 'left' ), 0 ).css( 'width', '1px' );
$target.replaceWith(
// eslint-disable-next-line no-jquery/no-animate
$moving
.detach()
.css( 'width', '1px' )
.data( 'collapsibleTabsSettings', data )
.animate( { width: expandedWidth + 'px' }, 'normal', function () {
$( this ).attr( 'style', 'display: block;' );
rAF( function () {
// Update the 'expandedWidth' in case someone was brazen enough to
// change the tab's contents after the page load *gasp* (T71729). This
// doesn't prevent a tab from collapsing back and forth once, but at
// least it won't continue to do that forever.
data.expandedWidth = $moving.width();
$moving.data( 'collapsibleTabsSettings', data );
expContainerSettings.shifting = false;
$.collapsibleTabs.handleResize();
} );
} )
);
},
/**
* Get the amount of horizontal distance between the two tabs groups in pixels.
*
* Uses `#left-navigation` and `#right-navigation`. If negative, this
* means that the tabs overlap, and the value is the width of overlapping
* parts.
*
* Used in default `expandCondition` and `collapseCondition` options.
*
* @return {number} 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 ( !isRTL ) {
leftTab = document.getElementById( 'left-navigation' );
rightTab = document.getElementById( 'right-navigation' );
} else {
leftTab = document.getElementById( 'right-navigation' );
rightTab = document.getElementById( 'left-navigation' );
}
leftEnd = leftTab.getBoundingClientRect().right;
rightStart = rightTab.getBoundingClientRect().left;
return rightStart - leftEnd;
}
};
/**
* @class jQuery
* @mixins jQuery.plugin.collapsibleTabs
*/
}() );

View File

@ -9,6 +9,7 @@
html {
font-size: @html-font-size;
}
html,
body {
height: 100%;
@ -16,6 +17,7 @@ body {
padding: 0;
font-family: @content-font-family;
}
body {
background-color: @menu-background-color;
}
@ -150,8 +152,7 @@ div.emptyPortlet {
}
ul {
list-style-type: disc;
.list-style-image-svg('images/bullet-icon.svg', 'images/bullet-icon.png');
.list-style-image( 'images/bullet-icon.svg' );
}
pre,

View File

@ -6,8 +6,7 @@
direction: ltr;
ul {
list-style-type: none;
list-style-image: none;
list-style: none none;
margin: 0;
padding: 0;

View File

@ -1,33 +1,44 @@
/* Personal */
#p-personal {
ul {
list-style-type: none;
list-style-image: none;
list-style: none none;
margin: 0;
}
li {
margin-left: 0.75em;
margin-top: 0.5em;
font-size: @menu-personal-font-size;
// `padding-top` instead of `margin-top` necessary for
// anonymous user icon position below
padding-top: 0.5em;
font-size: @font-size-menu-personal;
line-height: @line-height-menu-personal;
white-space: nowrap;
}
}
/* Icon for Usernames */
#pt-userpage a,
#pt-anonuserpage {
/* Icon for registered user names & anonymous message */
#pt-anonuserpage,
#pt-userpage a {
// 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-avatar.svg', 'images/user-avatar.png' );
background-position: left top;
background-position: @background-position-menu-personal-icon;
background-repeat: no-repeat;
background-size: @line-height-menu-personal @line-height-menu-personal;
// Same as `#p-personal li` above
padding-top: 0.5em !important; // stylelint-disable-line declaration-no-important
padding-left: 16px !important; // stylelint-disable-line declaration-no-important
}
/* Show "Not logged in" text in gray */
#pt-userpage {
padding-top: 0 !important; // stylelint-disable-line declaration-no-important
a {
display: inline-block;
}
}
/* Show anonymous "Not logged in" text in gray */
#pt-anonuserpage {
color: #54595d;
}

View File

@ -1,12 +1,9 @@
@import 'mediawiki.mixins';
/**
* Styling for namespace tabs (page, discussion) and views (read, edit, view history, watch and other actions)
*/
/* Navigation Labels */
.vectorTabs h3 {
display: none;
}
/* Namespaces and Views */
.vectorTabs {
display: inline-block;
@ -16,6 +13,11 @@
background-repeat: no-repeat;
padding-left: 1px;
/* Navigation Labels */
h3 {
display: none;
}
ul {
list-style-type: none;
list-style-image: none;
@ -25,6 +27,17 @@
}
li {
float: left;
line-height: 1.125em;
display: block;
height: 100%;
margin: 0;
padding: 0;
.background-image('images/tab-normal-fade.png');
background-position: bottom left;
background-repeat: repeat-x;
white-space: nowrap;
&.new {
a,
a:visited {
@ -33,7 +46,6 @@
}
&.selected {
/* .background-image('images/tab-current-fade.png'); */
a,
a:visited {
color: #222;
@ -51,7 +63,7 @@
a {
color: @menu-link-color;
cursor: pointer;
font-size: 0.8125em; // equals `13px` at browser default of `16px`
font-size: 0.8125em; // Equals `13px` at browser default of `16px`
}
}
@ -68,6 +80,106 @@
direction: ltr;
cursor: pointer;
line-height: 1.125em;
h3 {
span {
position: relative;
display: block;
font-size: 0.8125em;
padding-left: 0.615em;
padding-top: 1.25em;
padding-right: 16px;
font-weight: normal;
color: #444;
&:after {
content: '';
position: absolute;
top: 1.25em;
right: 0;
bottom: 0;
left: 0;
.background-image-svg('images/arrow-down.svg', 'images/arrow-down.png');
background-position: 100% 50%;
background-repeat: no-repeat;
// Modify the color of the image from the default #222 to approx. #444 to match the text.
opacity: 0.85;
}
}
&:hover span,
&:focus span {
color: @content-font-color;
&:after {
opacity: 1;
}
}
}
.menu {
list-style: none none;
background-color: @body-background-color;
clear: both;
// Match the width of the dropdown "heading" (the tab)
min-width: 100%;
position: absolute;
top: 2.5em;
left: -1px;
margin: 0;
border: 1px solid #a2a9b1;
border-top-width: 0;
padding: 0;
box-shadow: 0 1px 1px 0 rgba( 0, 0, 0, 0.1 );
text-align: left;
opacity: 0;
visibility: hidden;
.transition( opacity 100ms );
// Menus must overlap indicators (z-index: 1) and VisualEditor toolbar (z-index: 2)
z-index: 2;
}
&:hover .menu {
opacity: 1;
visibility: visible;
}
// This is in a separate block, so that browsers supporting :hover but not :checked still apply the rule above
// Support: IE8
.vectorMenuCheckbox:checked ~ .menu {
opacity: 1;
visibility: visible;
}
// FIXME: `.vectorMenu ul` can be removed with purged HTML cache
ul {
list-style: none none;
padding: 0;
margin: 0;
text-align: left;
}
li {
padding: 0;
margin: 0;
text-align: left;
line-height: 1em;
a {
display: block;
padding: 0.625em;
white-space: nowrap;
color: @menu-link-color;
cursor: pointer;
font-size: 0.8125em;
}
&.selected a,
&.selected a:visited {
color: #222;
text-decoration: none;
}
}
}
#mw-head .vectorMenu h3 {
@ -85,107 +197,6 @@
margin: 0 -1px 0 0;
}
.vectorMenu h3 {
span {
position: relative;
font-size: 0.8125em;
padding-left: 0.615em;
padding-top: 1.25em;
padding-right: 16px;
font-weight: normal;
color: #444;
&:after {
content: '';
position: absolute;
top: 1.25em;
right: 0;
bottom: 0;
left: 0;
.background-image-svg('images/arrow-down.svg', 'images/arrow-down.png');
background-position: 100% 50%;
background-repeat: no-repeat;
// Modify the color of the image from the default #222 to approx. #444 to match the text.
opacity: 0.85;
}
}
&:hover span,
&:focus span {
color: @content-font-color;
&:after {
opacity: 1;
}
}
}
.vectorMenu .vectorMenuCheckbox:checked + h3 span:after {
transform: scaleY( -1 );
}
.vectorMenu .vectorMenuCheckbox:focus + h3 {
// Simulate browser focus ring
outline: dotted 1px; // Firefox style
outline: auto -webkit-focus-ring-color; // Webkit style
}
.vectorMenu .menu {
// Match the width of the dropdown "heading" (the tab)
min-width: 100%;
position: absolute;
top: 2.5em;
left: -1px;
background-color: @body-background-color;
border: 1px solid #a2a9b1;
border-top-width: 0;
clear: both;
box-shadow: 0 1px 1px 0 rgba( 0, 0, 0, 0.1 );
text-align: left;
display: none;
// Menus must overlap indicators (z-index: 1) and VisualEditor toolbar (z-index: 2)
z-index: 2;
}
.vectorMenu:hover .menu {
display: block;
}
// This is in a separate block, so that browsers supporting :hover but not :checked still apply the rule above
// Support: IE8
.vectorMenu .vectorMenuCheckbox:checked ~ .menu {
display: block;
}
.vectorMenu ul {
list-style-type: none;
list-style-image: none;
padding: 0;
margin: 0;
text-align: left;
}
.vectorMenu li {
padding: 0;
margin: 0;
text-align: left;
line-height: 1em;
}
.vectorMenu li a {
display: block;
padding: 0.625em;
white-space: nowrap;
color: @menu-link-color;
cursor: pointer;
font-size: 0.8125em;
}
.vectorMenu li.selected a,
.vectorMenu li.selected a:visited {
color: #222;
text-decoration: none;
}
// Invisible checkbox covering the dropdown menu handle
.vectorMenuCheckbox {
cursor: pointer;
@ -200,11 +211,21 @@
padding: 0;
// Hide the checkbox completely in browsers that don't support :checked
display: none;
}
:not( :checked ) > .vectorMenuCheckbox {
// When the browser supports :checked, display it
display: block;
:not( :checked ) > & {
// When the browser supports :checked, display it
display: block;
}
&:checked + h3 span:after {
transform: scaleY( -1 );
}
&:focus + h3 {
// Simulate browser focus ring
outline: dotted 1px; // Firefox style
outline: auto -webkit-focus-ring-color; // Webkit style
}
}
@import 'watchstar.less';

View File

@ -18,20 +18,25 @@
background-position: 5px 60%;
background-repeat: no-repeat;
}
#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' );
@ -44,6 +49,7 @@
-webkit-transform-origin: 50% 57%;
transform-origin: 50% 57%;
}
#ca-unwatch.icon a span,
#ca-watch.icon a span {
display: none;

View File

@ -36,10 +36,10 @@
},
"require-dev": {
"jakub-onderka/php-parallel-lint": "1.0.0",
"mediawiki/mediawiki-codesniffer": "22.0.0",
"mediawiki/mediawiki-codesniffer": "24.0.0",
"jakub-onderka/php-console-highlighter": "0.3.2",
"mediawiki/minus-x": "0.3.1",
"mediawiki/mediawiki-phan-config": "0.3.0"
"mediawiki/mediawiki-phan-config": "0.5.0"
},
"scripts": {
"fix": [

View File

@ -2,10 +2,11 @@
"@metadata": {
"authors": [
"علاء",
"Csisc"
"Csisc",
"Meno25"
]
},
"vector-action-addsection": "أضف موضوعاً",
"vector-action-addsection": "أضف موضوعا",
"vector-action-delete": "احذف",
"vector-action-move": "حوّل",
"vector-action-protect": "احم",

View File

@ -17,7 +17,7 @@
"vector-skin-desc": "نسة حديثة من مونوبوك بمظهر جديد وسهولة الاستخدام",
"vector.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة فكتور */",
"vector.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة فكتور */",
"vector-action-addsection": "أضف موضوعاً",
"vector-action-addsection": "أضف موضوعا",
"vector-action-delete": "احذف",
"vector-action-move": "انقل",
"vector-action-protect": "احم",

View File

@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
"Wikimistusik"
"Wikimistusik",
"Axel xadolik"
]
},
"vector-action-addsection": "Loplekura va detce",
@ -12,5 +13,6 @@
"vector-view-edit": "Betara",
"vector-view-history": "Wira va izvot",
"vector-view-view": "Belira",
"vector-view-viewsource": "klitawira"
"vector-view-viewsource": "klitawira",
"vector-more-actions": "Loon"
}

View File

@ -15,7 +15,7 @@
"vector-skin-desc": "নতুন চেহারা মনোবুকের আধুনিক সংস্করণ এবং আরো অনেক ব্যবহারযোগ্যতার উন্নতি",
"vector.css": "/* এখানে স্থাপিত CSS ভেক্টর আবরণ ব্যবহারকারীদের প্রভাবিত করবে */",
"vector.js": "/* এখানের যে কোন জাভাস্ক্রিপ্ট ভেক্টর আবরণ ব্যবহারকারীদের জন্য লোড হবে */",
"vector-action-addsection": "বিষয় যোগ",
"vector-action-addsection": "বিষয় যোগ করুন",
"vector-action-delete": "অপসারণ",
"vector-action-move": "স্থানান্তর",
"vector-action-protect": "সুরক্ষা",
@ -26,5 +26,7 @@
"vector-view-history": "ইতিহাস দেখুন",
"vector-view-view": "পড়ুন",
"vector-view-viewsource": "উৎস দেখুন",
"vector-jumptonavigation": "পরিভ্রমণে ঝাঁপ দিন",
"vector-jumptosearch": "অনুসন্ধানে ঝাঁপ দিন",
"vector-more-actions": "আরও"
}

View File

@ -1,14 +1,17 @@
{
"@metadata": {
"authors": [
"Mogoeilor"
"Mogoeilor",
"Isevand"
]
},
"vector-action-addsection": "داسون اضاف کونین",
"vector-action-addsection": "داسۊن اْزاف کونین",
"vector-action-delete": "پاکسا کردن",
"vector-action-move": "جابجا کردن",
"vector-action-protect": "هناڌاری ۉ پٱلڌاری",
"vector-view-create": "راس كردن",
"vector-view-edit": "ڤیرایئشت کاری",
"vector-view-history": "ديئن ڤیرگار",
"vector-view-edit": "آلشدکاری کردن",
"vector-view-history": "ديڌن ڤیرگار",
"vector-view-view": "خوندن",
"vector-more-actions": "بیشتر"
}

View File

@ -26,5 +26,7 @@
"vector-view-history": "Mostra l'historial",
"vector-view-view": "Mostra",
"vector-view-viewsource": "Mostra el codi",
"vector-jumptonavigation": "Salta a la navegació",
"vector-jumptosearch": "Salta a la cerca",
"vector-more-actions": "Més"
}

View File

@ -1,9 +1,11 @@
{
"@metadata": {
"authors": [
"ⲁϩⲙⲉⲧ"
"ⲁϩⲙⲉⲧ",
"Bloomaround"
]
},
"vector-action-addsection": "ⲧⲟⲩϩⲟ ⲟⲩⲑⲉⲙⲁ",
"vector-view-create": "ⲑⲁⲙⲓⲟ",
"vector-view-edit": "ϫⲓⲛⲫⲱⲛϩ",
"vector-view-history": "ⲁⲛⲁⲩ ⲉϯϩⲓⲥⲧⲟⲣⲓⲁ",

View File

@ -7,8 +7,8 @@
},
"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.css": "/* Zde uvedené CSS bude ovlivňovat pouze vzhled „Vektor“ */",
"vector.js": "/* Zde uvedený JavaScript bude použit pouze pro uživatele vzhledu „Vektor“ */",
"vector-action-addsection": "Přidat téma",
"vector-action-delete": "Smazat",
"vector-action-move": "Přesunout",

View File

@ -19,13 +19,15 @@
"vector-action-addsection": "Mewzu vıraze",
"vector-action-delete": "Bestere",
"vector-action-move": "Bıkırışe",
"vector-action-protect": "Bısıtarne",
"vector-action-protect": "Bışevekne",
"vector-action-undelete": "Peyser biya",
"vector-action-unprotect": "Sıtarnayışi bıvurne",
"vector-view-create": "Vıraze",
"vector-view-edit": "Bıvırnê",
"vector-view-history": "Verênan bıvênê",
"vector-view-view": "Bıwanê",
"vector-view-edit": "Bıvurne",
"vector-view-history": "Verênan bıvêne",
"vector-view-view": "Bıwane",
"vector-view-viewsource": "Rêçi bıvin",
"vector-jumptonavigation": "Xıl de pusula",
"vector-jumptosearch": "Xıl de cıgeyrayışi",
"vector-more-actions": "Tayêna"
}

13
i18n/fon.json Normal file
View File

@ -0,0 +1,13 @@
{
"@metadata": {
"authors": [
"Mahuton"
]
},
"vector-action-addsection": "Gɔ́ xóta yɔ́yɔ́ ɖévo ná",
"vector-view-create": "Blɔ",
"vector-view-edit": "Wlǎn nú gɔnu nuwlǎnwlǎn ɔ",
"vector-view-history": "Yín nukún ɖo ɖiɖyɔ tɛnmɛ tɛnmɛ wémá ɔ tɔn lɛ jí",
"vector-view-view": "Xá",
"vector-more-actions": "susu"
}

View File

@ -4,10 +4,11 @@
"Kening Aldgilles",
"SK-luuut",
"Robin0van0der0vliet",
"Robin van der Vliet"
"Robin van der Vliet",
"PiefPafPier"
]
},
"vector-action-addsection": "Kopke tafoegje",
"vector-action-addsection": "Nij mêd",
"vector-action-delete": "Fuortsmite",
"vector-action-move": "Omneame",
"vector-action-protect": "Beskermje",
@ -16,7 +17,7 @@
"vector-view-create": "Oanmeitsje",
"vector-view-edit": "Bewurkje",
"vector-view-history": "Skiednis sjen litte",
"vector-view-view": "Lês",
"vector-view-view": "Lêze",
"vector-view-viewsource": "Besjoch de boarne",
"vector-more-actions": "Mear"
}

View File

@ -15,7 +15,7 @@
"vector-action-undelete": "Díscrios",
"vector-action-unprotect": "Díghlasáil",
"vector-view-create": "Cruthaigh",
"vector-view-edit": "Athraigh an lch seo",
"vector-view-edit": "Cuir in eagar",
"vector-view-history": "Féach ar stair",
"vector-view-view": "Léigh",
"vector-view-viewsource": "Féach ar fhoinse",

View File

@ -2,10 +2,11 @@
"@metadata": {
"authors": [
"Flixtey",
"Mybluberet"
"Mybluberet",
"Gkbediako"
]
},
"vector-action-addsection": "Kɛ mlijaa gbɛi afata he",
"vector-action-addsection": "Kɛ mlijaa yitso afata he",
"vector-action-delete": "Jiemɔ",
"vector-action-move": "Tsi",
"vector-action-protect": "Yibaamɔ",

View File

@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
"LeGuyanaisPure"
"LeGuyanaisPure",
"Léon973"
]
},
"vector-action-addsection": "Ajouté roun sijè",

View File

@ -9,10 +9,14 @@
"vector-action-delete": "Kadd",
"vector-action-move": "Zago bodol",
"vector-action-protect": "Rakh",
"vector-action-undelete": "Portun hadd",
"vector-action-unprotect": "Surokxechem sthor bodol",
"vector-view-create": "Roch",
"vector-view-edit": "Bodol",
"vector-view-history": "Itihas polloi",
"vector-view-view": "Vach",
"vector-view-viewsource": "Mull polloi",
"vector-jumptonavigation": "Dixa bodlunk uddki mar",
"vector-jumptosearch": "Soda khatir uddki mar",
"vector-more-actions": "Anik"
}

View File

@ -3,7 +3,9 @@
"authors": [
"Ex13",
"Tivek",
"Bugoslav"
"Bugoslav",
"BadDog",
"MaGa"
]
},
"vector-skin-desc": "Osuvremenjena inačica MonoBooka s obnovljenim dizajnom i mnogim poboljšanjima u upotrebljivosti",
@ -11,12 +13,14 @@
"vector-action-delete": "Izbriši",
"vector-action-move": "Premjesti",
"vector-action-protect": "Zaštiti",
"vector-action-undelete": "Vrati",
"vector-action-undelete": "Vrati izbrisano",
"vector-action-unprotect": "Promijeni zaštitu",
"vector-view-create": "Započni",
"vector-view-create": "Stvori",
"vector-view-edit": "Uredi",
"vector-view-history": "Vidi povijest",
"vector-view-view": "Čitaj",
"vector-view-viewsource": "Vidi izvor",
"vector-jumptonavigation": "Prijeđi na navigaciju",
"vector-jumptosearch": "Prijeđi na pretraživanje",
"vector-more-actions": "Više"
}

View File

@ -23,5 +23,7 @@
"vector-view-history": "Laptörténet",
"vector-view-view": "Olvasás",
"vector-view-viewsource": "A lap forrása",
"vector-jumptonavigation": "Ugrás a navigációhoz",
"vector-jumptosearch": "Ugrás a kereséshez",
"vector-more-actions": "Több"
}

View File

@ -5,7 +5,8 @@
"Bennylin",
"Farras",
"Iwan Novirion",
"Rex"
"Rex",
"William Surya Permana"
]
},
"skinname-vector": "Vektor",
@ -23,5 +24,7 @@
"vector-view-history": "Versi terdahulu",
"vector-view-view": "Baca",
"vector-view-viewsource": "Lihat sumber",
"vector-jumptonavigation": "Loncat ke navigasi",
"vector-jumptosearch": "Loncat ke pencarian",
"vector-more-actions": "Lainnya"
}

View File

@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
"Ukabia"
"Ukabia",
"Uzoma Ozurumba"
]
},
"vector-action-addsection": "Tinyé Okwu",
@ -14,5 +15,6 @@
"vector-view-edit": "Mèzi",
"vector-view-history": "Lèe ị̀ta",
"vector-view-view": "Gụ̀ọ",
"vector-view-viewsource": "Zi mkpurụ"
"vector-view-viewsource": "Zi mkpurụ",
"vector-more-actions": "Ọzọ kwa"
}

View File

@ -7,7 +7,8 @@
"Shirayuki",
"Whym",
"青子守歌",
"Takot"
"Takot",
"Otokoume"
]
},
"skinname-vector": "ベクター",
@ -25,5 +26,7 @@
"vector-view-history": "履歴表示",
"vector-view-view": "閲覧",
"vector-view-viewsource": "ソースを閲覧",
"vector-jumptonavigation": "ナビゲーションに移動",
"vector-jumptosearch": "検索に移動",
"vector-more-actions": "その他"
}

View File

@ -4,13 +4,14 @@
"Rul1902"
]
},
"vector-action-addsection": "အ်ုခေါဟ်ဍံင် မ်ုဆူ့ဖှ်ေ",
"vector-action-addsection": "အ်ုၯာင်ႋအ်ုကျံင်းသင့် မ်ုဆူ့ဍုဂ်ထါင်ဖှ်ေ",
"vector-action-delete": "ထုဂ်ဆိင့်",
"vector-action-move": "အ်ုၰာႋၰံင်သယ်",
"vector-action-move": "အ်ုၰာႋၰံင်",
"vector-action-protect": "ခ်ုဝုင်ႋလာႋ",
"vector-view-create": "ပ္တုံထံင်း",
"vector-view-edit": "အင်ႋတင်ႋ",
"vector-view-edit": "သံင့်ၜးၯဴ",
"vector-view-history": "မ်ုယောဝ်ႋ မေင်ႋစိင်",
"vector-view-view": "ပဝ်ႋ",
"vector-more-actions": "အ်ုၰာႋၰံင်သယ်"
"vector-view-viewsource": "မ်ုယောဝ်ႋအ်ုထါ်",
"vector-more-actions": "အ်ုၰာႋၰံင်"
}

View File

@ -2,19 +2,20 @@
"@metadata": {
"authors": [
"Mogoeilor",
"Beyronvan"
"Beyronvan",
"Lorestani"
]
},
"vector-action-addsection": "داسون اضاف بكيد",
"vector-action-addsection": "سالفٱ اْزاف بٱکؽت",
"vector-action-delete": "پاکسا کردن",
"vector-action-move": "جا ڤ جا بۊئیت",
"vector-action-protect": "پر و پیم بكيد",
"vector-action-protect": "پر ۉ پیم بٱکؽت",
"vector-action-undelete": "حذف نبيئني",
"vector-action-unprotect": "حمايت آلشت بكيد",
"vector-view-create": "راس كردن",
"vector-view-edit": "ڤیرایشت",
"vector-view-history": "دیاٛن ڤیرگار",
"vector-view-view": "هنن",
"vector-view-create": "دۏرس كردن",
"vector-view-edit": "ڤیرایش",
"vector-view-history": "دیئن ڤیرگار",
"vector-view-view": "ڤٱناْ",
"vector-view-viewsource": "سرچشمه نه بوينيت",
"vector-more-actions": یشتر"
"vector-more-actions": ؽشتر"
}

View File

@ -4,14 +4,17 @@
"Bombola",
"Ceas08",
"Erdemaslancan",
"Velg"
"Velg",
"Cem Rize"
]
},
"vector-action-addsection": "Konu ekle",
"vector-action-delete": "Jili",
"vector-action-move": "Tori",
"vector-action-protect": "İçvi",
"vector-view-create": "dokʼidi",
"vector-view-edit": "Doktiri",
"vector-view-history": "Dosyaşi tarixi",
"vector-view-view": "İǩitxi"
"vector-view-view": "İǩitxi",
"vector-more-actions": "Daha fazla"
}

View File

@ -4,7 +4,7 @@
"Awangba Mangang"
]
},
"vector-action-addsection": "Neinaba hiramda hapchinlu",
"vector-action-addsection": "ꯅꯩꯅꯕ ꯍꯤꯔꯝ ꯍꯥꯞꯆꯤꯟꯂꯨ",
"vector-action-delete": "ꯀꯛꯊꯠꯄꯥ",
"vector-action-move": "ꯂꯦꯡꯍꯟꯕꯥ",
"vector-action-protect": "ꯉꯥꯛꯊꯣꯛꯂꯕꯥ",
@ -12,5 +12,5 @@
"vector-view-edit": "ꯁꯦꯝꯒꯠꯄꯥ",
"vector-view-history": "ꯄꯨꯋꯥꯔꯤ ꯎꯨꯠꯂꯨ",
"vector-view-view": "ꯄꯥꯑꯣ",
"vector-more-actions": "ꯋꯥꯂꯤ"
"vector-more-actions": "ꯋꯥꯂꯤ"
}

View File

@ -2,14 +2,15 @@
"@metadata": {
"authors": [
"Mahali syarifuddin",
"Jawadywn"
"Jawadywn",
"Masjawad99"
]
},
"vector-action-addsection": "Imbuhke topik",
"vector-action-addsection": "Imboke topik",
"vector-action-move": "Pindahke",
"vector-view-create": "Biat",
"vector-view-create": "Ngawék",
"vector-view-edit": "Robah",
"vector-view-history": "Jingok riwayat",
"vector-view-history": "Selék riwayat",
"vector-view-view": "Baco",
"vector-view-viewsource": "Jingok sumber",
"vector-more-actions": "Laénnyo"

View File

@ -1,9 +1,15 @@
{
"@metadata": {
"authors": [
"Youssoufkadialy"
"Youssoufkadialy",
"Lanciné.kounfantoh.fofana"
]
},
"vector-action-addsection": "ߥߟߊ߬ߘߊ߫ ߝߙߊ߬",
"vector-action-delete": "ߊ߬ ߖߏ߬ߛߌ߬",
"vector-action-move": "ߊ߬ ߛߋ߲߬ߓߐ߫",
"vector-action-protect": "ߊ߬ ߟߊߞߊ߲ߘߊ߫",
"vector-view-create": "ߟߊߘߊ߲߫",
"vector-view-edit": "ߊ߬ ߡߊߝߊ߬ߟߋ߲߬",
"vector-view-history": "ߕߊ߬ߡߌ߲߬ߣߍ߲ ߠߎ߫ ߦߌ߬ߘߊ߬",
"vector-view-view": "ߊ߬ ߞߊ߬ߙߊ߲߬",

8
i18n/ny.json Normal file
View File

@ -0,0 +1,8 @@
{
"@metadata": {
"authors": [
"Icem4k"
]
},
"vector-more-actions": "Zambiri"
}

View File

@ -9,7 +9,8 @@
"Matma Rex",
"Liuxinyu970226",
"Raymond",
"Metalhead64"
"Metalhead64",
"Tacsipacsi"
]
},
"skinname-vector": "{{name}}",
@ -17,15 +18,15 @@
"vector.css": "{{optional}}",
"vector.js": "{{optional}}",
"vector-action-addsection": "Used in the Vector skin. See for example {{canonicalurl:Talk:Main_Page|useskin=vector}}\n{{Identical|Add topic}}",
"vector-action-delete": "Used in the Vector skin, as the name of a tab at the top of the page. See for example {{canonicalurl:Main_Page|useskin=vector}}\n\n{{Identical|Delete}}",
"vector-action-delete": "Used in the Vector skin, as the name of a tab at the top of the page. See for example {{canonicalurl:Translating:MediaWiki|useskin=vector}}\n\n{{Identical|Delete}}",
"vector-action-move": "Used in the Vector skin, on the tabs at the top of the page. See for example {{canonicalurl:Talk:Main_Page|useskin=vector}}\n\n{{Identical|Move}}",
"vector-action-protect": "Tab at top of page, in vector skin\n\n{{Identical|Protect}}",
"vector-action-undelete": "Tab at top of page, in vector skin.\n{{Identical|Undelete}}",
"vector-action-unprotect": "Tab at top of page, in vector skin.\n{{Identical|Change protection}}",
"vector-view-create": "Tab label in the Vector skin. See for example {{canonicalurl:Foo|useskin=vector}}\n{{Identical|Create}}",
"vector-view-edit": "Tab label in the Vector skin. See for example {{canonicalurl:Main_Page|useskin=vector}}\n{{Identical|Edit}}",
"vector-view-history": "Tab label in the Vector skin. See for example {{canonicalurl:Main_Page|useskin=vector}}\n{{Identical|View history}}",
"vector-view-view": "Tab label in the Vector skin (verb). See for example {{canonicalurl:Main_Page|useskin=vector}}.\n{{Identical|Read}}",
"vector-view-edit": "Tab label in the Vector skin. See for example {{canonicalurl:Translating:MediaWiki|useskin=vector}}\n{{Identical|Edit}}",
"vector-view-history": "Tab label in the Vector skin. See for example {{canonicalurl:Translating:MediaWiki|useskin=vector}}\n{{Identical|View history}}",
"vector-view-view": "Tab label in the Vector skin (verb). See for example {{canonicalurl:Translating:MediaWiki|useskin=vector}}.\n{{Identical|Read}}",
"vector-view-viewsource": "Tab label in the Vector skin.\n{{Identical|View source}}",
"vector-jumptonavigation": "Accessibility link for jumping to the navigation links. Visually hidden by default.\n\nSee also\n* {{msg-mw|Navigation}}",
"vector-jumptosearch": "Accessibility link for jumping to the site search. Visually hidden by default.\n\nSee also\n* {{msg-mw|Search}}",

16
i18n/ses.json Normal file
View File

@ -0,0 +1,16 @@
{
"@metadata": {
"authors": [
"Songhay"
]
},
"vector-action-addsection": "Furari tonton",
"vector-action-delete": "Tuusu",
"vector-action-move": "Ganandi",
"vector-action-protect": "Jejebu",
"vector-view-create": "Tee",
"vector-view-edit": "Barmay",
"vector-view-history": "Taarikoo guna",
"vector-view-view": "Caw",
"vector-more-actions": "Ka tonton"
}

View File

@ -3,7 +3,8 @@
"authors": [
"OC Ripper",
"Conquistador",
"Srdjan m"
"Srdjan m",
"BadDog"
]
},
"vector-action-addsection": "Dodaj temu",
@ -14,7 +15,7 @@
"vector-action-unprotect": "Promijeni zaštitu",
"vector-view-create": "Napravi",
"vector-view-edit": "Uredi",
"vector-view-history": "Vidi historiju",
"vector-view-history": "Historija/Историја",
"vector-view-view": "Čitaj",
"vector-view-viewsource": "Vidi izvor (source)",
"vector-more-actions": "Više"

View File

@ -7,7 +7,7 @@
},
"vector-action-addsection": "ⵔⵏⵓ ⴰⵙⵏⵜⵍ",
"vector-action-delete": "ⴽⴽⵙ",
"vector-action-move": "ⵙⵎⴰⵜⵜ",
"vector-action-move": "ⵙⵎⴰⵜⵜ",
"vector-action-protect": "Ḥbu",
"vector-action-undelete": "Rard may mayḥiydn",
"vector-action-unprotect": "Ḥiyd aḥbu",

View File

@ -4,6 +4,11 @@
"Vikoula5"
]
},
"vector-action-addsection": "Rnud ameggay",
"vector-action-delete": "Mḥu",
"vector-action-move": "Snifel isem",
"vector-action-protect": "Ḥrez",
"vector-view-create": "Rnu",
"vector-view-edit": "Glef",
"vector-view-history": "Wali amazray",
"vector-view-view": "Ɣer",

View File

@ -10,7 +10,7 @@
"BadDog"
]
},
"skinname-vector": "Векторска",
"skinname-vector": "Векторско",
"vector-skin-desc": "Модерна верзија Монобука са свежим изгледом и много корисних побољшања",
"vector.css": "/* CSS постављен овде ће утицати на све кориснике векторске теме */",
"vector.js": "/* JavaScript постављен овде ће се учитати за све оне који користе векторску тему */",

View File

@ -9,7 +9,7 @@
"Obsuser"
]
},
"skinname-vector": "Vektorska",
"skinname-vector": "Vektorsko",
"vector-skin-desc": "Moderna verzija Monobuka sa svežim izgledom i mnogo korisnih poboljšanja",
"vector.css": "/* CSS postavljen ovde će uticati na sve korisnike vektorske teme */",
"vector.js": "/* JavaScript postavljen ovde će se učitati za sve one koji koriste vektorsku temu */",
@ -23,7 +23,7 @@
"vector-view-edit": "Uredi",
"vector-view-history": "Istorija",
"vector-view-view": "Čitaj",
"vector-view-viewsource": "Izvornik",
"vector-view-viewsource": "Izvor",
"vector-jumptonavigation": "Idi na navigaciju",
"vector-jumptosearch": "Idi na pretragu",
"vector-more-actions": "Više"

View File

@ -5,7 +5,8 @@
"Najami",
"Skalman",
"WikiPhoenix",
"Lokal Profil"
"Lokal Profil",
"Sturban"
]
},
"skinname-vector": "Vector",
@ -21,7 +22,7 @@
"vector-view-create": "Skapa",
"vector-view-edit": "Redigera",
"vector-view-history": "Visa historik",
"vector-view-view": "Visa",
"vector-view-view": "Läs",
"vector-view-viewsource": "Visa källa",
"vector-jumptonavigation": "Hoppa till navigering",
"vector-jumptosearch": "Hoppa till sök",

View File

@ -4,7 +4,8 @@
"Horus",
"Octahedron80",
"Woraponboonkerd",
"Ans"
"Ans",
"Geonuch"
]
},
"skinname-vector": "เวกเตอร์",
@ -14,15 +15,15 @@
"vector-action-addsection": "เพิ่มหัวข้อ",
"vector-action-delete": "ลบ",
"vector-action-move": "เปลี่ยนชื่อ",
"vector-action-protect": "ล็อก",
"vector-action-protect": "ป้องกัน",
"vector-action-undelete": "กู้คืน",
"vector-action-unprotect": "เปลี่ยนการล็อก",
"vector-action-unprotect": "เปลี่ยนการป้องกัน",
"vector-view-create": "สร้าง",
"vector-view-edit": "แก้ไข",
"vector-view-history": "ดูประวัติ",
"vector-view-view": "อ่าน",
"vector-view-viewsource": "ดูโค้ด",
"vector-jumptonavigation": "ไยังการนำทาง",
"vector-view-viewsource": "ดูต้นฉบับ",
"vector-jumptonavigation": "ไยังการนำทาง",
"vector-jumptosearch": "ไปยังการค้นหา",
"vector-more-actions": "เพิ่มเติม"
}

14
i18n/trv.json Normal file
View File

@ -0,0 +1,14 @@
{
"@metadata": {
"authors": [
"Iyuqciyang"
]
},
"vector-action-move": "hdlun",
"vector-view-create": "phiyug",
"vector-view-edit": "smmalu patas",
"vector-view-history": "patas endaan qmita",
"vector-view-view": "smpug patas",
"vector-view-viewsource": "ida nkiya patas sspgan ka qtai",
"vector-more-actions": "knlala"
}

View File

@ -4,6 +4,10 @@
"Nomden"
]
},
"vector-action-addsection": "Faka isihloko",
"vector-action-move": "Susa",
"vector-view-edit": "Tshintsha",
"vector-view-history": "Khawujonge imbali yeli phepha"
"vector-view-history": "Khawujonge imbali yeli phepha",
"vector-view-view": "Funda",
"vector-more-actions": "Veza ezinye iinkcukacha"
}

14
i18n/xsy.json Normal file
View File

@ -0,0 +1,14 @@
{
"@metadata": {
"authors": [
"Lalotahes"
]
},
"vector-action-move": " tilkoraeh",
"vector-view-create": "paskayzaeh",
"vector-view-edit": " bienji",
"vector-view-history": "komita kahayzaan kiniiyaeh",
"vector-view-view": "kiSka:at",
"vector-view-viewsource": " komita ka yuensema:",
"vector-more-actions": "akoy"
}

View File

@ -3,7 +3,8 @@
"authors": [
"Ktchankt",
"Waihorace",
"Yueman"
"Yueman",
"Roy17"
]
},
"skinname-vector": "Vector",
@ -18,7 +19,7 @@
"vector-action-unprotect": "改保護",
"vector-view-create": "開",
"vector-view-edit": "改",
"vector-view-history": "睇吓歷史",
"vector-view-history": "修改紀錄",
"vector-view-view": "閱",
"vector-view-viewsource": "睇吓原始碼",
"vector-more-actions": "更多"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 B

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="5" height="13">
<circle cx="2.5" cy="9.5" r="2.5" fill="#00528c"/>
<circle cx="2.5" cy="9" r="2.5" fill="#222"/>
</svg>

Before

Width:  |  Height:  |  Size: 161 B

After

Width:  |  Height:  |  Size: 156 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 B

View File

@ -77,7 +77,7 @@ class SkinVector extends SkinTemplate {
* Loads skin and user CSS files.
* @param OutputPage $out
*/
function setupSkinUserCss( OutputPage $out ) {
public function setupSkinUserCss( OutputPage $out ) {
parent::setupSkinUserCss( $out );
$out->addModuleStyles( [

View File

@ -27,10 +27,9 @@
* @ingroup Skins
*/
class VectorTemplate extends BaseTemplate {
/* Functions */
/**
* Outputs the entire contents of the (X)HTML page
* Outputs the entire contents of the HTML page
*/
public function execute() {
$this->data['namespace_urls'] = $this->data['content_navigation']['namespaces'];
@ -49,14 +48,10 @@ class VectorTemplate extends BaseTemplate {
unset( $this->data['action_urls'][$mode] );
}
}
$this->data['pageLanguage'] =
$this->getSkin()->getTitle()->getPageViewLanguage()->getHtmlCode();
// Output HTML Page
$this->html( 'headelement' );
?>
<!-- GOLEM Navigation Bar -- BEGIN -->
/* GOLEM Navigation Bar -- BEGIN */
$golemNavBar = '
<div id="golemnavbar">
<div id="golemnavbarlinks">
<ul>
@ -68,99 +63,59 @@ class VectorTemplate extends BaseTemplate {
<li><a href="http://golem.linux.it/wiki/Recupero_Hardware">Recupero Hardware</a></li>
</ul>
</div>
</div>
<!-- GOLEM Navigation Bar -- END -->
</div>';
/* GOLEM Navigation Bar -- END */
<div id="content" class="mw-body" role="main">
<a id="top"></a>
<?php
if ( $this->data['sitenotice'] ) {
echo Html::rawElement( 'div',
[
'id' => 'siteNotice',
'class' => 'mw-body-content',
],
// Raw HTML
$this->get( 'sitenotice' )
);
}
if ( is_callable( [ $this, 'getIndicators' ] ) ) {
echo $this->getIndicators();
}
// Loose comparison with '!=' is intentional, to catch null and false too, but not '0'
if ( $this->data['title'] != '' ) {
echo Html::rawElement( 'h1',
[
'id' => 'firstHeading',
'class' => 'firstHeading',
'lang' => $this->get( 'pageLanguage' ),
],
// Raw HTML
$this->get( 'title' )
);
}
// Naming conventions for Mustache parameters:
// - Prefix "is" for boolean values.
// - Prefix "msg-" for interface messages.
// - Prefix "page-" for data relating to the current page (e.g. Title, WikiPage, or OutputPage).
// - Prefix "html-" for raw HTML (in front of other keys, if applicable).
// - Conditional values are null if absent.
$params = [
'html-headelement' => $this->get( 'headelement', '' ),
'html-golemnavbar' => $golemNavBar,
'html-sitenotice' => $this->get( 'sitenotice', null ),
'html-indicators' => $this->getIndicators(),
'page-langcode' => $this->getSkin()->getTitle()->getPageViewLanguage()->getHtmlCode(),
'page-isarticle' => (bool)$this->data['isarticle'],
$this->html( 'prebodyhtml' );
?>
<div id="bodyContent" class="mw-body-content">
<?php
if ( $this->data['isarticle'] ) {
echo Html::element( 'div',
[
'id' => 'siteSub',
'class' => 'noprint',
],
$this->getMsg( 'tagline' )->text()
);
}
?>
<div id="contentSub"<?php $this->html( 'userlangattributes' ) ?>><?php
$this->html( 'subtitle' )
?></div>
<?php
if ( $this->data['undelete'] ) {
echo Html::rawElement( 'div',
[ 'id' => 'contentSub2' ],
// Raw HTML
$this->get( 'undelete' )
);
}
if ( $this->data['newtalk'] ) {
echo Html::rawElement( 'div',
[ 'class' => 'usermessage' ],
// Raw HTML
$this->get( 'newtalk' )
);
}
// Keep this empty `div` for compatibility with gadgets and user scripts
// using this place to insert extra elements before.
echo Html::element( 'div', [ 'id' => 'jump-to-nav' ] );
?>
<a class="mw-jump-link" href="#mw-head"><?php $this->msg( 'vector-jumptonavigation' ) ?></a>
<a class="mw-jump-link" href="#p-search"><?php $this->msg( 'vector-jumptosearch' ) ?></a>
<?php
$this->html( 'bodycontent' );
// Remember that the string '0' is a valid title.
// From OutputPage::getPageTitle, via ::setPageTitle().
'html-title' => $this->get( 'title', '' ),
if ( $this->data['printfooter'] ) {
?>
<div class="printfooter">
<?php $this->html( 'printfooter' ); ?>
</div>
<?php
}
'html-prebodyhtml' => $this->get( 'prebodyhtml', '' ),
'msg-tagline' => $this->getMsg( 'tagline' )->text(),
// TODO: mediawiki/SkinTemplate should expose langCode and langDir properly.
'html-userlangattributes' => $this->get( 'userlangattributes', '' ),
// From OutputPage::getSubtitle()
'html-subtitle' => $this->get( 'subtitle', '' ),
if ( $this->data['catlinks'] ) {
$this->html( 'catlinks' );
}
// TODO: Use directly Skin::getUndeleteLink() directly.
// Always returns string, cast to null if empty.
'html-undelete' => $this->get( 'undelete', null ) ?: null,
if ( $this->data['dataAfterContent'] ) {
$this->html( 'dataAfterContent' );
}
?>
<div class="visualClear"></div>
<?php $this->html( 'debughtml' ); ?>
</div>
</div>
// From Skin::getNewtalks(). Always returns string, cast to null if empty.
'html-newtalk' => $this->get( 'newtalk', '' ) ?: null,
'msg-jumptonavigation' => $this->getMsg( 'vector-jumptonavigation' )->text(),
'msg-jumptosearch' => $this->getMsg( 'vector-jumptosearch' )->text(),
// Result of OutputPage::addHTML calls
'html-bodycontent' => $this->get( 'bodycontent' ),
'html-printfooter' => $this->get( 'printfooter', null ),
'html-catlinks' => $this->get( 'catlinks', '' ),
'html-dataAfterContent' => $this->get( 'dataAfterContent', '' ),
// From MWDebug::getHTMLDebugLog (when $wgShowDebug is enabled)
'html-debuglog' => $this->get( 'debughtml', '' ),
// From BaseTemplate::getTrail (handles bottom JavaScript)
'html-printtail' => $this->getTrail(),
];
// TODO: Convert the rest to Mustache
ob_start();
?>
<div id="mw-navigation">
<h2><?php $this->msg( 'navigation-heading' ) ?></h2>
<div id="mw-head">
@ -211,11 +166,13 @@ class VectorTemplate extends BaseTemplate {
?>
<div style="clear: both;"></div>
</div>
<?php $this->printTrail(); ?>
<?php
$params['html-unported'] = ob_get_contents();
ob_end_clean();
</body>
</html>
<?php
// Prepare and output the HTML response
$templates = new TemplateParser( __DIR__ . '/templates' );
echo $templates->processTemplate( 'index', $params );
}
/**
@ -363,15 +320,13 @@ class VectorTemplate extends BaseTemplate {
<h3 id="p-variants-label">
<span><?php echo htmlspecialchars( $variantLabel ) ?></span>
</h3>
<div class="menu">
<ul>
<?php
foreach ( $this->data['variant_urls'] as $key => $item ) {
echo $this->makeListItem( $key, $item );
}
?>
</ul>
</div>
<ul class="menu">
<?php
foreach ( $this->data['variant_urls'] as $key => $item ) {
echo $this->makeListItem( $key, $item );
}
?>
</ul>
</div>
<?php
break;
@ -408,15 +363,13 @@ class VectorTemplate extends BaseTemplate {
<h3 id="p-cactions-label"><span><?php
$this->msg( 'vector-more-actions' )
?></span></h3>
<div class="body">
<ul<?php $this->html( 'userlangattributes' ) ?>>
<?php
foreach ( $this->data['action_urls'] as $key => $item ) {
echo $this->makeListItem( $key, $item );
}
?>
</ul>
</div>
<ul class="menu"<?php $this->html( 'userlangattributes' ) ?>>
<?php
foreach ( $this->data['action_urls'] as $key => $item ) {
echo $this->makeListItem( $key, $item );
}
?>
</ul>
</div>
<?php
break;
@ -424,11 +377,10 @@ class VectorTemplate extends BaseTemplate {
?>
<div id="p-personal" role="navigation" class="portal<?php
if ( count( $this->data['personal_urls'] ) == 0 ) {
echo ' emptyPortlet';
echo ' class="emptyPortlet"';
}
?>" aria-labelledby="p-personal-label">
<h3 id="p-personal-label"><?php $this->msg( 'personaltools' ) ?></h3>
<div class="body">
?> aria-labelledby="p-personal-label">
<h3 id="p-personal-label"><?php $this->msg( 'personaltools' ) ?></h3>
<ul<?php $this->html( 'userlangattributes' ) ?>>
<?php
$notLoggedIn = '';

View File

@ -0,0 +1,36 @@
{{{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>
{{#html-sitenotice}}<div id="siteNotice" class="mw-body-content">{{{html-sitenotice}}}</div>{{/html-sitenotice}}
{{{html-indicators}}}
<h1 id="firstHeading" class="firstHeading" lang="{{page-langcode}}">{{{html-title}}}</h1>
{{{html-prebodyhtml}}}
<div id="bodyContent" class="mw-body-content">
{{#page-isarticle}}<div id="siteSub" class="noprint">{{msg-tagline}}</div>{{/page-isarticle}}
<div id="contentSub"{{{html-userlangattributes}}}>{{{html-subtitle}}}</div>
{{#html-undelete}}<div id="contentSub2">{{{html-undelete}}}</div>{{/html-undelete}}
{{#html-newtalk}}<div class="usermessage">{{{html-newtalk}}}</div>{{/html-newtalk}}
{{!
Keep this empty `div` for compatibility with gadgets and user scripts
using this place to insert extra elements before.
}}
<div id="jump-to-nav"></div>
<a class="mw-jump-link" href="#mw-head">{{msg-jumptonavigation}}</a>
<a class="mw-jump-link" href="#p-search">{{msg-jumptosearch}}</a>
{{{html-bodycontent}}}
{{#html-printfooter}}
<div class="printfooter">{{{html-printfooter}}}</div>
{{/html-printfooter}}
{{{html-catlinks}}}
{{{html-dataAfterContent}}}
<div class="visualClear"></div>
{{{html-debuglog}}}
</div>
</div>
{{! html-unported outputs <div id="mw-navigation"> and <div id="footer"> }}
{{{html-unported}}}
{{{html-printtail}}}
</body>
</html>

View File

@ -5,13 +5,12 @@
"doc": "jsduck"
},
"devDependencies": {
"eslint-config-wikimedia": "0.7.2",
"eslint-config-wikimedia": "0.11.0",
"grunt": "1.0.3",
"grunt-banana-checker": "0.6.0",
"grunt-banana-checker": "0.7.0",
"grunt-eslint": "21.0.0",
"grunt-jsonlint": "1.1.0",
"grunt-stylelint": "0.10.1",
"stylelint": "9.2.0",
"stylelint-config-wikimedia": "0.4.3"
"stylelint-config-wikimedia": "0.5.0"
}
}

View File

@ -35,10 +35,10 @@
font-family: @font-family-serif;
}
.printfooter,
#footer,
// Tables, thumbs and lists are sans-serif in print mode (unlike screen mode) because these will render
// more legibly on print media in a smaller font sizes
.printfooter,
#footer,
.thumb,
table,
ol,
@ -58,7 +58,7 @@
// src="https://wikimedia.org/api/rest_v1/media/math/render/svg/d03b01348b751e6f4eaff085b3effa9542e2935d"
// class="mwe-math-fallback-image-inline"
// aria-hidden="true"
// style="vertical-align: -2.171ex; width:11.418ex; height:5.676ex;"
// style="vertical-align: -2.171ex; width: 11.418ex; height: 5.676ex;"
// alt="r_{s}={\frac {2GM}{c^{2}}}">
img {
font-family: @font-family-serif;
@ -139,8 +139,8 @@
// between the surrounding elements, making the reading experience less
// enjoyable. If there is not enough space the following code will push
// the paragraph contents until after the floating element(s).
@paragraphMinWidth: 120pt;
&:before {
@paragraphMinWidth: 120pt;
content: '';
display: block;
overflow: hidden;
@ -183,7 +183,6 @@
}
> ul {
> li {
margin-bottom: 4px;
font-weight: bold;

View File

@ -47,11 +47,13 @@
display: none;
}
}
div#p-personal {
ul {
padding-left: 0;
}
}
div#right-navigation {
position: absolute;
top: inherit;
@ -59,6 +61,7 @@
margin-top: 0;
float: none;
}
div#left-navigation {
position: absolute;
top: inherit;
@ -66,26 +69,33 @@
display: block;
float: none;
}
div#p-namespaces,
div#p-views,
div#p-variants {
}
div#p-namespaces {
padding-left: 0;
}
div#p-cactions {
}
div#p-search {
}
div#simpleSearch {
margin: 0 3em;
width: 80vw;
padding: 0;
}
.vectorMenu .menu {
left: inherit;
right: -1px;
}
div#content {
/* Hide the 1px blue border on the left side */
border-left: 0;

View File

@ -93,7 +93,6 @@
"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.spinner": "skinStyles/jquery.ui/jquery.ui.spinner.css",
"jquery.ui.tabs": "skinStyles/jquery.ui/jquery.ui.tabs.css",
"jquery.ui.tooltips": "skinStyles/jquery.ui/jquery.ui.tooltips.css",
"+mediawiki.action.view.redirectPage": "skinStyles/mediawiki.action.view.redirectPage.less",
@ -101,7 +100,7 @@
"+oojs-ui-core.styles": "skinStyles/ooui.less",
"mediawiki.special": "skinStyles/mediawiki.special.less",
"+mediawiki.special.preferences.styles": "skinStyles/mediawiki.special.preferences.styles.less"
}
}
},
"config": {
"VectorUseSimpleSearch": true,

View File

@ -1,23 +0,0 @@
/*!
* jQuery UI Spinner 1.9.2
* http://jqueryui.com
*
* Copyright 2012 jQuery Foundation and other contributors
* Released under the MIT license.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Spinner#theming
*/
.ui-spinner { position:relative; display: inline-block; overflow: hidden; padding: 0; vertical-align: middle; }
.ui-spinner-input { border: none; background: none; padding: 0; margin: .2em 0; vertical-align: middle; margin-left: .4em; margin-right: 22px; }
.ui-spinner-button { width: 16px; height: 50%; font-size: .5em; padding: 0; margin: 0; text-align: center; position: absolute; cursor: default; display: block; overflow: hidden; right: 0; }
.ui-spinner a.ui-spinner-button { border-top: none; border-bottom: none; border-right: none; } /* more specificity required here to overide default borders */
.ui-spinner .ui-icon { position: absolute; margin-top: -8px; top: 50%; left: 0; } /* vertical centre icon */
.ui-spinner-up { top: 0; }
.ui-spinner-down { bottom: 0; }
/* TR overrides */
.ui-spinner .ui-icon-triangle-1-s {
/* need to fix icons sprite */
background-position:-65px -16px;
}

View File

@ -243,5 +243,6 @@
.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; -khtml-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; }
/* Overlays */
.ui-widget-overlay { /* @embed */ background: #000000 url("images/ui-bg_flat_100_000000_40x100.png") 50% 50% repeat-x; opacity: .5;filter:Alpha(Opacity=50); }
.ui-widget-overlay { background: rgba(255, 255, 255, 0.5); opacity: 1; filter: none; }
.ui-widget-shadow { margin: -7px 0 0 -7px; padding: 7px; /* @embed */ background: #000000 url("images/ui-bg_flat_70_000000_40x100.png") 50% 50% repeat-x; opacity: .2;filter:Alpha(Opacity=20); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }
.ui-dialog { border: 1px solid #a2a9b1; box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.25); }

View File

@ -1,111 +0,0 @@
@import 'mediawiki.mixins';
@import '../variables';
/**
* The following code is highly modified from monobook. It would be nice if the
* preftoc id was more human readable like preferences-toc for instance,
* howerver this would require backporting the other skins.
*/
.client-js #preftoc {
/* Tabs */
width: 100%;
float: left;
clear: both;
margin: 0;
padding: 0;
.background-image('../images/preferences/break.png');
background-position: bottom left;
background-repeat: no-repeat;
li {
/* Tab */
float: left;
margin: 0;
padding: 0;
padding-right: 1px;
height: 2.25em;
white-space: nowrap;
list-style-type: none;
list-style-image: none;
.background-image('../images/preferences/break.png');
background-position: bottom right;
background-repeat: no-repeat;
&:first-child {
margin-left: 1px;
}
&.selected {
a {
.background-image('../images/preferences/fade.png');
background-position: bottom;
background-repeat: repeat-x;
color: @colorText;
}
}
}
a,
a:active {
display: inline-block;
position: relative;
color: @menu-link-color;
padding: 0.5em;
text-decoration: none;
background-image: none;
font-size: 0.9em;
}
a:hover,
a:focus {
text-decoration: underline;
}
}
.client-js #preferences {
float: left;
width: 100%;
margin: 0;
margin-top: -2px;
clear: both;
border: 1px solid @colorGray12;
background-color: @colorGray15;
fieldset {
border: 0;
border-top: 1px solid @colorGray12;
}
> fieldset {
border: 0;
padding: 0;
margin: 1em;
> legend {
display: none;
}
}
legend {
color: @colorGray5;
}
td {
padding-left: 0.5em;
padding-right: 0.5em;
}
div.mw-prefs-buttons {
padding: 1em;
input {
margin-right: 0.25em;
}
}
}
.htmlform-tip {
font-size: x-small;
padding: 0.2em 2em;
color: @colorGray5;
}

View File

@ -41,5 +41,6 @@
@menu-main-body-padding: 0.3em 0 0 0;
// Personal menu
@menu-personal-font-size: 0.75em;
@line-height-menu-personal: 14 / @font-size-browser / @menu-personal-font-size; // equals `1.667em`≈`14px`
@background-position-menu-personal-icon: left ( 4 / @font-size-browser / @font-size-menu-personal );
@font-size-menu-personal: 0.75em;
@line-height-menu-personal: 14 / @font-size-browser / @font-size-menu-personal; // equals `1.667em`≈`14px`