From 8f36043bf5bec77641cf79ced25148b94fd7df55 Mon Sep 17 00:00:00 2001 From: preecej Date: Fri, 29 Jul 2011 23:41:31 +0000 Subject: [PATCH] Added the planteome skin, built from the vector skin svn path=/; revision=132 --- .../semantic_wiki/skins/Planteome.deps.php | 11 + preecej/semantic_wiki/skins/Planteome.php | 770 +++++++++++ .../semantic_wiki/skins/planteome/Makefile | 18 + .../skins/planteome/csshover.htc | 262 ++++ .../skins/planteome/cssjanus/COPYING | 13 + .../skins/planteome/cssjanus/LICENSE | 202 +++ .../skins/planteome/cssjanus/README | 91 ++ .../skins/planteome/cssjanus/cssjanus.py | 574 ++++++++ .../skins/planteome/cssjanus/csslex.py | 114 ++ .../planteome/experiments/babaco-colors-a.css | 109 ++ .../planteome/experiments/babaco-colors-b.css | 67 + .../planteome/experiments/babaco-colors-c.css | 91 ++ .../experiments/images/new-border.png | Bin 0 -> 124 bytes .../images/new-portal-break-ltr.png | Bin 0 -> 891 bytes .../images/new-portal-break-rtl.png | Bin 0 -> 891 bytes .../experiments/images/page-base-fade.png | Bin 0 -> 306 bytes .../experiments/images/page-base-updated.png | Bin 0 -> 124 bytes .../experiments/images/tab-active-first.png | Bin 0 -> 981 bytes .../experiments/images/tab-active-last.png | Bin 0 -> 980 bytes .../planteome/experiments/images/tab-fade.png | Bin 0 -> 226 bytes .../experiments/images/tab-first.png | Bin 0 -> 1057 bytes .../planteome/experiments/images/tab-last.png | Bin 0 -> 1057 bytes .../experiments/images/tab-new-fade.png | Bin 0 -> 216 bytes .../skins/planteome/experiments/new-tabs.css | 322 +++++ .../planteome/images/arrow-down-icon.png | Bin 0 -> 181 bytes .../skins/planteome/images/audio-icon.png | Bin 0 -> 345 bytes .../skins/planteome/images/border.png | Bin 0 -> 119 bytes .../skins/planteome/images/bullet-icon.png | Bin 0 -> 152 bytes .../skins/planteome/images/document-icon.png | Bin 0 -> 345 bytes .../skins/planteome/images/edit-icon.png | Bin 0 -> 358 bytes .../images/external-link-ltr-icon.png | Bin 0 -> 279 bytes .../images/external-link-rtl-icon.png | Bin 0 -> 277 bytes .../skins/planteome/images/file-icon.png | Bin 0 -> 402 bytes .../skins/planteome/images/link-icon.png | Bin 0 -> 429 bytes .../skins/planteome/images/lock-icon.png | Bin 0 -> 370 bytes .../skins/planteome/images/magnify-clip.png | Bin 0 -> 204 bytes .../skins/planteome/images/mail-icon.png | Bin 0 -> 375 bytes .../skins/planteome/images/news-icon.png | Bin 0 -> 359 bytes .../skins/planteome/images/page-base.png | Bin 0 -> 119 bytes .../skins/planteome/images/page-fade.png | Bin 0 -> 253 bytes .../planteome/images/portal-break-ltr.png | Bin 0 -> 287 bytes .../planteome/images/portal-break-rtl.png | Bin 0 -> 280 bytes .../skins/planteome/images/portal-break.png | Bin 0 -> 242 bytes .../planteome/images/preferences-base.png | Bin 0 -> 119 bytes .../planteome/images/preferences-break.png | Bin 0 -> 286 bytes .../planteome/images/preferences-edge.png | Bin 0 -> 119 bytes .../planteome/images/preferences-fade.png | Bin 0 -> 248 bytes .../skins/planteome/images/search-fade.png | Bin 0 -> 185 bytes .../skins/planteome/images/search-ltr.png | Bin 0 -> 214 bytes .../skins/planteome/images/search-rtl.png | Bin 0 -> 214 bytes .../skins/planteome/images/tab-break.png | Bin 0 -> 263 bytes .../planteome/images/tab-current-fade.png | Bin 0 -> 121 bytes .../planteome/images/tab-normal-fade.png | Bin 0 -> 254 bytes .../skins/planteome/images/talk-icon.png | Bin 0 -> 377 bytes .../skins/planteome/images/user-icon.png | Bin 0 -> 345 bytes .../skins/planteome/images/video-icon.png | Bin 0 -> 395 bytes .../planteome/images/watch-icon-loading.gif | Bin 0 -> 840 bytes .../skins/planteome/images/watch-icons.png | Bin 0 -> 1745 bytes .../skins/planteome/main-ltr.css | 1200 +++++++++++++++++ .../skins/planteome/main-rtl.css | 1128 ++++++++++++++++ .../skins/planteome/wiki-indexed.png | Bin 0 -> 8205 bytes .../semantic_wiki/skins/planteome/wiki.png | Bin 0 -> 22987 bytes 62 files changed, 4972 insertions(+) create mode 100644 preecej/semantic_wiki/skins/Planteome.deps.php create mode 100644 preecej/semantic_wiki/skins/Planteome.php create mode 100644 preecej/semantic_wiki/skins/planteome/Makefile create mode 100644 preecej/semantic_wiki/skins/planteome/csshover.htc create mode 100644 preecej/semantic_wiki/skins/planteome/cssjanus/COPYING create mode 100644 preecej/semantic_wiki/skins/planteome/cssjanus/LICENSE create mode 100644 preecej/semantic_wiki/skins/planteome/cssjanus/README create mode 100755 preecej/semantic_wiki/skins/planteome/cssjanus/cssjanus.py create mode 100755 preecej/semantic_wiki/skins/planteome/cssjanus/csslex.py create mode 100644 preecej/semantic_wiki/skins/planteome/experiments/babaco-colors-a.css create mode 100644 preecej/semantic_wiki/skins/planteome/experiments/babaco-colors-b.css create mode 100644 preecej/semantic_wiki/skins/planteome/experiments/babaco-colors-c.css create mode 100644 preecej/semantic_wiki/skins/planteome/experiments/images/new-border.png create mode 100644 preecej/semantic_wiki/skins/planteome/experiments/images/new-portal-break-ltr.png create mode 100644 preecej/semantic_wiki/skins/planteome/experiments/images/new-portal-break-rtl.png create mode 100644 preecej/semantic_wiki/skins/planteome/experiments/images/page-base-fade.png create mode 100644 preecej/semantic_wiki/skins/planteome/experiments/images/page-base-updated.png create mode 100644 preecej/semantic_wiki/skins/planteome/experiments/images/tab-active-first.png create mode 100644 preecej/semantic_wiki/skins/planteome/experiments/images/tab-active-last.png create mode 100644 preecej/semantic_wiki/skins/planteome/experiments/images/tab-fade.png create mode 100644 preecej/semantic_wiki/skins/planteome/experiments/images/tab-first.png create mode 100644 preecej/semantic_wiki/skins/planteome/experiments/images/tab-last.png create mode 100644 preecej/semantic_wiki/skins/planteome/experiments/images/tab-new-fade.png create mode 100644 preecej/semantic_wiki/skins/planteome/experiments/new-tabs.css create mode 100644 preecej/semantic_wiki/skins/planteome/images/arrow-down-icon.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/audio-icon.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/border.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/bullet-icon.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/document-icon.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/edit-icon.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/external-link-ltr-icon.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/external-link-rtl-icon.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/file-icon.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/link-icon.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/lock-icon.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/magnify-clip.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/mail-icon.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/news-icon.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/page-base.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/page-fade.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/portal-break-ltr.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/portal-break-rtl.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/portal-break.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/preferences-base.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/preferences-break.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/preferences-edge.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/preferences-fade.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/search-fade.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/search-ltr.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/search-rtl.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/tab-break.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/tab-current-fade.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/tab-normal-fade.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/talk-icon.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/user-icon.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/video-icon.png create mode 100644 preecej/semantic_wiki/skins/planteome/images/watch-icon-loading.gif create mode 100644 preecej/semantic_wiki/skins/planteome/images/watch-icons.png create mode 100644 preecej/semantic_wiki/skins/planteome/main-ltr.css create mode 100644 preecej/semantic_wiki/skins/planteome/main-rtl.css create mode 100644 preecej/semantic_wiki/skins/planteome/wiki-indexed.png create mode 100644 preecej/semantic_wiki/skins/planteome/wiki.png diff --git a/preecej/semantic_wiki/skins/Planteome.deps.php b/preecej/semantic_wiki/skins/Planteome.deps.php new file mode 100644 index 0000000..7a8c288 --- /dev/null +++ b/preecej/semantic_wiki/skins/Planteome.deps.php @@ -0,0 +1,11 @@ +addStyle( 'planteome/main-rtl.css', 'screen', '', 'rtl' ); + $out->addStyle( 'planteome/main-ltr.css', 'screen', '', 'ltr' ); + // Append CSS which includes IE only behavior fixes for hover support - + // this is better than including this in a CSS fille since it doesn't + // wait for the CSS file to load before fetching the HTC file. + $out->addScript( + '' + ); + // Add extra stylesheets + // THIS IS ONLY USEFUL FOR EXPERIMENTING WITH DIFFERNT STYLE OPTIONS! THIS WILL BE REMOVED IN THE NEAR FUTURE. + if ( is_array( $wgPlanteomeExtraStyles ) ) { + foreach ( $wgPlanteomeExtraStyles as $style ) { + $out->addStyle( 'planteome/' . $style, 'screen' ); + } + } + } + /** + * Builds a structured array of links used for tabs and menus + * @return array + * @private + */ + function buildNavigationUrls() { + global $wgContLang, $wgLang, $wgOut, $wgUser, $wgRequest, $wgArticle, $wgStylePath; + global $wgDisableLangConversion, $wgPlanteomeUseIconWatch; + + wfProfileIn( __METHOD__ ); + + $links = array( + 'namespaces' => array(), + 'views' => array(), + 'actions' => array(), + 'variants' => array() + ); + + // Detects parameters + $action = $wgRequest->getVal( 'action', 'view' ); + $section = $wgRequest->getVal( 'section' ); + + // Checks if page is some kind of content + if( $this->iscontent ) { + + // Gets page objects for the related namespaces + $subjectPage = $this->mTitle->getSubjectPage(); + $talkPage = $this->mTitle->getTalkPage(); + + // Determines if this is a talk page + $isTalk = $this->mTitle->isTalkPage(); + + // Generates XML IDs from namespace names + $subjectId = $this->mTitle->getNamespaceKey( '' ); + + if ( $subjectId == 'main' ) { + $talkId = 'talk'; + } else { + $talkId = "{$subjectId}_talk"; + } + $currentId = $isTalk ? $talkId : $subjectId; + + // Adds namespace links + $links['namespaces'][$subjectId] = $this->tabAction( + $subjectPage, 'vector-namespace-' . $subjectId, !$isTalk, '', true + ); + $links['namespaces'][$subjectId]['context'] = 'subject'; + $links['namespaces'][$talkId] = $this->tabAction( + $talkPage, 'vector-namespace-talk', $isTalk, '', true + ); + $links['namespaces'][$talkId]['context'] = 'talk'; + + // Adds view view link + if ( $this->mTitle->exists() ) { + $links['views']['view'] = $this->tabAction( + $isTalk ? $talkPage : $subjectPage, + 'vector-view-view', ( $action == 'view' ), '', true + ); + } + + wfProfileIn( __METHOD__ . '-edit' ); + + // Checks if user can... + if ( + // edit the current page + $this->mTitle->quickUserCan( 'edit' ) && + ( + // if it exists + $this->mTitle->exists() || + // or they can create one here + $this->mTitle->quickUserCan( 'create' ) + ) + ) { + // Builds CSS class for talk page links + $isTalkClass = $isTalk ? ' istalk' : ''; + + // Determines if we're in edit mode + $selected = ( + ( $action == 'edit' || $action == 'submit' ) && + ( $section != 'new' ) + ); + $links['views']['edit'] = array( + 'class' => ( $selected ? 'selected' : '' ) . $isTalkClass, + 'text' => $this->mTitle->exists() + ? wfMsg( 'vector-view-edit' ) + : wfMsg( 'vector-view-create' ), + 'href' => + $this->mTitle->getLocalUrl( $this->editUrlOptions() ) + ); + // Checks if this is a current rev of talk page and we should show a new + // section link + if ( ( $isTalk && $wgArticle->isCurrent() ) || ( $wgOut->showNewSectionLink() ) ) { + // Checks if we should ever show a new section link + if ( !$wgOut->forceHideNewSectionLink() ) { + // Adds new section link + //$links['actions']['addsection'] + $links['views']['addsection'] = array( + 'class' => 'collapsible ' . ( $section == 'new' ? 'selected' : false ), + 'text' => wfMsg( 'vector-action-addsection' ), + 'href' => $this->mTitle->getLocalUrl( + 'action=edit§ion=new' + ) + ); + } + } + // Checks if the page is known (some kind of viewable content) + } elseif ( $this->mTitle->isKnown() ) { + // Adds view source view link + $links['views']['viewsource'] = array( + 'class' => ( $action == 'edit' ) ? 'selected' : false, + 'text' => wfMsg( 'vector-view-viewsource' ), + 'href' => + $this->mTitle->getLocalUrl( $this->editUrlOptions() ) + ); + } + wfProfileOut( __METHOD__ . '-edit' ); + + wfProfileIn( __METHOD__ . '-live' ); + + // Checks if the page exists + if ( $this->mTitle->exists() ) { + // Adds history view link + $links['views']['history'] = array( + 'class' => 'collapsible ' . ( ($action == 'history') ? 'selected' : false ), + 'text' => wfMsg( 'vector-view-history' ), + 'href' => $this->mTitle->getLocalUrl( 'action=history' ), + 'rel' => 'archives', + ); + + if( $wgUser->isAllowed( 'delete' ) ) { + $links['actions']['delete'] = array( + 'class' => ($action == 'delete') ? 'selected' : false, + 'text' => wfMsg( 'vector-action-delete' ), + 'href' => $this->mTitle->getLocalUrl( 'action=delete' ) + ); + } + if ( $this->mTitle->quickUserCan( 'move' ) ) { + $moveTitle = SpecialPage::getTitleFor( + 'Movepage', $this->thispage + ); + $links['actions']['move'] = array( + 'class' => $this->mTitle->isSpecial( 'Movepage' ) ? + 'selected' : false, + 'text' => wfMsg( 'vector-action-move' ), + 'href' => $moveTitle->getLocalUrl() + ); + } + + if ( + $this->mTitle->getNamespace() !== NS_MEDIAWIKI && + $wgUser->isAllowed( 'protect' ) + ) { + if ( !$this->mTitle->isProtected() ){ + $links['actions']['protect'] = array( + 'class' => ($action == 'protect') ? + 'selected' : false, + 'text' => wfMsg( 'vector-action-protect' ), + 'href' => + $this->mTitle->getLocalUrl( 'action=protect' ) + ); + + } else { + $links['actions']['unprotect'] = array( + 'class' => ($action == 'unprotect') ? + 'selected' : false, + 'text' => wfMsg( 'vector-action-unprotect' ), + 'href' => + $this->mTitle->getLocalUrl( 'action=unprotect' ) + ); + } + } + } else { + // article doesn't exist or is deleted + if ( + $wgUser->isAllowed( 'deletedhistory' ) && + $wgUser->isAllowed( 'undelete' ) + ) { + if( $n = $this->mTitle->isDeleted() ) { + $undelTitle = SpecialPage::getTitleFor( 'Undelete' ); + $links['actions']['undelete'] = array( + 'class' => false, + 'text' => wfMsgExt( + 'vector-action-undelete', + array( 'parsemag' ), + $wgLang->formatNum( $n ) + ), + 'href' => $undelTitle->getLocalUrl( + 'target=' . urlencode( $this->thispage ) + ) + ); + } + } + + if ( + $this->mTitle->getNamespace() !== NS_MEDIAWIKI && + $wgUser->isAllowed( 'protect' ) + ) { + if ( !$this->mTitle->getRestrictions( 'create' ) ) { + $links['actions']['protect'] = array( + 'class' => ($action == 'protect') ? + 'selected' : false, + 'text' => wfMsg( 'vector-action-protect' ), + 'href' => + $this->mTitle->getLocalUrl( 'action=protect' ) + ); + + } else { + $links['actions']['unprotect'] = array( + 'class' => ($action == 'unprotect') ? + 'selected' : false, + 'text' => wfMsg( 'vector-action-unprotect' ), + 'href' => + $this->mTitle->getLocalUrl( 'action=unprotect' ) + ); + } + } + } + wfProfileOut( __METHOD__ . '-live' ); + /** + * The following actions use messages which, if made particular to + * the Planteome skin, would break the Ajax code which makes this + * action happen entirely inline. Skin::makeGlobalVariablesScript + * defines a set of messages in a javascript object - and these + * messages are assumed to be global for all skins. Without making + * a change to that procedure these messages will have to remain as + * the global versions. + */ + // Checks if the user is logged in + if ( $this->loggedin ) { + if ( $wgPlanteomeUseIconWatch ) { + $class = 'icon '; + $place = 'views'; + } else { + $class = ''; + $place = 'actions'; + } + $mode = $this->mTitle->userIsWatching() ? 'unwatch' : 'watch'; + $links[$place][$mode] = array( + 'class' => $class . ( ( $action == 'watch' || $action == 'unwatch' ) ? ' selected' : false ), + 'text' => wfMsg( $mode ), // uses 'watch' or 'unwatch' message + 'href' => $this->mTitle->getLocalUrl( 'action=' . $mode ) + ); + } + // This is instead of SkinTemplateTabs - which uses a flat array + wfRunHooks( 'SkinTemplateNavigation', array( &$this, &$links ) ); + + // If it's not content, it's got to be a special page + } else { + $links['namespaces']['special'] = array( + 'class' => 'selected', + 'text' => wfMsg( 'vector-namespace-special' ), + 'href' => $wgRequest->getRequestURL() + ); + } + + // Gets list of language variants + $variants = $wgContLang->getVariants(); + // Checks that language conversion is enabled and variants exist + if( !$wgDisableLangConversion && count( $variants ) > 1 ) { + // Gets preferred variant + $preferred = $wgContLang->getPreferredVariant(); + // Loops over each variant + foreach( $variants as $code ) { + // Gets variant name from language code + $varname = $wgContLang->getVariantname( $code ); + // Checks if the variant is marked as disabled + if( $varname == 'disable' ) { + // Skips this variant + continue; + } + // Appends variant link + $links['variants'][] = array( + 'class' => ( $code == $preferred ) ? 'selected' : false, + 'text' => $varname, + 'href' => $this->mTitle->getLocalURL( '', $code ) + ); + } + } + + wfProfileOut( __METHOD__ ); + + return $links; + } +} + +/** + * QuickTemplate class for Planteome skin + * @ingroup Skins + */ +class PlanteomeTemplate extends QuickTemplate { + + /* Members */ + + /** + * @var Cached skin object + */ + var $skin; + + /* Functions */ + + /** + * Outputs the entire contents of the XHTML page + */ + public function execute() { + global $wgRequest, $wgOut, $wgContLang; + + $this->skin = $this->data['skin']; + $action = $wgRequest->getText( 'action' ); + + // Build additional attributes for navigation urls + $nav = $this->skin->buildNavigationUrls(); + foreach ( $nav as $section => $links ) { + foreach ( $links as $key => $link ) { + $xmlID = $key; + if ( isset( $link['context'] ) && $link['context'] == 'subject' ) { + $xmlID = 'ca-nstab-' . $xmlID; + } else if ( isset( $link['context'] ) && $link['context'] == 'talk' ) { + $xmlID = 'ca-talk'; + } else { + $xmlID = 'ca-' . $xmlID; + } + $nav[$section][$key]['attributes'] = + ' id="' . Sanitizer::escapeId( $xmlID ) . '"'; + if ( $nav[$section][$key]['class'] ) { + $nav[$section][$key]['attributes'] .= + ' class="' . htmlspecialchars( $link['class'] ) . '"'; + unset( $nav[$section][$key]['class'] ); + } + // We don't want to give the watch tab an accesskey if the page + // is being edited, because that conflicts with the accesskey on + // the watch checkbox. We also don't want to give the edit tab + // an accesskey, because that's fairly superfluous and conflicts + // with an accesskey (Ctrl-E) often used for editing in Safari. + if ( + in_array( $action, array( 'edit', 'submit' ) ) && + in_array( $key, array( 'edit', 'watch', 'unwatch' ) ) + ) { + $nav[$section][$key]['key'] = + $this->skin->tooltip( $xmlID ); + } else { + $nav[$section][$key]['key'] = + $this->skin->tooltipAndAccesskey( $xmlID ); + } + } + } + $this->data['namespace_urls'] = $nav['namespaces']; + $this->data['view_urls'] = $nav['views']; + $this->data['action_urls'] = $nav['actions']; + $this->data['variant_urls'] = $nav['variants']; + // Build additional attributes for personal_urls + foreach ( $this->data['personal_urls'] as $key => $item) { + $this->data['personal_urls'][$key]['attributes'] = + ' id="' . Sanitizer::escapeId( "pt-$key" ) . '"'; + if ( isset( $item['active'] ) && $item['active'] ) { + $this->data['personal_urls'][$key]['attributes'] .= + ' class="active"'; + } + $this->data['personal_urls'][$key]['key'] = + $this->skin->tooltipAndAccesskey('pt-'.$key); + } + + // Generate additional footer links + $footerlinks = array( + 'info' => array( + 'lastmod', + 'viewcount', + 'numberofwatchingusers', + 'credits', + 'copyright', + 'tagline', + ), + 'places' => array( + 'privacy', + 'about', + 'disclaimer', + ), + ); + // Reduce footer links down to only those which are being used + $validFooterLinks = array(); + foreach( $footerlinks as $category => $links ) { + $validFooterLinks[$category] = array(); + foreach( $links as $link ) { + if( isset( $this->data[$link] ) && $this->data[$link] ) { + $validFooterLinks[$category][] = $link; + } + } + } + // Reverse horizontally rendered navigation elements + if ( $wgContLang->isRTL() ) { + $this->data['view_urls'] = + array_reverse( $this->data['view_urls'] ); + $this->data['namespace_urls'] = + array_reverse( $this->data['namespace_urls'] ); + $this->data['personal_urls'] = + array_reverse( $this->data['personal_urls'] ); + } + // Output HTML Page + $this->html( 'headelement' ); +?> +
+
+ +
html('specialpageattributes') ?>> + + + data['sitenotice'] ): ?> + +
html( 'sitenotice' ) ?>
+ + + +

