diff options
author | Pierre Schmitz <pierre@archlinux.de> | 2011-06-22 11:28:20 +0200 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2011-06-22 11:28:20 +0200 |
commit | 9db190c7e736ec8d063187d4241b59feaf7dc2d1 (patch) | |
tree | 46d1a0dee7febef5c2d57a9f7b972be16a163b3d /skins/vector | |
parent | 78677c7bbdcc9739f6c10c75935898a20e1acd9e (diff) |
update to MediaWiki 1.17.0
Diffstat (limited to 'skins/vector')
56 files changed, 345 insertions, 2965 deletions
diff --git a/skins/vector/Makefile b/skins/vector/Makefile deleted file mode 100644 index 74e36c45..00000000 --- a/skins/vector/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -# -# Handy makefile to build the RTL variant with cssjanus -# - -all: main-rtl.css - -main-rtl.css: main-ltr.css cssjanus/cssjanus.py - python cssjanus/cssjanus.py --swap_ltr_rtl_in_url < main-ltr.css > main-rtl.css - -# SVN version is broken; checking in our own. -#cssjanus/cssjanus.py: -# svn co http://cssjanus.googlecode.com/svn/trunk cssjanus - -#distclean: clean -# rm -rf cssjanus - -clean: - rm -f main-rtl.css diff --git a/skins/vector/csshover.htc b/skins/vector/csshover.htc index a88fa08d..a13ea68d 100644 --- a/skins/vector/csshover.htc +++ b/skins/vector/csshover.htc @@ -1,12 +1,14 @@ <public:attach event="ondocumentready" onevent="CSSHover()" /> <script> -// <![CDATA[ /** - * Whatever:hover - V3.00.081222 + * Whatever:hover - V3.11 * ------------------------------------------------------------ * Author - Peter Nederlof, http://www.xs4all.nl/~peterned * License - http://creativecommons.org/licenses/LGPL/2.1 * + * Special thanks to Sergiu Dumitriu, http://purl.org/net/sergiu, + * for fixing the expression loop. + * * Whatever:hover is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either @@ -24,16 +26,31 @@ window.CSSHover = (function(){ // regular expressions, used and explained later on. - var REG_INTERACTIVE = /(^|\s)((([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active|focus))/i, - REG_AFFECTED = /(.*?)\:(hover|active|focus)/i, - REG_PSEUDO = /[^:]+:([a-z-]+).*/i, - REG_SELECT = /(\.([a-z0-9_-]+):[a-z]+)|(:[a-z]+)/gi, - REG_CLASS = /\.([a-z0-9_-]*on(hover|active|focus))/i, - REG_MSIE = /msie (5|6|7)/i, - REG_COMPAT = /backcompat/i; + var REG_INTERACTIVE = /(^|\s)((([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active|focus))/i; + var REG_AFFECTED = /(.*?)\:(hover|active|focus)/i; + var REG_PSEUDO = /[^:]+:([a-z\-]+).*/i; + var REG_SELECT = /(\.([a-z0-9_\-]+):[a-z]+)|(:[a-z]+)/gi; + var REG_CLASS = /\.([a-z0-9_\-]*on(hover|active|focus))/i; + var REG_MSIE = /msie (5|6|7)/i; + var REG_COMPAT = /backcompat/i; + + // property mapping, real css properties must be used in order to clear expressions later on... + // Uses obscure css properties that no-one is likely to use. The properties are borrowed to + // set an expression, and are then restored to the most likely correct value. + var Properties = { + index: 0, + list: ['text-kashida', 'text-kashida-space', 'text-justify'], + get: function() { + return this.list[(this.index++)%this.list.length]; + } + }; - // css prefix, a leading dash would be nice (spec), but IE6 doesn't like that. - var CSSHOVER_PREFIX = 'csh-'; + // camelize is used to convert css properties from (eg) text-kashida to textKashida + var camelize = function(str) { + return str.replace(/-(.)/mg, function(result, match){ + return match.toUpperCase(); + }); + }; /** * Local CSSHover object @@ -52,7 +69,9 @@ window.CSSHover = (function(){ init:function() { // don't run in IE8 standards; expressions don't work in standards mode anyway, // and the stuff we're trying to fix should already work properly - if(!REG_MSIE.test(navigator.userAgent) && !REG_COMPAT.test(window.document.compatMode)) return; + if(!REG_MSIE.test(navigator.userAgent) && !REG_COMPAT.test(window.document.compatMode)) { + return; + } // start parsing the existing stylesheets var sheets = window.document.styleSheets, l = sheets.length; @@ -66,26 +85,25 @@ window.CSSHover = (function(){ // check sheet imports and parse those recursively if(sheet.imports) { try { - var imports = sheet.imports, l = imports.length; + var imports = sheet.imports; + var l = imports.length; for(var i=0; i<l; i++) { this.parseStylesheet(sheet.imports[i]); } } catch(securityException){ - // trycatch for various possible errors, - // todo; might need to be placed inside the for loop, since an error - // on an import stops following imports from being processed. + // trycatch for various possible errors } } // interate the sheet's rules and send them to the parser try { - var rules = sheet.rules, l = rules.length; - for(var j=0; j<l; j++) { + var rules = sheet.rules; + var r = rules.length; + for(var j=0; j<r; j++) { this.parseCSSRule(rules[j], sheet); } - } catch(securityException){ - // trycatch for various errors, most likely accessing the sheet's rules, - // don't see how individual rules would throw errors, but you never know. + } catch(someException){ + // trycatch for various errors, most likely accessing the sheet's rules. } }, @@ -98,39 +116,40 @@ window.CSSHover = (function(){ // only parse a rule if it contains an interactive pseudo. var select = rule.selectorText; if(REG_INTERACTIVE.test(select)) { - var style = rule.style.cssText, + var style = rule.style.cssText; - // affected elements are found by truncating the selector after the interactive pseudo, - // eg: "div li:hover" >> "div li" - affected = REG_AFFECTED.exec(select)[1], + // affected elements are found by truncating the selector after the interactive pseudo, + // eg: "div li:hover" >> "div li" + var affected = REG_AFFECTED.exec(select)[1]; - // that pseudo is needed for a classname, and defines the type of interaction (focus, hover, active) - // eg: "li:hover" >> "onhover" - pseudo = select.replace(REG_PSEUDO, 'on$1'), + // that pseudo is needed for a classname, and defines the type of interaction (focus, hover, active) + // eg: "li:hover" >> "onhover" + var pseudo = select.replace(REG_PSEUDO, 'on$1'); - // the new selector is going to use that classname in a new css rule, - // since IE6 doesn't support multiple classnames, this is merged into one classname - // eg: "li:hover" >> "li.onhover", "li.folder:hover" >> "li.folderonhover" - newSelect = select.replace(REG_SELECT, '.$2' + pseudo), + // the new selector is going to use that classname in a new css rule, + // since IE6 doesn't support multiple classnames, this is merged into one classname + // eg: "li:hover" >> "li.onhover", "li.folder:hover" >> "li.folderonhover" + var newSelect = select.replace(REG_SELECT, '.$2' + pseudo); - // the classname is needed for the events that are going to be set on affected nodes - // eg: "li.folder:hover" >> "folderonhover" - className = REG_CLASS.exec(newSelect)[1]; + // the classname is needed for the events that are going to be set on affected nodes + // eg: "li.folder:hover" >> "folderonhover" + var className = REG_CLASS.exec(newSelect)[1]; // no need to set the same callback more than once when the same selector uses the same classname var hash = affected + className; if(!this.callbacks[hash]) { - - // affected elements are given an expression under a fake css property, the classname is used - // because a unique name (eg "behavior:") would be overruled (in IE6, not 7) by a following rule - // selecting the same element. The expression does a callback to CSSHover.patch, rerouted via the - // exposed window.CSSHover function. + + // affected elements are given an expression under a borrowed css property, because fake properties + // can't have their expressions cleared. Different properties are used per pseudo, to avoid + // expressions from overwriting eachother. The expression does a callback to CSSHover.patch, + // rerouted via the exposed window.CSSHover function. + var property = Properties.get(); + var atRuntime = camelize(property); // because the expression is added to the stylesheet, and styles are always applied to html that is // dynamically added to the dom, the expression will also trigger for those new elements (provided // they are selected by the affected selector). - - sheet.addRule(affected, CSSHOVER_PREFIX + className + ':expression(CSSHover(this, "'+pseudo+'", "'+className+'"))'); + sheet.addRule(affected, property + ':expression(CSSHover(this, "'+pseudo+'", "'+className+'", "'+atRuntime+'"))'); // hash it, so an identical selector/class combo does not duplicate the expression this.callbacks[hash] = true; @@ -142,18 +161,23 @@ window.CSSHover = (function(){ }, // called via the expression, patches individual nodes - patch:function(node, type, className) { - - // the patch's type is returned to the expression. That way the expression property - // can be found and removed, to stop it from calling patch over and over. - // The if will fail the first time, since the expression has not yet received a value. - var property = CSSHOVER_PREFIX + className; - if(node.style[property]) { - node.style[property] = null; - } + patch:function(node, type, className, property) { + // restores the borrowed css property to the value of its immediate parent, clearing + // the expression so that it's not repeatedly called. + try { + var value = node.parentNode.currentStyle[property]; + node.style[property] = value; + } catch(e) { + // the above reset should never fail, but just in case, clear the runtimeStyle if it does. + // this will also stop the expression. + node.runtimeStyle[property] = ''; + } + // just to make sure, also keep track of patched classnames locally on the node - if(!node.csshover) node.csshover = []; + if(!node.csshover) { + node.csshover = []; + } // and check for it to prevent duplicate events with the same classname from being set if(!node.csshover[className]) { @@ -189,11 +213,6 @@ window.CSSHover = (function(){ } }; - // add the unload to the onbeforeunload event - window.attachEvent('onbeforeunload', function(){ - CSSHover.unload(); - }); - /** * CSSHoverElement * -------------------------- @@ -241,15 +260,20 @@ window.CSSHover = (function(){ } }; + // add the unload to the onbeforeunload event + window.attachEvent('onbeforeunload', function(){ + CSSHover.unload(); + }); + /** * Public hook * -------------------------- */ - return function(node, type, className) { + return function(node, type, className, property) { if(node) { // called via the css expression; patches individual nodes - return CSSHover.patch(node, type, className); + return CSSHover.patch(node, type, className, property); } else { // called ondomcontentready via the public:attach node CSSHover.init(); @@ -257,6 +281,4 @@ window.CSSHover = (function(){ }; })(); - -// ]]> </script>
\ No newline at end of file diff --git a/skins/vector/csshover.min.htc b/skins/vector/csshover.min.htc new file mode 100644 index 00000000..7e5c57b3 --- /dev/null +++ b/skins/vector/csshover.min.htc @@ -0,0 +1,12 @@ +<public:attach event="ondocumentready" onevent="CSSHover()" /> +<script> +/** + * Whatever:hover - V3.11 + * http://www.xs4all.nl/~peterned/ + * + * Copyright (c) 2009 Peter Nederlof + * Licensed under the LGPL license + * http://creativecommons.org/licenses/LGPL/2.1 + */ +window.CSSHover=(function(){var m=/(^|\s)((([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active|focus))/i;var n=/(.*?)\:(hover|active|focus)/i;var o=/[^:]+:([a-z\-]+).*/i;var p=/(\.([a-z0-9_\-]+):[a-z]+)|(:[a-z]+)/gi;var q=/\.([a-z0-9_\-]*on(hover|active|focus))/i;var s=/msie (5|6|7)/i;var t=/backcompat/i;var u={index:0,list:['text-kashida','text-kashida-space','text-justify'],get:function(){return this.list[(this.index++)%this.list.length]}};var v=function(c){return c.replace(/-(.)/mg,function(a,b){return b.toUpperCase()})};var w={elements:[],callbacks:{},init:function(){if(!s.test(navigator.userAgent)&&!t.test(window.document.compatMode)){return}var a=window.document.styleSheets,l=a.length;for(var i=0;i<l;i++){this.parseStylesheet(a[i])}},parseStylesheet:function(a){if(a.imports){try{var b=a.imports;var l=b.length;for(var i=0;i<l;i++){this.parseStylesheet(a.imports[i])}}catch(securityException){}}try{var c=a.rules;var r=c.length;for(var j=0;j<r;j++){this.parseCSSRule(c[j],a)}}catch(someException){}},parseCSSRule:function(a,b){var c=a.selectorText;if(m.test(c)){var d=a.style.cssText;var e=n.exec(c)[1];var f=c.replace(o,'on$1');var g=c.replace(p,'.$2'+f);var h=q.exec(g)[1];var i=e+h;if(!this.callbacks[i]){var j=u.get();var k=v(j);b.addRule(e,j+':expression(CSSHover(this, "'+f+'", "'+h+'", "'+k+'"))');this.callbacks[i]=true}b.addRule(g,d)}},patch:function(a,b,c,d){try{var f=a.parentNode.currentStyle[d];a.style[d]=f}catch(e){a.runtimeStyle[d]=''}if(!a.csshover){a.csshover=[]}if(!a.csshover[c]){a.csshover[c]=true;var g=new CSSHoverElement(a,b,c);this.elements.push(g)}return b},unload:function(){try{var l=this.elements.length;for(var i=0;i<l;i++){this.elements[i].unload()}this.elements=[];this.callbacks={}}catch(e){}}};var x={onhover:{activator:'onmouseenter',deactivator:'onmouseleave'},onactive:{activator:'onmousedown',deactivator:'onmouseup'},onfocus:{activator:'onfocus',deactivator:'onblur'}};function CSSHoverElement(a,b,c){this.node=a;this.type=b;var d=new RegExp('(^|\\s)'+c+'(\\s|$)','g');this.activator=function(){a.className+=' '+c};this.deactivator=function(){a.className=a.className.replace(d,' ')};a.attachEvent(x[b].activator,this.activator);a.attachEvent(x[b].deactivator,this.deactivator)}CSSHoverElement.prototype={unload:function(){this.node.detachEvent(x[this.type].activator,this.activator);this.node.detachEvent(x[this.type].deactivator,this.deactivator);this.activator=null;this.deactivator=null;this.node=null;this.type=null}};window.attachEvent('onbeforeunload',function(){w.unload()});return function(a,b,c,d){if(a){return w.patch(a,b,c,d)}else{w.init()}}})(); +</script> diff --git a/skins/vector/cssjanus/COPYING b/skins/vector/cssjanus/COPYING deleted file mode 100644 index 3f2c8953..00000000 --- a/skins/vector/cssjanus/COPYING +++ /dev/null @@ -1,13 +0,0 @@ - Copyright 2008 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/skins/vector/cssjanus/LICENSE b/skins/vector/cssjanus/LICENSE deleted file mode 100644 index d6456956..00000000 --- a/skins/vector/cssjanus/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/skins/vector/cssjanus/README b/skins/vector/cssjanus/README deleted file mode 100644 index 9b922156..00000000 --- a/skins/vector/cssjanus/README +++ /dev/null @@ -1,91 +0,0 @@ -=CSSJanus= - -_Flips CSS from LTR to an RTL orienation and vice-versa_ - -Author: `Lindsey Simon <elsigh@google.com>` - -==Introduction== - -CSSJanus is CSS parser utility designed to aid the conversion of a website's -layout from left-to-right(LTR) to right-to-left(RTL). The script was born out of -a need to convert CSS for RTL languages when tables are not being used for layout (since tables will automatically reorder TD's in RTL). -CSSJanus will change most of the obvious CSS property names and their values as -well as some not-so-obvious ones (cursor, background-position %, etc...). -The script is designed to offer flexibility to account for cases when you do -not want to change certain rules which exist to account for bidirectional text -display bugs, as well as situations where you may or may not want to flip annotations inside of the background url string. -Note that you can disable CSSJanus from running on an entire class or any -rule within a class by prepending a /* @noflip */ comment before the rule(s) -you want CSSJanus to ignore. - -CSSJanus itself is not always enough to make a website that works in a LTR -language context work in a RTL language all the way, but it is a start. - -==Getting the code== - -View the trunk at: - - http://cssjanus.googlecode.com/svn/trunk/ - -Check out the latest development version anonymously with: - -{{{ - $ svn checkout http://cssjanus.googlecode.com/svn/trunk/ cssjanus -}}} - -==Using== - -Usage: - ./cssjanus.py < file.css > file-rtl.css -Flags: - --swap_left_right_in_url: Fixes "left"/"right" string within urls. - Ex: ./cssjanus.py --swap_left_right_in_url < file.css > file_rtl.css - --swap_ltr_rtl_in_url: Fixes "ltr"/"rtl" string within urls. - Ex: ./cssjanus.py --swap_ltr_rtl_in_url < file.css > file_rtl.css - -If you'd like to make use of the webapp version of cssjanus, you'll need to -download the Google App Engine SDK - http://code.google.com/appengine/downloads.html -and also drop a "django" directory into this directory, with the latest svn -from django. You should be good to go with that setup. Please let me know -otherwise. - -==Bugs, Patches== - -Patches and bug reports are welcome, just please keep the style -consistent with the original source. If you find a bug, please include a diff -of cssjanus_test.py with the bug included as a new unit test which fails. It -will make understanding and fixing the bug easier. - -==Todo== - -* Include some helpers for some typical bidi text solutions? -* Aural CSS (azimuth) swapping? - -==Contributors== - -Additional thanks to Mike Samuel for his work on csslex.py, Andy Perelson for -his help coding and reviewing, Stephen Zabel for his help with i18n and my sanity, -and to Eric Meyer for his thoughtful input. -Thanks to Junyu Wang for the Chinese translation. -Thanks to Masashi Kawashima for the Japanese translation. -Thanks to Taaryk Taar and Tariq Al-Omaireeni for an updated Arabic translation. -Thanks to Jens Meiert for the German translation. - -==License== - -{{{ - Copyright 2008 Google Inc. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the 'License'); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an 'AS IS' BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -}}} diff --git a/skins/vector/cssjanus/cssjanus.py b/skins/vector/cssjanus/cssjanus.py deleted file mode 100644 index dd14bd58..00000000 --- a/skins/vector/cssjanus/cssjanus.py +++ /dev/null @@ -1,574 +0,0 @@ -#!/usr/bin/python -# -# Copyright 2008 Google Inc. All Rights Reserved. - -"""Converts a LeftToRight Cascading Style Sheet into a RightToLeft one. - - This is a utility script for replacing "left" oriented things in a CSS file - like float, padding, margin with "right" oriented values. - It also does the opposite. - The goal is to be able to conditionally serve one large, cat'd, compiled CSS - file appropriate for LeftToRight oriented languages and RightToLeft ones. - This utility will hopefully help your structural layout done in CSS in - terms of its RTL compatibility. It will not help with some of the more - complicated bidirectional text issues. -""" - -__author__ = 'elsigh@google.com (Lindsey Simon)' -__version__ = '0.1' - -import logging -import re -import sys -import getopt -import os - -import csslex - -logging.getLogger().setLevel(logging.INFO) - -# Global for the command line flags. -SWAP_LTR_RTL_IN_URL_DEFAULT = False -SWAP_LEFT_RIGHT_IN_URL_DEFAULT = False -FLAGS = {'swap_ltr_rtl_in_url': SWAP_LTR_RTL_IN_URL_DEFAULT, - 'swap_left_right_in_url': SWAP_LEFT_RIGHT_IN_URL_DEFAULT} - -# Generic token delimiter character. -TOKEN_DELIMITER = '~' - -# This is a temporary match token we use when swapping strings. -TMP_TOKEN = '%sTMP%s' % (TOKEN_DELIMITER, TOKEN_DELIMITER) - -# Token to be used for joining lines. -TOKEN_LINES = '%sJ%s' % (TOKEN_DELIMITER, TOKEN_DELIMITER) - -# Global constant text strings for CSS value matches. -LTR = 'ltr' -RTL = 'rtl' -LEFT = 'left' -RIGHT = 'right' - -# This is a lookbehind match to ensure that we don't replace instances -# of our string token (left, rtl, etc...) if there's a letter in front of it. -# Specifically, this prevents replacements like 'background: url(bright.png)'. -LOOKBEHIND_NOT_LETTER = r'(?<![a-zA-Z])' - -# This is a lookahead match to make sure we don't replace left and right -# in actual classnames, so that we don't break the HTML/CSS dependencies. -# Read literally, it says ignore cases where the word left, for instance, is -# directly followed by valid classname characters and a curly brace. -# ex: .column-left {float: left} will become .column-left {float: right} -LOOKAHEAD_NOT_OPEN_BRACE = (r'(?!(?:%s|%s|%s|#|\:|\.|\,|\+|>)*?{)' % - (csslex.NMCHAR, TOKEN_LINES, csslex.SPACE)) - - -# These two lookaheads are to test whether or not we are within a -# background: url(HERE) situation. -# Ref: http://www.w3.org/TR/CSS21/syndata.html#uri -VALID_AFTER_URI_CHARS = r'[\'\"]?%s' % csslex.WHITESPACE -LOOKAHEAD_NOT_CLOSING_PAREN = r'(?!%s?%s\))' % (csslex.URL_CHARS, - VALID_AFTER_URI_CHARS) -LOOKAHEAD_FOR_CLOSING_PAREN = r'(?=%s?%s\))' % (csslex.URL_CHARS, - VALID_AFTER_URI_CHARS) - -# Compile a regex to swap left and right values in 4 part notations. -# We need to match negatives and decimal numeric values. -# ex. 'margin: .25em -2px 3px 0' becomes 'margin: .25em 0 3px -2px'. -POSSIBLY_NEGATIVE_QUANTITY = r'((?:-?%s)|(?:inherit|auto))' % csslex.QUANTITY -POSSIBLY_NEGATIVE_QUANTITY_SPACE = r'%s%s%s' % (POSSIBLY_NEGATIVE_QUANTITY, - csslex.SPACE, - csslex.WHITESPACE) -FOUR_NOTATION_QUANTITY_RE = re.compile(r'%s%s%s%s' % - (POSSIBLY_NEGATIVE_QUANTITY_SPACE, - POSSIBLY_NEGATIVE_QUANTITY_SPACE, - POSSIBLY_NEGATIVE_QUANTITY_SPACE, - POSSIBLY_NEGATIVE_QUANTITY), - re.I) -COLOR = r'(%s|%s)' % (csslex.NAME, csslex.HASH) -COLOR_SPACE = r'%s%s' % (COLOR, csslex.SPACE) -FOUR_NOTATION_COLOR_RE = re.compile(r'(-color%s:%s)%s%s%s(%s)' % - (csslex.WHITESPACE, - csslex.WHITESPACE, - COLOR_SPACE, - COLOR_SPACE, - COLOR_SPACE, - COLOR), - re.I) - -# Compile the cursor resize regexes -CURSOR_EAST_RE = re.compile(LOOKBEHIND_NOT_LETTER + '([ns]?)e-resize') -CURSOR_WEST_RE = re.compile(LOOKBEHIND_NOT_LETTER + '([ns]?)w-resize') - -# Matches the condition where we need to replace the horizontal component -# of a background-position value when expressed in horizontal percentage. -# Had to make two regexes because in the case of position-x there is only -# one quantity, and otherwise we don't want to match and change cases with only -# one quantity. -BG_HORIZONTAL_PERCENTAGE_RE = re.compile(r'background(-position)?(%s:%s)' - '([^%%]*?)(%s)%%' - '(%s(?:%s|%s))' % (csslex.WHITESPACE, - csslex.WHITESPACE, - csslex.NUM, - csslex.WHITESPACE, - csslex.QUANTITY, - csslex.IDENT)) - -BG_HORIZONTAL_PERCENTAGE_X_RE = re.compile(r'background-position-x(%s:%s)' - '(%s)%%' % (csslex.WHITESPACE, - csslex.WHITESPACE, - csslex.NUM)) - -# Matches the opening of a body selector. -BODY_SELECTOR = r'body%s{%s' % (csslex.WHITESPACE, csslex.WHITESPACE) - -# Matches anything up until the closing of a selector. -CHARS_WITHIN_SELECTOR = r'[^\}]*?' - -# Matches the direction property in a selector. -DIRECTION_RE = r'direction%s:%s' % (csslex.WHITESPACE, csslex.WHITESPACE) - -# These allow us to swap "ltr" with "rtl" and vice versa ONLY within the -# body selector and on the same line. -BODY_DIRECTION_LTR_RE = re.compile(r'(%s)(%s)(%s)(ltr)' % - (BODY_SELECTOR, CHARS_WITHIN_SELECTOR, - DIRECTION_RE), - re.I) -BODY_DIRECTION_RTL_RE = re.compile(r'(%s)(%s)(%s)(rtl)' % - (BODY_SELECTOR, CHARS_WITHIN_SELECTOR, - DIRECTION_RE), - re.I) - - -# Allows us to swap "direction:ltr" with "direction:rtl" and -# vice versa anywhere in a line. -DIRECTION_LTR_RE = re.compile(r'%s(ltr)' % DIRECTION_RE) -DIRECTION_RTL_RE = re.compile(r'%s(rtl)' % DIRECTION_RE) - -# We want to be able to switch left with right and vice versa anywhere -# we encounter left/right strings, EXCEPT inside the background:url(). The next -# two regexes are for that purpose. We have alternate IN_URL versions of the -# regexes compiled in case the user passes the flag that they do -# actually want to have left and right swapped inside of background:urls. -LEFT_RE = re.compile('%s(%s)%s%s' % (LOOKBEHIND_NOT_LETTER, - LEFT, - LOOKAHEAD_NOT_CLOSING_PAREN, - LOOKAHEAD_NOT_OPEN_BRACE), - re.I) -RIGHT_RE = re.compile('%s(%s)%s%s' % (LOOKBEHIND_NOT_LETTER, - RIGHT, - LOOKAHEAD_NOT_CLOSING_PAREN, - LOOKAHEAD_NOT_OPEN_BRACE), - re.I) -LEFT_IN_URL_RE = re.compile('%s(%s)%s' % (LOOKBEHIND_NOT_LETTER, - LEFT, - LOOKAHEAD_FOR_CLOSING_PAREN), - re.I) -RIGHT_IN_URL_RE = re.compile('%s(%s)%s' % (LOOKBEHIND_NOT_LETTER, - RIGHT, - LOOKAHEAD_FOR_CLOSING_PAREN), - re.I) -LTR_IN_URL_RE = re.compile('%s(%s)%s' % (LOOKBEHIND_NOT_LETTER, - LTR, - LOOKAHEAD_FOR_CLOSING_PAREN), - re.I) -RTL_IN_URL_RE = re.compile('%s(%s)%s' % (LOOKBEHIND_NOT_LETTER, - RTL, - LOOKAHEAD_FOR_CLOSING_PAREN), - re.I) - -COMMENT_RE = re.compile('(%s)' % csslex.COMMENT, re.I) - -NOFLIP_TOKEN = r'\@noflip' -# The NOFLIP_TOKEN inside of a comment. For now, this requires that comments -# be in the input, which means users of a css compiler would have to run -# this script first if they want this functionality. -NOFLIP_ANNOTATION = r'/\*%s%s%s\*/' % (csslex.WHITESPACE, - NOFLIP_TOKEN, - csslex. WHITESPACE) - -# After a NOFLIP_ANNOTATION, and within a class selector, we want to be able -# to set aside a single rule not to be flipped. We can do this by matching -# our NOFLIP annotation and then using a lookahead to make sure there is not -# an opening brace before the match. -NOFLIP_SINGLE_RE = re.compile(r'(%s%s[^;}]+;?)' % (NOFLIP_ANNOTATION, - LOOKAHEAD_NOT_OPEN_BRACE), - re.I) - -# After a NOFLIP_ANNOTATION, we want to grab anything up until the next } which -# means the entire following class block. This will prevent all of its -# declarations from being flipped. -NOFLIP_CLASS_RE = re.compile(r'(%s%s})' % (NOFLIP_ANNOTATION, - CHARS_WITHIN_SELECTOR), - re.I) - - -class Tokenizer: - """Replaces any CSS comments with string tokens and vice versa.""" - - def __init__(self, token_re, token_string): - """Constructor for the Tokenizer. - - Args: - token_re: A regex for the string to be replace by a token. - token_string: The string to put between token delimiters when tokenizing. - """ - logging.debug('Tokenizer::init token_string=%s' % token_string) - self.token_re = token_re - self.token_string = token_string - self.originals = [] - - def Tokenize(self, line): - """Replaces any string matching token_re in line with string tokens. - - By passing a function as an argument to the re.sub line below, we bypass - the usual rule where re.sub will only replace the left-most occurrence of - a match by calling the passed in function for each occurrence. - - Args: - line: A line to replace token_re matches in. - - Returns: - line: A line with token_re matches tokenized. - """ - line = self.token_re.sub(self.TokenizeMatches, line) - logging.debug('Tokenizer::Tokenize returns: %s' % line) - return line - - def DeTokenize(self, line): - """Replaces tokens with the original string. - - Args: - line: A line with tokens. - - Returns: - line with any tokens replaced by the original string. - """ - - # Put all of the comments back in by their comment token. - for i, original in enumerate(self.originals): - token = '%s%s_%s%s' % (TOKEN_DELIMITER, self.token_string, i + 1, - TOKEN_DELIMITER) - line = line.replace(token, original) - logging.debug('Tokenizer::DeTokenize i:%s w/%s' % (i, token)) - logging.debug('Tokenizer::DeTokenize returns: %s' % line) - return line - - def TokenizeMatches(self, m): - """Replaces matches with tokens and stores the originals. - - Args: - m: A match object. - - Returns: - A string token which replaces the CSS comment. - """ - logging.debug('Tokenizer::TokenizeMatches %s' % m.group(1)) - self.originals.append(m.group(1)) - return '%s%s_%s%s' % (TOKEN_DELIMITER, - self.token_string, - len(self.originals), - TOKEN_DELIMITER) - - -def FixBodyDirectionLtrAndRtl(line): - """Replaces ltr with rtl and vice versa ONLY in the body direction. - - Args: - line: A string to replace instances of ltr with rtl. - Returns: - line with direction: ltr and direction: rtl swapped only in body selector. - line = FixBodyDirectionLtrAndRtl('body { direction:ltr }') - line will now be 'body { direction:rtl }'. - """ - - line = BODY_DIRECTION_LTR_RE.sub('\\1\\2\\3%s' % TMP_TOKEN, line) - line = BODY_DIRECTION_RTL_RE.sub('\\1\\2\\3%s' % LTR, line) - line = line.replace(TMP_TOKEN, RTL) - logging.debug('FixBodyDirectionLtrAndRtl returns: %s' % line) - return line - - -def FixLeftAndRight(line): - """Replaces left with right and vice versa in line. - - Args: - line: A string in which to perform the replacement. - - Returns: - line with left and right swapped. For example: - line = FixLeftAndRight('padding-left: 2px; margin-right: 1px;') - line will now be 'padding-right: 2px; margin-left: 1px;'. - """ - - line = LEFT_RE.sub(TMP_TOKEN, line) - line = RIGHT_RE.sub(LEFT, line) - line = line.replace(TMP_TOKEN, RIGHT) - logging.debug('FixLeftAndRight returns: %s' % line) - return line - - -def FixLeftAndRightInUrl(line): - """Replaces left with right and vice versa ONLY within background urls. - - Args: - line: A string in which to replace left with right and vice versa. - - Returns: - line with left and right swapped in the url string. For example: - line = FixLeftAndRightInUrl('background:url(right.png)') - line will now be 'background:url(left.png)'. - """ - - line = LEFT_IN_URL_RE.sub(TMP_TOKEN, line) - line = RIGHT_IN_URL_RE.sub(LEFT, line) - line = line.replace(TMP_TOKEN, RIGHT) - logging.debug('FixLeftAndRightInUrl returns: %s' % line) - return line - - -def FixLtrAndRtlInUrl(line): - """Replaces ltr with rtl and vice versa ONLY within background urls. - - Args: - line: A string in which to replace ltr with rtl and vice versa. - - Returns: - line with left and right swapped. For example: - line = FixLtrAndRtlInUrl('background:url(rtl.png)') - line will now be 'background:url(ltr.png)'. - """ - - line = LTR_IN_URL_RE.sub(TMP_TOKEN, line) - line = RTL_IN_URL_RE.sub(LTR, line) - line = line.replace(TMP_TOKEN, RTL) - logging.debug('FixLtrAndRtlInUrl returns: %s' % line) - return line - - -def FixCursorProperties(line): - """Fixes directional CSS cursor properties. - - Args: - line: A string to fix CSS cursor properties in. - - Returns: - line reformatted with the cursor properties substituted. For example: - line = FixCursorProperties('cursor: ne-resize') - line will now be 'cursor: nw-resize'. - """ - - line = CURSOR_EAST_RE.sub('\\1' + TMP_TOKEN, line) - line = CURSOR_WEST_RE.sub('\\1e-resize', line) - line = line.replace(TMP_TOKEN, 'w-resize') - logging.debug('FixCursorProperties returns: %s' % line) - return line - - -def FixFourPartNotation(line): - """Fixes the second and fourth positions in 4 part CSS notation. - - Args: - line: A string to fix 4 part CSS notation in. - - Returns: - line reformatted with the 4 part notations swapped. For example: - line = FixFourPartNotation('padding: 1px 2px 3px 4px') - line will now be 'padding: 1px 4px 3px 2px'. - """ - line = FOUR_NOTATION_QUANTITY_RE.sub('\\1 \\4 \\3 \\2', line) - line = FOUR_NOTATION_COLOR_RE.sub('\\1\\2 \\5 \\4 \\3', line) - logging.debug('FixFourPartNotation returns: %s' % line) - return line - - -def FixBackgroundPosition(line): - """Fixes horizontal background percentage values in line. - - Args: - line: A string to fix horizontal background position values in. - - Returns: - line reformatted with the 4 part notations swapped. - """ - line = BG_HORIZONTAL_PERCENTAGE_RE.sub(CalculateNewBackgroundPosition, line) - line = BG_HORIZONTAL_PERCENTAGE_X_RE.sub(CalculateNewBackgroundPositionX, - line) - logging.debug('FixBackgroundPosition returns: %s' % line) - return line - - -def CalculateNewBackgroundPosition(m): - """Fixes horizontal background-position percentages. - - This function should be used as an argument to re.sub since it needs to - perform replacement specific calculations. - - Args: - m: A match object. - - Returns: - A string with the horizontal background position percentage fixed. - BG_HORIZONTAL_PERCENTAGE_RE.sub(FixBackgroundPosition, - 'background-position: 75% 50%') - will return 'background-position: 25% 50%'. - """ - - # The flipped value is the offset from 100% - new_x = str(100-int(m.group(4))) - - # Since m.group(1) may very well be None type and we need a string.. - if m.group(1): - position_string = m.group(1) - else: - position_string = '' - - return 'background%s%s%s%s%%%s' % (position_string, m.group(2), m.group(3), - new_x, m.group(5)) - - -def CalculateNewBackgroundPositionX(m): - """Fixes percent based background-position-x. - - This function should be used as an argument to re.sub since it needs to - perform replacement specific calculations. - - Args: - m: A match object. - - Returns: - A string with the background-position-x percentage fixed. - BG_HORIZONTAL_PERCENTAGE_X_RE.sub(CalculateNewBackgroundPosition, - 'background-position-x: 75%') - will return 'background-position-x: 25%'. - """ - - # The flipped value is the offset from 100% - new_x = str(100-int(m.group(2))) - - return 'background-position-x%s%s%%' % (m.group(1), new_x) - - -def ChangeLeftToRightToLeft(lines, - swap_ltr_rtl_in_url=None, - swap_left_right_in_url=None): - """Turns lines into a stream and runs the fixing functions against it. - - Args: - lines: An list of CSS lines. - swap_ltr_rtl_in_url: Overrides this flag if param is set. - swap_left_right_in_url: Overrides this flag if param is set. - - Returns: - The same lines, but with left and right fixes. - """ - - global FLAGS - - # Possibly override flags with params. - logging.debug('ChangeLeftToRightToLeft swap_ltr_rtl_in_url=%s, ' - 'swap_left_right_in_url=%s' % (swap_ltr_rtl_in_url, - swap_left_right_in_url)) - if swap_ltr_rtl_in_url is None: - swap_ltr_rtl_in_url = FLAGS['swap_ltr_rtl_in_url'] - if swap_left_right_in_url is None: - swap_left_right_in_url = FLAGS['swap_left_right_in_url'] - - # Turns the array of lines into a single line stream. - logging.debug('LINES COUNT: %s' % len(lines)) - line = TOKEN_LINES.join(lines) - - # Tokenize any single line rules with the /* noflip */ annotation. - noflip_single_tokenizer = Tokenizer(NOFLIP_SINGLE_RE, 'NOFLIP_SINGLE') - line = noflip_single_tokenizer.Tokenize(line) - - # Tokenize any class rules with the /* noflip */ annotation. - noflip_class_tokenizer = Tokenizer(NOFLIP_CLASS_RE, 'NOFLIP_CLASS') - line = noflip_class_tokenizer.Tokenize(line) - - # Tokenize the comments so we can preserve them through the changes. - comment_tokenizer = Tokenizer(COMMENT_RE, 'C') - line = comment_tokenizer.Tokenize(line) - - # Here starteth the various left/right orientation fixes. - line = FixBodyDirectionLtrAndRtl(line) - - if swap_left_right_in_url: - line = FixLeftAndRightInUrl(line) - - if swap_ltr_rtl_in_url: - line = FixLtrAndRtlInUrl(line) - - line = FixLeftAndRight(line) - line = FixCursorProperties(line) - line = FixFourPartNotation(line) - line = FixBackgroundPosition(line) - - # DeTokenize the single line noflips. - line = noflip_single_tokenizer.DeTokenize(line) - - # DeTokenize the class-level noflips. - line = noflip_class_tokenizer.DeTokenize(line) - - # DeTokenize the comments. - line = comment_tokenizer.DeTokenize(line) - - # Rejoin the lines back together. - lines = line.split(TOKEN_LINES) - - return lines - -def usage(): - """Prints out usage information.""" - - print 'Usage:' - print ' ./cssjanus.py < file.css > file-rtl.css' - print 'Flags:' - print ' --swap_left_right_in_url: Fixes "left"/"right" string within urls.' - print ' Ex: ./cssjanus.py --swap_left_right_in_url < file.css > file_rtl.css' - print ' --swap_ltr_rtl_in_url: Fixes "ltr"/"rtl" string within urls.' - print ' Ex: ./cssjanus --swap_ltr_rtl_in_url < file.css > file_rtl.css' - -def setflags(opts): - """Parse the passed in command line arguments and set the FLAGS global. - - Args: - opts: getopt iterable intercepted from argv. - """ - - global FLAGS - - # Parse the arguments. - for opt, arg in opts: - logging.debug('opt: %s, arg: %s' % (opt, arg)) - if opt in ("-h", "--help"): - usage() - sys.exit() - elif opt in ("-d", "--debug"): - logging.getLogger().setLevel(logging.DEBUG) - elif opt == '--swap_ltr_rtl_in_url': - FLAGS['swap_ltr_rtl_in_url'] = True - elif opt == '--swap_left_right_in_url': - FLAGS['swap_left_right_in_url'] = True - - -def main(argv): - """Sends stdin lines to ChangeLeftToRightToLeft and writes to stdout.""" - - # Define the flags. - try: - opts, args = getopt.getopt(argv, 'hd', ['help', 'debug', - 'swap_left_right_in_url', - 'swap_ltr_rtl_in_url']) - except getopt.GetoptError: - usage() - sys.exit(2) - - # Parse and set the flags. - setflags(opts) - - # Call the main routine with all our functionality. - fixed_lines = ChangeLeftToRightToLeft(sys.stdin.readlines()) - sys.stdout.write(''.join(fixed_lines)) - -if __name__ == '__main__': - main(sys.argv[1:]) diff --git a/skins/vector/cssjanus/csslex.py b/skins/vector/cssjanus/csslex.py deleted file mode 100644 index 1fc7304e..00000000 --- a/skins/vector/cssjanus/csslex.py +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/python -# -# Copyright 2007 Google Inc. All Rights Reserved. - -"""CSS Lexical Grammar rules. - -CSS lexical grammar from http://www.w3.org/TR/CSS21/grammar.html -""" - -__author__ = ['elsigh@google.com (Lindsey Simon)', - 'msamuel@google.com (Mike Samuel)'] - -# public symbols -__all__ = [ "NEWLINE", "HEX", "NON_ASCII", "UNICODE", "ESCAPE", "NMSTART", "NMCHAR", "STRING1", "STRING2", "IDENT", "NAME", "HASH", "NUM", "STRING", "URL", "SPACE", "WHITESPACE", "COMMENT", "QUANTITY", "PUNC" ] - -# The comments below are mostly copied verbatim from the grammar. - -# "@import" {return IMPORT_SYM;} -# "@page" {return PAGE_SYM;} -# "@media" {return MEDIA_SYM;} -# "@charset" {return CHARSET_SYM;} -KEYWORD = r'(?:\@(?:import|page|media|charset))' - -# nl \n|\r\n|\r|\f ; a newline -NEWLINE = r'\n|\r\n|\r|\f' - -# h [0-9a-f] ; a hexadecimal digit -HEX = r'[0-9a-f]' - -# nonascii [\200-\377] -NON_ASCII = r'[\200-\377]' - -# unicode \\{h}{1,6}(\r\n|[ \t\r\n\f])? -UNICODE = r'(?:(?:\\' + HEX + r'{1,6})(?:\r\n|[ \t\r\n\f])?)' - -# escape {unicode}|\\[^\r\n\f0-9a-f] -ESCAPE = r'(?:' + UNICODE + r'|\\[^\r\n\f0-9a-f])' - -# nmstart [_a-z]|{nonascii}|{escape} -NMSTART = r'(?:[_a-z]|' + NON_ASCII + r'|' + ESCAPE + r')' - -# nmchar [_a-z0-9-]|{nonascii}|{escape} -NMCHAR = r'(?:[_a-z0-9-]|' + NON_ASCII + r'|' + ESCAPE + r')' - -# ident -?{nmstart}{nmchar}* -IDENT = r'-?' + NMSTART + NMCHAR + '*' - -# name {nmchar}+ -NAME = NMCHAR + r'+' - -# hash -HASH = r'#' + NAME - -# string1 \"([^\n\r\f\\"]|\\{nl}|{escape})*\" ; "string" -STRING1 = r'"(?:[^\"\\]|\\.)*"' - -# string2 \'([^\n\r\f\\']|\\{nl}|{escape})*\' ; 'string' -STRING2 = r"'(?:[^\'\\]|\\.)*'" - -# string {string1}|{string2} -STRING = '(?:' + STRING1 + r'|' + STRING2 + ')' - -# num [0-9]+|[0-9]*"."[0-9]+ -NUM = r'(?:[0-9]*\.[0-9]+|[0-9]+)' - -# s [ \t\r\n\f] -SPACE = r'[ \t\r\n\f]' - -# w {s}* -WHITESPACE = '(?:' + SPACE + r'*)' - -# url special chars -URL_SPECIAL_CHARS = r'[!#$%&*-~]' - -# url chars ({url_special_chars}|{nonascii}|{escape})* -URL_CHARS = r'(?:%s|%s|%s)*' % (URL_SPECIAL_CHARS, NON_ASCII, ESCAPE) - -# url -URL = r'url\(%s(%s|%s)%s\)' % (WHITESPACE, STRING, URL_CHARS, WHITESPACE) - -# comments -# see http://www.w3.org/TR/CSS21/grammar.html -COMMENT = r'/\*[^*]*\*+([^/*][^*]*\*+)*/' - -# {E}{M} {return EMS;} -# {E}{X} {return EXS;} -# {P}{X} {return LENGTH;} -# {C}{M} {return LENGTH;} -# {M}{M} {return LENGTH;} -# {I}{N} {return LENGTH;} -# {P}{T} {return LENGTH;} -# {P}{C} {return LENGTH;} -# {D}{E}{G} {return ANGLE;} -# {R}{A}{D} {return ANGLE;} -# {G}{R}{A}{D} {return ANGLE;} -# {M}{S} {return TIME;} -# {S} {return TIME;} -# {H}{Z} {return FREQ;} -# {K}{H}{Z} {return FREQ;} -# % {return PERCENTAGE;} -UNIT = r'(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)' - -# {num}{UNIT|IDENT} {return NUMBER;} -QUANTITY = '%s(?:%s%s|%s)?' % (NUM, WHITESPACE, UNIT, IDENT) - -# "<!--" {return CDO;} -# "-->" {return CDC;} -# "~=" {return INCLUDES;} -# "|=" {return DASHMATCH;} -# {w}"{" {return LBRACE;} -# {w}"+" {return PLUS;} -# {w}">" {return GREATER;} -# {w}"," {return COMMA;} -PUNC = r'<!--|-->|~=|\|=|[\{\+>,:;]' diff --git a/skins/vector/experiments/babaco-colors-a.css b/skins/vector/experiments/babaco-colors-a.css deleted file mode 100644 index ce6f67dd..00000000 --- a/skins/vector/experiments/babaco-colors-a.css +++ /dev/null @@ -1,109 +0,0 @@ -/* Babaco Color Scheme A */ - - -a:visited, -a:visited div.vectorTabs li.selected a:visited span { - color: #260e9c; -} - -html .thumbimage, -#toc, .toc, .mw-warning, div.thumbinner { - border-color: #cccccc; - background-color: #f7f7f7; -} - -/* Framework */ -#mw-page-base { - background-color: inherit !important; - background-image: none !important; -} -body { - background-color: #f9f9f9 !important; - background-image:url(images/page-base-updated.png); -} - -/* Links */ -a { - color: #0066cc; -} -a:visited { - color: #004d99; -} -a:active { - color: #ff6600; -} -a.stub { - color: #56228b; -} -a.new, #p-personal a.new { - color: #a31205 !important; -} -a.new:visited, #p-personal a.new:visited { - color: #a31205; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - border-color:#999999; - font-family:georgia, times, serif; - font-weight:bold; -} -#firstHeading { - font-size:1.5em; -} -h2 .editsection, -.portal h5{ - font-family:sans-serif; - font-weight:normal; - -} -#toc h2, .toc h2 { - font-family:sans-serif; - font-weight:normal; -} -body #mw-panel div.portal div.body { - background-image:url(images/new-portal-break-ltr.png); -} -body.rtl #mw-panel div.portal div.body { - background-image:url(images/new-portal-break-rtl.png); -} -body div.vectorTabs li a, div.vectorTabs li a span{ - color:#4d4d4d; -} -body div.vectorTabs li.selected a, -body div.vectorTabs li.selected a span, -body div.vectorTabs li.selected a:visited -body div.vectorTabs li.selected a:visited span { - color: #ff9900 !important; - font-weight:bold; -} -div.vectorTabs li.new a, -div.vectorTabs li.new a span, -div.vectorTabs li.new a:visited, -div.vectorTabs li.new a:visited span { - color:#a31205; -} -#toc, -.toc, -.mw-warning, -div.gallerybox div.thumb, -table.gallery, -#preferences fieldset.prefsection fieldset, -#preferences, -html .thumbimage, -.usermessage, -img.thumbborder, -div.thumbinner{ - border: 1px solid #cccccc; - background-color: #f7f7f7; -} -#mw-panel div.portal h5 { - font-weight:bold; - margin-bottom:0; - padding-bottom:0.05em; - color:#000000; -} diff --git a/skins/vector/experiments/babaco-colors-b.css b/skins/vector/experiments/babaco-colors-b.css deleted file mode 100644 index 227e197c..00000000 --- a/skins/vector/experiments/babaco-colors-b.css +++ /dev/null @@ -1,67 +0,0 @@ -/* Babaco Color Scheme A */ - - -html .thumbimage, -#toc, .toc, .mw-warning, div.thumbinner { - border-color: #cccccc; - background-color: #f7f7f7; -} - -/* Framework */ -#mw-page-base { - background-color: inherit !important; - background-image: none !important; -} -body { - background-color: #f9f9f9 !important; - background-image:url(images/page-base-updated.png); -} -/* Links */ -a { - color: #003cb3; -} -a.stub { - color: #772233; -} -a.new, #p-personal a.new { - color: #a31205 !important; -} -{ - color: #260e9c; -} -a:visited, -a:visited div.vectorTabs li.selected a:visited span, -a.new:visited, -#p-personal a.new:visited { - color: #260e9c; -} -h1, -h2, -h3, -h4, -h5, -h6 { - border-color:#999999; -} - -div.vectorTabs li.new a, -div.vectorTabs li.new a span, -div.vectorTabs li.new a:visited, -div.vectorTabs li.new a:visited span { - color:#a31205; -} - -#toc, -.toc, -.mw-warning, -div.gallerybox div.thumb, -table.gallery, -#preferences fieldset.prefsection fieldset, -#preferences, -html .thumbimage, -.usermessage, -img.thumbborder, -div.thumbinner{ - border: 1px solid #cccccc; - background-color: #f7f7f7; -} diff --git a/skins/vector/experiments/babaco-colors-c.css b/skins/vector/experiments/babaco-colors-c.css deleted file mode 100644 index d2dabf7d..00000000 --- a/skins/vector/experiments/babaco-colors-c.css +++ /dev/null @@ -1,91 +0,0 @@ -/* Babaco Color Scheme C */ - -/* ridding ourselves of the gradient */ -#mw-page-base { - background-color: inherit !important; - background-image: none !important; -} - -a:visited, -a:visited div.vectorTabs li.selected a:visited span { - color: #260e9c; -} - -html .thumbimage, -#toc, .toc, .mw-warning, div.thumbinner { - border-color: #cccccc; - background-color: #f7f7f7; -} - -/* Framework */ -body { - background-color: #f9f9f9 !important; - background-image:url(images/page-base-updated.png); -} - -/* Links */ -a { - color: #0066cc; -} -a:visited { - color: #004d99; -} -a:active { - color: #ff6600; -} -a.stub { - color: #56228b; -} -a.new, #p-personal a.new { - color: #a31205 !important; -} -a.new:visited, #p-personal a.new:visited { - color: #a31205; -} - -#firstHeading { - font-size:1.5em; -} -h2 .editsection, -.portal h5 { - font-weight:normal; -} -#toc h2, .toc h2 { - font-weight:normal; -} -body #mw-panel div.portal div.body { - background-image:url(images/new-portal-break-ltr.png); -} - -div.vectorTabs li.new a, -div.vectorTabs li.new a span, -div.vectorTabs li.new a:visited, -div.vectorTabs li.new a:visited span { - color:#a31205; -} -#toc, -.toc, -.mw-warning, -div.gallerybox div.thumb, -table.gallery, -#preferences fieldset.prefsection fieldset, -#preferences, -html .thumbimage, -.usermessage, -img.thumbborder, -div.thumbinner { - border: 1px solid #cccccc; - background-color: #f7f7f7; -} -#mw-panel div.portal h5 { - font-weight:bold; - margin-bottom:0; - padding-bottom:0.05em; - color:#000000; -} -div.vectorTabs li.selected a, -div.vectorTabs li.selected a span, -div.vectorTabs li.selected a:visited -div.vectorTabs li.selected a:visited span { - color: #333333 !important; -}
\ No newline at end of file diff --git a/skins/vector/experiments/images/new-border.png b/skins/vector/experiments/images/new-border.png Binary files differdeleted file mode 100644 index 735324ef..00000000 --- a/skins/vector/experiments/images/new-border.png +++ /dev/null diff --git a/skins/vector/experiments/images/new-portal-break-ltr.png b/skins/vector/experiments/images/new-portal-break-ltr.png Binary files differdeleted file mode 100644 index cd8f3b15..00000000 --- a/skins/vector/experiments/images/new-portal-break-ltr.png +++ /dev/null diff --git a/skins/vector/experiments/images/new-portal-break-rtl.png b/skins/vector/experiments/images/new-portal-break-rtl.png Binary files differdeleted file mode 100644 index 45c5b2f9..00000000 --- a/skins/vector/experiments/images/new-portal-break-rtl.png +++ /dev/null diff --git a/skins/vector/experiments/images/page-base-fade.png b/skins/vector/experiments/images/page-base-fade.png Binary files differdeleted file mode 100644 index dc631823..00000000 --- a/skins/vector/experiments/images/page-base-fade.png +++ /dev/null diff --git a/skins/vector/experiments/images/page-base-updated.png b/skins/vector/experiments/images/page-base-updated.png Binary files differdeleted file mode 100644 index 54ffeb00..00000000 --- a/skins/vector/experiments/images/page-base-updated.png +++ /dev/null diff --git a/skins/vector/experiments/images/tab-active-first.png b/skins/vector/experiments/images/tab-active-first.png Binary files differdeleted file mode 100644 index e4c39c42..00000000 --- a/skins/vector/experiments/images/tab-active-first.png +++ /dev/null diff --git a/skins/vector/experiments/images/tab-active-last.png b/skins/vector/experiments/images/tab-active-last.png Binary files differdeleted file mode 100644 index a96f3916..00000000 --- a/skins/vector/experiments/images/tab-active-last.png +++ /dev/null diff --git a/skins/vector/experiments/images/tab-fade.png b/skins/vector/experiments/images/tab-fade.png Binary files differdeleted file mode 100644 index 1eb0e23b..00000000 --- a/skins/vector/experiments/images/tab-fade.png +++ /dev/null diff --git a/skins/vector/experiments/images/tab-first.png b/skins/vector/experiments/images/tab-first.png Binary files differdeleted file mode 100644 index 439b713f..00000000 --- a/skins/vector/experiments/images/tab-first.png +++ /dev/null diff --git a/skins/vector/experiments/images/tab-last.png b/skins/vector/experiments/images/tab-last.png Binary files differdeleted file mode 100644 index 08e283dd..00000000 --- a/skins/vector/experiments/images/tab-last.png +++ /dev/null diff --git a/skins/vector/experiments/images/tab-new-fade.png b/skins/vector/experiments/images/tab-new-fade.png Binary files differdeleted file mode 100644 index 44925505..00000000 --- a/skins/vector/experiments/images/tab-new-fade.png +++ /dev/null diff --git a/skins/vector/experiments/new-tabs.css b/skins/vector/experiments/new-tabs.css deleted file mode 100644 index e3850e8e..00000000 --- a/skins/vector/experiments/new-tabs.css +++ /dev/null @@ -1,322 +0,0 @@ -/* new border color */ -#content { - background-image: url(images/new-border.png); -} - -#footer { - background-image: url(images/new-border.png); -} - body div#left-navigation, - body div#right-navigation { - top:3.2em; - } - body div#right-navigation { - margin-top:3.2em; - } - body #p-search form, - body #p-search input, - body #simpleSearch { - margin-top:0; - } - body div#p-cactions { - margin-top:0; - } - /* Namespaces and Views */ - /* @noflip */ - div.vectorTabs { - float: left; - } - body div.vectorTabs { - background-image: none; - padding-left: 0; - } - /* @noflip */ - div.vectorTabs ul { - float: left; - } - div.vectorTabs ul { - height: 100%; - list-style: none; - background-image:none; - margin: 0; - padding: 0; - } - /* @noflip */ - div.vectorTabs ul li { - float: left; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - body div.vectorTabs ul li { - line-height: 1em; - display: inline-block; - height: 2em; - margin: 0 1px 0 0; - padding: 0; - background:none; - overflow:hidden; - white-space:nowrap; - } - /* IGNORED BY IE6 */ - div.vectorTabs ul > li { - display: block; - } - body div.vectorTabs li.selected { - background-image: none; - border:none; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - body div.vectorTabs li a { - border-top:1px solid #cccccc; - border-left:1px solid #cccccc; - border-right:1px solid #cccccc; - display: inline-block; - height: 1.7em; - padding-left: 0.6em; - padding-right: 0.6em; - background-image:url(images/tab-fade.png); - background-position:bottom left; - background-repeat:repeat-x; - background-color:#ffffff; - } - body div.vectorTabs li.new a{ - background-image:url(images/tab-new-fade.png); - - } - div.vectorTabs li a, - div.vectorTabs li a span { - cursor: pointer; - } - div.vectorTabs li a span { - font-size: 0.8em; - } - /* IGNORED BY IE6 */ - div.vectorTabs li > a { - display: block; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - body div.vectorTabs a span { - display: inline-block; - padding-top: 0.5em; - } - /* IGNORED BY IE6 */ - /* @noflip */ - div.vectorTabs a > span { - float: left; - display: block; - } - body div.vectorTabs li.last { - background-image: url(images/tab-last.png); - background-repeat:no-repeat; - background-position:top right; - border:none; - } - body div.vectorTabs li.last a { - margin-right:7px; - padding-left:0.4em; - padding-right:0; - border-left:1px solid #cccccc; - border-top:1px solid #cccccc; - border-right:none; - background-image:url(images/tab-fade.png); - background-position:top left; - background-repeat:repeat-x; - } - body div.vectorTabs li.first { - background-image: url(images/tab-first.png); - background-repeat:no-repeat; - background-position:top left; - border:none; - } - body div.vectorTabs li.first a { - margin-left:7px; - padding-left:0em; - padding-right:0.4em; - border-right:1px solid #cccccc; - border-top:1px solid #cccccc; - background-image:url(images/tab-fade.png); - background-position:top left; - background-repeat:repeat-x; - } - - div.vectorTabs li.selected a, - div.vectorTabs li.selected a span, - div.vectorTabs li.selected a:visited - div.vectorTabs li.selected a:visited span { - color: #be5900 !important; - text-decoration: none; - } - - body div.vectorTabs li.selected a { - border-top:1px solid #6cc8f3; - border-right:1px solid #6cc8f3; - border-left:1px solid #6cc8f3; - background-color:#fff; - height:1.75em; - background-image:none; - } - body div.vectorTabs li.selected.first { - background-image: url(images/tab-active-first.png); - background-repeat:no-repeat; - background-position:top left; - } - body div.vectorTabs li.selected.first a { - margin-left:7px; - padding-right:0.6em; - padding-left:0.4em; - border-left:none; - } - body div.vectorTabs li.selected.last { - background-image: url(images/tab-active-last.png); - background-repeat:no-repeat; - background-position:top right; - } - body div.vectorTabs li.selected.last a { - margin-right:7px; - padding-left:0.6em; - padding-right:0.4em; - border-right:none; - } - - /* Variants and Actions */ - /* @noflip */ - div.vectorMenu { - background-image:url(images/tab-fade.png); - background-position:bottom left; - background-repeat:repeat-x; - border-top:1px solid #cccccc; - border-left:1px solid #cccccc; - border-right:1px solid #cccccc; - } - body.rtl div.vectorMenu { - direction: rtl; - } - /* @noflip */ - body #mw-head div.vectorMenu h5 { - background-image: url(../images/arrow-down-icon.png); - background-position: center center; - background-repeat: no-repeat; - padding-left: 0; - margin-left: 0px; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - body div.vectorMenu h5 a { - display: inline-block; - width: 24px; - height:1.5em; - background-image: none !important; - - } - /* IGNORED BY IE6 */ - div.vectorMenu h5 > a { - display: block; - } - div.vectorMenu div.menu { - position: relative; - left:1px; - display: none; - clear: both; - text-align: left; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - body.rtl div.vectorMenu div.menu { - margin-right: 24px; - } - /* IGNORED BY IE6 */ - body.rtl div.vectorMenu > div.menu { - margin-right: auto; - } - /* Fixes old versions of FireFox */ - body.rtl div.vectorMenu > div.menu, - x:-moz-any-link { - margin-right: 24px; - } - div.vectorMenu:hover div.menu { - display: block; - } - div.vectorMenu ul { - position: absolute; - background-color: white; - border: solid 1px silver; - border-top-width: 0; - list-style: none; - list-style-image: none; - list-style-type: none; - padding: 0; - margin: 0; - margin-left: -1px; - text-align: left; - } - /* Fixes old versions of FireFox */ - div.vectorMenu ul, - x:-moz-any-link { - min-width: 5em; - } - /* Returns things back to normal in modern versions of FireFox */ - div.vectorMenu ul, - x:-moz-any-link, - x:default { - min-width: 0; - } - div.vectorMenu li { - padding: 0; - margin: 0; - text-align: left; - line-height: 1em; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - div.vectorMenu li a { - display: inline-block; - padding: 0.5em; - white-space: nowrap; - } - /* IGNORED BY IE6 */ - div.vectorMenu li > a { - display: block; - } - div.vectorMenu li a { - color: #0645ad; - cursor: pointer; - font-size: 0.8em; - } - div.vectorMenu li.selected a, - div.vectorMenu li.selected a:visited { - color: #333333; - text-decoration: none; - } -#ca-unwatch.icon, -#ca-watch.icon { - background-color:#ffffff; - height:1.75em !important; - background-image:url(images/tab-fade.png); - background-position:bottom left; - background-repeat:repeat-x; -} -#ca-unwatch.icon a, -#ca-watch.icon a { - height: 1.7em !important; - border-bottom:none; - background-color:transparent; -} -#ca-watch.icon a, -#ca-unwatch.icon a { - background-repeat:no-repeat; -} -.wikiEditor-ui-tabs { - border: none; - height: 2.15em; -} -.wikiEditor-ui-buttons { - height: 2.15em; -} -.wikiEditor-ui-tabs div { - border: 1px solid silver; - margin-right: 1px; - height: 2.15em; -} -.wikiEditor-ui-tabs div a { - line-height: 2.15em; - background: #FFFFFF url(images/tab-fade.png) repeat-x 0 100%; -} -.wikiEditor-ui-tabs div.current a { - background: #FFFFFF; -} diff --git a/skins/vector/images/arrow-down-icon.png b/skins/vector/images/arrow-down-icon.png Binary files differindex bf2d4fb4..437b9518 100644 --- a/skins/vector/images/arrow-down-icon.png +++ b/skins/vector/images/arrow-down-icon.png diff --git a/skins/vector/images/audio-icon.png b/skins/vector/images/audio-icon.png Binary files differindex 0f59a2bb..ffd0b1c2 100644 --- a/skins/vector/images/audio-icon.png +++ b/skins/vector/images/audio-icon.png diff --git a/skins/vector/images/border.png b/skins/vector/images/border.png Binary files differindex 54b47922..6e3330ff 100644 --- a/skins/vector/images/border.png +++ b/skins/vector/images/border.png diff --git a/skins/vector/images/bullet-icon.png b/skins/vector/images/bullet-icon.png Binary files differindex e304b267..c4c44382 100644 --- a/skins/vector/images/bullet-icon.png +++ b/skins/vector/images/bullet-icon.png diff --git a/skins/vector/images/document-icon.png b/skins/vector/images/document-icon.png Binary files differindex 91dc16f6..7b68120a 100644 --- a/skins/vector/images/document-icon.png +++ b/skins/vector/images/document-icon.png diff --git a/skins/vector/images/edit-icon.png b/skins/vector/images/edit-icon.png Binary files differindex 4a962767..92153e8e 100644 --- a/skins/vector/images/edit-icon.png +++ b/skins/vector/images/edit-icon.png diff --git a/skins/vector/images/external-link-ltr-icon.png b/skins/vector/images/external-link-ltr-icon.png Binary files differindex 4b710b03..fe642b5c 100644 --- a/skins/vector/images/external-link-ltr-icon.png +++ b/skins/vector/images/external-link-ltr-icon.png diff --git a/skins/vector/images/external-link-rtl-icon.png b/skins/vector/images/external-link-rtl-icon.png Binary files differindex 17df03a3..01e0d798 100644 --- a/skins/vector/images/external-link-rtl-icon.png +++ b/skins/vector/images/external-link-rtl-icon.png diff --git a/skins/vector/images/file-icon.png b/skins/vector/images/file-icon.png Binary files differindex 1261f00c..8a4baf2c 100644 --- a/skins/vector/images/file-icon.png +++ b/skins/vector/images/file-icon.png diff --git a/skins/vector/images/link-icon.png b/skins/vector/images/link-icon.png Binary files differindex fc77e81d..469fd2b4 100644 --- a/skins/vector/images/link-icon.png +++ b/skins/vector/images/link-icon.png diff --git a/skins/vector/images/lock-icon.png b/skins/vector/images/lock-icon.png Binary files differindex 9e63807a..46b72f52 100644 --- a/skins/vector/images/lock-icon.png +++ b/skins/vector/images/lock-icon.png diff --git a/skins/vector/images/mail-icon.png b/skins/vector/images/mail-icon.png Binary files differindex 50de0781..a8ad2fd7 100644 --- a/skins/vector/images/mail-icon.png +++ b/skins/vector/images/mail-icon.png diff --git a/skins/vector/images/news-icon.png b/skins/vector/images/news-icon.png Binary files differindex 8ab49957..bb03a892 100644 --- a/skins/vector/images/news-icon.png +++ b/skins/vector/images/news-icon.png diff --git a/skins/vector/images/page-base.png b/skins/vector/images/page-base.png Binary files differindex 17d02a74..be760917 100644 --- a/skins/vector/images/page-base.png +++ b/skins/vector/images/page-base.png diff --git a/skins/vector/images/page-fade.png b/skins/vector/images/page-fade.png Binary files differindex 815a0486..2b08cfe2 100644 --- a/skins/vector/images/page-fade.png +++ b/skins/vector/images/page-fade.png diff --git a/skins/vector/images/portal-break-ltr.png b/skins/vector/images/portal-break-ltr.png Binary files differindex c1823705..76ca4915 100644 --- a/skins/vector/images/portal-break-ltr.png +++ b/skins/vector/images/portal-break-ltr.png diff --git a/skins/vector/images/portal-break-rtl.png b/skins/vector/images/portal-break-rtl.png Binary files differindex a45144c0..773792aa 100644 --- a/skins/vector/images/portal-break-rtl.png +++ b/skins/vector/images/portal-break-rtl.png diff --git a/skins/vector/images/portal-break.png b/skins/vector/images/portal-break.png Binary files differindex e81b5597..5feaa459 100644 --- a/skins/vector/images/portal-break.png +++ b/skins/vector/images/portal-break.png diff --git a/skins/vector/images/preferences-base.png b/skins/vector/images/preferences-base.png Binary files differindex adfd70d7..947895f1 100644 --- a/skins/vector/images/preferences-base.png +++ b/skins/vector/images/preferences-base.png diff --git a/skins/vector/images/preferences-edge.png b/skins/vector/images/preferences-edge.png Binary files differindex 3da0d099..e6a9a480 100644 --- a/skins/vector/images/preferences-edge.png +++ b/skins/vector/images/preferences-edge.png diff --git a/skins/vector/images/preferences-fade.png b/skins/vector/images/preferences-fade.png Binary files differindex b4773c5c..3aa30bb9 100644 --- a/skins/vector/images/preferences-fade.png +++ b/skins/vector/images/preferences-fade.png diff --git a/skins/vector/images/search-fade.png b/skins/vector/images/search-fade.png Binary files differindex 53461d6d..e96f6678 100644 --- a/skins/vector/images/search-fade.png +++ b/skins/vector/images/search-fade.png diff --git a/skins/vector/images/tab-break.png b/skins/vector/images/tab-break.png Binary files differindex 81155562..95be27b5 100644 --- a/skins/vector/images/tab-break.png +++ b/skins/vector/images/tab-break.png diff --git a/skins/vector/images/tab-current-fade.png b/skins/vector/images/tab-current-fade.png Binary files differindex c6238d26..fb3a2cb6 100644 --- a/skins/vector/images/tab-current-fade.png +++ b/skins/vector/images/tab-current-fade.png diff --git a/skins/vector/images/tab-normal-fade.png b/skins/vector/images/tab-normal-fade.png Binary files differindex 4a5e3e4a..fcee0dfb 100644 --- a/skins/vector/images/tab-normal-fade.png +++ b/skins/vector/images/tab-normal-fade.png diff --git a/skins/vector/images/talk-icon.png b/skins/vector/images/talk-icon.png Binary files differindex 0b80ee91..12862a09 100644 --- a/skins/vector/images/talk-icon.png +++ b/skins/vector/images/talk-icon.png diff --git a/skins/vector/images/user-icon.png b/skins/vector/images/user-icon.png Binary files differindex ac3d59d5..2fbfe4e5 100644 --- a/skins/vector/images/user-icon.png +++ b/skins/vector/images/user-icon.png diff --git a/skins/vector/images/video-icon.png b/skins/vector/images/video-icon.png Binary files differindex 5e7f4af7..06bc9b64 100644 --- a/skins/vector/images/video-icon.png +++ b/skins/vector/images/video-icon.png diff --git a/skins/vector/images/watch-icons.png b/skins/vector/images/watch-icons.png Binary files differindex 54b2c793..a2871626 100644 --- a/skins/vector/images/watch-icons.png +++ b/skins/vector/images/watch-icons.png diff --git a/skins/vector/main-rtl.css b/skins/vector/main-rtl.css deleted file mode 100644 index 5387289f..00000000 --- a/skins/vector/main-rtl.css +++ /dev/null @@ -1,1128 +0,0 @@ -/* - * main-rtl.css is automatically generated using CSSJanus, a python script for - * creating RTL versions of otherwise LTR stylesheets. - * - * You may download the tool to rebuild this stylesheet - * http://code.google.com/p/cssjanus/ - * - * An online version of this tool can be used at: - * http://cssjanus.commoner.com/ - * - * The following command is used to generate the RTL version of this file - * ./cssjanus.py --swap_ltr_rtl_in_url < main-ltr.css > main-rtl.css - * - * Any rules which should not be flipped should be prepended with @noflip in - * a comment block. - */ -/* Framework */ -html, -body { - height: 100%; - margin: 0; - padding: 0; - font-family: sans-serif; - font-size: 1em; -} -body { - background-color: #f3f3f3; - background-image: url(images/page-base.png); -} -/* Content */ -#content { - margin-right: 10em; - padding: 1em; - background-image: url(images/border.png); - background-position: top right; - background-repeat: repeat-y; - background-color: white; -} -/* Head */ -#mw-page-base { - height: 5em; - background-color: white; - background-image: url(images/page-fade.png); - background-position: bottom right; - background-repeat: repeat-x; -} -#mw-head-base { - margin-top: -5em; - margin-right: 10em; - height: 5em; - background-image: url(images/border.png); - background-position: bottom right; - background-repeat: repeat-x; -} -#mw-head { - position: absolute; - top: 0; - left: 0; - width: 100%; -} -#mw-head h5 { - margin: 0; - padding: 0; -} - /* Hide empty portlets */ - div.emptyPortlet { - display: none; - } - /* Personal */ - #p-personal { - position: absolute; - top: 0; - margin-right: 10em; - left: 0.75em; - } - #p-personal h5 { - display: none; - } - #p-personal ul { - list-style: none; - margin: 0; - padding: 0; - } - /* @noflip */ - #p-personal li { - line-height: 1.125em; - float: left; - } - #p-personal li { - margin-right: 0.75em; - margin-top: 0.5em; - font-size: 0.75em; - } - /* Navigation Containers */ - #left-navigation { - position: absolute; - right: 10em; - top: 2.5em; - } - #right-navigation { - float: left; - margin-top: 2.5em; - } - /* Navigation Labels */ - div.vectorTabs h5, - div.vectorMenu h5 span { - display: none; - } - /* Namespaces and Views */ - /* @noflip */ - div.vectorTabs { - float: left; - } - div.vectorTabs { - background-image: url(images/tab-break.png); - background-position: bottom right; - background-repeat: no-repeat; - padding-right: 1px; - } - /* @noflip */ - div.vectorTabs ul { - float: left; - } - div.vectorTabs ul { - height: 100%; - list-style: none; - margin: 0; - padding: 0; - } - /* @noflip */ - div.vectorTabs ul li { - float: left; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - div.vectorTabs ul li { - line-height: 1.125em; - display: inline-block; - height: 100%; - margin: 0; - padding: 0; - background-color: #f3f3f3; - background-image: url(images/tab-normal-fade.png); - background-position: bottom right; - background-repeat: repeat-x; - white-space:nowrap; - } - /* IGNORED BY IE6 */ - div.vectorTabs ul > li { - display: block; - } - div.vectorTabs li.selected { - background-image: url(images/tab-current-fade.png); - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - div.vectorTabs li a { - display: inline-block; - height: 2.5em; - padding-right: 0.4em; - padding-left: 0.4em; - background-image: url(images/tab-break.png); - background-position: bottom left; - background-repeat: no-repeat; - } - div.vectorTabs li a, - div.vectorTabs li a span { - color: #0645ad; - cursor: pointer; - } - div.vectorTabs li a span { - font-size: 0.8em; - } - /* IGNORED BY IE6 */ - div.vectorTabs li > a { - display: block; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - div.vectorTabs a span { - display: inline-block; - padding-top: 1.25em; - } - /* IGNORED BY IE6 */ - /* @noflip */ - div.vectorTabs a > span { - float: left; - display: block; - } - div.vectorTabs li.selected a, - div.vectorTabs li.selected a span, - div.vectorTabs li.selected a:visited - div.vectorTabs li.selected a:visited span { - color: #333333; - text-decoration: none; - } - div.vectorTabs li.new a, - div.vectorTabs li.new a span, - div.vectorTabs li.new a:visited, - div.vectorTabs li.new a:visited span { - color: #a55858; - } - /* Variants and Actions */ - /* @noflip */ - div.vectorMenu { - direction: ltr; - float: left; - background-image: url(images/arrow-down-icon.png); - background-position: center center; - background-repeat: no-repeat; - } - /* @noflip */ - body.rtl div.vectorMenu { - direction: rtl; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - /* @noflip */ - #mw-head div.vectorMenu h5 { - float: left; - background-image: url(images/tab-break.png); - background-repeat: no-repeat; - } - /* IGNORED BY IE6 */ - #mw-head div.vectorMenu > h5 { - background-image: none; - } - #mw-head div.vectorMenu h5 { - background-position: bottom right; - margin-right: -1px; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - /* @noflip */ - div.vectorMenu h5 a { - display: inline-block; - width: 24px; - height: 2.5em; - text-decoration: none; - background-image: url(images/tab-break.png); - background-repeat: no-repeat; - } - div.vectorMenu h5 a{ - background-position: bottom left; - } - /* IGNORED BY IE6 */ - div.vectorMenu h5 > a { - display: block; - } - div.vectorMenu div.menu { - position: relative; - display: none; - clear: both; - text-align: right; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - /* @noflip */ - body.rtl div.vectorMenu div.menu { - margin-left: 24px; - } - /* IGNORED BY IE6 */ - /* @noflip */ - body.rtl div.vectorMenu > div.menu { - margin-left: auto; - } - /* Fixes old versions of FireFox */ - /* @noflip */ - body.rtl div.vectorMenu > div.menu, - x:-moz-any-link { - margin-left: 23px; - } - div.vectorMenu:hover div.menu { - display: block; - } - div.vectorMenu ul { - position: absolute; - background-color: white; - border: solid 1px silver; - border-top-width: 0; - list-style: none; - list-style-image: none; - list-style-type: none; - padding: 0; - margin: 0; - margin-right: -1px; - text-align: right; - } - /* Fixes old versions of FireFox */ - div.vectorMenu ul, - x:-moz-any-link { - min-width: 5em; - } - /* Returns things back to normal in modern versions of FireFox */ - div.vectorMenu ul, - x:-moz-any-link, - x:default { - min-width: 0; - } - div.vectorMenu li { - padding: 0; - margin: 0; - text-align: right; - line-height: 1em; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - div.vectorMenu li a { - display: inline-block; - padding: 0.5em; - white-space: nowrap; - } - /* IGNORED BY IE6 */ - div.vectorMenu li > a { - display: block; - } - div.vectorMenu li a { - color: #0645ad; - cursor: pointer; - font-size: 0.8em; - } - div.vectorMenu li.selected a, - div.vectorMenu li.selected a:visited { - color: #333333; - text-decoration: none; - } - /* Search */ - #p-search h5 { - display: none; - } - /* @noflip */ - #p-search { - float: left; - } - #p-search { - margin-left: 0.5em; - margin-right: 0.5em; - } - #p-search form, - #p-search input { - margin: 0; - margin-top: 0.4em; - } - #simpleSearch { - margin-top: 0.5em; - position: relative; - border: solid 1px #AAAAAA; - background-color: white; - background-image: url(images/search-fade.png); - background-position: top right; - background-repeat: repeat-x; - } - #simpleSearch label { - font-size: 0.8em; - top: 0.25em; - } - #simpleSearch input#searchInput { - margin: 0; - border-width: 0; - padding: 0.25em; - line-height: 1em; - font-size: 0.8em; - width: 9em; - background-color: transparent; - } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - #simpleSearch button#searchButton { - margin: 0; - padding: 0; - width: 1.75em; - height: 1.5em; - border: none; - cursor: pointer; - background-color: transparent; - background-image: url(images/search-rtl.png); - background-position: center center; - background-repeat: no-repeat; - } - /* IGNORED BY IE6 */ - #simpleSearch > button#searchButton { - height: 100%; - } - .suggestions-special .special-label { - font-size: 0.8em; - color: gray; - } - .suggestions-special .special-query { - color: black; - font-style: italic; - } - .suggestions-special .special-hover { - background-color: silver; - } -/* Panel */ -#mw-panel { - position: absolute; - top: 160px; - padding-top: 1em; - width: 10em; - right: 0; -} - #mw-panel div.portal { - padding-bottom: 1.5em; - } - #mw-panel div.portal h5 { - font-weight: normal; - color: #444444; - padding: 0.25em; - padding-top: 0; - padding-right: 1.75em; - cursor: default; - border: none; - font-size: 0.75em; - } - #mw-panel div.portal div.body { - margin: 0; - padding-top: 0.5em; - margin-right: 1.25em; - background-image: url(images/portal-break.png); - background-repeat: no-repeat; - background-position: top right; - } - #mw-panel div.portal div.body ul { - list-style: none; - list-style-image: none; - list-style-type: none; - padding: 0; - margin: 0; - } - #mw-panel div.portal div.body ul li { - line-height: 1.125em; - padding: 0; - padding-bottom: 0.5em; - margin: 0; - overflow: hidden; - font-size: 0.75em; - } - #mw-panel div.portal div.body ul li a { - color: #0645ad; - } - #mw-panel div.portal div.body ul li a:visited { - color: #0b0080; - } -/* Footer */ -#footer { - margin-right: 10em; - margin-top: 0; - padding: 0.75em; - background-image: url(images/border.png); - background-position: top right; - background-repeat: repeat-x; -} -#footer ul { - list-style: none; - list-style-image: none; - list-style-type: none; - margin: 0; - padding: 0; -} -#footer ul li { - margin: 0; - padding: 0; - padding-top: 0.5em; - padding-bottom: 0.5em; - color: #333333; - font-size: 0.7em; -} -#footer #footer-icons { - float: left; -} -/* @noflip */ -body.ltr #footer #footer-places { - float: left; -} -#footer #footer-info li { - line-height: 1.4em; -} -#footer #footer-icons li { - float: right; - margin-right: 0.5em; - line-height: 2em; -} -#footer #footer-places li { - float: right; - margin-left: 1em; - line-height: 2em; -} -/* Logo */ -#p-logo { - position: absolute; - top: -160px; - right: 0; - width: 10em; - height: 160px; -} -#p-logo a { - display: block; - width: 10em; - height: 160px; - background-repeat: no-repeat; - background-position: center center; - text-decoration: none; -} - -/* - * - * 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. - */ - -/* Preferences */ -#preftoc { - /* Tabs */ - width: 100%; - float: right; - clear: both; - margin: 0 !important; - padding: 0 !important; - background-image: url(images/preferences-break.png); - background-position: bottom right; - background-repeat: no-repeat; -} - #preftoc li { - /* Tab */ - float: right; - margin: 0; - padding: 0; - padding-left: 1px; - height: 2.25em; - white-space: nowrap; - list-style-type: none; - list-style-image: none; - background-image: url(images/preferences-break.png); - background-position: bottom left; - background-repeat: no-repeat; - } - /* IGNORED BY IE6 */ - #preftoc li:first-child { - margin-right: 1px; - } - #preftoc a, - #preftoc a:active { - display: inline-block; - position: relative; - color: #0645ad; - padding: 0.5em; - text-decoration: none; - background-image: none; - font-size: 0.9em; - } - #preftoc a:hover { - text-decoration: underline; - } - #preftoc li.selected a { - background-image: url(images/preferences-fade.png); - background-position: bottom; - background-repeat: repeat-x; - color: #333333; - text-decoration: none; - } -#preferences { - float: right; - width: 100%; - margin: 0; - margin-top: -2px; - clear: both; - border: solid 1px #cccccc; - background-color: #f9f9f9; - background-image: url(images/preferences-base.png); -} -#preferences fieldset.prefsection { - border: none; - padding: 0; - margin: 1em; -} -#preferences fieldset.prefsection fieldset { - border: none; - border-top: solid 1px #cccccc; -} -#preferences legend { - color: #666666; -} -#preferences fieldset.prefsection legend.mainLegend { - display: none; -} -#preferences td { - padding-right: 0.5em; - padding-left: 0.5em; -} -#preferences td.htmlform-tip { - font-size: x-small; - padding: .2em 2em; - color: #666666; -} -#preferences div.mw-prefs-buttons { - padding: 1em; -} -#preferences div.mw-prefs-buttons input { - margin-left: 0.25em; -} - -/* - * Styles for the user login and create account forms - */ -#userlogin, #userloginForm { - border: solid 1px #cccccc; - padding: 1.2em; - margin: .5em; - float: right; -} - -#userlogin { - min-width: 20em; - max-width: 90%; - width: 40em; -} - -/* - * - * The following code is slightly modified from monobook - * - */ -#content { - line-height: 1.5em; -} -#bodyContent { - font-size: 0.8em; -} -/* Links */ -a { - text-decoration: none; - color: #0645ad; - background: none; -} -a:visited { - color: #0b0080; -} -a:active { - color: #faa700; -} -a:hover { - text-decoration: underline; -} -a.stub { - color: #772233; -} -a.new, #p-personal a.new { - color: #ba0000; -} -a.new:visited, #p-personal a.new:visited { - color: #a55858; -} - -/* Inline Elements */ -img { - border: none; - vertical-align: middle; -} -hr { - height: 1px; - color: #aaa; - background-color: #aaa; - border: 0; - margin: .2em 0 .2em 0; -} - -/* Structural Elements */ -h1, -h2, -h3, -h4, -h5, -h6 { - color: black; - background: none; - font-weight: normal; - margin: 0; - padding-top: .5em; - padding-bottom: .17em; - border-bottom: 1px solid #aaa; - width: auto; -} -h1 { font-size: 188%; } -h1 .editsection { font-size: 53%; } -h2 { font-size: 150%; } -h2 .editsection { font-size: 67%; } -h3, -h4, -h5, -h6 { - border-bottom: none; - font-weight: bold; -} -h3 { font-size: 132%; } -h3 .editsection { font-size: 76%; font-weight: normal; } -h4 { font-size: 116%; } -h4 .editsection { font-size: 86%; font-weight: normal; } -h5 { font-size: 100%; } -h5 .editsection { font-weight: normal; } -h6 { font-size: 80%; } -h6 .editsection { font-size: 125%; font-weight: normal; } -p { - margin: .4em 0 .5em 0; - line-height: 1.5em; -} - p img { - margin: 0; - } -abbr, -acronym, -.explain { - border-bottom: 1px dotted black; - color: black; - background: none; - cursor: help; -} -q { - font-family: Times, "Times New Roman", serif; - font-style: italic; -} -/* Disabled for now -blockquote { - font-family: Times, "Times New Roman", serif; - font-style: italic; -}*/ -code { - background-color: #f9f9f9; -} -pre { - padding: 1em; - border: 1px dashed #2f6fab; - color: black; - background-color: #f9f9f9; - line-height: 1.1em; -} -ul { - line-height: 1.5em; - list-style-type: square; - margin: .3em 1.5em 0 0; - padding: 0; - list-style-image: url(images/bullet-icon.png); -} -ol { - line-height: 1.5em; - margin: .3em 3.2em 0 0; - padding: 0; - list-style-image: none; -} -li { - margin-bottom: .1em; -} -dt { - font-weight: bold; - margin-bottom: .1em; -} -dl { - margin-top: .2em; - margin-bottom: .5em; -} -dd { - line-height: 1.5em; - margin-right: 2em; - margin-bottom: .1em; -} -/* Tables */ -table { - font-size: 100%; - color: black; - /* we don't want the bottom borders of <h2>s to be visible through - * floated tables */ - background-color: white; -} -fieldset table { - /* but keep table layouts in forms clean... */ - background: none; -} -/* Forms */ -fieldset { - border: 1px solid #2f6fab; - margin: 1em 0 1em 0; - padding: 0 1em 1em; - line-height: 1.5em; -} - fieldset.nested { - margin: 0 0 0.5em 0; - padding: 0 0.5em 0.5em; - } -legend { - padding: .5em; - font-size: 95%; -} -form { - border: none; - margin: 0; -} -textarea { - width: 100%; - padding: .1em; -} -select { - vertical-align: top; -} -/* Table of Contents */ -#toc, -.toc, -.mw-warning { - border: 1px solid #aaa; - background-color: #f9f9f9; - padding: 5px; - font-size: 95%; -} -#toc h2, -.toc h2 { - display: inline; - border: none; - padding: 0; - font-size: 100%; - font-weight: bold; -} -#toc #toctitle, -.toc #toctitle, -#toc .toctitle, -.toc .toctitle { - text-align: center; -} -#toc ul, -.toc ul { - list-style-type: none; - list-style-image: none; - margin-right: 0; - padding-right: 0; - text-align: right; -} -#toc ul ul, -.toc ul ul { - margin: 0 2em 0 0; -} -#toc .toctoggle, -.toc .toctoggle { - font-size: 94%; -} -/* Images */ -div.floatright, table.floatright { - clear: left; - float: left; - position: relative; - margin: 0 .5em .5em 0; - border: 0; -} -div.floatright p { font-style: italic; } -div.floatleft, table.floatleft { - float: right; - clear: right; - position: relative; - margin: 0 0 .5em .5em; - border: 0; -} -div.floatleft p { font-style: italic; } -/* Thumbnails */ -div.thumb { - margin-bottom: .5em; - border-style: solid; - border-color: white; - width: auto; - background-color: transparent; -} -div.thumbinner { - border: 1px solid #ccc; - padding: 3px !important; - background-color: #f9f9f9; - font-size: 94%; - text-align: center; - overflow: hidden; -} -html .thumbimage { - border: 1px solid #ccc; -} -html .thumbcaption { - border: none; - text-align: right; - line-height: 1.4em; - padding: 3px !important; - font-size: 94%; -} -div.magnify { - float: left; - border: none !important; - background: none !important; -} -div.magnify a, div.magnify img { - display: block; - border: none !important; - background: none !important; -} -div.tright { - clear: left; - float: left; - border-width: .5em 1.4em .8em 0; -} -div.tleft { - float: right; - clear: right; - margin-left: .5em; - border-width: .5em 0 .8em 1.4em; -} -img.thumbborder { - border: 1px solid #dddddd; -} -.hiddenStructure { - display: none; -} -/* Warning */ -.mw-warning { - margin-right: 50px; - margin-left: 50px; - text-align: center; -} -/* User Message */ -.usermessage { - background-color: #ffce7b; - border: 1px solid #ffa500; - color: black; - font-weight: bold; - margin: 2em 0 1em; - padding: .5em 1em; - vertical-align: middle; -} -/* Site Notice */ -#siteNotice { - text-align: center; - font-size: 0.8em; - margin: 0; -} - #siteNotice div, - #siteNotice p { - margin: 0; - padding: 0; - margin-bottom: 0.9em; - } -/* Categories */ -.catlinks { - border: 1px solid #aaa; - background-color: #f9f9f9; - padding: 5px; - margin-top: 1em; - clear: both; -} -/* Sub-navigation */ -#siteSub { - display: none; -} -#jump-to-nav { - display: none; -} -#contentSub, #contentSub2 { - font-size: 84%; - line-height: 1.2em; - margin: 0 1em 1.4em 0; - color: #7d7d7d; - width: auto; -} -span.subpages { - display: block; -} -/* Emulate Center */ -.center { - width: 100%; - text-align: center; -} -*.center * { - margin-right: auto; - margin-left: auto; -} -/* Small for tables and similar */ -.small, .small * { - font-size: 94%; -} -table.small { - font-size: 100%; -} -/* Edge Cases for Content */ -h1, h2 { - margin-bottom: .6em; -} -h3, h4, h5 { - margin-bottom: .3em; -} -#firstHeading { - padding-top: 0; - margin-top: 0; - padding-top: 0; - margin-bottom: 0.1em; - line-height: 1.2em; - font-size: 1.6em; - padding-bottom: 0; -} -#content a.external, -#content a[href ^="gopher://"] { - background: url(images/external-link-rtl-icon.png) center left no-repeat; - padding: 0 0 0 13px; -} -#content a[href ^="https://"], -.link-https { - background: url(images/lock-icon.png) center left no-repeat; - padding: 0 0 0 18px; -} -#content a[href ^="mailto:"], -.link-mailto { - background: url(images/mail-icon.png) center left no-repeat; - padding: 0 0 0 18px; -} -#content a[href ^="news://"] { - background: url(images/news-icon.png) center left no-repeat; - padding: 0 0 0 18px; -} -#content a[href ^="ftp://"], -.link-ftp { - background: url(images/file-icon.png) center left no-repeat; - padding: 0 0 0 18px; -} -#content a[href ^="irc://"], -#content a.extiw[href ^="irc://"], -.link-irc { - background: url(images/talk-icon.png) center left no-repeat; - padding: 0 0 0 18px; -} -#content a.external[href $=".ogg"], #content a.external[href $=".OGG"], -#content a.external[href $=".mid"], #content a.external[href $=".MID"], -#content a.external[href $=".midi"], #content a.external[href $=".MIDI"], -#content a.external[href $=".mp3"], #content a.external[href $=".MP3"], -#content a.external[href $=".wav"], #content a.external[href $=".WAV"], -#content a.external[href $=".wma"], #content a.external[href $=".WMA"], -.link-audio { - background: url("images/audio-icon.png") center left no-repeat; - padding: 0 0 0 18px; -} -#content a.external[href $=".ogm"], #content a.external[href $=".OGM"], -#content a.external[href $=".avi"], #content a.external[href $=".AVI"], -#content a.external[href $=".mpeg"], #content a.external[href $=".MPEG"], -#content a.external[href $=".mpg"], #content a.external[href $=".MPG"], -.link-video { - background: url("images/video-icon.png") center left no-repeat; - padding: 0 0 0 18px; -} -#content a.external[href $=".pdf"], #content a.external[href $=".PDF"], -#content a.external[href *=".pdf#"], #content a.external[href *=".PDF#"], -#content a.external[href *=".pdf?"], #content a.external[href *=".PDF?"], -.link-document { - background: url("images/document-icon.png") center left no-repeat; - padding: 0 0 0 18px; -} -/* Interwiki Styling (Disabled) */ -#content a.extiw, -#content a.extiw:active { - color: #36b; - background: none; - padding: 0; -} -#content a.external { - color: #36b; -} -#content .printfooter { - display: none; -} -/* Icon for Usernames */ -#pt-userpage, -#pt-anonuserpage, -#pt-login { - background: url(images/user-icon.png) right top no-repeat; - padding-right: 15px !important; - text-transform: none; -} - -.toccolours { - border: 1px solid #aaa; - background-color: #f9f9f9; - padding: 5px; - font-size: 95%; -} -#bodyContent { - position: relative; - width: 100%; -} -#mw-js-message { - font-size: 0.8em; -} -div#bodyContent { - line-height: 1.5em; -} - -/* Watch/Unwatch Icon Styling */ -#ca-unwatch.icon, -#ca-watch.icon { - margin-left:1px; -} -#ca-unwatch.icon a, -#ca-watch.icon a { - margin: 0; - padding: 0; - outline: none; - display: block; - width: 26px; - height: 2.5em; -} -#ca-unwatch.icon a { - background-image: url(images/watch-icons.png); - background-position: -43px 60%; -} -#ca-watch.icon a { - background-image: url(images/watch-icons.png); - background-position: 5px 60%; -} -#ca-unwatch.icon a:hover { - background-image: url(images/watch-icons.png); - background-position: -67px 60%; -} -#ca-watch.icon a:hover { - background-image: url(images/watch-icons.png); - background-position: -19px 60%; -} -#ca-unwatch.icon a.loading, -#ca-watch.icon a.loading { - background-image: url(images/watch-icon-loading.gif); - background-position: center 60%; -} -#ca-unwatch.icon a span, -#ca-watch.icon a span { - display: none; -} -div.vectorTabs ul { - background-image:url(images/tab-break.png); - background-position:left bottom; - background-repeat:no-repeat; -} diff --git a/skins/vector/main-ltr.css b/skins/vector/screen.css index 78dd1e2b..703db0ab 100644 --- a/skins/vector/main-ltr.css +++ b/skins/vector/screen.css @@ -1,19 +1,16 @@ /* - * main-rtl.css is automatically generated using CSSJanus, a python script for - * creating RTL versions of otherwise LTR stylesheets. + * Any rules which should not be flipped automatically in right-to-left situations should be + * prepended with @noflip in a comment block. Images that should be embedded as base64 data-URLs + * should be prepended with @embed in a comment block. * - * You may download the tool to rebuild this stylesheet - * http://code.google.com/p/cssjanus/ - * - * An online version of this tool can be used at: - * http://cssjanus.commoner.com/ - * - * The following command is used to generate the RTL version of this file - * ./cssjanus.py --swap_ltr_rtl_in_url < main-ltr.css > main-rtl.css - * - * Any rules which should not be flipped should be prepended with @noflip in - * a comment block. + * This style-sheet employs a few CSS trick to accomplish compatibility with a wide range of web + * browsers. The most common trick is to use some styles in IE6 only. This is accomplished by using + * a rule that makes things work in IE6, and then following it with a rule that begins with + * "html > body" or use a child selector ">", which is ignored by IE6 because it does not support + * the child selector. You can spot this by looking for the "OVERRIDDEN BY COMPLIANT BROWSERS" and + * "IGNORED BY IE6" comments. */ + /* Framework */ html, body { @@ -25,21 +22,26 @@ body { } body { background-color: #f3f3f3; + /* @embed */ background-image: url(images/page-base.png); } /* Content */ -#content { +div#content { margin-left: 10em; padding: 1em; + /* @embed */ background-image: url(images/border.png); background-position: top left; background-repeat: repeat-y; background-color: white; + color: black; + direction: ltr; } /* Head */ #mw-page-base { height: 5em; background-color: white; + /* @embed */ background-image: url(images/page-fade.png); background-position: bottom left; background-repeat: repeat-x; @@ -48,17 +50,18 @@ body { margin-top: -5em; margin-left: 10em; height: 5em; + /* @embed */ background-image: url(images/border.png); background-position: bottom left; background-repeat: repeat-x; } -#mw-head { +div#mw-head { position: absolute; top: 0; right: 0; width: 100%; } -#mw-head h5 { +div#mw-head h5 { margin: 0; padding: 0; } @@ -70,7 +73,6 @@ body { #p-personal { position: absolute; top: 0; - margin-left: 10em; right: 0.75em; } #p-personal h5 { @@ -79,17 +81,19 @@ body { #p-personal ul { list-style: none; margin: 0; - padding: 0; + padding-left: 10em; /* Keep from overlapping logo */ } /* @noflip */ #p-personal li { line-height: 1.125em; float: left; } + /* This one flips! */ #p-personal li { margin-left: 0.75em; margin-top: 0.5em; font-size: 0.75em; + white-space: nowrap; } /* Navigation Containers */ #left-navigation { @@ -110,8 +114,10 @@ body { /* @noflip */ div.vectorTabs { float: left; + height: 2.5em; } div.vectorTabs { + /* @embed */ background-image: url(images/tab-break.png); background-position: bottom left; background-repeat: no-repeat; @@ -139,6 +145,7 @@ body { margin: 0; padding: 0; background-color: #f3f3f3; + /* @embed */ background-image: url(images/tab-normal-fade.png); background-position: bottom left; background-repeat: repeat-x; @@ -149,24 +156,21 @@ body { display: block; } div.vectorTabs li.selected { + /* @embed */ background-image: url(images/tab-current-fade.png); } /* OVERRIDDEN BY COMPLIANT BROWSERS */ div.vectorTabs li a { display: inline-block; - height: 2.5em; - padding-left: 0.4em; - padding-right: 0.4em; + height: 1.9em; + padding-left: 0.5em; + padding-right: 0.5em; + /* @embed */ background-image: url(images/tab-break.png); background-position: bottom right; background-repeat: no-repeat; - } - div.vectorTabs li a, - div.vectorTabs li a span { color: #0645ad; cursor: pointer; - } - div.vectorTabs li a span { font-size: 0.8em; } /* IGNORED BY IE6 */ @@ -174,27 +178,23 @@ body { display: block; } /* OVERRIDDEN BY COMPLIANT BROWSERS */ - div.vectorTabs a span { + div.vectorTabs span a { display: inline-block; padding-top: 1.25em; } /* IGNORED BY IE6 */ /* @noflip */ - div.vectorTabs a > span { + div.vectorTabs span > a { float: left; display: block; } div.vectorTabs li.selected a, - div.vectorTabs li.selected a span, - div.vectorTabs li.selected a:visited - div.vectorTabs li.selected a:visited span { + div.vectorTabs li.selected a:visited{ color: #333333; text-decoration: none; } div.vectorTabs li.new a, - div.vectorTabs li.new a span, - div.vectorTabs li.new a:visited, - div.vectorTabs li.new a:visited span { + div.vectorTabs li.new a:visited{ color: #a55858; } /* Variants and Actions */ @@ -202,9 +202,11 @@ body { div.vectorMenu { direction: ltr; float: left; + /* @embed */ background-image: url(images/arrow-down-icon.png); - background-position: center center; + background-position: 100% 60%; background-repeat: no-repeat; + cursor: pointer; } /* @noflip */ body.rtl div.vectorMenu { @@ -212,18 +214,29 @@ body { } /* OVERRIDDEN BY COMPLIANT BROWSERS */ /* @noflip */ - #mw-head div.vectorMenu h5 { + div#mw-head div.vectorMenu h5 { float: left; + /* @embed */ background-image: url(images/tab-break.png); background-repeat: no-repeat; } + /* This will be flipped - unlike the one above it */ + div#mw-head div.vectorMenu h5 { + background-position: bottom left; + margin-left: -1px; + } /* IGNORED BY IE6 */ - #mw-head div.vectorMenu > h5 { + div#mw-head div.vectorMenu > h5 { background-image: none; } - #mw-head div.vectorMenu h5 { - background-position: bottom left; - margin-left: -1px; + div#mw-head div.vectorMenu h4 { + display: inline-block; + float: left; + font-size: 0.8em; + padding-left: 0.5em; + padding-top: 1.375em; + font-weight: normal; + border: none; } /* OVERRIDDEN BY COMPLIANT BROWSERS */ /* @noflip */ @@ -232,10 +245,12 @@ body { width: 24px; height: 2.5em; text-decoration: none; + /* @embed */ background-image: url(images/tab-break.png); background-repeat: no-repeat; } - div.vectorMenu h5 a{ + /* This will be flipped - unlike the one above it */ + div.vectorMenu h5 a { background-position: bottom right; } /* IGNORED BY IE6 */ @@ -258,7 +273,8 @@ body { body.rtl div.vectorMenu > div.menu { margin-left: auto; } - /* Fixes old versions of FireFox */ + /* IGNORED BY IE6 */ + /* Also fixes old versions of FireFox */ /* @noflip */ body.rtl div.vectorMenu > div.menu, x:-moz-any-link { @@ -302,16 +318,14 @@ body { display: inline-block; padding: 0.5em; white-space: nowrap; + color: #0645ad; + cursor: pointer; + font-size: 0.8em; } /* IGNORED BY IE6 */ div.vectorMenu li > a { display: block; } - div.vectorMenu li a { - color: #0645ad; - cursor: pointer; - font-size: 0.8em; - } div.vectorMenu li.selected a, div.vectorMenu li.selected a:visited { color: #333333; @@ -334,68 +348,101 @@ body { margin: 0; margin-top: 0.4em; } - #simpleSearch { - margin-top: 0.5em; + div#simpleSearch { + display: block; + width: 14em; + height: 1.4em; + margin-top: 0.65em; position: relative; + min-height: 1px; /* Gotta trigger hasLayout for IE7 */ border: solid 1px #AAAAAA; + color: black; background-color: white; + /* @embed */ background-image: url(images/search-fade.png); background-position: top left; background-repeat: repeat-x; } - #simpleSearch label { - font-size: 0.8em; + div#simpleSearch label { + /* + * DON'T PANIC! Browsers that won't scale this properly are the same browsers that have JS issues that prevent + * this from ever being shown anyways. + */ + font-size: 13px; top: 0.25em; + direction: ltr; + } + div#simpleSearch input { + color: black; + direction: ltr; + } + div#simpleSearch input:focus { + outline: none; + } + div#simpleSearch input.placeholder { + color: #999999; + } + div#simpleSearch input::-webkit-input-placeholder { + color: #999999; } - #simpleSearch input#searchInput { + div#simpleSearch input#searchInput { + position: absolute; + top: 0; + left: 0; + width: 90%; margin: 0; - border-width: 0; - padding: 0.25em; - line-height: 1em; - font-size: 0.8em; - width: 9em; + padding: 0; + padding-left: 0.2em; + padding-top: 0.2em; + padding-bottom: 0.2em; + outline: none; + border: none; + /* + * DON'T PANIC! Browsers that won't scale this properly are the same browsers that have JS issues that prevent + * this from ever being shown anyways. + */ + font-size: 13px; background-color: transparent; + direction: ltr; } - /* OVERRIDDEN BY COMPLIANT BROWSERS */ - #simpleSearch button#searchButton { - margin: 0; + div#simpleSearch button#searchButton { + position: absolute; + width: 10%; + right: 0; + top: 0; padding: 0; - width: 1.75em; - height: 1.5em; + padding-top: 0.2em; + padding-bottom: 0.2em; + padding-right: 0.4em; + margin: 0; border: none; cursor: pointer; background-color: transparent; - background-image: url(images/search-ltr.png); - background-position: center center; - background-repeat: no-repeat; } - /* IGNORED BY IE6 */ - #simpleSearch > button#searchButton { - height: 100%; - } - .suggestions-special .special-label { - font-size: 0.8em; - color: gray; - } - .suggestions-special .special-query { - color: black; - font-style: italic; + /* OVERRIDDEN BY COMPLIANT BROWSERS */ + div#simpleSearch button#searchButton img { + border: none; + margin: 0; + margin-top: -3px; + padding: 0; } - .suggestions-special .special-hover { - background-color: silver; + /* IGNORED BY IE6 */ + div#simpleSearch button#searchButton > img { + margin: 0; } /* Panel */ -#mw-panel { +div#mw-panel { position: absolute; top: 160px; padding-top: 1em; width: 10em; left: 0; } - #mw-panel div.portal { + div#mw-panel div.portal { padding-bottom: 1.5em; + direction: ltr; } - #mw-panel div.portal h5 { + div#mw-panel div.portal h5 { font-weight: normal; color: #444444; padding: 0.25em; @@ -405,22 +452,23 @@ body { border: none; font-size: 0.75em; } - #mw-panel div.portal div.body { + div#mw-panel div.portal div.body { margin: 0; padding-top: 0.5em; margin-left: 1.25em; + /* @embed */ background-image: url(images/portal-break.png); background-repeat: no-repeat; background-position: top left; } - #mw-panel div.portal div.body ul { + div#mw-panel div.portal div.body ul { list-style: none; list-style-image: none; list-style-type: none; padding: 0; margin: 0; } - #mw-panel div.portal div.body ul li { + div#mw-panel div.portal div.body ul li { line-height: 1.125em; padding: 0; padding-bottom: 0.5em; @@ -428,29 +476,31 @@ body { overflow: hidden; font-size: 0.75em; } - #mw-panel div.portal div.body ul li a { + div#mw-panel div.portal div.body ul li a { color: #0645ad; } - #mw-panel div.portal div.body ul li a:visited { + div#mw-panel div.portal div.body ul li a:visited { color: #0b0080; } /* Footer */ -#footer { +div#footer { margin-left: 10em; margin-top: 0; padding: 0.75em; + /* @embed */ background-image: url(images/border.png); background-position: top left; background-repeat: repeat-x; + direction: ltr; } -#footer ul { +div#footer ul { list-style: none; list-style-image: none; list-style-type: none; margin: 0; padding: 0; } -#footer ul li { +div#footer ul li { margin: 0; padding: 0; padding-top: 0.5em; @@ -458,22 +508,22 @@ body { color: #333333; font-size: 0.7em; } -#footer #footer-icons { +div#footer #footer-icons { float: right; } /* @noflip */ -body.ltr #footer #footer-places { +body.ltr div#footer #footer-places { float: left; } -#footer #footer-info li { +div#footer #footer-info li { line-height: 1.4em; } -#footer #footer-icons li { +div#footer #footer-icons li { float: left; margin-left: 0.5em; line-height: 2em; } -#footer #footer-places li { +div#footer #footer-places li { float: left; margin-right: 1em; line-height: 2em; @@ -510,6 +560,7 @@ body.ltr #footer #footer-places { clear: both; margin: 0 !important; padding: 0 !important; + /* @embed */ background-image: url(images/preferences-break.png); background-position: bottom left; background-repeat: no-repeat; @@ -524,11 +575,12 @@ body.ltr #footer #footer-places { white-space: nowrap; list-style-type: none; list-style-image: none; + /* @embed */ background-image: url(images/preferences-break.png); background-position: bottom right; background-repeat: no-repeat; } - /* IGNORED BY IE6 */ + /* Sadly, IE6 won't understand this */ #preftoc li:first-child { margin-left: 1px; } @@ -542,10 +594,12 @@ body.ltr #footer #footer-places { background-image: none; font-size: 0.9em; } - #preftoc a:hover { + #preftoc a:hover, + #preftoc a:focus { text-decoration: underline; } #preftoc li.selected a { + /* @embed */ background-image: url(images/preferences-fade.png); background-position: bottom; background-repeat: repeat-x; @@ -560,6 +614,7 @@ body.ltr #footer #footer-places { clear: both; border: solid 1px #cccccc; background-color: #f9f9f9; + /* @embed */ background-image: url(images/preferences-base.png); } #preferences fieldset.prefsection { @@ -614,7 +669,7 @@ body.ltr #footer #footer-places { * The following code is slightly modified from monobook * */ -#content { +div#content { line-height: 1.5em; } #bodyContent { @@ -632,7 +687,7 @@ a:visited { a:active { color: #faa700; } -a:hover { +a:hover, a:focus { text-decoration: underline; } a.stub { @@ -669,6 +724,7 @@ h6 { background: none; font-weight: normal; margin: 0; + overflow: hidden; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; @@ -693,20 +749,13 @@ h5 { font-size: 100%; } h5 .editsection { font-weight: normal; } h6 { font-size: 80%; } h6 .editsection { font-size: 125%; font-weight: normal; } +.editsection { float: right; } p { margin: .4em 0 .5em 0; line-height: 1.5em; } - p img { - margin: 0; - } -abbr, -acronym, -.explain { - border-bottom: 1px dotted black; - color: black; - background: none; - cursor: help; +p img { + margin: 0; } q { font-family: Times, "Times New Roman", serif; @@ -717,6 +766,13 @@ blockquote { font-family: Times, "Times New Roman", serif; font-style: italic; }*/ +pre, code, tt, kbd, samp { + /* + * It's important for this rule to first reference an actual font name, some browsers will render the monospace text + * too small otherwise, namely Firefox, Chrome and Safari + */ + font-family: monospace, "Courier New"; +} code { background-color: #f9f9f9; } @@ -732,6 +788,7 @@ ul { list-style-type: square; margin: .3em 0 0 1.5em; padding: 0; + /* @embed */ list-style-image: url(images/bullet-icon.png); } ol { @@ -759,14 +816,6 @@ dd { /* Tables */ table { font-size: 100%; - color: black; - /* we don't want the bottom borders of <h2>s to be visible through - * floated tables */ - background-color: white; -} -fieldset table { - /* but keep table layouts in forms clean... */ - background: none; } /* Forms */ fieldset { @@ -853,8 +902,6 @@ div.floatleft p { font-style: italic; } /* Thumbnails */ div.thumb { margin-bottom: .5em; - border-style: solid; - border-color: white; width: auto; background-color: transparent; } @@ -886,16 +933,17 @@ div.magnify a, div.magnify img { border: none !important; background: none !important; } +/* @noflip */ div.tright { clear: right; float: right; - border-width: .5em 0 .8em 1.4em; + margin: .5em 0 1.3em 1.4em; } +/* @noflip */ div.tleft { float: left; clear: left; - margin-right: .5em; - border-width: .5em 1.4em .8em 0; + margin: .5em 1.4em 1.3em 0; } img.thumbborder { border: 1px solid #dddddd; @@ -919,18 +967,16 @@ img.thumbborder { padding: .5em 1em; vertical-align: middle; } -/* Site Notice */ +/* Site Notice (includes notices from CentralNotice extension) */ #siteNotice { + position: relative; text-align: center; font-size: 0.8em; margin: 0; } - #siteNotice div, - #siteNotice p { - margin: 0; - padding: 0; - margin-bottom: 0.9em; - } +#localNotice { + margin-bottom: 0.9em; +} /* Categories */ .catlinks { border: 1px solid #aaa; @@ -988,78 +1034,88 @@ h3, h4, h5 { font-size: 1.6em; padding-bottom: 0; } -#content a.external, -#content a[href ^="gopher://"] { +div#content a.external, +div#content a[href ^="gopher://"] { + /* @embed */ background: url(images/external-link-ltr-icon.png) center right no-repeat; - padding: 0 13px 0 0; + padding-right: 13px; } -#content a[href ^="https://"], +div#content a[href ^="https://"], .link-https { + /* @embed */ background: url(images/lock-icon.png) center right no-repeat; - padding: 0 18px 0 0; + padding-right: 13px; } -#content a[href ^="mailto:"], +div#content a[href ^="mailto:"], .link-mailto { + /* @embed */ background: url(images/mail-icon.png) center right no-repeat; - padding: 0 18px 0 0; + padding-right: 13px; } -#content a[href ^="news://"] { +div#content a[href ^="news://"] { + /* @embed */ background: url(images/news-icon.png) center right no-repeat; - padding: 0 18px 0 0; + padding-right: 13px; } -#content a[href ^="ftp://"], +div#content a[href ^="ftp://"], .link-ftp { + /* @embed */ background: url(images/file-icon.png) center right no-repeat; - padding: 0 18px 0 0; + padding-right: 13px; } -#content a[href ^="irc://"], -#content a.extiw[href ^="irc://"], +div#content a[href ^="irc://"], +div#content a.extiw[href ^="irc://"], .link-irc { + /* @embed */ background: url(images/talk-icon.png) center right no-repeat; - padding: 0 18px 0 0; -} -#content a.external[href $=".ogg"], #content a.external[href $=".OGG"], -#content a.external[href $=".mid"], #content a.external[href $=".MID"], -#content a.external[href $=".midi"], #content a.external[href $=".MIDI"], -#content a.external[href $=".mp3"], #content a.external[href $=".MP3"], -#content a.external[href $=".wav"], #content a.external[href $=".WAV"], -#content a.external[href $=".wma"], #content a.external[href $=".WMA"], + padding-right: 13px; +} +div#content a.external[href $=".ogg"], div#content a.external[href $=".OGG"], +div#content a.external[href $=".mid"], div#content a.external[href $=".MID"], +div#content a.external[href $=".midi"], div#content a.external[href $=".MIDI"], +div#content a.external[href $=".mp3"], div#content a.external[href $=".MP3"], +div#content a.external[href $=".wav"], div#content a.external[href $=".WAV"], +div#content a.external[href $=".wma"], div#content a.external[href $=".WMA"], .link-audio { - background: url("images/audio-icon.png") center right no-repeat; - padding: 0 18px 0 0; -} -#content a.external[href $=".ogm"], #content a.external[href $=".OGM"], -#content a.external[href $=".avi"], #content a.external[href $=".AVI"], -#content a.external[href $=".mpeg"], #content a.external[href $=".MPEG"], -#content a.external[href $=".mpg"], #content a.external[href $=".MPG"], + /* @embed */ + background: url("images/audio-icon.png?2") center right no-repeat; + padding-right: 13px; +} +div#content a.external[href $=".ogm"], div#content a.external[href $=".OGM"], +div#content a.external[href $=".avi"], div#content a.external[href $=".AVI"], +div#content a.external[href $=".mpeg"], div#content a.external[href $=".MPEG"], +div#content a.external[href $=".mpg"], div#content a.external[href $=".MPG"], .link-video { - background: url("images/video-icon.png") center right no-repeat; - padding: 0 18px 0 0; + /* @embed */ + background: url("images/video-icon.png?2") center right no-repeat; + padding-right: 13px; } -#content a.external[href $=".pdf"], #content a.external[href $=".PDF"], -#content a.external[href *=".pdf#"], #content a.external[href *=".PDF#"], -#content a.external[href *=".pdf?"], #content a.external[href *=".PDF?"], +div#content a.external[href $=".pdf"], div#content a.external[href $=".PDF"], +div#content a.external[href *=".pdf#"], div#content a.external[href *=".PDF#"], +div#content a.external[href *=".pdf?"], div#content a.external[href *=".PDF?"], .link-document { - background: url("images/document-icon.png") center right no-repeat; - padding: 0 18px 0 0; + /* @embed */ + background: url("images/document-icon.png?2") center right no-repeat; + padding-right: 13px; } /* Interwiki Styling (Disabled) */ -#content a.extiw, -#content a.extiw:active { +div#content a.extiw, +div#content a.extiw:active { color: #36b; background: none; padding: 0; } -#content a.external { +div#content a.external { color: #36b; } -#content .printfooter { +div#content .printfooter { display: none; } /* Icon for Usernames */ #pt-userpage, #pt-anonuserpage, #pt-login { + /* @embed */ background: url(images/user-icon.png) left top no-repeat; padding-left: 15px !important; text-transform: none; @@ -1094,35 +1150,54 @@ div#bodyContent { outline: none; display: block; width: 26px; - height: 2.5em; + /* This hides the text but shows the background image */ + padding-top: 3.1em; + margin-top: 0; + /* Only applied in IE6 */ + margin-top: -0.8em !ie; + height: 0; + overflow: hidden; + /* @embed */ + background-image: url(images/watch-icons.png); } #ca-unwatch.icon a { - background-image: url(images/watch-icons.png); background-position: -43px 60%; } #ca-watch.icon a { - background-image: url(images/watch-icons.png); background-position: 5px 60%; } -#ca-unwatch.icon a:hover { - background-image: url(images/watch-icons.png); +#ca-unwatch.icon a:hover, +#ca-unwatch.icon a:focus { background-position: -67px 60%; } -#ca-watch.icon a:hover { - background-image: url(images/watch-icons.png); +#ca-watch.icon a:hover, +#ca-watch.icon a:focus { background-position: -19px 60%; } #ca-unwatch.icon a.loading, #ca-watch.icon a.loading { + /* @embed */ background-image: url(images/watch-icon-loading.gif); - background-position: center 60%; + background-position: 5px 60%; } #ca-unwatch.icon a span, #ca-watch.icon a span { display: none; } div.vectorTabs ul { + /* @embed */ background-image:url(images/tab-break.png); background-position:right bottom; background-repeat:no-repeat; } + +/* Convenience links to edit block, delete and protect reasons */ +p.mw-ipb-conveniencelinks, p.mw-protect-editreasons, +p.mw-filedelete-editreasons, p.mw-delete-editreasons { + float: right; +} + +/* Tooltips are outside of the normal body code, so this helps make the size of the text sensible */ +.tipsy { + font-size: 0.8em; +}
\ No newline at end of file diff --git a/skins/vector/wiki-indexed.png b/skins/vector/wiki-indexed.png Binary files differdeleted file mode 100644 index 189a2ae3..00000000 --- a/skins/vector/wiki-indexed.png +++ /dev/null diff --git a/skins/vector/wiki.png b/skins/vector/wiki.png Binary files differdeleted file mode 100644 index 2463b521..00000000 --- a/skins/vector/wiki.png +++ /dev/null |