diff options
author | Nicolas Vigier <boklm@mageia.org> | 2011-10-24 18:01:35 +0000 |
---|---|---|
committer | Nicolas Vigier <boklm@mageia.org> | 2011-10-24 18:01:35 +0000 |
commit | 246b38834224f9575f7b22cf84428ff615cb5acd (patch) | |
tree | 9e856efbb5a8f14faedf83432687b2a4bef5c493 /skins/vector | |
download | mediawiki-246b38834224f9575f7b22cf84428ff615cb5acd.tar mediawiki-246b38834224f9575f7b22cf84428ff615cb5acd.tar.gz mediawiki-246b38834224f9575f7b22cf84428ff615cb5acd.tar.bz2 mediawiki-246b38834224f9575f7b22cf84428ff615cb5acd.tar.xz mediawiki-246b38834224f9575f7b22cf84428ff615cb5acd.zip |
add mediawiki themes
Diffstat (limited to 'skins/vector')
60 files changed, 4119 insertions, 0 deletions
diff --git a/skins/vector/Makefile b/skins/vector/Makefile new file mode 100644 index 0000000..74e36c4 --- /dev/null +++ b/skins/vector/Makefile @@ -0,0 +1,18 @@ +# +# 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 new file mode 100644 index 0000000..a88fa08 --- /dev/null +++ b/skins/vector/csshover.htc @@ -0,0 +1,262 @@ +<public:attach event="ondocumentready" onevent="CSSHover()" /> +<script> +// <![CDATA[ +/** + * Whatever:hover - V3.00.081222 + * ------------------------------------------------------------ + * Author - Peter Nederlof, http://www.xs4all.nl/~peterned + * License - http://creativecommons.org/licenses/LGPL/2.1 + * + * Whatever:hover is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * Whatever:hover is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * howto: body { behavior:url("csshover3.htc"); } + * ------------------------------------------------------------ + */ + +window.CSSHover = (function(){ + + // regular expressions, used and explained later on. + var REG_INTERACTIVE = /(^|\s)((([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active|focus))/i, + 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; + + // css prefix, a leading dash would be nice (spec), but IE6 doesn't like that. + var CSSHOVER_PREFIX = 'csh-'; + + /** + * Local CSSHover object + * -------------------------- + */ + + var CSSHover = { + + // array of CSSHoverElements, used to unload created events + elements: [], + + // buffer used for checking on duplicate expressions + callbacks: {}, + + // init, called once ondomcontentready via the exposed window.CSSHover function + init:function() { + // don't run in IE8 standards; expressions don't work in standards mode anyway, + // and the stuff we're trying to fix should already work properly + if(!REG_MSIE.test(navigator.userAgent) && !REG_COMPAT.test(window.document.compatMode)) return; + + // start parsing the existing stylesheets + var sheets = window.document.styleSheets, l = sheets.length; + for(var i=0; i<l; i++) { + this.parseStylesheet(sheets[i]); + } + }, + + // called from init, parses individual stylesheets + parseStylesheet:function(sheet) { + // check sheet imports and parse those recursively + if(sheet.imports) { + try { + var imports = sheet.imports, 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. + } + } + + // 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++) { + 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. + } + }, + + // magic starts here ... + parseCSSRule:function(rule, sheet) { + + // The sheet is used to insert new rules into, this must be the same sheet the rule + // came from, to ensure that relative paths keep pointing to the right location. + + // only parse a rule if it contains an interactive pseudo. + var select = rule.selectorText; + if(REG_INTERACTIVE.test(select)) { + var style = rule.style.cssText, + + // affected elements are found by truncating the selector after the interactive pseudo, + // eg: "div li:hover" >> "div li" + 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'), + + // 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 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]; + + // 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. + + // 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+'"))'); + + // hash it, so an identical selector/class combo does not duplicate the expression + this.callbacks[hash] = true; + } + + // duplicate expressions need not be set, but the style could differ + sheet.addRule(newSelect, style); + } + }, + + // called via the expression, patches individual nodes + patch:function(node, type, className) { + + // 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; + } + + // just to make sure, also keep track of patched classnames locally on the node + if(!node.csshover) node.csshover = []; + + // and check for it to prevent duplicate events with the same classname from being set + if(!node.csshover[className]) { + node.csshover[className] = true; + + // create an instance for the given type and class + var element = new CSSHoverElement(node, type, className); + + // and store that instance for unloading later on + this.elements.push(element); + } + + // returns a dummy value to the expression + return type; + }, + + // unload stuff onbeforeunload + unload:function() { + try { + + // remove events + var l = this.elements.length; + for(var i=0; i<l; i++) { + this.elements[i].unload(); + } + + // and set properties to null + this.elements = []; + this.callbacks = {}; + + } catch (e) { + } + } + }; + + // add the unload to the onbeforeunload event + window.attachEvent('onbeforeunload', function(){ + CSSHover.unload(); + }); + + /** + * CSSHoverElement + * -------------------------- + */ + + // the event types associated with the interactive pseudos + var CSSEvents = { + onhover: { activator: 'onmouseenter', deactivator: 'onmouseleave' }, + onactive: { activator: 'onmousedown', deactivator: 'onmouseup' }, + onfocus: { activator: 'onfocus', deactivator: 'onblur' } + }; + + // CSSHoverElement constructor, called via CSSHover.patch + function CSSHoverElement(node, type, className) { + + // the CSSHoverElement patches individual nodes by manually applying the events that should + // have fired by the css pseudoclasses, eg mouseenter and mouseleave for :hover. + + this.node = node; + this.type = type; + var replacer = new RegExp('(^|\\s)'+className+'(\\s|$)', 'g'); + + // store event handlers for removal onunload + this.activator = function(){ node.className += ' ' + className; }; + this.deactivator = function(){ node.className = node.className.replace(replacer, ' '); }; + + // add the events + node.attachEvent(CSSEvents[type].activator, this.activator); + node.attachEvent(CSSEvents[type].deactivator, this.deactivator); + } + + CSSHoverElement.prototype = { + // onbeforeunload, called via CSSHover.unload + unload:function() { + + // remove events + this.node.detachEvent(CSSEvents[this.type].activator, this.activator); + this.node.detachEvent(CSSEvents[this.type].deactivator, this.deactivator); + + // and set properties to null + this.activator = null; + this.deactivator = null; + this.node = null; + this.type = null; + } + }; + + /** + * Public hook + * -------------------------- + */ + + return function(node, type, className) { + if(node) { + // called via the css expression; patches individual nodes + return CSSHover.patch(node, type, className); + } else { + // called ondomcontentready via the public:attach node + CSSHover.init(); + } + }; + +})(); + +// ]]> +</script>
\ No newline at end of file diff --git a/skins/vector/cssjanus/COPYING b/skins/vector/cssjanus/COPYING new file mode 100644 index 0000000..3f2c895 --- /dev/null +++ b/skins/vector/cssjanus/COPYING @@ -0,0 +1,13 @@ + 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 new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/skins/vector/cssjanus/LICENSE @@ -0,0 +1,202 @@ + + 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 new file mode 100644 index 0000000..9b92215 --- /dev/null +++ b/skins/vector/cssjanus/README @@ -0,0 +1,91 @@ +=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 new file mode 100755 index 0000000..dd14bd5 --- /dev/null +++ b/skins/vector/cssjanus/cssjanus.py @@ -0,0 +1,574 @@ +#!/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 new file mode 100755 index 0000000..1fc7304 --- /dev/null +++ b/skins/vector/cssjanus/csslex.py @@ -0,0 +1,114 @@ +#!/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 new file mode 100644 index 0000000..ce6f67d --- /dev/null +++ b/skins/vector/experiments/babaco-colors-a.css @@ -0,0 +1,109 @@ +/* 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 new file mode 100644 index 0000000..227e197 --- /dev/null +++ b/skins/vector/experiments/babaco-colors-b.css @@ -0,0 +1,67 @@ +/* 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 new file mode 100644 index 0000000..d2dabf7 --- /dev/null +++ b/skins/vector/experiments/babaco-colors-c.css @@ -0,0 +1,91 @@ +/* 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 differnew file mode 100644 index 0000000..735324e --- /dev/null +++ b/skins/vector/experiments/images/new-border.png diff --git a/skins/vector/experiments/images/new-portal-break-ltr.png b/skins/vector/experiments/images/new-portal-break-ltr.png Binary files differnew file mode 100644 index 0000000..cd8f3b1 --- /dev/null +++ b/skins/vector/experiments/images/new-portal-break-ltr.png diff --git a/skins/vector/experiments/images/new-portal-break-rtl.png b/skins/vector/experiments/images/new-portal-break-rtl.png Binary files differnew file mode 100644 index 0000000..45c5b2f --- /dev/null +++ b/skins/vector/experiments/images/new-portal-break-rtl.png diff --git a/skins/vector/experiments/images/page-base-fade.png b/skins/vector/experiments/images/page-base-fade.png Binary files differnew file mode 100644 index 0000000..dc63182 --- /dev/null +++ b/skins/vector/experiments/images/page-base-fade.png diff --git a/skins/vector/experiments/images/page-base-updated.png b/skins/vector/experiments/images/page-base-updated.png Binary files differnew file mode 100644 index 0000000..54ffeb0 --- /dev/null +++ b/skins/vector/experiments/images/page-base-updated.png diff --git a/skins/vector/experiments/images/tab-active-first.png b/skins/vector/experiments/images/tab-active-first.png Binary files differnew file mode 100644 index 0000000..e4c39c4 --- /dev/null +++ b/skins/vector/experiments/images/tab-active-first.png diff --git a/skins/vector/experiments/images/tab-active-last.png b/skins/vector/experiments/images/tab-active-last.png Binary files differnew file mode 100644 index 0000000..a96f391 --- /dev/null +++ b/skins/vector/experiments/images/tab-active-last.png diff --git a/skins/vector/experiments/images/tab-fade.png b/skins/vector/experiments/images/tab-fade.png Binary files differnew file mode 100644 index 0000000..1eb0e23 --- /dev/null +++ b/skins/vector/experiments/images/tab-fade.png diff --git a/skins/vector/experiments/images/tab-first.png b/skins/vector/experiments/images/tab-first.png Binary files differnew file mode 100644 index 0000000..439b713 --- /dev/null +++ b/skins/vector/experiments/images/tab-first.png diff --git a/skins/vector/experiments/images/tab-last.png b/skins/vector/experiments/images/tab-last.png Binary files differnew file mode 100644 index 0000000..08e283d --- /dev/null +++ b/skins/vector/experiments/images/tab-last.png diff --git a/skins/vector/experiments/images/tab-new-fade.png b/skins/vector/experiments/images/tab-new-fade.png Binary files differnew file mode 100644 index 0000000..4492550 --- /dev/null +++ b/skins/vector/experiments/images/tab-new-fade.png diff --git a/skins/vector/experiments/new-tabs.css b/skins/vector/experiments/new-tabs.css new file mode 100644 index 0000000..e3850e8 --- /dev/null +++ b/skins/vector/experiments/new-tabs.css @@ -0,0 +1,322 @@ +/* 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 differnew file mode 100644 index 0000000..bf2d4fb --- /dev/null +++ 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 differnew file mode 100644 index 0000000..0f59a2b --- /dev/null +++ b/skins/vector/images/audio-icon.png diff --git a/skins/vector/images/border.png b/skins/vector/images/border.png Binary files differnew file mode 100644 index 0000000..54b4792 --- /dev/null +++ b/skins/vector/images/border.png diff --git a/skins/vector/images/bullet-icon.png b/skins/vector/images/bullet-icon.png Binary files differnew file mode 100644 index 0000000..e304b26 --- /dev/null +++ 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 differnew file mode 100644 index 0000000..91dc16f --- /dev/null +++ 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 differnew file mode 100644 index 0000000..4a96276 --- /dev/null +++ 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 differnew file mode 100644 index 0000000..4b710b0 --- /dev/null +++ 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 differnew file mode 100644 index 0000000..17df03a --- /dev/null +++ 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 differnew file mode 100644 index 0000000..1261f00 --- /dev/null +++ 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 differnew file mode 100644 index 0000000..fc77e81 --- /dev/null +++ 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 differnew file mode 100644 index 0000000..9e63807 --- /dev/null +++ b/skins/vector/images/lock-icon.png diff --git a/skins/vector/images/magnify-clip.png b/skins/vector/images/magnify-clip.png Binary files differnew file mode 100644 index 0000000..00a9cee --- /dev/null +++ b/skins/vector/images/magnify-clip.png diff --git a/skins/vector/images/mail-icon.png b/skins/vector/images/mail-icon.png Binary files differnew file mode 100644 index 0000000..50de078 --- /dev/null +++ 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 differnew file mode 100644 index 0000000..8ab4995 --- /dev/null +++ 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 differnew file mode 100644 index 0000000..17d02a7 --- /dev/null +++ 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 differnew file mode 100644 index 0000000..815a048 --- /dev/null +++ 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 differnew file mode 100644 index 0000000..c182370 --- /dev/null +++ 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 differnew file mode 100644 index 0000000..a45144c --- /dev/null +++ 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 differnew file mode 100644 index 0000000..e81b559 --- /dev/null +++ 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 differnew file mode 100644 index 0000000..adfd70d --- /dev/null +++ b/skins/vector/images/preferences-base.png diff --git a/skins/vector/images/preferences-break.png b/skins/vector/images/preferences-break.png Binary files differnew file mode 100644 index 0000000..6c5c68c --- /dev/null +++ b/skins/vector/images/preferences-break.png diff --git a/skins/vector/images/preferences-edge.png b/skins/vector/images/preferences-edge.png Binary files differnew file mode 100644 index 0000000..3da0d09 --- /dev/null +++ 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 differnew file mode 100644 index 0000000..b4773c5 --- /dev/null +++ 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 differnew file mode 100644 index 0000000..53461d6 --- /dev/null +++ b/skins/vector/images/search-fade.png diff --git a/skins/vector/images/search-ltr.png b/skins/vector/images/search-ltr.png Binary files differnew file mode 100644 index 0000000..1db2eb2 --- /dev/null +++ b/skins/vector/images/search-ltr.png diff --git a/skins/vector/images/search-rtl.png b/skins/vector/images/search-rtl.png Binary files differnew file mode 100644 index 0000000..c26c8d0 --- /dev/null +++ b/skins/vector/images/search-rtl.png diff --git a/skins/vector/images/tab-break.png b/skins/vector/images/tab-break.png Binary files differnew file mode 100644 index 0000000..8115556 --- /dev/null +++ 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 differnew file mode 100644 index 0000000..c6238d2 --- /dev/null +++ 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 differnew file mode 100644 index 0000000..4a5e3e4 --- /dev/null +++ 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 differnew file mode 100644 index 0000000..0b80ee9 --- /dev/null +++ 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 differnew file mode 100644 index 0000000..ac3d59d --- /dev/null +++ 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 differnew file mode 100644 index 0000000..5e7f4af --- /dev/null +++ b/skins/vector/images/video-icon.png diff --git a/skins/vector/images/watch-icon-loading.gif b/skins/vector/images/watch-icon-loading.gif Binary files differnew file mode 100644 index 0000000..618c308 --- /dev/null +++ b/skins/vector/images/watch-icon-loading.gif diff --git a/skins/vector/images/watch-icons.png b/skins/vector/images/watch-icons.png Binary files differnew file mode 100644 index 0000000..54b2c79 --- /dev/null +++ b/skins/vector/images/watch-icons.png diff --git a/skins/vector/main-ltr.css b/skins/vector/main-ltr.css new file mode 100644 index 0000000..78dd1e2 --- /dev/null +++ b/skins/vector/main-ltr.css @@ -0,0 +1,1128 @@ +/* + * 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-left: 10em; + padding: 1em; + background-image: url(images/border.png); + background-position: top left; + 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 left; + background-repeat: repeat-x; +} +#mw-head-base { + margin-top: -5em; + margin-left: 10em; + height: 5em; + background-image: url(images/border.png); + background-position: bottom left; + background-repeat: repeat-x; +} +#mw-head { + position: absolute; + top: 0; + right: 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-left: 10em; + right: 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-left: 0.75em; + margin-top: 0.5em; + font-size: 0.75em; + } + /* Navigation Containers */ + #left-navigation { + position: absolute; + left: 10em; + top: 2.5em; + } + #right-navigation { + float: right; + 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 left; + background-repeat: no-repeat; + padding-left: 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 left; + 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-left: 0.4em; + padding-right: 0.4em; + 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 */ + 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 left; + margin-left: -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 right; + } + /* IGNORED BY IE6 */ + div.vectorMenu h5 > a { + display: block; + } + div.vectorMenu div.menu { + position: relative; + display: none; + clear: both; + text-align: left; + } + /* 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-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; + } + /* Search */ + #p-search h5 { + display: none; + } + /* @noflip */ + #p-search { + float: left; + } + #p-search { + margin-right: 0.5em; + margin-left: 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 left; + 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-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; + } + .suggestions-special .special-hover { + background-color: silver; + } +/* Panel */ +#mw-panel { + position: absolute; + top: 160px; + padding-top: 1em; + width: 10em; + left: 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-left: 1.75em; + cursor: default; + border: none; + font-size: 0.75em; + } + #mw-panel div.portal div.body { + margin: 0; + padding-top: 0.5em; + margin-left: 1.25em; + background-image: url(images/portal-break.png); + background-repeat: no-repeat; + background-position: top left; + } + #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-left: 10em; + margin-top: 0; + padding: 0.75em; + background-image: url(images/border.png); + background-position: top left; + 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: right; +} +/* @noflip */ +body.ltr #footer #footer-places { + float: left; +} +#footer #footer-info li { + line-height: 1.4em; +} +#footer #footer-icons li { + float: left; + margin-left: 0.5em; + line-height: 2em; +} +#footer #footer-places li { + float: left; + margin-right: 1em; + line-height: 2em; +} +/* Logo */ +#p-logo { + position: absolute; + top: -160px; + left: 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: left; + clear: both; + margin: 0 !important; + padding: 0 !important; + background-image: url(images/preferences-break.png); + background-position: bottom left; + background-repeat: no-repeat; +} + #preftoc li { + /* Tab */ + float: left; + margin: 0; + padding: 0; + padding-right: 1px; + height: 2.25em; + white-space: nowrap; + list-style-type: none; + list-style-image: none; + background-image: url(images/preferences-break.png); + background-position: bottom right; + background-repeat: no-repeat; + } + /* IGNORED BY IE6 */ + #preftoc li:first-child { + margin-left: 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: left; + 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-left: 0.5em; + padding-right: 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-right: 0.25em; +} + +/* + * Styles for the user login and create account forms + */ +#userlogin, #userloginForm { + border: solid 1px #cccccc; + padding: 1.2em; + margin: .5em; + float: left; +} + +#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 0 0 1.5em; + padding: 0; + list-style-image: url(images/bullet-icon.png); +} +ol { + line-height: 1.5em; + margin: .3em 0 0 3.2em; + 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-left: 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-left: 0; + padding-left: 0; + text-align: left; +} +#toc ul ul, +.toc ul ul { + margin: 0 0 0 2em; +} +#toc .toctoggle, +.toc .toctoggle { + font-size: 94%; +} +/* Images */ +div.floatright, table.floatright { + clear: right; + float: right; + position: relative; + margin: 0 0 .5em .5em; + border: 0; +} +div.floatright p { font-style: italic; } +div.floatleft, table.floatleft { + float: left; + clear: left; + position: relative; + margin: 0 .5em .5em 0; + 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: left; + line-height: 1.4em; + padding: 3px !important; + font-size: 94%; +} +div.magnify { + float: right; + border: none !important; + background: none !important; +} +div.magnify a, div.magnify img { + display: block; + border: none !important; + background: none !important; +} +div.tright { + clear: right; + float: right; + border-width: .5em 0 .8em 1.4em; +} +div.tleft { + float: left; + clear: left; + margin-right: .5em; + border-width: .5em 1.4em .8em 0; +} +img.thumbborder { + border: 1px solid #dddddd; +} +.hiddenStructure { + display: none; +} +/* Warning */ +.mw-warning { + margin-left: 50px; + margin-right: 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 0 1.4em 1em; + color: #7d7d7d; + width: auto; +} +span.subpages { + display: block; +} +/* Emulate Center */ +.center { + width: 100%; + text-align: center; +} +*.center * { + margin-left: auto; + margin-right: 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-ltr-icon.png) center right no-repeat; + padding: 0 13px 0 0; +} +#content a[href ^="https://"], +.link-https { + background: url(images/lock-icon.png) center right no-repeat; + padding: 0 18px 0 0; +} +#content a[href ^="mailto:"], +.link-mailto { + background: url(images/mail-icon.png) center right no-repeat; + padding: 0 18px 0 0; +} +#content a[href ^="news://"] { + background: url(images/news-icon.png) center right no-repeat; + padding: 0 18px 0 0; +} +#content a[href ^="ftp://"], +.link-ftp { + background: url(images/file-icon.png) center right no-repeat; + padding: 0 18px 0 0; +} +#content a[href ^="irc://"], +#content a.extiw[href ^="irc://"], +.link-irc { + 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"], +.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"], +.link-video { + background: url("images/video-icon.png") center right no-repeat; + padding: 0 18px 0 0; +} +#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 right no-repeat; + padding: 0 18px 0 0; +} +/* 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) left top no-repeat; + padding-left: 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-right: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:right bottom; + background-repeat:no-repeat; +} diff --git a/skins/vector/main-rtl.css b/skins/vector/main-rtl.css new file mode 100644 index 0000000..5387289 --- /dev/null +++ b/skins/vector/main-rtl.css @@ -0,0 +1,1128 @@ +/* + * 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/wiki-indexed.png b/skins/vector/wiki-indexed.png Binary files differnew file mode 100644 index 0000000..189a2ae --- /dev/null +++ b/skins/vector/wiki-indexed.png diff --git a/skins/vector/wiki.png b/skins/vector/wiki.png Binary files differnew file mode 100644 index 0000000..2463b52 --- /dev/null +++ b/skins/vector/wiki.png |