Index: skins/monobook/rtl.css =================================================================== --- skins/monobook/rtl.css (revision 28600) +++ skins/monobook/rtl.css (working copy) @@ -1,229 +0,0 @@ -/* -Right-to-left fixes for MonoBook. -Places sidebar on right, tweaks various alignment issues. - -Works mostly ok nicely on Safari 1.2.1; fine in Mozilla. - -Safari bugs (1.2.1): -* Tabs are still appearing in left-to-right order. (Try after localizing) - -Opera bugs (7.23 linux): -* Some bits of ltr text (sidebar box titles) have forward and backward versions overlapping each other - -IE/mac bugs: -* The thing barfs on Hebrew and Arabic anyway, so no point testing. - -Missing features due to lack of support: -* external link icons - -To test: -* Opera6 -* IE 5.0 -* etc - -*/ -body { - direction: rtl; -/* unicode-bidi: bidi-override;*/ - unicode-bidi: embed; -} -#column-content { - margin: 0 -12.2em 0 0; - float: left; -} -#column-content #content{ - margin-left: 0; - margin-right: 12.2em; - border-right: 1px solid #aaaaaa; - border-left: none; -} -html>body .portlet { - float: right; - clear: right; -} -.editsection { - float: left; - margin-right: 5px; - margin-left: 0; /* bug 9122: undo default LTR */ -} -/* recover IEMac (might be fine with the float, but usually it's close to IE */ -*>body .portlet { - float: none; - clear: none; -} -.pBody { - padding-right: 0.8em; - padding-left: 0.5em; -} - -/* Fix alignment */ -.documentByLine, -.portletDetails, -.portletMore, -#p-personal { - text-align: left; -} - -div div.thumbcaption { - text-align: right; -} - -div.magnify, -#div.townBox, -#p-logo { - left: auto; - right: 0; -} -#p-personal { - left: auto; - right: 0; -} - -#p-cactions { - left: auto; - right: 11.5em; - padding-left: 0; - padding-right: 1em; -} -#p-cactions li { - margin-left: 0.3em; - margin-right: 0; - float: right; -} -* html #p-cactions li a { - display: block; - padding-bottom: 0; -} -* html #p-cactions li a:hover { - padding-bottom: 0.2em; -} -/* offsets to distinguish the tab groups */ -li#ca-talk { - margin-right: auto; - margin-left: 1.6em; -} -li#ca-watch,li#ca-unwatch { - margin-right: 1.6em !important; -} - -/* Fix margins for non-css2 browsers */ -/* top right bottom left */ - -ul { - margin-left: 0; - margin-right: 1.5em; -} -ol { - margin-left: 0; - margin-right: 2.4em; -} -dd { - margin-left: 0; - margin-right: 1.6em; -} -#contentSub { - margin-right: 1em; - margin-left: 0; -} -.tocindent { - margin-left: 0; - margin-right: 2em; -} -div.tright, div.floatright, table.floatright { - clear: none; -} -div.tleft, div.floatleft, table.floatleft { - clear: left; -} -div.townBox { - margin-left: 0; - margin-right: 1em; -} -div.townBox dl dd { - margin-left: 0; - margin-right: 1.1em; -} -#p-personal li { - margin-left: 0; - margin-right: 1em; -} - -li#ca-talk, -li#ca-watch { - margin-right: auto; - margin-left: 1.6em; -} - -#p-personal li { - float: left; -} -/* Fix link icons */ -.external { - padding: 0 !important; - background: none !important; -} -#footer { - clear: both; -} -* html #footer { - margin-left: 0; - margin-right: 13.6em; - border-left: 0; - border-right: 1px solid #fabd23; -} -* html #column-content { - float: none; - margin-left: 0; - margin-right: 0; -} -* html #column-content #content { - margin-left: 0; - margin-top: 3em; -} -* html #column-one { right: 0; } - -/* js pref toc */ - -#preftoc { - margin-right: 1em; -} - -.errorbox, .successbox, #preftoc li, .prefsection fieldset { - float: right; -} - -.prefsection { - padding-right: 2em; -} - -/* workaround for moz bug, displayed bullets on left side */ - -#toc ul { - text-align: right; -} - -#toc ul ul { - margin: 0 2em 0 0; -} - -input#wpSave, input#wpDiff { - margin-right: 0; - margin-left: .33em; -} - -#userlogin { - float: right; - margin: 0 0 1em 3em; -} -/* Unblock and Ipblocklist links of Special:Blockip */ -p.mw-ipb-conveniencelinks { - float: left; -} - -.toggle { - margin-left: 0em; - margin-right: 2em; -} -table.filehistory th { - text-align: right; -} Index: skins/monobook/main.css =================================================================== --- skins/monobook/main.css (revision 28600) +++ skins/monobook/main.css (working copy) @@ -15,12 +15,21 @@ margin: 0 0 .6em -12.2em; padding: 0; } +body.mw-interface-rtl #column-content { + float: left; + margin: 0 -12.2em .6em 0; +} + #content { margin: 2.8em 0 0 12.2em; padding: 0 1em 1.5em 1em; position: relative; z-index: 2; } +body.mw-interface-rtl #content { + margin: 2.8em 12.2em 0 0; +} + #column-one { padding-top: 160px; } @@ -144,12 +153,26 @@ padding: 0; list-style-image: url(bullet.gif); } +body.mw-interface-rtl ul, body.rtl #content ul { + margin: .3em 1.5em 0 0; +} +body.ltr #content ul { + margin: .3em 0 0 1.5em; +} + ol { line-height: 1.5em; margin: .3em 0 0 3.2em; padding: 0; list-style-image: none; } +body.mw-interface-rtl ol, body.rtl #content ol { + margin: .3em 1.5em 0 0; +} +body.ltr #content ol { + margin: .3em 0 0 1.5em; +} + li { margin-bottom: .1em; } @@ -163,9 +186,14 @@ } dd { line-height: 1.5em; - margin-left: 2em; margin-bottom: .1em; } +body.mw-interface-rtl dd, body.rtl #content dd { + margin-right: 2em; +} +body.mw-interface-ltr dd, body.ltr #content dd { + margin-left: 2em; +} fieldset { border: 1px solid #2f6fab; @@ -241,6 +269,10 @@ color: #7d7d7d; width: auto; } +body.rtl #contentSub, body.rtl #contentSub2 { + margin: 0 1em 1.4em 0; +} + span.subpages { display: block; } @@ -283,10 +315,18 @@ font-size: larger; border: 2px solid; padding: .5em 1em; - float: left; margin-bottom: 2em; color: #000; } +body.mw-interface-rtl .errorbox, body.mw-interface-rtl .successbox, +body.rtl #content .errorbox, body.rtl #content .successbox { + float: right; +} +body.mw-interface-ltr .errorbox, body-mw-interface-ltr .successbox, +body.ltr #content .errorbox, body.ltr #content .successbox { + float: left; +} + .errorbox { border-color: red; background-color: #fff2f2; @@ -299,9 +339,16 @@ font-size: 1em; font-weight: bold; display: inline; - margin: 0 .5em 0 0; border: none; } +body.mw-interface-rtl .errorbox h2, body.mw-interface-rtl .successbox h2, +body.rtl #content .errorbox h2, body.rtl #content .successbox h2 { + margin: 0 0 0 .5em; +} +body.mw-interface-ltr .errorbox h2, body-mw-interface-ltr .successbox h2, +body.ltr #content .errorbox h2, body.ltr #content .successbox h2 { + margin: 0 .5em 0 0; +} #catlinks { border: 1px solid #aaa; @@ -320,12 +367,17 @@ line-height: 1.5em; } .documentByLine { - text-align: right; font-size: 90%; clear: both; font-weight: normal; color: #76797c; } +body.mw-interface-rtl .documentByLine, body.rtl #content .documentByLine { + text-align: left; +} +body.mw-interface-ltr .documentByLine, body.ltr #content .documentByLine { + text-align: right; +} /* emulate center */ .center { @@ -374,14 +426,25 @@ .toc ul { list-style-type: none; list-style-image: none; +} +body.rtl #toc ul, body.rtl .toc ul { + margin-right: 0; + padding-right: 0; + text-align: right; +} +body.ltr #toc ul, body.ltr .toc ul { margin-left: 0; padding-left: 0; text-align: left; } -#toc ul ul, -.toc ul ul { + +body.rtl #toc ul ul, body.rtl .toc ul ul { + margin: 0 2em 0 0; +} +body.ltr #toc ul ul, body.ltr .toc ul ul { margin: 0 0 0 2em; } + #toc .toctoggle, .toc .toctoggle { font-size: 94%; @@ -437,6 +500,7 @@ html .thumbimage { border: 1px solid #ccc; } + html .thumbcaption { border: none; text-align: left; @@ -444,11 +508,19 @@ padding: 3px !important; font-size: 94%; } +html body.rtl .thumbcaption { + text-align: right; +} + div.magnify { float: right; border: none !important; background: none !important; } +body.rtl div.magnify { + float: left; +} + div.magnify a, div.magnify img { display: block; border: none !important; @@ -545,6 +617,11 @@ margin-left: 1.4em; margin-right: .4em; } +body.mw-interface-rtl #pagehistory span.user { + margin-left: .4em; + margin-right: 1.4em; +} + #pagehistory span.minor { font-weight: bold; } @@ -560,6 +637,8 @@ ** keep the whitespace in front of the ^=, hides rule from konqueror ** this is css3, the validator doesn't like it when validating as css2 */ + +/* Keep this synced with the RTL version below! */ #bodyContent a.external, #bodyContent a[href ^="gopher://"] { background: url(external.png) center right no-repeat; @@ -615,6 +694,86 @@ padding-right: 12px; } +/* We repeat the whole thing for RTL. Make sure these stay synced! */ +body.rtl #bodyContent a.external, +body.rtl #bodyContent a[href ^="gopher://"] { + background: url(external.png) center left no-repeat; + padding-right: 0; + padding-left: 13px; +} +body.rtl #bodyContent a[href ^="https://"], +body.rtl .link-https { + background: url(lock_icon.gif) center left no-repeat; + padding-right: 0; + padding-left: 16px; +} +body.rtl #bodyContent a[href ^="mailto:"], +body.rtl .link-mailto { + background: url(mail_icon.gif) center left no-repeat; + padding-right: 0; + padding-left: 18px; +} +body.rtl #bodyContent a[href ^="news://"] { + background: url(news_icon.png) center left no-repeat; + padding-right: 0; + padding-left: 18px; +} +body.rtl #bodyContent a[href ^="ftp://"], +body.rtl .link-ftp { + background: url(file_icon.gif) center left no-repeat; + padding-right: 0; + padding-left: 18px; +} +body.rtl #bodyContent a[href ^="irc://"], +body.rtl .link-irc { + background: url(discussionitem_icon.gif) center left no-repeat; + padding-right: 0; + padding-left: 18px; +} +body.rtl #bodyContent a.external[href $=".ogg"], +body.rtl #bodyContent a.external[href $=".OGG"], +body.rtl #bodyContent a.external[href $=".mid"], +body.rtl #bodyContent a.external[href $=".MID"], +body.rtl #bodyContent a.external[href $=".midi"], +body.rtl #bodyContent a.external[href $=".MIDI"], +body.rtl #bodyContent a.external[href $=".mp3"], +body.rtl #bodyContent a.external[href $=".MP3"], +body.rtl #bodyContent a.external[href $=".wav"], +body.rtl #bodyContent a.external[href $=".WAV"], +body.rtl #bodyContent a.external[href $=".wma"], +body.rtl #bodyContent a.external[href $=".WMA"], +body.rtl .link-audio { + background: url("audio.png") center left no-repeat; + padding-right: 0; + padding-left: 13px; +} +body.rtl #bodyContent a.external[href $=".ogm"], +body.rtl #bodyContent a.external[href $=".OGM"], +body.rtl #bodyContent a.external[href $=".avi"], +body.rtl #bodyContent a.external[href $=".AVI"], +body.rtl #bodyContent a.external[href $=".mpeg"], +body.rtl #bodyContent a.external[href $=".MPEG"], +body.rtl #bodyContent a.external[href $=".mpg"], +body.rtl #bodyContent a.external[href $=".MPG"], +body.rtl .link-video { + background: url("video.png") center left no-repeat; + padding-right: 0; + padding-left: 13px; +} +body.rtl #bodyContent a.external[href $=".pdf"], +body.rtl #bodyContent a.external[href $=".PDF"], +body.rtl #bodyContent a.external[href *=".pdf#"], +body.rtl #bodyContent a.external[href *=".PDF#"], +body.rtl #bodyContent a.external[href *=".pdf?"], +body.rtl #bodyContent a.external[href *=".PDF?"], +body.rtl .link-document { + background: url("document.png") center left no-repeat; + padding-right: 0; + padding-left: 12px; +} + + + /* disable interwiki styling */ #bodyContent a.extiw, #bodyContent a.extiw:active { @@ -661,11 +820,14 @@ font-weight: normal; white-space: nowrap; } +body.mw-interface-rtl .portlet h5 { + padding: 0 .5em 0 1em; +} .portlet h6 { background: #ffae2e; border: 1px solid #2f6fab; - border-style: solid solid none solid; - padding: 0 1em 0 1em; + border-style: solid solid none; + padding: 0 1em; text-transform: lowercase; display: block; font-size: 1em; @@ -681,6 +843,9 @@ border: 1px solid #aaa; padding: 0 .8em .3em .5em; } +body.mw-interface-rtl .pBody { + padding: 0 .5em .3em .8em; +} .portlet h1, .portlet h2, .portlet h3, @@ -705,13 +870,15 @@ #p-logo { top: 0; - left: 0; position: absolute; /*needed to use z-index */ z-index: 3; height: 155px; width: 12em; overflow: visible; } +body.mw-interface-ltr #p-logo { left: 0; } +body.mw-interface-rtl #p-logo { right: 0; } + #p-logo h5 { display: none; } @@ -747,7 +914,7 @@ font-size: 95%; } #p-search .pBody { - padding: .5em .4em .4em .4em; + padding: .5em .4em .4em; text-align: center; } @@ -756,11 +923,8 @@ */ #p-personal { position: absolute; - left: 0; top: 0; z-index: 0; -} -#p-personal { width: 100%; white-space: nowrap; padding: 0; @@ -770,6 +934,8 @@ overflow: visible; line-height: 1.2em; } +body.mw-interface-ltr #p-personal { left: 0; } +body.mw-interface-rtl #p-personal { right: 0; } #p-personal h5 { display: none; } @@ -787,24 +953,37 @@ border: none; line-height: 1.4em; color: #2f6fab; - padding: 0 2em 0 3em; margin: 0; - text-align: right; list-style: none; z-index: 0; background: none; cursor: default; } +body.mw-interface-ltr #p-personal ul { + padding: 0 2em 0 3em; + text-align: right; +} +body.mw-interface-rtl #p-personal ul { + padding: 0 3em 0 2em; + text-align: left; +} + #p-personal li { z-index: 0; border: none; padding: 0; display: inline; color: #2f6fab; - margin-left: 1em; line-height: 1.2em; background: none; } +body.mw-interface-ltr #p-personal li { + margin-left: 1em; +} +body.mw-interface-rtl #p-personal li { + margin-right: 1em; +} + #p-personal li a { text-decoration: none; color: #005896; @@ -825,9 +1004,19 @@ li#pt-anonuserpage, li#pt-login { background: url(user.gif) top left no-repeat; - padding-left: 20px; text-transform: none; } +body.mw-interface-ltr li#pt-userpage, +body.mw-interface-ltr li#pt-anonuserpage, +body.mw-interface-ltr li#pt-login { + padding-left: 20px; +} +body.mw-interface-rtl li#pt-userpage, +body.mw-interface-rtl li#pt-anonuserpage, +body.mw-interface-rtl li#pt-login { + padding-right: 20px; +} + #p-personal ul { text-transform: lowercase; } @@ -840,7 +1029,6 @@ #p-cactions { position: absolute; top: 1.3em; - left: 11.5em; margin: 0; white-space: nowrap; width: 76%; @@ -848,10 +1036,18 @@ overflow: visible; background: none; border-collapse: collapse; - padding-left: 1em; list-style: none; font-size: 95%; } +body.mw-interface-ltr #p-cactions { + left: 11.5em; + padding-left: 1em; +} +body.mw-interface-rtl #p-cactions { + right: 11.5em; + padding-right: 1em; +} + #p-cactions ul { list-style: none; } @@ -859,14 +1055,18 @@ display: inline; border: 1px solid #aaa; border-bottom: none; - padding: 0 0 .1em 0; + padding: 0 0 .1em; margin: 0 .3em 0 0; overflow: visible; background: white; } +body.mw-interface-rtl #p-cactions li { + margin: 0 0 0 .3em; +} + #p-cactions li.selected { border-color: #fabd23; - padding: 0 0 .2em 0; + padding: 0 0 .2em; font-weight: bold; } #p-cactions li a { @@ -881,7 +1081,7 @@ } #p-cactions li.selected a { z-index: 3; - padding: 0 1em .2em!important; + padding: 0 1em .2em !important; background-color: white; } #p-cactions .new a { @@ -895,23 +1095,29 @@ #p-cactions h5 { display: none; } -#p-cactions li.istalk { - margin-right: 0; -} -#p-cactions li.istalk a { - padding-right: .5em; -} + +body.mw-interface-ltr #p-cactions li.istalk { margin-right: 0; } +body.mw-interface-rtl #p-cactions li.istalk { margin-left: 0; } +body.mw-interface-ltr #p-cactions li.istalk a { padding-right: .5em; } +body.mw-interface-rtl #p-cactions li.istalk a { padding-left: .5em; } + #p-cactions #ca-addsection a { padding-left: .4em; padding-right: .4em; } /* offsets to distinguish the tab groups */ -li#ca-talk { +body.mw-interface-ltr li#ca-talk { margin-right: 1.6em; } +body.mw-interface-rtl li#ca-talk { margin-left: 1.6em; } + +body.mw-interface-ltr li#ca-watch, body.mw-interface-ltr li#ca-unwatch, +body.mw-interface-ltr li#ca-varlang-0, body.mw-interface-ltr li#ca-print { + margin-left: 1.6em; +} +body.mw-interface-rtl li#ca-watch, body.mw-interface-rtl li#ca-unwatch, +body.mw-interface-rtl li#ca-varlang-0, body.mw-interface-rtl li#ca-print { margin-right: 1.6em; } -li#ca-watch, li#ca-unwatch, li#ca-varlang-0, li#ca-print { - margin-left: 1.6em; -} + #p-cactions .pBody { font-size: 1em; background-color: transparent; @@ -949,8 +1155,8 @@ background-color: white; border-top: 1px solid #fabd23; border-bottom: 1px solid #fabd23; - margin: .6em 0 1em 0; - padding: .4em 0 1.2em 0; + margin: .6em 0 1em; + padding: .4em 0 1.2em; text-align: center; font-size: 90%; } @@ -967,10 +1173,12 @@ float: right; height: 1%; } +body.mw-interface-ltr #f-poweredbyico { float: left; } #f-copyrightico { float: left; height: 1%; } +body.mw-interface-ltr #f-copyrightico { float: right; } /* js pref toc */ #preftoc { @@ -986,7 +1194,7 @@ #preftoc li { margin: 1px -2px 1px 2px; float: left; - padding: 2px 0 3px 0; + padding: 2px 0 3px; border: 1px solid #fff; border-right-color: #716f64; border-bottom: 0; @@ -996,6 +1204,11 @@ list-style-image: none; z-index: 3; } +body.mw-interface-rtl #preftoc li { + margin: 1px 2px 1px -2px; + float: right; +} + #preftoc li.selected { font-weight: bold; background-color: #f9f9f9; @@ -1004,8 +1217,10 @@ cursor: default; top: 1px; padding-top: 2px; - margin-right: -3px; } +body.mw-interface-ltr #preftoc li.selected { margin-right: -3px; } +body.mw-interface-rtl #preftoc li.selected { margin-left: -3px; } + #preftoc > li.selected { top: 2px; } @@ -1039,9 +1254,16 @@ } .prefsection fieldset { border: 1px solid #aaa; +} +body.mw-interface-ltr .prefsection fieldset { float: left; margin-right: 2em; } +body.mw-interface-rtl .prefsection fieldset { + float: right; + margin-left: 2em; +} + .prefsection legend { font-weight: bold; } @@ -1081,6 +1303,11 @@ background-color: #f9f9f9; float: left; } +body.mw-interface-rtl div#userloginForm form, +body.mw-interface-rtl div#userlogin form#userlogin2 { + margin: 0 0 1em 3em; + float: right; +} div#userloginForm table, div#userlogin form#userlogin2 table { @@ -1156,12 +1383,14 @@ } * > html #column-one { position: absolute; - left: 0; top: 0; } -* > html #footer { - margin-left: 13.2em; -} +* > html body.mw-interface-ltr #column-one { left: 0; } +* > html body.mw-interface-rtl #column-one { right: 0; } + +* > html body.mw-interface-ltr #footer { margin-left: 13.2em; } +* > html body.mw-interface-rtl #footer { margin-right: 13.2em; } + .redirectText { font-size: 150%; margin: 5px; @@ -1260,6 +1489,11 @@ padding: 0; } +/** + * This doesn't seem to be used, so not sure whether it should go according to + * interface or content direction. Leaving alone, I guess it makes no diffe- + * rence. + */ .editExternally { border: 1px solid gray; background-color: #ffffff; @@ -1280,18 +1514,18 @@ font-style: italic; } -.toggle { - margin-left: 2em; - text-indent: -2em; -} +body.mw-interface-ltr .toggle { margin-left: 2em; } +body.mw-interface-rtl .toggle { margin-right: 2em; } +.toggle { text-indent: -2em; } /* Classes for EXIF data display */ table.mw_metadata { font-size: 0.8em; - margin-left: 0.5em; margin-bottom: 0.5em; width: 300px; } +body.mw-interface-ltr table.mw_metadata { margin-left: 0.5em; } +body.mw-interface-rtl table.mw_metadata { margin-right: 0.5em; } table.mw_metadata caption { font-weight: bold; @@ -1345,17 +1579,21 @@ #filetoc li { display: inline; list-style-type: none; - padding-right: 2em; } +body.mw-interface-ltr #filetoc li { padding-right: 2em; } +body.mw-interface-rtl #filetoc li { padding-left: 2em; } input#wpSummary { width: 80%; } /* @bug 1714 */ -input#wpSave, input#wpDiff { +body.mw-interface-ltr input#wpSave, body.mw-interface-ltr input#wpDiff { margin-right: 0.33em; } +body.mw-interface-rtl input#wpSave, body.mw-interface-rtl input#wpDiff { + margin-left: 0.33em; +} #editform .editOptions { display: inline; Index: skins/MonoBook.php =================================================================== --- skins/MonoBook.php (revision 28600) +++ skins/MonoBook.php (working copy) @@ -41,8 +41,10 @@ * @access private */ function execute() { - global $wgUser; + global $wgUser, $wgLang, $wgContLang; $skin = $wgUser->getSkin(); + $interfaceDir = $wgLang->isRTL() ? 'rtl' : 'ltr'; + $contentDir = $wgContLang->isRTL() ? 'rtl' : 'ltr'; // Suppress warnings to prevent notices about missing indexes in $this->data wfSuppressWarnings(); @@ -51,7 +53,7 @@ data['xhtmlnamespaces'] as $tag => $ns) { ?>xmlns:xml:lang="text('lang') ?>" lang="text('lang') ?>" dir="text('dir') ?>"> + } ?>xml:lang="text('lang') ?>" lang="text('lang') ?>" dir=""> html('headlinks') ?> @@ -92,9 +94,9 @@ data['body_ondblclick']) { ?>ondblclick="text('body_ondblclick') ?>" data['body_onload' ]) { ?>onload="text('body_onload') ?>" - class="mediawiki text('nsclass') ?> text('dir') ?> text('pageclass') ?>"> + class="mediawiki text('nsclass') ?> text('pageclass') ?>">
-
+
data['sitenotice']) { ?>
html('sitenotice') ?>
Index: includes/SkinTemplate.php =================================================================== --- includes/SkinTemplate.php (revision 28600) +++ includes/SkinTemplate.php (working copy) @@ -1005,11 +1005,6 @@ $siteargs .= '&ts=' . $wgUser->mTouched; } - if( $wgContLang->isRTL() ) { - global $wgStyleVersion; - $sitecss .= "@import \"$wgStylePath/$this->stylename/rtl.css?$wgStyleVersion\";\n"; - } - # If we use the site's dynamic CSS, throw that in, too if ( $wgUseSiteCss ) { $query = "usemsgcache=yes&action=raw&ctype=text/css&smaxage=$wgSquidMaxage";