html( 'title' ) ?>

+ + +
+ +

msg( 'tagline' ) ?>

+ + +
html('userlangattributes') ?>>html( 'subtitle' ) ?>
+ + data['undelete'] ): ?> + +
html( 'undelete' ) ?>
+ + + data['newtalk'] ): ?> + +
html( 'newtalk' ) ?>
+ + + data['showjumplinks'] ): ?> + + + + + + html( 'bodytext' ) ?> + + data['catlinks'] ): ?> + + html( 'catlinks' ); ?> + + + data['dataAfterContent'] ): ?> + + html( 'dataAfterContent' ); ?> + + +
+
+ +
+ + +
+ renderNavigation( 'PERSONAL' ); ?> +
+ renderNavigation( array( 'NAMESPACES', 'VARIANTS' ) ); ?> +
+
+ renderNavigation( array( 'VIEWS', 'ACTIONS', 'SEARCH' ) ); ?> +
+
+ + +
+ + + + renderPortals( $this->data['sidebar'] ); ?> +
+ + + + + + + + html( 'bottomscripts' ); /* JS call to runBodyOnloadHook */ ?> + html( 'reporttime' ) ?> + data['debug'] ): ?> + + + + + $content ) { + echo "\n\n"; + switch( $name ) { + case 'SEARCH': + break; + case 'TOOLBOX': +?> +
+ html('userlangattributes') ?>>msg( 'toolbox' ) ?> +
+ +
+
+data['language_urls'] ) { +?> +
+ html('userlangattributes') ?>>msg( 'otherlanguages' ) ?> +
+
    + data['language_urls'] as $langlink ): ?> +
  • + +
+
+
+ +
skin->tooltip( 'p-' . $name ) ?>> + html('userlangattributes') ?>> +
+ + + + + +
+
+\n"; + } + } + + /** + * Render one or more navigations elements by name, automatically reveresed + * when UI is in RTL mode + */ + private function renderNavigation( $elements ) { + global $wgContLang, $wgPlanteomeUseSimpleSearch, $wgStylePath; + + // If only one element was given, wrap it in an array, allowing more + // flexible arguments + if ( !is_array( $elements ) ) { + $elements = array( $elements ); + // If there's a series of elements, reverse them when in RTL mode + } else if ( $wgContLang->isRTL() ) { + $elements = array_reverse( $elements ); + } + // Render elements + foreach ( $elements as $name => $element ) { + echo "\n\n"; + switch ( $element ) { + case 'NAMESPACES': +?> +
+
msg('namespaces') ?>
+ html('userlangattributes') ?>> + data['namespace_urls'] as $key => $link ): ?> +
  • >>
  • + + +
    + +
    +
    msg('variants') ?>
    + +
    + +
    +
    msg('views') ?>
    + html('userlangattributes') ?>> + data['view_urls'] as $key => $link ): ?> + >>' : ''.htmlspecialchars( $link['text'] ).'') ?> + + +
    + +
    +
    msg('actions') ?>
    + +
    + +
    +
    msg('personaltools') ?>
    + html('userlangattributes') ?>> + data['personal_urls'] as $key => $item): ?> +
  • > class="">
  • + + +
    + + +\n"; + } + } +} diff --git a/preecej/semantic_wiki/skins/planteome/Makefile b/preecej/semantic_wiki/skins/planteome/Makefile new file mode 100644 index 0000000..74e36c4 --- /dev/null +++ b/preecej/semantic_wiki/skins/planteome/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/preecej/semantic_wiki/skins/planteome/csshover.htc b/preecej/semantic_wiki/skins/planteome/csshover.htc new file mode 100644 index 0000000..a88fa08 --- /dev/null +++ b/preecej/semantic_wiki/skins/planteome/csshover.htc @@ -0,0 +1,262 @@ + + \ No newline at end of file diff --git a/preecej/semantic_wiki/skins/planteome/cssjanus/COPYING b/preecej/semantic_wiki/skins/planteome/cssjanus/COPYING new file mode 100644 index 0000000..3f2c895 --- /dev/null +++ b/preecej/semantic_wiki/skins/planteome/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/preecej/semantic_wiki/skins/planteome/cssjanus/LICENSE b/preecej/semantic_wiki/skins/planteome/cssjanus/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/preecej/semantic_wiki/skins/planteome/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/preecej/semantic_wiki/skins/planteome/cssjanus/README b/preecej/semantic_wiki/skins/planteome/cssjanus/README new file mode 100644 index 0000000..9b92215 --- /dev/null +++ b/preecej/semantic_wiki/skins/planteome/cssjanus/README @@ -0,0 +1,91 @@ +=CSSJanus= + +_Flips CSS from LTR to an RTL orienation and vice-versa_ + +Author: `Lindsey Simon ` + +==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/preecej/semantic_wiki/skins/planteome/cssjanus/cssjanus.py b/preecej/semantic_wiki/skins/planteome/cssjanus/cssjanus.py new file mode 100755 index 0000000..dd14bd5 --- /dev/null +++ b/preecej/semantic_wiki/skins/planteome/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'(?)*?{)' % + (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/preecej/semantic_wiki/skins/planteome/cssjanus/csslex.py b/preecej/semantic_wiki/skins/planteome/cssjanus/csslex.py new file mode 100755 index 0000000..1fc7304 --- /dev/null +++ b/preecej/semantic_wiki/skins/planteome/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 CDC;} +# "~=" {return INCLUDES;} +# "|=" {return DASHMATCH;} +# {w}"{" {return LBRACE;} +# {w}"+" {return PLUS;} +# {w}">" {return GREATER;} +# {w}"," {return COMMA;} +PUNC = r'|~=|\|=|[\{\+>,:;]' diff --git a/preecej/semantic_wiki/skins/planteome/experiments/babaco-colors-a.css b/preecej/semantic_wiki/skins/planteome/experiments/babaco-colors-a.css new file mode 100644 index 0000000..ce6f67d --- /dev/null +++ b/preecej/semantic_wiki/skins/planteome/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/preecej/semantic_wiki/skins/planteome/experiments/babaco-colors-b.css b/preecej/semantic_wiki/skins/planteome/experiments/babaco-colors-b.css new file mode 100644 index 0000000..227e197 --- /dev/null +++ b/preecej/semantic_wiki/skins/planteome/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/preecej/semantic_wiki/skins/planteome/experiments/babaco-colors-c.css b/preecej/semantic_wiki/skins/planteome/experiments/babaco-colors-c.css new file mode 100644 index 0000000..d2dabf7 --- /dev/null +++ b/preecej/semantic_wiki/skins/planteome/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/preecej/semantic_wiki/skins/planteome/experiments/images/new-border.png b/preecej/semantic_wiki/skins/planteome/experiments/images/new-border.png new file mode 100644 index 0000000000000000000000000000000000000000..735324efd133f06418760f0c6b16cc75f179a92c GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx3?wy9o9qTsk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5X*aCb)TtiQO1v1yn^w|QWcsyMkLn>}1B`|OpFfcGNF#6|4 RJ_L$0c)I$ztaD0e0s#0eA6x(c literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/experiments/images/new-portal-break-ltr.png b/preecej/semantic_wiki/skins/planteome/experiments/images/new-portal-break-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..cd8f3b159ea6aa69155dc3f04c4a649bba362d56 GIT binary patch literal 891 zcmV->1BCpEP){0D=aK5EiElBE-o)GFEB7LF)=YRGBPtWGc+_bH8nLhHa0gmH#j&rIXO8x zIyyT$J3Kr*Jv}`>K0ZG`KR`f0K|w)6LPA4BLqtSGMMXtMMn*?RM@UFWNl8gcN=i#h zOH52mO-)TsPEJoxPf$=$QBhG+Qc_b>Q&dz`RaI41R#sP6S6EnBSy@?HT3TCMTU=aR zU0q#XUS3~cUtnNhVPRonVq#-sV`OAxWo2b%W@cw+XJ}|>X=!O{YHDk1Yiw+6ZEbCC zZf7mzbECnVFfInwp!No1C1Sot>SYo}QndpP-Ll?si~=|s;aB2tE{Z7t*x!DuCA}IuduMNv9YnTva++Y zv$V9dwY9ajwzjvox45{txw*Nzy1Ki&yS%)-y}iA@zP`V|zreu2!NI}8!otJD!^FhI z#l^+O#>U6T$H>UY$;rve%F4^j%goHo&CSiu&d$%z&(P4&(b3V;($dq@)6~?|)z#J3 z*4Ee8*Vx$D+1c6J+S=RO+uYpT-QC^Z-rnEe-{9cj;o;%p;^O1ulq(=H}<; z=jiC@>FMd}>gwz3>+J08?d|RE?(XmJ@9^;O@$vEU^78ZZ^Yrxe_4W1k_V)Mp_xSku z`T6tDp9TxxyFaT&X7@|2& R@bUlv002ovPDHLkV1mY_q=Wzf literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/experiments/images/new-portal-break-rtl.png b/preecej/semantic_wiki/skins/planteome/experiments/images/new-portal-break-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..45c5b2f977952fc592aa04bf44fe78edf5c7a63d GIT binary patch literal 891 zcmV->1BCpEP){0D=aK5EiElBE-o)GFEB7LF)=YRGBPtWGc+_bH8nLhHa0gmH#j&rIXO8x zIyyT$J3Kr*Jv}`>K0ZG`KR`f0K|w)6LPA4BLqtSGMMXtMMn*?RM@UFWNl8gcN=i#h zOH52mO-)TsPEJoxPf$=$QBhG+Qc_b>Q&dz`RaI41R#sP6S6EnBSy@?HT3TCMTU=aR zU0q#XUS3~cUtnNhVPRonVq#-sV`OAxWo2b%W@cw+XJ}|>X=!O{YHDk1Yiw+6ZEbCC zZf7mzbECnVFfInwp!No1C1Sot>SYo}QndpP-Ll?si~=|s;aB2tE{Z7t*x!DuCA}IuduMNv9YnTva++Y zv$V9dwY9ajwzjvox45{txw*Nzy1Ki&yS%)-y}iA@zP`V|zreu2!NI}8!otJD!^FhI z#l^+O#>U6T$H>UY$;rve%F4^j%goHo&CSiu&d$%z&(P4&(b3V;($dq@)6~?|)z#J3 z*4Ee8*Vx$D+1c6J+S=RO+uYpT-QC^Z-rnEe-{9cj;o;%p;^O1ulq(=H}<; z=jiC@>FMd}>gwz3>+J08?d|RE?(XmJ@9^;O@$vEU^78ZZ^Yrxe_4W1k_V)Mp_xSku z`T6K!O4mbb^FaVqL7^3?- RTGjvn002ovPDHLkV1nCarE35H literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/experiments/images/page-base-fade.png b/preecej/semantic_wiki/skins/planteome/experiments/images/page-base-fade.png new file mode 100644 index 0000000000000000000000000000000000000000..dc631823c561fc79a63933fc16b5af9eee940195 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^j6m$i!3-p?9qnNPQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jit+<|LR|m-|Nr~XpTGb9{rvIc`;Q+#fByLM`_GT>-+%x9 zlXK$p??1nP|Niy&??0f#|9?R6_xtznzkdJv_51hVe}Dh{{R`Ck9jNc;51`N=Am`6t zpfNvx0_A^y2MPm?`vH{t1=9KV@Bjb*1@3QM3A8%W)5S5Q;+D;^UZKVW5w?d*g}S`F zIR5VVpS`8FtupO=bp`W%vB`Z8^{zb$GYGzY-naK$%+{pjYPp=ZDU!;fbKSmvzopr0Pjp5`2YX_ literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/experiments/images/tab-active-first.png b/preecej/semantic_wiki/skins/planteome/experiments/images/tab-active-first.png new file mode 100644 index 0000000000000000000000000000000000000000..e4c39c4276af11695f2444f3f65dad458eeb732e GIT binary patch literal 981 zcmeAS@N?(olHy`uVBq!ia0vp^>_F_w!3-of%J8%SDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49pAxJ|V9E{{R2~@Bcp_`v3RWpWnZJ{kr=0=Z`;sufF-U z`u^9PlV5-R`T6(%uW$eVm7Mvq=HAbL|Nh+n^mEOFAN!vF{qz5S&hgKCU;NHK@iF_v zmmh!r7oGZ4bo%q}pTGY9|NZaZzgJ&>&%gb3=d+({?tS0=?0fI!FLyr!?fIX3;>)Wq ze}Dh^{^!^4?kiva|NHaj*Wdqtfo}Pmed06FML;i%g3%D5LkLuV53dDUlkMr^7*cWT zO^>_KAqN5G>YT}wPg+XKbTt3_Zz)#iC~CE0HNVhw-{-ev?yj(1buG(A<)(b!-rW;Z z)b)8@{dH3*l{}MFe9+Roc1N7u#H43|0m8u^s_73Gs{7qO%(MJX=IRfhFPYc>Q@hW^ Y!@y-4lEiIj{u|^wPgg&ebxsLQ0BDBM&Hw-a literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/experiments/images/tab-active-last.png b/preecej/semantic_wiki/skins/planteome/experiments/images/tab-active-last.png new file mode 100644 index 0000000000000000000000000000000000000000..a96f39162a545aa6dceb5de1546ff12e461dd26d GIT binary patch literal 980 zcmeAS@N?(olHy`uVBq!ia0vp^>_F_w!3-of%J8%SDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49pAxJ|V9E{{R2~@Bcp_`v3RWpWnZJ{kr=0=Z`;sufF-U z`u^9PlV5-R`T6(%uW$eVm7Mvq=HAbL|Nh+n^mEOFAN!vF{qz5S&hgKCU;NHK@iF_v zmmh!r7oGZ4bo%q}pTGY9|NZaZzgJ&>&%gb3=d+({?tS0=?0fI!FLyr!?fIX3;>)Wq ze}Dh^{^!^4?kiva|NHaj*Wdqtfo}Pmed06FML;i%g3%D5LkLuV53dDUljZ5+7*cWT zO^-X@AqD~F^vM^ZU+is-6aW9eIA>mCi+*zSrb?by->{( zJaZG%Q-e|yQz{EjrrH1%c?9@`xIX&!|I?p;zyAII{^$S4U;iI}{r~s>zjr_Xzxnz9 z{jYyN|NejV^Z)1H|Nj2_|LynxhhP7_{PF+K-~Ug({lEY1-`&sufBgOb?E8NpFnuH@ z4K&lh)5S5Q;ug;#P9X;c28IJmSHztB`G3CA?zqLFmuKH;I=e_%)YI&??f%0JuS#l} aco?K#F=~gdU(F5F%i!ti=d#Wzp$Pzxh;``z literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/experiments/images/tab-first.png b/preecej/semantic_wiki/skins/planteome/experiments/images/tab-first.png new file mode 100644 index 0000000000000000000000000000000000000000..439b713f69f025650865394306d1fa1b97af2aaa GIT binary patch literal 1057 zcmeHE-Ahw(0KF(n}~@@^dRKKIZ1}C?8_obLJXo{>>;YG?{$nUb#7Dl9qQH9KJM4P?so6*{_gGechrG%&eM4~=R9p`ZYV3=Rf-@; znf79RtL()xFO(F?svdc$l5OXJ=E^`@f6u@j-3>ib+uh%#uh1HG27Rku*L~0QU0;JB zMMz6iyC#trBdi!o3Lc6F00fc{MbWhkjON7kG+a#!entqVAjL^|R&Y{)<|S+zjpw8l zT3Diij|LG|j@XjCR*zZND2N91V4a#}I|9{Mo*jO}d`mwy4T6-1W9(M6qqR z8NAV$Pk%`p_kOi_+>RZV;e_?ueHU}^HFMqxL9eNo47s*6~@%H z!oK8ey2ip);iLOsDUa8cOx!f9)hDcz#*H(t-7VFZ`c&=DtBzK-wKk4h3U2p4+Gm2$63Heuf literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/experiments/images/tab-last.png b/preecej/semantic_wiki/skins/planteome/experiments/images/tab-last.png new file mode 100644 index 0000000000000000000000000000000000000000..08e283dd338baa22dfef4a14ce4fbf432ffcbd92 GIT binary patch literal 1057 zcmeHE>q}E{0KFyBFa(22*Mo|v46>FH_Q4R>R!vfdNtj7Fag{-gVv%JJ>w^!79^jWK z0*Q(cB=AF#vfaC3B(1gi*xaU@-fii&``Fxew|jrT-@V=bjyiD8`E)*na|Gzz8RToTT&B8Hd9EOat}6(qun z$8*vw3#VD&WkHmaBbJmPxmiAw$;9%~R1)|@qzxw)(qfVqt@zjsgUBqf*(YKgOah7F z5hWlu4IqTGN#Jxk*qpGKk$eF^K@hAUdKiIBBKTj;APUdd3sa0-w+8W(EIzfSC9m<`98feo=x2x6*kL$88Q8 zx~RO1MlKr2Tm8qsyub(3u{OE?XPu_Dsmo7Ic-1x)R_NNQ=v2iHR&@8TCEE{e+Mw4I zDv@M*l-Y4FJ-)5_ctiQS`X@n)=X~7@CR7?6-AK25ZS5NRWd708S}~Nk`!;x?mZyW- za9H^?9LXOoSgx*$YD?4?2Ta5FD@P4w-xkNN?f!VR#x>Z7mDcU=8LZs9=fnZq^L~|L zSFc+2Wu*I6-Qlh`-pNbnN@~Eka`?zgxcPl&Z@PZHp^SOfw;(+Px}G(dZS~gc?fasE OzZdGX4Vn>k+v7ibB3IS` literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/experiments/images/tab-new-fade.png b/preecej/semantic_wiki/skins/planteome/experiments/images/tab-new-fade.png new file mode 100644 index 0000000000000000000000000000000000000000..449255055439fa8160102948e57363e75a6862c1 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{O!3-pi`)%{( zJaZG%Q-e|yQz{EjrrH1%*$4Q9xW0Y+_WSqmuV26X^5x5~U%x(n{P^zOyWhWmfBpLP z)2B~AfByXT?c3+ipFe!~@b>kazkmP!`}gn1k00;fzyI^+&;S4b%MzW`fJW(ix;TbZ z+~PUZF4&+Tz_39><7iXv|H!}IHR}xaEIhHx+Q%$(Q?^*U`WlO~`x%%S 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/preecej/semantic_wiki/skins/planteome/images/arrow-down-icon.png b/preecej/semantic_wiki/skins/planteome/images/arrow-down-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bf2d4fb4b4900506f9b8c79b223ee2f75c15cc57 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGaEOCt}3C>R|DNig)WpGT%PfAtr z%uP&B4N6T+sVqF1Y6DcnAK(+>T3K0n_wL&XR;Ol+4VoOpP6e3Ts87Bew7D@Ay5s4yg1XlXc!a(7S2GGZvp WlhfIEUiT+Z8-u5-pUXO@geCwwyg1PS literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/audio-icon.png b/preecej/semantic_wiki/skins/planteome/images/audio-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0f59a2bbacdd80acffb9544a3468dcc5322f2b43 GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8gaDrq*V1~e6Bny1n~l4t86P^Ew|oD>?S}(Ce0<$ICA7TG zb-`Mz6n2Vq*|gtn`{9uJiyNDJ4Gx@2 z-@bd+>_yohKfT$st*^9B=l}ozKN6MgfOaXA1o;I6x%dD>OpNqfpxR_l7srr_TP6MO zTn7vUm{YCyexLW_|NfraZ6b>f^YM6Wn6Uo99oZ>YxeU10Jcv)^KJF_~$D+x_CS(zAe7`@gkQ=d`hP}vUJ$2_O95uGe6&wRf0j!QgC^n_wnaI P>li#;{an^LB{Ts5PcNb+ literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/border.png b/preecej/semantic_wiki/skins/planteome/images/border.png new file mode 100644 index 0000000000000000000000000000000000000000..54b47922aa8ba9e86ddbe91e397a0d02abdec6d7 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)gak|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xm;-!5T$f+}Ss0oh59D%rx;Tb#$R;NM*-Q+K=TDeE1+o}C MUHx3vIVCg!0CzARm;e9( literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/bullet-icon.png b/preecej/semantic_wiki/skins/planteome/images/bullet-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e304b267553cba3c7a2d763ec4446aee0beca5c6 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^tROZAGms2>6tW9QNtU=qlmzFem6RtIr7}3C literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/document-icon.png b/preecej/semantic_wiki/skins/planteome/images/document-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..91dc16f68cfa62afab4e66b6100465c405ccc6de GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8gaDrq*T%-i|Ns9VJ9g~Nn>TOYzWwmw!@GCyUcY|*{{8!p zA3vTrapL&#TnsmF|Nnob>dMMlPv<5w z>Rfp0!p00i_>zopr0K99W AM*si- literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/edit-icon.png b/preecej/semantic_wiki/skins/planteome/images/edit-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4a9627677870bec9df824b4a47feb2008acca12f GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8gaDrq*Xx(hte%{|xI1Rk!tPI>J{{e;iwy6XS`|7RB5egw2jp(MyJ7|6v37-C|i-vZSZc)B=-RNQLm zcNc3=;Bjdb;5O??I9&8U`qn+?l7*XR??3Tp!&lL7tP>tHCs>OrIz;SZ&=6pIc9HqC zaIpC~`M0iNnHPUg4Vn>A{5t*a#fRSlYI;oBl4kH!O3iR9X7&-9xK-TayOy%M%GLM9 d>1K><3|DO>10BAm~moOa}6aA09^+}!-%zEZk&LYIK=Ev8gf-RPY)D)N$i s&x=&9UP#@0ZXWaI2bCVjx$79&7)-htzDAyXo(OWLr>mdKI;Vst04JwPB>(^b literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/external-link-rtl-icon.png b/preecej/semantic_wiki/skins/planteome/images/external-link-rtl-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..17df03a3c08adf80498fcde75bee53e822e9d95b GIT binary patch literal 277 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2VGmzZ%#=aj&NtU=qlmzFem6RtIr7}3C~$oOI-4P~c&5)X@E3ziEZxyG*7BCplea)xFu@HT6&! rPm8mh_#M5hEt$`Sc zIdkUl;lsCX-8y&f+>IMIE?v6x^XJdkuV24=_wLP`H!ohic=hVlvuDqqJbCi``SYhw zpT2zg^2(JfckbMI|Ni~kw{QRc{rms_{{tGg76R>3C<*cl26FKMhL{-Xw?MUXJY5_^ zDsIK}Ul(ds;Bj&6N?O{&5%J^y{yiFZ#J}sRt6K|CvRAZRzSw?Q=0u~lkGYpEmfj`g zGDrKxd`*`3wv`7jDYNZ=e{SbiM)^J6f(#zoy0=$s-MUR`Q!(F`y*-AaDm{Vm&z4O2 z=g+WaVF<^?o&{e^xei*cXZyH|qiJ(*sKI;w2Q|ML!g_8QYAu>~W{GY2X5pnlnG9vm c{|F~A+&m-9?f1n+a literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/link-icon.png b/preecej/semantic_wiki/skins/planteome/images/link-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fc77e81d17e2fd6145ca9ea3550e24c83a2bd691 GIT binary patch literal 429 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8gaDrq*B?KAPF{1`y?Ay0gv)jQ9hI(^zaed(Hw zJDTT5RP`?3clvJAg5!zJUH||8-+s+Q18A2*NswPKkc$s6#KcIy1*+Zd>EaktaVzHB zZN9?_9Bc`$S6*$AD_Fa=wD$k@Ic7J{?ofEh{jmLR{n2@4ALdz@+wZ7~Fz~)-{_Vil zHi03XA?=|o*VrytydrC5Tl|vvSOH`Hr4Ua8Wr?@)OmPiyw z%m{dR=PpCqojReA?CZ(%r62!I%qxF4a~~5A!(nfM&|Q?qZ~xpDKj#h2$5=XP>FyR-P^ zowR3nT7Lfc`r>BTt)n7uA1^z6Y}fHqM_*pke0JI5=L^55S3KW6EIGNa`pdJ-JD28N z+^>87;<*j0(my@0dURId^5u*F|NrN9-X{#SOQ9slFBr(h2N+^vq~8M7)_A%&hE&`t zIe(C^SwVm$AdJ-|C(?oEg46&1`bUplU6%QL!^u5oQg6Q2eq+v%;Tn9*sC$qb+%dx@v7EBjRzCLuw=@2R%kKp}rm7sn8e>&ZX< z|Np;pZ^4Hi#uMxFW-_tftUmZB`~SiP?FRpE-rIZC`}@1Ue2?FsWs?;7DtGQZqv53M vO^$|h?Ae*#EnM~g|NMtH!wi1#J!NKC>C|F-zkgXj&}arvS3j3^P6kH3BUwtLsMy?b{r zT(DsA!a3{LuKxb@)5+t9e}4ab?C8;suGatm|Ns8|W80R^Q>XNO{P1={Z~LQ14<=2V z`11Lq*DoG#T(@e|#&rkx?^>~ZF;Jx%!_O~3yA(=-{DOg8e1IV)M*1yKZKJ1)V@SoV zob$JZ4k_@sUThHA=ro%}FkAoM|9CEuS3SEbtzIh{A9$_(gJ1aBE@lSJ_5j7)hu3!M zGyT37rs+Oem9gxf*g>IQ;{?XNFKU!HmX|H4VC`_qo26AyQ&GP!quSxc%%65GY+0Vs xylGhvZmjw;Z3tI+O%nR@7{g&`t`MI*E+gdU%q_#|Ns95 z3l=#n;3l}cDapT5?^B0yZUHIM~@y}xNza~=g*g~Tt0pJ4A78LZSj1dT?!>Ze!)O4KEMzYBmEYrw$RhXF{I*F z%6U(|1_c3^i)BpGq9V^Z-`9I*1~&b2iufbK-B8PLI$q;L19xiYw}QSG%$$ebb4FeN zsw2Q~pPTETQ-HuZS)D+^i$NZGMbm=Rq+4~qZ93LgBGGfvO?&CJxyBvKHh!44vVAe1 f{e9Wx49pA$WgIV?v`(b~Eobm_^>bP0l+XkKXXLk> literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/page-base.png b/preecej/semantic_wiki/skins/planteome/images/page-base.png new file mode 100644 index 0000000000000000000000000000000000000000..17d02a74ee7d46a2315c046eb6539e70beeeb18c GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)gak|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xm;-!5T)%z$#=xz-3drU1ba4#fkWEeivY8kd&z~@T3S=>O My85}Sb4q9e0BlnpM*si- literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/page-fade.png b/preecej/semantic_wiki/skins/planteome/images/page-fade.png new file mode 100644 index 0000000000000000000000000000000000000000..815a0486e7fd79611ecda7f00b50ef3fe1398956 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfz!3-oP|5OSFQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JioyeYLR^3T{PF$!x8J}2eEa_W-@m^=`0xL}pFe*5{qyJh z_a8rh{R9gA`Tgg|&!6AF0hRs!`}fa}A3uKm`uXeE?>~S3{QUXz+qZAuK_b8Y0rmg= z`~Ca(|NsB*l^1ypw8F;I#WAGfmhK^Tz6J#mmxJnBWgC+A{+bQ~>GQkZ_pRCZ=k4+3?D5{}^0?ji^Yinl*ZJ@8 z@UPnV=yn= zg8uLQPgY+-39?B&mYNyrmo_yb1(R;0-m3?eeUV6d=`vEJ@jXHZCxp@qE)aOKzG~yg l&ES|1K48W51ONa4z#lKJ92a!%XzBm}002ovPDHLkV1jB{mO20c literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/portal-break-rtl.png b/preecej/semantic_wiki/skins/planteome/images/portal-break-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..a45144c0733d7e4647021ceaf9d842e1abd4cb44 GIT binary patch literal 280 zcmV+z0q6dSP)+bQ~>GQkZ_pRCZ=k4+3?D5{}^0?ji^Yinl*ZJ@8 z@UPnV=g43);^N}# z>+9|9?dFMe5@$vKX^YZfY@9*#2+}zpO z+1S|FoJ!;E0000zNkl?iczeB?TKC#GQyj^k$7bZE;oi#tcg2 s{ve`&xpiG#u``cld<;ZsBR&BJ0Q7STy8b1IQ~&?~07*qoM6N<$g7d0)NdN!< literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/preferences-base.png b/preecej/semantic_wiki/skins/planteome/images/preferences-base.png new file mode 100644 index 0000000000000000000000000000000000000000..adfd70d7ee165b7a7573a16aa66eaeb41116a2c5 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)gak|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xm;-!5Tz~!gwMOXXOCXoa)5S4_LpC`9$Yx?-Jb%LUDUikB M>FVdQ&MBb@0IKsJ`v3p{ literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/preferences-break.png b/preecej/semantic_wiki/skins/planteome/images/preferences-break.png new file mode 100644 index 0000000000000000000000000000000000000000..6c5c68c41262465d90fa559eb5e7b499581ebe61 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^j6kf&!2%>VZQwKkQk(@Ik;OpT1B~5HX4`=T%L*LR zfize(Ly%y#Kaj(e*`!o=uI7 zZQ1@6O&J`%+>;s^Oq~?C|8d#q0ClLAxJHyD7o{ear0S*s2?iqr14~^43ta=t5JO8V z15+y#Lu~^CD+2>HzFQYz8glbfGSeyvXsF!3<|$BvB*=!~{Irtt#G+IN$CUh}R0Yr6 b#Prml)Wnp^!jq{sKt&9mu6{1-oD!MO My85}Sb4q9e0CSxlcmMzZ literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/preferences-fade.png b/preecej/semantic_wiki/skins/planteome/images/preferences-fade.png new file mode 100644 index 0000000000000000000000000000000000000000..b4773c5c6c49f06c731eca22386c01bfeac90ffc GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^j6kf&!3-qz(+zuplw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqJ#jS5ZB+ofB*aU@6VqW zK(p9Og8YJkCW8!@@@94e3Q2pqIEGZ*N=ishXmoNDIlDSr z1<%~X^wgl##FWaylc_d9MOpzqA+F!PfB*OY-_Kt^|NQ>*`}gm^fB*dW@#E*upWnWH z`}OPBzkmP!{{8#?`}hC<|I5v{dj_(>)5S4_<9c#NLPmncfe8#PtUO#i!V)qPJQ7S2 hW(*IR+PHbd8A=*B7(Z`OD+6j^@O1TaS?83{1ON!`Ofmof literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/search-ltr.png b/preecej/semantic_wiki/skins/planteome/images/search-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..1db2eb249f64708d4867b09fbdceb9832e14456d GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^JRmj)kYL#1bYUKlk}PqJC<)F_D=AMbN@Z|N$xljE z@XSq2PYp^+>)bN2N8&mSMR{aN|FagJw#;etOR3d?n#b9a1JUCuKzxMv+t#({(W^ZA^3 z8YJg#=03t06%}i{UFt~k4}Qk?){Qn2&;OsFX}S8rod5OfYuOmo6e?FgTe~DWM4f2O(2% literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/search-rtl.png b/preecej/semantic_wiki/skins/planteome/images/search-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..c26c8d07985cd422c46ec4489938b8845f744a2f GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^JRmj)kYL#1bYUKlk}PqJC<)F_D=AMbN@Z|N$xljE z@XSq2PYp^ad3Jr`oBs^PD=JrdF1)Z5Xe)!K LtDnm{r-UW|Jz-Ti literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/tab-break.png b/preecej/semantic_wiki/skins/planteome/images/tab-break.png new file mode 100644 index 0000000000000000000000000000000000000000..81155562e15d07974797d2b7cb01676f74014a97 GIT binary patch literal 263 zcmV+i0r>ujP)^i+xo%d`qAn8sMq=G_50xP`|bAo&glE^_WZKk`sefe^Z5Mn_x#=O z`?}!z)$9B8`1|DY``GOJ+wJ?)>-)Ih`cfm=p8x;=JxN4CRCwA=!N&oBAOHlxMKPlY zW=#Ee={=pH{w=iB#KKBsWMI~l2G7RL#leFkfEew_*!3l6(w0iC_8)L|0&i~B_HO_H N002ovPDHLkV1n}elAQnm literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/tab-current-fade.png b/preecej/semantic_wiki/skins/planteome/images/tab-current-fade.png new file mode 100644 index 0000000000000000000000000000000000000000..c6238d2616719a04e7e8cd99d62afb09d773dd64 GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i$P6TFADvJJQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JikJg@LR|m<|G)f*^a&uB$J50zghMttK|&75JHfzcpDNo4 PWHETU`njxgN@xNA5Tqac literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/tab-normal-fade.png b/preecej/semantic_wiki/skins/planteome/images/tab-normal-fade.png new file mode 100644 index 0000000000000000000000000000000000000000..4a5e3e4acbc375a63950ca513419fcf5c7df7290 GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3-n|KCJ=?NS3%plmzFem6RtIr7}3CdTK;pMQM+_4mi`zss-xeDmek z??3&wqSUw;06_36jQ@4w!D`StPp?{{B+{rms_>#sjAJ^?lT zd;jg%r|&=-2>t`Xu7aZhKwGRlT^vIyZXG?;D%kA6z_8(gp6;cj-|J7xdlz)RPVN3& zX!Bsb5PRT+(QQ3peYQVu6{1-oD!M<`mT;C literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/talk-icon.png b/preecej/semantic_wiki/skins/planteome/images/talk-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0b80ee91c4793e17710bac5ffa073b617ed9358a GIT binary patch literal 377 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8gaDrq*N(2%|NsBLeEIVA>(_7Iym|lr{i|26-o1PG_U+sA z7tVe7@ZragAK$)x`}pzWg^L$HefsqI^XFf`ejPn_`1kMMU%!5R@#4jiqldqI`Eupz z<)=@dK6&!w&!0ahPo8}A=+UubM}Q`qs<)~F?NTTS@(TuX@d1XI80oh_wauO`jv*Dd zLe57D9ai9B4zT1CI5F>?_V@j%Z)Z(e`R~gGo`yM}MNOqy983)o?nii-o94If-|HAz zt@eX!-tB1z>?hn~WfJ`n_MF9l^F>sZl<1}g+2w`T_A;?;M1& literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/user-icon.png b/preecej/semantic_wiki/skins/planteome/images/user-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ac3d59d5ba285e5161b0977962a5ecf362d4ed30 GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^AT~D#GmtFY@J0(rNtU=qlmzFem6RtIr7}3Cf@_ zV(RNRZ=bySc^HY}?na)aG zwe@h7%KOV3Iq&H0-jPxwzGubP4Mxc0(V?<<4E(&tE=$?dGMs_ix?3dwbE61+QMcy!YVtuD#nr!-LOUIC1yx-APj>tXaFd zt)qFtqWNdeoL;$R*{nG;XUv}Z|NsA4UxdE{?NTTS@(TuX@d1XI80oh_wNpJ^978H@ zrSxCtJ8Zz=y71WTk0*-m9R2@4b#h3c)jMG;rvkkXQmeI_w%tB)AZC+!kk{kln~p0z zkNTAaE{!sq5bQ7FqVOs>uJLOZn?s|)giq5PXL}e}U36QJVZwYuZ^7&%R}4xv87&Y= zS24PBzxQ#Qb>5%ao3`&(9~ZtaH-Fh%v-;A^@b5DoW<+n_wmG`2AZ_O!772zdeZKqO TKYV)!bRdJLtDnm{r-UW|tf9_A literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/watch-icon-loading.gif b/preecej/semantic_wiki/skins/planteome/images/watch-icon-loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..618c308e0b0a95912a39e2e303523efc2c08facc GIT binary patch literal 840 zcmZ?wbhEHb6krfwI3mw*>(;GDj~;#a@Zr;^PcL4)c=P7XwQJXY{P^+h+qZM)&fU3l z=gO5U@7}$8@ZiD4ix*$LdiD43-+TA&{rU6f_wV2T{{6dr`SOh$H-7#4b@S%U=g*&i z{rdIk)2Gj#J^S+I%YQIX{Lk&@8WQa67~pE8XTZ$Jz`&sRlZBI+L7qVe$Obw>fPsNE z`+<62e85DFsKTgOd2^@lSn;^>;6txlk7dj~nl4Z5(3$4pRlQAW4ZiH*%6c z@3c^fT;pia^ykndu9+rczA`}gmblZnN(Os1=s}{nNq|w zCHeSRSY!oxIw@myPb1JhPs*p7jBtY&N7wZtzf34%?Tcs%#2!w z6D!td&JtkY(F_tW$Yp5gba{R8jSJiHNpBh%_!coOyRakRM#Du%p+J#E>`ZdvjFsxb ze1U@8f@}+~R)fB7AJji#2#-{lHFQMN2r957g@f0(_HK z)wMCK+3-+Mnx+5lGsi|J7HOZvlEh4#6NlQ2GhFPZDaBPY$HC1AwP%_Pmnz#yh2!p6#1q9nyC Sqs=DDZmubiyjWh5!5RSd-6zoi literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/images/watch-icons.png b/preecej/semantic_wiki/skins/planteome/images/watch-icons.png new file mode 100644 index 0000000000000000000000000000000000000000..54b2c793f9c1538dae3764414e5d0e9df1355039 GIT binary patch literal 1745 zcmd^A`BRez6pTl`1s$~&rz)PMjv~~Hij`ue77xk@-mNzpw1@~At%wK4fK-vA89a+8 zm=Kg8R|0_~Bq5Lk2m}%cfk;RQgpivgU%uDO^v~#FJD3y|e#uIhir7%!*$b_Q&^3!;l#`rl`-rm&6qO=;_EH&gdTG~dSzb!*F zjG9cNLiTlGQ%1EQ7hi7?%7(gl=U+&n#te+2Q!nM<(32n1MT}xxJvHWG3)(=9eN|L$d^K6TRUR_XlejgJByl7&;v9T+%M-6rSN$` zlTA~Ztz(&G%nNleY;>q>pwsJfsnwKjxXgx^eEDNJu=F4mGg|oN8VRn1*Qb<=)9X#d zR>%+mjsqei;n73Ouo(>6$`hXgi=>9J0y!{I~{nLrT0 zn+~XZfla-_EKNh*Zkx?&8r54Z=06y~D1S4g z)1>mjF=o>a^dX4rqXJ5m&`^)Fq>JeImBisfv#i7s4YFC zg(Bq@nlX>w3*Z#8;`%g3aQC|qlv$j}@9$<%k`T9BP>E%h#L1109$7QHCJ`}G#cf>@ z8Cfioi)17~#KhLY?7Gp~(&L4+8c{Wt)FI7kfs~@!EYC#>v3^+ltl3#bi7TYHirYIB z4oIWWq=x=By}qlrua3jzH8!=Y%;hTgP5LlXqH~(K4wE4J70Kp6UQkMmYO-~ZB&1>g zEYqgYG+YgmQCfRT0Q^2do!Y_rl*t`*JSb)9hqRiZ;o*^yDv|b6J+I$_3<5~&6Z0sn zuEu2bK$UjbEE;s=G#H*Ws-JWKAl-GPnb{v`P1RTq1IxDnfP+_8oLts2=IO-cqR2DN>1FOb#L++mK?7Ox?8GS+Vdbt(O-+rzHK? z>B%=1k)0WWbiYaKP*=wtVQd1Rzc+A~7Gtdh`uL~LeLdr40jY}*iz{QT24(!u_&MH@ z(dvncPN!jU)IagbQ}0)*xf}icf7&YbCMvMH%w$R6Z(S4iivvE0j()yW7vg(-K=RQZ zNO-SGyUL;O@?M^DW0RrEpbkhlfE$S^zrFcwc^Pfe%#odmvvglfEVwCIQ&y&b{%w$Y z$M>n}mXPJ6`^LTdc-)&>=@+~k$qrbz_`sn*i-`NNg+%+j*_FwEUOBTi{g)cLv?Og>#OQR6Ei|jAc!1U3 zm-=%auDY;twa=*of7=g5Ox)v+oBZf%-h$xuRg^6=0(;+XCb1T5OsiZpnKTwvH9t7` z!>^6CYeA9M?zvlBw^w%Nud3cOU3)mc50?|kQOEirG%PP$8syfWa&4NuueGjHUK_4viDMsC-f_4y{idxL2u}609W!P5sjmMWaocaURO%OPt?<=ZLv^<& z+0V1TE7-WxUwA3?v1b3>)#zKFGe^x{-8vssG6genK8AAn%DpB%N9*}fnDDTO?Zw-U G-}x6_gRL0= literal 0 HcmV?d00001 diff --git a/preecej/semantic_wiki/skins/planteome/main-ltr.css b/preecej/semantic_wiki/skins/planteome/main-ltr.css new file mode 100644 index 0000000..0b0f46d --- /dev/null +++ b/preecej/semantic_wiki/skins/planteome/main-ltr.css @@ -0,0 +1,1200 @@ +/* + * 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-color: #b7c8b7;*/ + /*background-image: url(images/page-base.png);*/ + + /* thanks to http://blog.fakedarren.com/2010/01/cross-browser-css-gradients/ */ + /* and http://www.puremango.co.uk/2010/04/css-gradient/ */ + /* fallback (Opera) */ + background: #b7c8b7; + /* Mozilla: */ + background: -moz-linear-gradient(top, #b7c8b7, #e7f8e7); + /* Chrome, Safari:*/ + background: -webkit-gradient(linear, + left top, left bottom, from(#b7c8b7), to(#e7f8e7)); + /* MSIE */ + filter: progid:DXImageTransform.Microsoft.Gradient( + StartColorStr='#b7c8b7', EndColorStr='#e7f8e7', GradientType=0); +} + +/* Content */ +#content { + margin-left: 10em; + padding: 1em; + background-image: url(images/border.png); + background-position: top left; + background-repeat: repeat-y; + /* fallback (Opera) */ + background: white; + /* Mozilla: */ + background: -moz-linear-gradient(top, white, #c7b3cc); + /* Chrome, Safari:*/ + background: -webkit-gradient(linear, + left top, left bottom, from(white), to(#c7b3cc)); + /* MSIE */ + filter: progid:DXImageTransform.Microsoft.Gradient( + StartColorStr='white', EndColorStr='#c7b3cc', GradientType=0); + /*background-color: white;*/ +} +/* Head */ +#mw-page-base { + height: 5em; + /*background-color: grey;*/ + background-image: url(images/page-fade.png); + opacity: 0.0; + 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; + + /* thanks to http://blog.fakedarren.com/2010/01/cross-browser-css-gradients/ */ + /* and http://www.puremango.co.uk/2010/04/css-gradient/ */ + /* fallback (Opera) */ + background: #b7c8b7; + /* Mozilla: */ + background: -moz-linear-gradient(top, #b7c8b7, #aaaaaa); + /* Chrome, Safari:*/ + background: -webkit-gradient(linear, + left top, left bottom, from(#b7c8b7), to(#aaaaaa)); + /* MSIE */ + filter: progid:DXImageTransform.Microsoft.Gradient( + StartColorStr='#b7c8b7', EndColorStr='#aaaaaa', GradientType=0); + + /*background-color: #f3f3f3;*/ + /*background-color: #b7c8b7;*/ + /*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 { + + /* thanks to http://blog.fakedarren.com/2010/01/cross-browser-css-gradients/ */ + /* and http://www.puremango.co.uk/2010/04/css-gradient/ */ + /* fallback (Opera) */ + background: #b7c8b7; + /* Mozilla: */ + background: -moz-linear-gradient(top, #b7c8b7, white); + /* Chrome, Safari:*/ + background: -webkit-gradient(linear, + left top, left bottom, from(#b7c8b7), to(white)); + /* MSIE */ + filter: progid:DXImageTransform.Microsoft.Gradient( + StartColorStr='#b7c8b7', EndColorStr='white', GradientType=0); + + /*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;*/ + color: #67536c; + 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; + + /* thanks to http://blog.fakedarren.com/2010/01/cross-browser-css-gradients/ */ + /* and http://www.puremango.co.uk/2010/04/css-gradient/ */ + /* fallback (Opera) */ + background: white; + /* Mozilla: */ + background: -moz-linear-gradient(top, white, #b7c8b7); + /* Chrome, Safari:*/ + background: -webkit-gradient(linear, + left top, left bottom, from(white), to(#b7c8b7)); + /* MSIE */ + filter: progid:DXImageTransform.Microsoft.Gradient( + StartColorStr='white', EndColorStr='#b7c8b7', GradientType=0); + + /*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; + /*color: #67536c;*/ + 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;*/ + color: #67536c; + 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

    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 #cccccc; + 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 #888; + background-color: #cccccc; + 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/preecej/semantic_wiki/skins/planteome/main-rtl.css b/preecej/semantic_wiki/skins/planteome/main-rtl.css new file mode 100644 index 0000000..5387289 --- /dev/null +++ b/preecej/semantic_wiki/skins/planteome/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

    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/preecej/semantic_wiki/skins/planteome/wiki-indexed.png b/preecej/semantic_wiki/skins/planteome/wiki-indexed.png new file mode 100644 index 0000000000000000000000000000000000000000..189a2ae3d772b9149b0cdf9960cea484eb68cb9f GIT binary patch literal 8205 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 EADla}vj6}9 literal 0 HcmV?d00001 -- 2.34.1