Imported from Mediawiki default skin
This commit is contained in:
@@ -0,0 +1 @@
|
||||
/vendor/
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"root": true,
|
||||
"extends": [
|
||||
"wikimedia/client",
|
||||
"wikimedia/jquery",
|
||||
"wikimedia/mediawiki"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
node_modules/
|
||||
vendor/
|
||||
composer.lock
|
||||
.eslintcache
|
||||
@@ -0,0 +1,6 @@
|
||||
[gerrit]
|
||||
host=gerrit.wikimedia.org
|
||||
port=29418
|
||||
project=mediawiki/skins/Example.git
|
||||
track=1
|
||||
defaultrebase=0
|
||||
@@ -0,0 +1,3 @@
|
||||
<?php
|
||||
|
||||
return require __DIR__ . '/../vendor/mediawiki/mediawiki-phan-config/src/config.php';
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0"?>
|
||||
<ruleset>
|
||||
<rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki" />
|
||||
<file>.</file>
|
||||
<arg name="extensions" value="php"/>
|
||||
<arg name="encoding" value="UTF-8"/>
|
||||
</ruleset>
|
||||
@@ -0,0 +1,2 @@
|
||||
vendor/
|
||||
resources/libraries/
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"extends": "stylelint-config-wikimedia",
|
||||
"rules": {
|
||||
"selector-max-id": null
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
The development of this software is covered by a [Code of Conduct](https://www.mediawiki.org/wiki/Special:MyLanguage/Code_of_Conduct).
|
||||
@@ -0,0 +1,14 @@
|
||||
Example skin
|
||||
|
||||
This is an example skin showcasing the best practices, a companion to the
|
||||
MediaWiki skinning guide available at
|
||||
<https://www.mediawiki.org/wiki/Manual:Skinning>.
|
||||
|
||||
The code is released into public domain, which means you can freely copy it,
|
||||
modify and release as your own skin without providing attribution and with
|
||||
absolutely no restrictions. Remember to change the license information if you
|
||||
do not intend to provide your changes on the same terms.
|
||||
|
||||
See <http://creativecommons.org/publicdomain/zero/1.0/> for full licensing
|
||||
details.
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"require-dev": {
|
||||
"mediawiki/mediawiki-codesniffer": "47.0.0",
|
||||
"mediawiki/mediawiki-phan-config": "0.16.0",
|
||||
"mediawiki/minus-x": "1.1.3",
|
||||
"php-parallel-lint/php-console-highlighter": "1.0.0",
|
||||
"php-parallel-lint/php-parallel-lint": "1.4.0"
|
||||
},
|
||||
"scripts": {
|
||||
"fix": [
|
||||
"minus-x fix .",
|
||||
"phpcbf"
|
||||
],
|
||||
"test": [
|
||||
"parallel-lint . --exclude vendor --exclude node_modules",
|
||||
"minus-x check .",
|
||||
"@phpcs"
|
||||
],
|
||||
"phan": "phan -d . --long-progress-bar",
|
||||
"phpcs": "phpcs -sp"
|
||||
},
|
||||
"config": {
|
||||
"allow-plugins": {
|
||||
"dealerdirect/phpcodesniffer-composer-installer": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"..."
|
||||
]
|
||||
},
|
||||
"skinname-example": "Example",
|
||||
"example-skin-desc": "An example skin showcasing the best practices",
|
||||
"example-no-categories": "No categories"
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"..."
|
||||
]
|
||||
},
|
||||
"skinname-example": "{{optional}}",
|
||||
"example-skin-desc": "{{desc|what=skin|name=Example|url=https://www.mediawiki.org/wiki/Skin:Example}}",
|
||||
"example-no-categories": "Message to show when no categories available"
|
||||
}
|
||||
Generated
+7219
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "Example",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"test": "npm -s run lint",
|
||||
"lint": "npm -s run lint:js && npm -s run lint:styles && npm -s run lint:i18n",
|
||||
"lint:fix:js": "npm -s run lint:js -- --fix",
|
||||
"lint:fix:styles": "npm -s run lint:styles -- --fix",
|
||||
"lint:js": "eslint --cache .",
|
||||
"lint:styles": "stylelint \"**/*.{less,css}\"",
|
||||
"lint:i18n": "banana-checker i18n/"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint-config-wikimedia": "0.30.0",
|
||||
"grunt-banana-checker": "0.13.0",
|
||||
"stylelint-config-wikimedia": "0.18.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
// Import MediaWiki skin variables for general fundamental styling.
|
||||
@import 'mediawiki.skin.variables.less';
|
||||
|
||||
.mw-portlet {
|
||||
position: relative;
|
||||
|
||||
ul {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
h3 {
|
||||
display: none;
|
||||
}
|
||||
|
||||
li {
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
input[ type='checkbox' ] {
|
||||
display: block;
|
||||
position: absolute;
|
||||
opacity: 0;
|
||||
cursor: pointer;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: @z-index-stacking-1;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
@media screen {
|
||||
@import './screen-common.less';
|
||||
|
||||
@media ( min-width: 751px ) {
|
||||
@import './screen-desktop.less';
|
||||
}
|
||||
|
||||
@media ( min-width: 750px ) {
|
||||
@import './screen-mobile.less';
|
||||
}
|
||||
}
|
||||
|
||||
@media print {
|
||||
@import './print.css';
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
// Styles for echo badges
|
||||
|
||||
#pt-notifications-alert,
|
||||
#pt-notifications-notice {
|
||||
white-space: nowrap;
|
||||
display: inline-block;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
/* Styles for print view and printing. */
|
||||
/* You can use CSS files or Less files depending on your preference. */
|
||||
|
||||
/* Hide some extra stuff from print view (some of the navigation is already hidden automatically,
|
||||
but not all). */
|
||||
.mw-indicators,
|
||||
#p-logo,
|
||||
#catlinks,
|
||||
#mw-footer {
|
||||
display: none;
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
/* Common styling for the Example skin */
|
||||
|
||||
@import 'mediawiki.mixins.less';
|
||||
|
||||
// Page layout
|
||||
|
||||
#mw-wrapper {
|
||||
max-width: @width;
|
||||
margin: 0 auto;
|
||||
position: relative;
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
#p-logo {
|
||||
text-align: center;
|
||||
width: 10em;
|
||||
float: right;
|
||||
|
||||
// Make logo image visible
|
||||
// The class sets the background image from $wgLogo, but we still need to give it a size in order to show up
|
||||
a.mw-wiki-logo {
|
||||
display: block;
|
||||
content: '';
|
||||
width: 10em;
|
||||
height: 10em;
|
||||
background-repeat: no-repeat;
|
||||
background-position: 50% 50%;
|
||||
}
|
||||
}
|
||||
|
||||
.mw-body {
|
||||
position: relative;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
// Some content stuff
|
||||
.firstHeading {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.mw-indicators {
|
||||
float: right;
|
||||
margin: 1.5em 0 0 1em;
|
||||
}
|
||||
|
||||
pre {
|
||||
overflow: auto;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
.center,
|
||||
.center * {
|
||||
margin: auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
// Splatter the menus and tools at the bottom
|
||||
.mw-footer,
|
||||
#page-tools,
|
||||
#p-personal {
|
||||
margin: 1em 0;
|
||||
|
||||
ul {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
li {
|
||||
padding-right: 1em;
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
#page-tools .mw-portlet {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
#mw-navigation {
|
||||
margin: 1em 0;
|
||||
|
||||
h2 {
|
||||
.mixin-screen-reader-text;
|
||||
}
|
||||
}
|
||||
|
||||
// Footer
|
||||
.mw-footer {
|
||||
border-top: 1px solid @border;
|
||||
|
||||
// stylelint-disable-next-line no-descending-specificity
|
||||
ul {
|
||||
margin-top: 1em;
|
||||
}
|
||||
}
|
||||
|
||||
#footer-icons {
|
||||
float: right;
|
||||
margin: 0 0 1em 1em;
|
||||
}
|
||||
|
||||
// hidden stuff
|
||||
#page-tools h3,
|
||||
#p-search h3,
|
||||
#p-personal h3 {
|
||||
.mixin-screen-reader-text;
|
||||
}
|
||||
|
||||
// user tools
|
||||
#user-tools {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
#p-user-interface-preferences,
|
||||
#p-notifications,
|
||||
#p-user-page {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#p-user-page a::before {
|
||||
content: '👤';
|
||||
display: inline-block;
|
||||
padding-right: 10px;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
/* Styles appear on displays over 750 pixels wide */
|
||||
|
||||
#site-navigation {
|
||||
ul {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
li {
|
||||
padding-right: 1em;
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
/* Styles appear on displays 750 pixels wide and below */
|
||||
|
||||
#p-logo {
|
||||
width: 6em;
|
||||
|
||||
// Make the logo smaller because we're dealing with less space here
|
||||
// Note that background-size doesn't necessarily work in older browsers, but whatever
|
||||
a.mw-wiki-logo {
|
||||
margin: 0 0 1em 1em;
|
||||
width: 5em;
|
||||
height: 5em;
|
||||
background-size: contain;
|
||||
}
|
||||
}
|
||||
|
||||
#p-banner {
|
||||
display: none;
|
||||
}
|
||||
|
||||
// Full-width thumbnails (to avoid having really squished text around them)
|
||||
div.thumb {
|
||||
float: none;
|
||||
}
|
||||
|
||||
.thumb {
|
||||
width: 100%;
|
||||
margin: 1em auto;
|
||||
}
|
||||
|
||||
.thumbinner {
|
||||
/* stylelint-disable-next-line declaration-no-important */
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
div.tright {
|
||||
margin-left: 0;
|
||||
|
||||
.thumbinner {
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
div.tleft {
|
||||
margin-right: 0;
|
||||
|
||||
.thumbinner {
|
||||
padding-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.thumbimage {
|
||||
display: block;
|
||||
margin: 0 auto 0.5em;
|
||||
}
|
||||
|
||||
// Keep images from overflowing
|
||||
.mw-body-content a > img {
|
||||
/* stylelint-disable-next-line declaration-no-important */
|
||||
height: auto !important;
|
||||
/* stylelint-disable-next-line declaration-no-important */
|
||||
max-width: 100% !important;
|
||||
}
|
||||
|
||||
.nomobile {
|
||||
display: none;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
/* JavaScript for the Example skin */
|
||||
@@ -0,0 +1,11 @@
|
||||
// Reference all skin stylesheets and variables aside of extension specific.
|
||||
// Note, that 'screen-*' and 'print.css' stylesheets are imported in 'common.less'.
|
||||
|
||||
// Import MediaWiki skin variables for general fundamental styling.
|
||||
@import 'mediawiki.skin.variables.less';
|
||||
// Import skin specific variables beyond MediaWiki skin variables scope.
|
||||
@import 'variables.less';
|
||||
// Import common skin style rules.
|
||||
@import 'common.less';
|
||||
// Import specific module style rules.
|
||||
@import 'Portlet.less';
|
||||
@@ -0,0 +1,2 @@
|
||||
@width: 66em;
|
||||
@border: #ccc;
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 324 KiB |
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"name": "Example",
|
||||
"version": "1.0.0",
|
||||
"author": [
|
||||
"..."
|
||||
],
|
||||
"url": "https://www.mediawiki.org/wiki/Skin:Example",
|
||||
"descriptionmsg": "example-skin-desc",
|
||||
"namemsg": "skinname-example",
|
||||
"license-name": "CC0-1.0",
|
||||
"type": "skin",
|
||||
"requires": {
|
||||
"MediaWiki": ">= 1.45"
|
||||
},
|
||||
"ValidSkinNames": {
|
||||
"example": {
|
||||
"class": "SkinMustache",
|
||||
"args": [
|
||||
{
|
||||
"name": "example",
|
||||
"responsive": true,
|
||||
"messages": [
|
||||
"example-no-categories",
|
||||
"sitetitle",
|
||||
"search",
|
||||
"otherlanguages",
|
||||
"tagline",
|
||||
"navigation-heading"
|
||||
],
|
||||
"styles": [
|
||||
"mediawiki.ui.icon",
|
||||
"mediawiki.ui.button",
|
||||
"skins.example.styles"
|
||||
],
|
||||
"scripts": [
|
||||
"skins.example"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"MessagesDirs": {
|
||||
"Example": [
|
||||
"i18n"
|
||||
]
|
||||
},
|
||||
"ResourceModules": {
|
||||
"skins.example.styles": {
|
||||
"class": "MediaWiki\\ResourceLoader\\SkinModule",
|
||||
"features": {
|
||||
"normalize": true,
|
||||
"elements": true,
|
||||
"content-tables": true,
|
||||
"content-links": false,
|
||||
"content-media": false,
|
||||
"content-links-external": false,
|
||||
"interface-message-box": true,
|
||||
"interface-category": false,
|
||||
"toc": true
|
||||
},
|
||||
"targets": [
|
||||
"desktop",
|
||||
"mobile"
|
||||
],
|
||||
"styles": [
|
||||
"resources/skin.less"
|
||||
]
|
||||
},
|
||||
"skins.example": {
|
||||
"targets": [
|
||||
"desktop",
|
||||
"mobile"
|
||||
],
|
||||
"packageFiles": [
|
||||
"resources/skin.js"
|
||||
]
|
||||
}
|
||||
},
|
||||
"ResourceFileModulePaths": {
|
||||
"localBasePath": "",
|
||||
"remoteSkinPath": "Example"
|
||||
},
|
||||
"ResourceModuleSkinStyles": {
|
||||
"example": {
|
||||
"+ext.echo.styles.badge": "resources/extensions/echo.styles.badge.less"
|
||||
}
|
||||
},
|
||||
"manifest_version": 2
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{{#is-article}}
|
||||
<div id="catlinks" class="catlinks" data-mw="interface">
|
||||
{{#data-category-normal}}
|
||||
<div id="{{id}}" class="{{class}}">
|
||||
<ul>{{#array-items}}{{>ListItem}}{{/array-items}}</ul>
|
||||
{{{html-after-portal}}}
|
||||
</div>
|
||||
{{/data-category-normal}}
|
||||
{{^data-category-normal}}
|
||||
<p>{{msg-example-no-categories}}</p>
|
||||
{{/data-category-normal}}
|
||||
{{#data-category-hidden}}
|
||||
<div id="{{id}}" class="{{class}}">
|
||||
<ul>{{#array-items}}{{>ListItem}}{{/array-items}}</ul>
|
||||
{{{html-after-portal}}}
|
||||
</div>
|
||||
{{/data-category-hidden}}
|
||||
</div>
|
||||
{{/is-article}}
|
||||
@@ -0,0 +1,10 @@
|
||||
{{! `role` is unnecessary but kept to support selectors in any gadgets or user styles and
|
||||
to mitigate a VoiceOver bug. }}
|
||||
<footer id="footer" class="mw-footer" role="contentinfo" {{{html-user-language-attributes}}}>
|
||||
{{!}}{{#data-icons}}{{>FooterList}}{{/data-icons}}
|
||||
{{!}}<div id="footer-list">
|
||||
{{#data-last-modified}}{{>LastModifiedLine}}{{/data-last-modified}}
|
||||
<div id="copyright">{{#data-copyright}}{{{html}}}{{/data-copyright}}</div>
|
||||
{{!}}{{#data-places}}{{>FooterList}}{{/data-places}}
|
||||
{{!}}</div>
|
||||
</footer>
|
||||
@@ -0,0 +1,5 @@
|
||||
<ul id="{{id}}">
|
||||
{{#array-items}}
|
||||
<li id="{{id}}">{{{html}}}</li>
|
||||
{{/array-items}}
|
||||
</ul>
|
||||
@@ -0,0 +1 @@
|
||||
<span class="skin-last-modified" data-time="{{time}}">{{text}}</span>
|
||||
@@ -0,0 +1 @@
|
||||
<li id="{{id}}" class="{{class}}">{{#array-links}}{{>ListItemLink}}{{/array-links}}</li>
|
||||
@@ -0,0 +1,2 @@
|
||||
<a {{#array-attributes}}{{key}}="{{value}}"{{/array-attributes}}>
|
||||
<span class="list-item-{{icon}}"></span>{{ text }}</a>
|
||||
@@ -0,0 +1,11 @@
|
||||
<div role="navigation" id="{{id}}" class="{{class}}" title="{{html-tooltip}}"
|
||||
aria-labelledby="{{id}}-label">
|
||||
<input type="checkbox" aria-labelledby="{{id}}-label" />
|
||||
<h3 id="{{id}}-label" {{{html-user-language-attributes}}}>{{label}}</h3>
|
||||
<div class="mw-portlet-body">
|
||||
<ul {{{html-user-language-attributes}}}>
|
||||
{{#array-items}}{{>ListItem}}{{/array-items}}
|
||||
</ul>
|
||||
{{{html-after-portal}}}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,68 @@
|
||||
<div id="mw-wrapper">
|
||||
<div class="mw-body" id="content" role="main">
|
||||
<div id="siteNotice">{{{html-site-notice}}}</div>
|
||||
{{{html-user-message}}}
|
||||
<div class="mw-indicators mw-body-content">
|
||||
{{#array-indicators}}
|
||||
<div id="{{id}}" class="{{class}}">{{{html}}}</div>
|
||||
{{/array-indicators}}
|
||||
</div>
|
||||
{{{html-title-heading}}}
|
||||
<div id="siteSub">{{msg-tagline}}</div>
|
||||
<div class="mw-body-content">
|
||||
<div id="contentSub">
|
||||
{{{html-subtitle}}}
|
||||
{{{html-undelete-link}}}
|
||||
</div>
|
||||
{{{html-body-content}}}
|
||||
<!-- todo: replace with .mixin-clearfix -->
|
||||
<div class="visualClear"></div>
|
||||
{{#data-portlets}}
|
||||
{{>CategoryPortlet}}
|
||||
{{/data-portlets}}
|
||||
</div>
|
||||
{{{html-after-content}}}
|
||||
</div>
|
||||
<div id="mw-navigation">
|
||||
<h2>{{msg-navigation-heading}}</h2>
|
||||
<div id="p-logo" class="mw-portlet" role="banner">
|
||||
<a href="{{link-mainpage}}">
|
||||
{{#data-logos}}
|
||||
{{#icon}}<img src="{{.}}" width="40" height="40">{{/icon}}
|
||||
{{#wordmark}}<img src="{{src}}" width="{{width}}" height="{{height}}">{{/wordmark}}
|
||||
{{^wordmark}}<h1>{{msg-sitetitle}}</h1>{{/wordmark}}
|
||||
{{/data-logos}}
|
||||
</a>
|
||||
</div>
|
||||
{{#data-search-box}}
|
||||
<form action="{{form-action}}" role="search" class="mw-portlet" id="p-search">
|
||||
<input type="hidden" name="title" value="{{page-title}}">
|
||||
<h3>
|
||||
<label for="searchInput">{{msg-search}}</label>
|
||||
</h3>
|
||||
{{{html-input}}}
|
||||
{{{html-button-search}}}
|
||||
</form>
|
||||
{{/data-search-box}}
|
||||
{{#data-portlets}}
|
||||
<div id="user-tools">
|
||||
{{#data-user-page}}{{>Portlet}}{{/data-user-page}}
|
||||
{{#data-notifications}}{{>Portlet}}{{/data-notifications}}
|
||||
{{#data-user-interface-preferences}}{{>Portlet}}{{/data-user-interface-preferences}}
|
||||
{{#data-user-menu}}{{>Portlet}}{{/data-user-menu}}
|
||||
</div>
|
||||
<div id="page-tools">
|
||||
{{#data-namespaces}}{{>Portlet}}{{/data-namespaces}}
|
||||
{{#data-variants}}{{>Portlet}}{{/data-variants}}
|
||||
{{#data-views}}{{>Portlet}}{{/data-views}}
|
||||
{{#data-actions}}{{>Portlet}}{{/data-actions}}
|
||||
</div>
|
||||
{{/data-portlets}}
|
||||
<div id="site-navigation">
|
||||
{{#data-portlets-sidebar.data-portlets-first}}{{>Portlet}}{{/data-portlets-sidebar.data-portlets-first}}
|
||||
{{#data-portlets-sidebar.array-portlets-rest}}{{>Portlet}}{{/data-portlets-sidebar.array-portlets-rest}}
|
||||
{{#data-portlets.data-languages}}{{>Portlet}}{{/data-portlets.data-languages}}
|
||||
</div>
|
||||
</div>
|
||||
{{#data-footer}}{{>Footer}}{{/data-footer}}
|
||||
</div>
|
||||
Reference in New Issue
Block a user