Separate Vector skin from core

This makes it behave exactly like a custom skin, with the caveat that
it is still hardcoded in several places :(, most notably lots of
skinStyles in Resources.php, the installer and some tests.

* Renamed directory to reflect skin name.
* Split skin classes to separate PHP files.
* Removed core autoloader entries for skin classes.
* Changed the hack in Setup.php to require_once the skin PHP file, as
  the skin is now registered there.
* Extracted skin-specific localisation messages.
* Extracted skin-specific resources. Did not touch skinStyles yet.
* Hacked up the installer not to fall over entirely if Vector is
  missing.
* Adjusted hardcoded paths in some more places...

Change-Id: Idfffc1430790b3a104cc9835a6367137bcbf0e4e
This commit is contained in:
Bartosz Dziewoński 2014-06-11 00:25:48 +02:00
parent 9ec7cb0868
commit a96afeb262
73 changed files with 197 additions and 122 deletions

View file

@ -1181,8 +1181,6 @@ $wgAutoloadLocalClasses = array(
# skins
'MonoBookTemplate' => 'skins/monobook/MonoBook.php',
'SkinMonoBook' => 'skins/monobook/MonoBook.php',
'SkinVector' => 'skins/vector/Vector.php',
'VectorTemplate' => 'skins/vector/Vector.php',
);
class AutoLoader {

View file

@ -606,7 +606,7 @@ $wgDeferredUpdateList = array();
// These lines should eventually be placed in skins' meta definition files, and loaded by a
// require_once for each skin file generated by the installer and placed in LocalSettings.php.
$wgValidSkinNames['monobook'] = 'MonoBook';
$wgValidSkinNames['vector'] = 'Vector';
require_once "$wgStyleDirectory/Vector/Vector.php";
wfProfileOut( $fname . '-globals' );
wfProfileIn( $fname . '-extensions' );

View file

@ -124,6 +124,12 @@ class WebInstallerOutput {
* @return string
*/
public function getCSS() {
// Horrible, horrible hack: the installer is currently hardcoded to use the Vector skin, so load
// it here. Include instead of require, as this will work without it, it will just look bad.
global $wgResourceModules;
global $wgStyleDirectory;
include_once "$wgStyleDirectory/Vector/Vector.php";
$moduleNames = array(
// See SkinTemplate::setupSkinUserCss
'mediawiki.legacy.shared',
@ -146,6 +152,10 @@ class WebInstallerOutput {
foreach ( $moduleNames as $moduleName ) {
/** @var ResourceLoaderFileModule $module */
$module = $resourceLoader->getModule( $moduleName );
// One of the modules will be missing if Vector is unavailable
if ( !$module ) {
continue;
}
// Based on: ResourceLoaderFileModule::getStyles (without the DB query)
$styles = ResourceLoader::makeCombinedStyles( $module->readStyleFiles(

View file

@ -150,19 +150,7 @@
"faqpage": "Project:FAQ",
"sitetitle": "{{SITENAME}}",
"sitesubtitle": "",
"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",
"actions": "Actions",
"vector-more-actions": "More",
"namespaces": "Namespaces",
"variants": "Variants",
"navigation-heading": "Navigation menu",
@ -2475,7 +2463,6 @@
"interlanguage-link-title-nonlangonly": "$1",
"common.css": "/* CSS placed here will be applied to all skins */",
"monobook.css": "/* CSS placed here will affect users of the MonoBook skin */",
"vector.css": "/* CSS placed here will affect users of the Vector skin */",
"print.css": "/* CSS placed here will affect the print output */",
"noscript.css": "/* CSS placed here will affect users with JavaScript disabled */",
"group-autoconfirmed.css": "/* CSS placed here will affect autoconfirmed users only */",
@ -2485,7 +2472,6 @@
"group-bureaucrat.css": "/* CSS placed here will affect bureaucrats only */",
"common.js": "/* Any JavaScript here will be loaded for all users on every page load. */",
"monobook.js": "/* Any JavaScript here will be loaded for users using the MonoBook skin */",
"vector.js": "/* Any JavaScript here will be loaded for users using the Vector skin */",
"group-autoconfirmed.js": "/* Any JavaScript here will be loaded for autoconfirmed users only */",
"group-user.js": "/* Any JavaScript here will be loaded for registered users only */",
"group-bot.js": "/* Any JavaScript here will be loaded for bots only */",
@ -2558,7 +2544,6 @@
"pageinfo-category-subcats": "Number of subcategories",
"pageinfo-category-files": "Number of files",
"skinname-monobook": "MonoBook",
"skinname-vector": "Vector",
"markaspatrolleddiff": "Mark as patrolled",
"markaspatrolledlink": "[$1]",
"markaspatrolledtext": "Mark this page as patrolled",

View file

@ -312,19 +312,7 @@
"faqpage": "{{doc-important|Do not translate <code>Project:</code> part.}}\n\"FAQ\" is short for \"frequently asked questions\".\n\nThis page is only linked in CologneBlue (an old skin), not in Monobook or Vector.",
"sitetitle": "{{Ignore}}",
"sitesubtitle": "{{Ignore}}",
"vector-action-addsection": "Used in the Vector skin. See for example {{canonicalurl:Talk:Main_Page|useskin=vector}}",
"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-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-viewsource": "Tab label in the Vector skin.\n{{Identical|View source}}",
"actions": "{{Identical|Action}}",
"vector-more-actions": "Label in the Vector skin's menu for the less-important or rarer actions which are not shown as tabs (like moving the page, or for sysops deleting or protecting the page), as well as (for users with a narrow viewing window in their browser) the less-important tab actions which the user's browser is unable to fit in. {{Identical|More}}",
"namespaces": "{{Identical|Namespace}}",
"variants": "Used by the Vector skin.",
"navigation-heading": "Heading shown above the navigation menu (sidebar) for screen-readers (or in non-standard skins).",
@ -2637,7 +2625,6 @@
"interlanguage-link-title-nonlangonly": "{{ignored}}Interlanguage link title. Parameters: $1 replaced with name of the target wiki (probably not a language name).",
"common.css": "{{optional}}\nCSS applied to all users.",
"monobook.css": "{{optional}}\nCSS applied to users using Monobook skin.",
"vector.css": "{{optional}}",
"print.css": "{{optional}}",
"noscript.css": "{{optional}}",
"group-autoconfirmed.css": "{{doc-group|autoconfirmed|css}}",
@ -2647,7 +2634,6 @@
"group-bureaucrat.css": "{{doc-group|bureaucrat|css}}",
"common.js": "{{optional}}\nJS for all users.",
"monobook.js": "{{optional}}\nJS for users using Monobook skin.",
"vector.js": "{{optional}}",
"group-autoconfirmed.js": "{{doc-group|autoconfirmed|js}}",
"group-user.js": "{{doc-group|user|js}}",
"group-bot.js": "{{doc-group|bot|js}}",
@ -2720,7 +2706,6 @@
"pageinfo-category-subcats": "See also:\n* {{msg-mw|Pageinfo-category-pages}}\n* {{msg-mw|Pageinfo-category-files}}",
"pageinfo-category-files": "See also:\n* {{msg-mw|Pageinfo-category-pages}}\n* {{msg-mw|Pageinfo-category-subcats}}",
"skinname-monobook": "{{optional}}",
"skinname-vector": "{{optional}}",
"markaspatrolleddiff": "{{doc-actionlink}}\nSee also:\n* {{msg-mw|Markaspatrolledtext}}\n{{Identical|Mark as patrolled}}",
"markaspatrolledlink": "{{notranslate}}\nParameters:\n* $1 - link which has text {{msg-mw|Markaspatrolledtext}}",
"markaspatrolledtext": "{{doc-actionlink}}\nSee also:\n* {{msg-mw|Markaspatrolleddiff}}",

View file

@ -128,15 +128,6 @@ return array(
*
* See Vector for an example.
*/
'skins.vector.styles' => array(
// Used in the web installer. Test it after modifying this definition!
'styles' => array(
'screen.less' => array( 'media' => 'screen' ),
'screen-hd.less' => array( 'media' => 'screen and (min-width: 982px)' ),
),
'remoteSkinPath' => 'vector',
'localBasePath' => $GLOBALS['wgStyleDirectory'] . '/vector',
),
'skins.monobook.styles' => array(
'styles' => array(
'main.css' => array( 'media' => 'screen' ),
@ -144,19 +135,6 @@ return array(
'remoteSkinPath' => 'monobook',
'localBasePath' => $GLOBALS['wgStyleDirectory'] . '/monobook',
),
'skins.vector.js' => array(
'scripts' => array(
'collapsibleTabs.js',
'vector.js',
),
'position' => 'top',
'dependencies' => array(
'jquery.throttle-debounce',
'jquery.tabIndex',
),
'remoteSkinPath' => 'vector',
'localBasePath' => $GLOBALS['wgStyleDirectory'] . '/vector',
),
/* jQuery */
@ -1229,7 +1207,7 @@ return array(
'scripts' => 'resources/src/mediawiki.special/mediawiki.special.js',
'styles' => 'resources/src/mediawiki.special/mediawiki.special.css',
'skinStyles' => array(
'vector' => 'skins/vector/special.less', // FIXME this should use $wgStyleDirectory
'vector' => 'skins/Vector/special.less', // FIXME this should use $wgStyleDirectory
),
),
'mediawiki.special.block' => array(
@ -1278,7 +1256,7 @@ return array(
'styles' => 'resources/src/mediawiki.special/mediawiki.special.preferences.css',
'position' => 'top',
'skinStyles' => array(
'vector' => 'skins/vector/special.preferences.less', // FIXME this should use $wgStyleDirectory
'vector' => 'skins/Vector/special.preferences.less', // FIXME this should use $wgStyleDirectory
),
'messages' => array(
'prefs-tabs-navigation-hint',

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 );
}
}
}

60
skins/Vector/Vector.php Normal file
View file

@ -0,0 +1,60 @@
<?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',
'url' => 'https://www.mediawiki.org/wiki/Skin:Vector',
);
// 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__,
);

View file

@ -18,75 +18,10 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @todo document
* @file
* @ingroup Skins
*/
if ( !defined( 'MEDIAWIKI' ) ) {
die( -1 );
}
/**
* SkinTemplate class for 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 );
}
}
}
/**
* QuickTemplate class for Vector skin
* @ingroup Skins
@ -162,6 +97,7 @@ class VectorTemplate extends BaseTemplate {
<div id="content" class="mw-body" role="main">
<a id="top"></a>
<div id="mw-js-message" style="display:none;"<?php $this->html( 'userlangattributes' ) ?>></div>
<?php
if ( $this->data['sitenotice'] ) {
?>

20
skins/Vector/i18n/en.json Normal file
View file

@ -0,0 +1,20 @@
{
"@metadata": {
"authors": []
},
"skinname-vector": "Vector",
"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"
}

View file

@ -0,0 +1,20 @@
{
"@metadata": {
"authors": []
},
"skinname-vector": "{{optional}}",
"vector.css": "{{optional}}",
"vector.js": "{{optional}}",
"vector-action-addsection": "Used in the Vector skin. See for example {{canonicalurl:Talk:Main_Page|useskin=vector}}",
"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-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-viewsource": "Tab label in the Vector skin.\n{{Identical|View source}}",
"vector-more-actions": "Label in the Vector skin's menu for the less-important or rarer actions which are not shown as tabs (like moving the page, or for sysops deleting or protecting the page), as well as (for users with a narrow viewing window in their browser) the less-important tab actions which the user's browser is unable to fit in. {{Identical|More}}"
}

View file

Before

Width:  |  Height:  |  Size: 143 B

After

Width:  |  Height:  |  Size: 143 B

View file

Before

Width:  |  Height:  |  Size: 163 B

After

Width:  |  Height:  |  Size: 163 B

View file

Before

Width:  |  Height:  |  Size: 145 B

After

Width:  |  Height:  |  Size: 145 B

View file

Before

Width:  |  Height:  |  Size: 165 B

After

Width:  |  Height:  |  Size: 165 B

View file

Before

Width:  |  Height:  |  Size: 135 B

After

Width:  |  Height:  |  Size: 135 B

View file

Before

Width:  |  Height:  |  Size: 165 B

After

Width:  |  Height:  |  Size: 165 B

View file

Before

Width:  |  Height:  |  Size: 135 B

After

Width:  |  Height:  |  Size: 135 B

View file

Before

Width:  |  Height:  |  Size: 165 B

After

Width:  |  Height:  |  Size: 165 B

View file

Before

Width:  |  Height:  |  Size: 145 B

After

Width:  |  Height:  |  Size: 145 B

View file

Before

Width:  |  Height:  |  Size: 165 B

After

Width:  |  Height:  |  Size: 165 B

View file

Before

Width:  |  Height:  |  Size: 107 B

After

Width:  |  Height:  |  Size: 107 B

View file

Before

Width:  |  Height:  |  Size: 141 B

After

Width:  |  Height:  |  Size: 141 B

View file

Before

Width:  |  Height:  |  Size: 484 B

After

Width:  |  Height:  |  Size: 484 B

View file

Before

Width:  |  Height:  |  Size: 141 B

After

Width:  |  Height:  |  Size: 141 B

View file

Before

Width:  |  Height:  |  Size: 510 B

After

Width:  |  Height:  |  Size: 510 B

View file

Before

Width:  |  Height:  |  Size: 359 B

After

Width:  |  Height:  |  Size: 359 B

View file

Before

Width:  |  Height:  |  Size: 204 B

After

Width:  |  Height:  |  Size: 204 B

View file

Before

Width:  |  Height:  |  Size: 115 B

After

Width:  |  Height:  |  Size: 115 B

View file

Before

Width:  |  Height:  |  Size: 168 B

After

Width:  |  Height:  |  Size: 168 B

View file

Before

Width:  |  Height:  |  Size: 161 B

After

Width:  |  Height:  |  Size: 161 B

View file

Before

Width:  |  Height:  |  Size: 96 B

After

Width:  |  Height:  |  Size: 96 B

View file

Before

Width:  |  Height:  |  Size: 103 B

After

Width:  |  Height:  |  Size: 103 B

View file

Before

Width:  |  Height:  |  Size: 85 B

After

Width:  |  Height:  |  Size: 85 B

View file

Before

Width:  |  Height:  |  Size: 94 B

After

Width:  |  Height:  |  Size: 94 B

View file

Before

Width:  |  Height:  |  Size: 214 B

After

Width:  |  Height:  |  Size: 214 B

View file

Before

Width:  |  Height:  |  Size: 218 B

After

Width:  |  Height:  |  Size: 218 B

View file

Before

Width:  |  Height:  |  Size: 214 B

After

Width:  |  Height:  |  Size: 214 B

View file

Before

Width:  |  Height:  |  Size: 215 B

After

Width:  |  Height:  |  Size: 215 B

View file

Before

Width:  |  Height:  |  Size: 125 B

After

Width:  |  Height:  |  Size: 125 B

View file

Before

Width:  |  Height:  |  Size: 70 B

After

Width:  |  Height:  |  Size: 70 B

View file

Before

Width:  |  Height:  |  Size: 117 B

After

Width:  |  Height:  |  Size: 117 B

View file

Before

Width:  |  Height:  |  Size: 716 B

After

Width:  |  Height:  |  Size: 716 B

View file

Before

Width:  |  Height:  |  Size: 624 B

After

Width:  |  Height:  |  Size: 624 B

View file

Before

Width:  |  Height:  |  Size: 658 B

After

Width:  |  Height:  |  Size: 658 B

View file

Before

Width:  |  Height:  |  Size: 624 B

After

Width:  |  Height:  |  Size: 624 B

View file

Before

Width:  |  Height:  |  Size: 568 B

After

Width:  |  Height:  |  Size: 568 B

View file

Before

Width:  |  Height:  |  Size: 4 KiB

After

Width:  |  Height:  |  Size: 4 KiB

View file

Before

Width:  |  Height:  |  Size: 640 B

After

Width:  |  Height:  |  Size: 640 B

View file

Before

Width:  |  Height:  |  Size: 294 B

After

Width:  |  Height:  |  Size: 294 B

View file

Before

Width:  |  Height:  |  Size: 485 B

After

Width:  |  Height:  |  Size: 485 B

View file

Before

Width:  |  Height:  |  Size: 294 B

After

Width:  |  Height:  |  Size: 294 B

View file

Before

Width:  |  Height:  |  Size: 642 B

After

Width:  |  Height:  |  Size: 642 B

View file

Before

Width:  |  Height:  |  Size: 294 B

After

Width:  |  Height:  |  Size: 294 B