http://www.mediawiki.org/wiki/Special:Code/MediaWiki/66316
Revision: 66316 Author: tparscal Date: 2010-05-12 23:12:20 +0000 (Wed, 12 May 2010) Log Message: ----------- Improved loading spinner visibility. Added versions to CSS image urls. Modified Paths: -------------- trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php trunk/extensions/UsabilityInitiative/css/combined.css trunk/extensions/UsabilityInitiative/css/combined.min.css trunk/extensions/UsabilityInitiative/css/vector.collapsibleNav.css trunk/extensions/UsabilityInitiative/css/vector.footerCleanup.css trunk/extensions/UsabilityInitiative/css/wikiEditor.css trunk/extensions/UsabilityInitiative/css/wikiEditor.dialogs.css trunk/extensions/UsabilityInitiative/css/wikiEditor.toc.css trunk/extensions/UsabilityInitiative/css/wikiEditor.toolbar.css trunk/extensions/UsabilityInitiative/images/wikiEditor/toolbar/loading.gif trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.toolbar.js trunk/extensions/UsabilityInitiative/js/plugins.combined.js trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js Added Paths: ----------- trunk/extensions/UsabilityInitiative/images/wikiEditor/toolbar/loading-small.gif Modified: trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php =================================================================== --- trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php 2010-05-12 22:44:31 UTC (rev 66315) +++ trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php 2010-05-12 23:12:20 UTC (rev 66316) @@ -19,21 +19,21 @@ 'base_sets' => array( 'raw' => array( array( 'src' => 'css/suggestions.css', 'version' => 12 ), - array( 'src' => 'css/vector.collapsibleNav.css', 'version' => 8 ), - array( 'src' => 'css/vector.footerCleanup.css', 'version' => 1 ), - array( 'src' => 'css/wikiEditor.css', 'version' => 12 ), - array( 'src' => 'css/wikiEditor.dialogs.css', 'version' => 28 ), + array( 'src' => 'css/vector.collapsibleNav.css', 'version' => 9 ), + array( 'src' => 'css/vector.footerCleanup.css', 'version' => 2 ), + array( 'src' => 'css/wikiEditor.css', 'version' => 13 ), + array( 'src' => 'css/wikiEditor.dialogs.css', 'version' => 29 ), array( 'src' => 'css/wikiEditor.preview.css', 'version' => 1 ), - array( 'src' => 'css/wikiEditor.toc.css', 'version' => 30 ), - array( 'src' => 'css/wikiEditor.toolbar.css', 'version' => 16 ), + array( 'src' => 'css/wikiEditor.toc.css', 'version' => 31 ), + array( 'src' => 'css/wikiEditor.toolbar.css', 'version' => 17 ), array( 'src' => 'css/vector/jquery-ui-1.7.2.css', 'version' => '1.7.2y' ), ), 'combined' => array( - array( 'src' => 'css/combined.css', 'version' => 89 ), + array( 'src' => 'css/combined.css', 'version' => 91 ), array( 'src' => 'css/vector/jquery-ui-1.7.2.css', 'version' => '1.7.2y' ), ), 'minified' => array( - array( 'src' => 'css/combined.min.css', 'version' => 89 ), + array( 'src' => 'css/combined.min.css', 'version' => 91 ), array( 'src' => 'css/vector/jquery-ui-1.7.2.css', 'version' => '1.7.2y' ), ), ) @@ -74,7 +74,7 @@ array( 'src' => 'js/plugins/jquery.textSelection.js', 'version' => 32 ), array( 'src' => 'js/plugins/jquery.wikiEditor.js', 'version' => 187 ), array( 'src' => 'js/plugins/jquery.wikiEditor.highlight.js', 'version' => 53 ), - array( 'src' => 'js/plugins/jquery.wikiEditor.toolbar.js', 'version' => 61 ), + array( 'src' => 'js/plugins/jquery.wikiEditor.toolbar.js', 'version' => 62 ), array( 'src' => 'js/plugins/jquery.wikiEditor.dialogs.js', 'version' => 24 ), array( 'src' => 'js/plugins/jquery.wikiEditor.toc.js', 'version' => 98 ), array( 'src' => 'js/plugins/jquery.wikiEditor.preview.js', 'version' => 11 ), @@ -83,10 +83,10 @@ array( 'src' => 'js/plugins/jquery.wikiEditor.publish.js', 'version' => 5 ), ), 'combined' => array( - array( 'src' => 'js/plugins.combined.js', 'version' => 394 ), + array( 'src' => 'js/plugins.combined.js', 'version' => 395 ), ), 'minified' => array( - array( 'src' => 'js/plugins.combined.min.js', 'version' => 394 ), + array( 'src' => 'js/plugins.combined.min.js', 'version' => 395 ), ), ), ); Modified: trunk/extensions/UsabilityInitiative/css/combined.css =================================================================== --- trunk/extensions/UsabilityInitiative/css/combined.css 2010-05-12 22:44:31 UTC (rev 66315) +++ trunk/extensions/UsabilityInitiative/css/combined.css 2010-05-12 23:12:20 UTC (rev 66316) @@ -66,7 +66,7 @@ color: HighlightText; }/* Prototype code to show collapsing left nav options */ #panel.collapsible-nav div.portal { - background-image:url(../images/vector/collapsibleNav/portal-break.png); + background-image:url(../images/vector/collapsibleNav/portal-break.png?1); background-position:left top; background-repeat:no-repeat; padding: 0.25em 0 !important; @@ -79,21 +79,21 @@ #panel.collapsible-nav div.portal h5 { color: #4D4D4D; font-weight: normal; - background: url(../images/vector/collapsibleNav/arrow-down.png) 0 50% no-repeat; + background: url(../images/vector/collapsibleNav/arrow-down.png?1) 0 50% no-repeat; padding: 4px 0 3px 1.5em; margin-bottom: 0px; } body.rtl #panel.collapsible-nav div.portal h5 { - background: url(../images/vector/collapsibleNav/arrow-down.png) 100% 50% no-repeat; + background: url(../images/vector/collapsibleNav/arrow-down.png?1) 100% 50% no-repeat; padding: 4px 1.5em 3px 0; } #panel.collapsible-nav div.collapsed h5 { color: #0645AD; - background: url(../images/vector/collapsibleNav/arrow-right.png) 0 50% no-repeat; + background: url(../images/vector/collapsibleNav/arrow-right.png?1) 0 50% no-repeat; margin-bottom: 0px; } body.rtl #panel.collapsible-nav div.collapsed h5 { - background: url(../images/vector/collapsibleNav/arrow-left.png) 100% 50% no-repeat; + background: url(../images/vector/collapsibleNav/arrow-left.png?1) 100% 50% no-repeat; } #panel.collapsible-nav div h5:hover { cursor: pointer; @@ -153,7 +153,7 @@ position: relative; clear: both; width: 100%; - background-color: #f3f3f3; + background-color: #E0EEf7; border: solid silver 1px; } body.rtl .wikiEditor-ui { @@ -293,32 +293,32 @@ padding: 0.2em 0.6em 0.15em !important; margin: 0.5em 0 0.5em 0.4em !important; border: 1px solid #a6a6a6 !important; - background: #f2f2f2 url( ../images/wikiEditor/dialogs/button_off.png ) repeat-x scroll 50% 100% !important; + background: #f2f2f2 url( ../images/wikiEditor/dialogs/button_off.png?1) repeat-x scroll 50% 100% !important; } .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button:hover { border-color: #6e7273; - background: #e1e1e1 url( ../images/wikiEditor/dialogs/button_over.png ) repeat-x scroll 50% 100% !important; + background: #e1e1e1 url( ../images/wikiEditor/dialogs/button_over.png?1) repeat-x scroll 50% 100% !important; } .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button:active, .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button:focus { border-color: #707271; - background: #bfbfbf url( ../images/wikiEditor/dialogs/button_down.png ) repeat-x scroll 50% 100% !important; + background: #bfbfbf url( ../images/wikiEditor/dialogs/button_down.png?1) repeat-x scroll 50% 100% !important; } .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button.disabled { color: #7f7f7f; border-color: #cccccc; - background: #f2f2f2 url( ../images/wikiEditor/dialogs/button_disabled.png ) repeat-x scroll 50% 100% !important; + background: #f2f2f2 url( ../images/wikiEditor/dialogs/button_disabled.png?1) repeat-x scroll 50% 100% !important; } /* Disables the annoying dashed border Firefox puts on active buttons */ .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button::-moz-focus-inner { border: 0; } .wikiEditor-toolbar-dialog .ui-widget-header { - background: #f0f0f0 url( ../images/wikiEditor/dialogs/titlebar_fade.png ) repeat-x scroll 50% 100% !important; + background: #f0f0f0 url( ../images/wikiEditor/dialogs/titlebar_fade.png?1) repeat-x scroll 50% 100% !important; } /* FIXME: Should just update the icon sprite if we're keeping this X */ .wikiEditor-toolbar-dialog .ui-icon-closethick { - background: url( ../images/wikiEditor/dialogs/close_x.png ) no-repeat 50% 50% !important; + background: url( ../images/wikiEditor/dialogs/close_x.png?1) no-repeat 50% 50% !important; } .wikiEditor-toolbar-dialog .ui-dialog-buttonpane { margin-top: 0 !important; @@ -440,16 +440,16 @@ background-repeat: no-repeat; } #wikieditor-toolbar-link-int-target-status-exists { - background-image: url( ../images/wikiEditor/dialogs/insert-link-exists.png ); + background-image: url( ../images/wikiEditor/dialogs/insert-link-exists.png?1); } #wikieditor-toolbar-link-int-target-status-notexists { - background-image: url( ../images/wikiEditor/dialogs/insert-link-notexists.png ); + background-image: url( ../images/wikiEditor/dialogs/insert-link-notexists.png?1); } #wikieditor-toolbar-link-int-target-status-invalid { - background-image: url( ../images/wikiEditor/dialogs/insert-link-invalid.png ); + background-image: url( ../images/wikiEditor/dialogs/insert-link-invalid.png?1); } #wikieditor-toolbar-link-int-target-status-external { - background-image: url( ../images/wikiEditor/dialogs/insert-link-external.png ); + background-image: url( ../images/wikiEditor/dialogs/insert-link-external.png?1); } /* Reference Dialog */ @@ -492,7 +492,7 @@ background-position: 100% 50%; } body.rtl #wikieditor-toolbar-link-int-target-status-external { - background-image: url( ../images/wikiEditor/dialogs/insert-link-external-rtl.png ); + background-image: url( ../images/wikiEditor/dialogs/insert-link-external-rtl.png?1); } /* Template Editor Dialogs */ .wikiEditor-template-dialog-fields label { @@ -592,7 +592,7 @@ } .tab-toc { /* Should match the toolbar */ - background-image: url(../images/wikiEditor/toolbar/base.png); + background-image: url(../images/wikiEditor/toolbar/base.png?1); background-position: left top; background-repeat: repeat-x; height: 26px; @@ -708,11 +708,11 @@ left: 0; } .wikiEditor-ui-toc-collapse-open { - background: #f3f3f3 url(../images/wikiEditor/toc/close.png) 4px 50% no-repeat; + background: #f3f3f3 url(../images/wikiEditor/toc/close.png?1) 4px 50% no-repeat; border-left: 1px solid #DDDDDD; } .wikiEditor-ui-toc-collapse-closed { - background: #f3f3f3 url(../images/wikiEditor/toc/open.png) 4px 50% no-repeat; + background: #f3f3f3 url(../images/wikiEditor/toc/open.png?1) 4px 50% no-repeat; } /* Resizing Changes */ @@ -741,7 +741,7 @@ top: 7px; left: -12px !important; cursor: ew-resize; - background: url(../images/wikiEditor/toc/grip.png) 50% 50% no-repeat; + background: url(../images/wikiEditor/toc/grip.png?1) 50% 50% no-repeat; z-index: 0; } body.rtl .wikiEditor-ui-right .wikiEditor-ui-toc-resize-grip { @@ -806,35 +806,31 @@ background-color: #E0EEf7; } .wikiEditor-ui-toolbar { - background-image: url(../images/wikiEditor/toolbar/base.png); + background-image: url(../images/wikiEditor/toolbar/base.png?1); background-position: left top; background-repeat: repeat-x; } /* .wikiEditor-ui-toolbar .toolbar { - background-image: url(../images/wikiEditor/toolbar/base.png); + background-image: url(../images/wikiEditor/toolbar/base.png?1); background-position: left top; } */ body.rtl .wikiEditor-ui-toolbar .sections .section { float: right; } -.wikiEditor-ui-toolbar .sections .loading { - padding-top: 0.5em; - padding-bottom: 0.5em; -} /* Gets overridden when the section div is in class loading - see below */ .wikiEditor-ui-toolbar .sections div .spinner { display: none; } .wikiEditor-ui-toolbar .sections .loading .spinner { display: block; - background-image: url(../images/wikiEditor/toolbar/loading.gif); + background-image: url(../images/wikiEditor/toolbar/loading.gif?1); background-position: left center; background-repeat: no-repeat; padding-left: 32px; - margin-left: 1em; - height: 22px; + margin-left: 0.5em; + height: 32px; float: left; color: #666666; } @@ -843,7 +839,7 @@ padding-left: 0; padding-right: 32px; margin-left: 0; - margin-right: 1em; + margin-right: 0.5em; float: right; } /* Top Level Containers */ @@ -928,7 +924,7 @@ height: 26px; cursor: pointer; color: #0645ad; - background-image: url(../images/wikiEditor/toolbar/arrow-right.png); + background-image: url(../images/wikiEditor/toolbar/arrow-right.png?1); background-position: left center; background-repeat: no-repeat; } @@ -936,7 +932,7 @@ body.rtl .wikiEditor-ui-toolbar .tabs span.tab a:visited { padding-left: 12px; padding-right: 18px; - background-image: url(../images/wikiEditor/toolbar/arrow-left.png); + background-image: url(../images/wikiEditor/toolbar/arrow-left.png?1); background-position: right center; } /* IGNORED BY IE6 */ @@ -947,15 +943,18 @@ .wikiEditor-ui-toolbar .tabs span.tab a.current, .wikiEditor-ui-toolbar .tabs span.tab a.current:visited { color: #333333; - background-image: url(../images/wikiEditor/toolbar/arrow-down.png); + background-image: url(../images/wikiEditor/toolbar/arrow-down.png?1); } body.rtl .wikiEditor-ui-toolbar .tabs span.tab a.current, body.rtl .wikiEditor-ui-toolbar .tabs span.tab a.current:visited { - background-image: url(../images/wikiEditor/toolbar/arrow-down.png); + background-image: url(../images/wikiEditor/toolbar/arrow-down.png?1); } .wikiEditor-ui-toolbar .tabs span.tab a.current:hover { text-decoration: none; } +.wikiEditor-ui-toolbar .tabs span.tab a.loading { + background-image: url(../images/wikiEditor/toolbar/loading-small.gif?1) !important; +} /* Toolbar */ .wikiEditor-ui-toolbar .group .label { float: left; @@ -1002,7 +1001,7 @@ float: right; } .wikiEditor-ui-toolbar .group .tool-select .label { - background-image: url(../images/wikiEditor/toolbar/arrow-down.png); + background-image: url(../images/wikiEditor/toolbar/arrow-down.png?1); background-position: center right; background-repeat: no-repeat; padding: 0; Modified: trunk/extensions/UsabilityInitiative/css/combined.min.css =================================================================== --- trunk/extensions/UsabilityInitiative/css/combined.min.css 2010-05-12 22:44:31 UTC (rev 66315) +++ trunk/extensions/UsabilityInitiative/css/combined.min.css 2010-05-12 23:12:20 UTC (rev 66316) @@ -64,7 +64,7 @@ color:HighlightText; } #panel.collapsible-nav div.portal{ -background-image:url(../images/vector/collapsibleNav/portal-break.png); +background-image:url(../images/vector/collapsibleNav/portal-break.png?1); background-position:left top; background-repeat:no-repeat; padding:0.25em 0 !important; @@ -77,21 +77,21 @@ #panel.collapsible-nav div.portal h5{ color:#4D4D4D; font-weight:normal; -background:url(../images/vector/collapsibleNav/arrow-down.png) 0 50% no-repeat; +background:url(../images/vector/collapsibleNav/arrow-down.png?1) 0 50% no-repeat; padding:4px 0 3px 1.5em; margin-bottom:0px; } body.rtl #panel.collapsible-nav div.portal h5{ -background:url(../images/vector/collapsibleNav/arrow-down.png) 100% 50% no-repeat; +background:url(../images/vector/collapsibleNav/arrow-down.png?1) 100% 50% no-repeat; padding:4px 1.5em 3px 0; } #panel.collapsible-nav div.collapsed h5{ color:#0645AD; -background:url(../images/vector/collapsibleNav/arrow-right.png) 0 50% no-repeat; +background:url(../images/vector/collapsibleNav/arrow-right.png?1) 0 50% no-repeat; margin-bottom:0px; } body.rtl #panel.collapsible-nav div.collapsed h5{ -background:url(../images/vector/collapsibleNav/arrow-left.png) 100% 50% no-repeat; +background:url(../images/vector/collapsibleNav/arrow-left.png?1) 100% 50% no-repeat; } #panel.collapsible-nav div h5:hover{ cursor:pointer; @@ -146,7 +146,7 @@ position:relative; clear:both; width:100%; -background-color:#f3f3f3; +background-color:#E0EEf7; border:solid silver 1px; } body.rtl .wikiEditor-ui{ @@ -282,30 +282,30 @@ padding:0.2em 0.6em 0.15em !important; margin:0.5em 0 0.5em 0.4em !important; border:1px solid #a6a6a6 !important; -background:#f2f2f2 url( ../images/wikiEditor/dialogs/button_off.png ) repeat-x scroll 50% 100% !important; +background:#f2f2f2 url( ../images/wikiEditor/dialogs/button_off.png?1) repeat-x scroll 50% 100% !important; } .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button:hover{ border-color:#6e7273; -background:#e1e1e1 url( ../images/wikiEditor/dialogs/button_over.png ) repeat-x scroll 50% 100% !important; +background:#e1e1e1 url( ../images/wikiEditor/dialogs/button_over.png?1) repeat-x scroll 50% 100% !important; } .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button:active, .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button:focus{ border-color:#707271; -background:#bfbfbf url( ../images/wikiEditor/dialogs/button_down.png ) repeat-x scroll 50% 100% !important; +background:#bfbfbf url( ../images/wikiEditor/dialogs/button_down.png?1) repeat-x scroll 50% 100% !important; } .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button.disabled{ color:#7f7f7f; border-color:#cccccc; -background:#f2f2f2 url( ../images/wikiEditor/dialogs/button_disabled.png ) repeat-x scroll 50% 100% !important; +background:#f2f2f2 url( ../images/wikiEditor/dialogs/button_disabled.png?1) repeat-x scroll 50% 100% !important; } .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button::-moz-focus-inner{ border:0; } .wikiEditor-toolbar-dialog .ui-widget-header{ -background:#f0f0f0 url( ../images/wikiEditor/dialogs/titlebar_fade.png ) repeat-x scroll 50% 100% !important; +background:#f0f0f0 url( ../images/wikiEditor/dialogs/titlebar_fade.png?1) repeat-x scroll 50% 100% !important; } .wikiEditor-toolbar-dialog .ui-icon-closethick{ -background:url( ../images/wikiEditor/dialogs/close_x.png ) no-repeat 50% 50% !important; +background:url( ../images/wikiEditor/dialogs/close_x.png?1) no-repeat 50% 50% !important; } .wikiEditor-toolbar-dialog .ui-dialog-buttonpane{ margin-top:0 !important; @@ -421,16 +421,16 @@ background-repeat:no-repeat; } #wikieditor-toolbar-link-int-target-status-exists{ -background-image:url( ../images/wikiEditor/dialogs/insert-link-exists.png ); +background-image:url( ../images/wikiEditor/dialogs/insert-link-exists.png?1); } #wikieditor-toolbar-link-int-target-status-notexists{ -background-image:url( ../images/wikiEditor/dialogs/insert-link-notexists.png ); +background-image:url( ../images/wikiEditor/dialogs/insert-link-notexists.png?1); } #wikieditor-toolbar-link-int-target-status-invalid{ -background-image:url( ../images/wikiEditor/dialogs/insert-link-invalid.png ); +background-image:url( ../images/wikiEditor/dialogs/insert-link-invalid.png?1); } #wikieditor-toolbar-link-int-target-status-external{ -background-image:url( ../images/wikiEditor/dialogs/insert-link-external.png ); +background-image:url( ../images/wikiEditor/dialogs/insert-link-external.png?1); } #wikieditor-toolbar-reference-dialog label{ float:left; @@ -470,7 +470,7 @@ background-position:100% 50%; } body.rtl #wikieditor-toolbar-link-int-target-status-external{ -background-image:url( ../images/wikiEditor/dialogs/insert-link-external-rtl.png ); +background-image:url( ../images/wikiEditor/dialogs/insert-link-external-rtl.png?1); } .wikiEditor-template-dialog-fields label{ text-transform:capitalize; @@ -556,7 +556,7 @@ width:100%; } .tab-toc{ -background-image:url(../images/wikiEditor/toolbar/base.png); +background-image:url(../images/wikiEditor/toolbar/base.png?1); background-position:left top; background-repeat:repeat-x; height:26px; @@ -667,11 +667,11 @@ left:0; } .wikiEditor-ui-toc-collapse-open{ -background:#f3f3f3 url(../images/wikiEditor/toc/close.png) 4px 50% no-repeat; +background:#f3f3f3 url(../images/wikiEditor/toc/close.png?1) 4px 50% no-repeat; border-left:1px solid #DDDDDD; } .wikiEditor-ui-toc-collapse-closed{ -background:#f3f3f3 url(../images/wikiEditor/toc/open.png) 4px 50% no-repeat; +background:#f3f3f3 url(../images/wikiEditor/toc/open.png?1) 4px 50% no-repeat; } .wikiEditor-ui-toc-resize-vertical, .ui-resizable-w{ @@ -697,7 +697,7 @@ top:7px; left:-12px !important; cursor:ew-resize; -background:url(../images/wikiEditor/toc/grip.png) 50% 50% no-repeat; +background:url(../images/wikiEditor/toc/grip.png?1) 50% 50% no-repeat; z-index:0; } body.rtl .wikiEditor-ui-right .wikiEditor-ui-toc-resize-grip{ @@ -757,34 +757,30 @@ background-color:#E0EEf7; } .wikiEditor-ui-toolbar{ -background-image:url(../images/wikiEditor/toolbar/base.png); +background-image:url(../images/wikiEditor/toolbar/base.png?1); background-position:left top; background-repeat:repeat-x; } /* .wikiEditor-ui-toolbar .toolbar{ -background-image:url(../images/wikiEditor/toolbar/base.png); +background-image:url(../images/wikiEditor/toolbar/base.png?1); background-position:left top; } */ body.rtl .wikiEditor-ui-toolbar .sections .section{ float:right; } -.wikiEditor-ui-toolbar .sections .loading{ -padding-top:0.5em; -padding-bottom:0.5em; -} .wikiEditor-ui-toolbar .sections div .spinner{ display:none; } .wikiEditor-ui-toolbar .sections .loading .spinner{ display:block; -background-image:url(../images/wikiEditor/toolbar/loading.gif); +background-image:url(../images/wikiEditor/toolbar/loading.gif?1); background-position:left center; background-repeat:no-repeat; padding-left:32px; -margin-left:1em; -height:22px; +margin-left:0.5em; +height:32px; float:left; color:#666666; } @@ -793,7 +789,7 @@ padding-left:0; padding-right:32px; margin-left:0; -margin-right:1em; +margin-right:0.5em; float:right; } .wikiEditor-ui-toolbar .tabs, @@ -872,7 +868,7 @@ height:26px; cursor:pointer; color:#0645ad; -background-image:url(../images/wikiEditor/toolbar/arrow-right.png); +background-image:url(../images/wikiEditor/toolbar/arrow-right.png?1); background-position:left center; background-repeat:no-repeat; } @@ -880,7 +876,7 @@ body.rtl .wikiEditor-ui-toolbar .tabs span.tab a:visited{ padding-left:12px; padding-right:18px; -background-image:url(../images/wikiEditor/toolbar/arrow-left.png); +background-image:url(../images/wikiEditor/toolbar/arrow-left.png?1); background-position:right center; } body.rtl .wikiEditor-ui-toolbar .tabs > span.tab > a, @@ -890,15 +886,18 @@ .wikiEditor-ui-toolbar .tabs span.tab a.current, .wikiEditor-ui-toolbar .tabs span.tab a.current:visited{ color:#333333; -background-image:url(../images/wikiEditor/toolbar/arrow-down.png); +background-image:url(../images/wikiEditor/toolbar/arrow-down.png?1); } body.rtl .wikiEditor-ui-toolbar .tabs span.tab a.current, body.rtl .wikiEditor-ui-toolbar .tabs span.tab a.current:visited{ -background-image:url(../images/wikiEditor/toolbar/arrow-down.png); +background-image:url(../images/wikiEditor/toolbar/arrow-down.png?1); } .wikiEditor-ui-toolbar .tabs span.tab a.current:hover{ text-decoration:none; } +.wikiEditor-ui-toolbar .tabs span.tab a.loading{ +background-image:url(../images/wikiEditor/toolbar/loading-small.gif?1) !important; +} .wikiEditor-ui-toolbar .group .label{ float:left; border:0px; @@ -941,7 +940,7 @@ float:right; } .wikiEditor-ui-toolbar .group .tool-select .label{ -background-image:url(../images/wikiEditor/toolbar/arrow-down.png); +background-image:url(../images/wikiEditor/toolbar/arrow-down.png?1); background-position:center right; background-repeat:no-repeat; padding:0; Modified: trunk/extensions/UsabilityInitiative/css/vector.collapsibleNav.css =================================================================== --- trunk/extensions/UsabilityInitiative/css/vector.collapsibleNav.css 2010-05-12 22:44:31 UTC (rev 66315) +++ trunk/extensions/UsabilityInitiative/css/vector.collapsibleNav.css 2010-05-12 23:12:20 UTC (rev 66316) @@ -1,6 +1,6 @@ /* Prototype code to show collapsing left nav options */ #panel.collapsible-nav div.portal { - background-image:url(../images/vector/collapsibleNav/portal-break.png); + background-image:url(../images/vector/collapsibleNav/portal-break.png?1); background-position:left top; background-repeat:no-repeat; padding: 0.25em 0 !important; @@ -13,21 +13,21 @@ #panel.collapsible-nav div.portal h5 { color: #4D4D4D; font-weight: normal; - background: url(../images/vector/collapsibleNav/arrow-down.png) 0 50% no-repeat; + background: url(../images/vector/collapsibleNav/arrow-down.png?1) 0 50% no-repeat; padding: 4px 0 3px 1.5em; margin-bottom: 0px; } body.rtl #panel.collapsible-nav div.portal h5 { - background: url(../images/vector/collapsibleNav/arrow-down.png) 100% 50% no-repeat; + background: url(../images/vector/collapsibleNav/arrow-down.png?1) 100% 50% no-repeat; padding: 4px 1.5em 3px 0; } #panel.collapsible-nav div.collapsed h5 { color: #0645AD; - background: url(../images/vector/collapsibleNav/arrow-right.png) 0 50% no-repeat; + background: url(../images/vector/collapsibleNav/arrow-right.png?1) 0 50% no-repeat; margin-bottom: 0px; } body.rtl #panel.collapsible-nav div.collapsed h5 { - background: url(../images/vector/collapsibleNav/arrow-left.png) 100% 50% no-repeat; + background: url(../images/vector/collapsibleNav/arrow-left.png?1) 100% 50% no-repeat; } #panel.collapsible-nav div h5:hover { cursor: pointer; Modified: trunk/extensions/UsabilityInitiative/css/vector.footerCleanup.css =================================================================== --- trunk/extensions/UsabilityInitiative/css/vector.footerCleanup.css 2010-05-12 22:44:31 UTC (rev 66315) +++ trunk/extensions/UsabilityInitiative/css/vector.footerCleanup.css 2010-05-12 23:12:20 UTC (rev 66316) @@ -25,12 +25,12 @@ padding: 0 0 0 14px; } .collapsible-list.collapsed label { - background: url(../images/vector/collapsibleNav/arrow-down.png) 0 50% no-repeat; + background: url(../images/vector/collapsibleNav/arrow-down.png?1) 0 50% no-repeat; padding: 4px 0 3px 1.5em; margin-bottom: 0px; } .collapsible-list.expanded label { - background: url(../images/vector/collapsibleNav/arrow-right.png) 0 50% no-repeat; + background: url(../images/vector/collapsibleNav/arrow-right.png?1) 0 50% no-repeat; padding: 4px 0 3px 1.5em; margin-bottom: 0px; } Modified: trunk/extensions/UsabilityInitiative/css/wikiEditor.css =================================================================== --- trunk/extensions/UsabilityInitiative/css/wikiEditor.css 2010-05-12 22:44:31 UTC (rev 66315) +++ trunk/extensions/UsabilityInitiative/css/wikiEditor.css 2010-05-12 23:12:20 UTC (rev 66316) @@ -25,7 +25,7 @@ position: relative; clear: both; width: 100%; - background-color: #f3f3f3; + background-color: #E0EEf7; border: solid silver 1px; } body.rtl .wikiEditor-ui { Modified: trunk/extensions/UsabilityInitiative/css/wikiEditor.dialogs.css =================================================================== --- trunk/extensions/UsabilityInitiative/css/wikiEditor.dialogs.css 2010-05-12 22:44:31 UTC (rev 66315) +++ trunk/extensions/UsabilityInitiative/css/wikiEditor.dialogs.css 2010-05-12 23:12:20 UTC (rev 66316) @@ -31,32 +31,32 @@ padding: 0.2em 0.6em 0.15em !important; margin: 0.5em 0 0.5em 0.4em !important; border: 1px solid #a6a6a6 !important; - background: #f2f2f2 url( ../images/wikiEditor/dialogs/button_off.png ) repeat-x scroll 50% 100% !important; + background: #f2f2f2 url( ../images/wikiEditor/dialogs/button_off.png?1) repeat-x scroll 50% 100% !important; } .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button:hover { border-color: #6e7273; - background: #e1e1e1 url( ../images/wikiEditor/dialogs/button_over.png ) repeat-x scroll 50% 100% !important; + background: #e1e1e1 url( ../images/wikiEditor/dialogs/button_over.png?1) repeat-x scroll 50% 100% !important; } .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button:active, .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button:focus { border-color: #707271; - background: #bfbfbf url( ../images/wikiEditor/dialogs/button_down.png ) repeat-x scroll 50% 100% !important; + background: #bfbfbf url( ../images/wikiEditor/dialogs/button_down.png?1) repeat-x scroll 50% 100% !important; } .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button.disabled { color: #7f7f7f; border-color: #cccccc; - background: #f2f2f2 url( ../images/wikiEditor/dialogs/button_disabled.png ) repeat-x scroll 50% 100% !important; + background: #f2f2f2 url( ../images/wikiEditor/dialogs/button_disabled.png?1) repeat-x scroll 50% 100% !important; } /* Disables the annoying dashed border Firefox puts on active buttons */ .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button::-moz-focus-inner { border: 0; } .wikiEditor-toolbar-dialog .ui-widget-header { - background: #f0f0f0 url( ../images/wikiEditor/dialogs/titlebar_fade.png ) repeat-x scroll 50% 100% !important; + background: #f0f0f0 url( ../images/wikiEditor/dialogs/titlebar_fade.png?1) repeat-x scroll 50% 100% !important; } /* FIXME: Should just update the icon sprite if we're keeping this X */ .wikiEditor-toolbar-dialog .ui-icon-closethick { - background: url( ../images/wikiEditor/dialogs/close_x.png ) no-repeat 50% 50% !important; + background: url( ../images/wikiEditor/dialogs/close_x.png?1) no-repeat 50% 50% !important; } .wikiEditor-toolbar-dialog .ui-dialog-buttonpane { margin-top: 0 !important; @@ -178,16 +178,16 @@ background-repeat: no-repeat; } #wikieditor-toolbar-link-int-target-status-exists { - background-image: url( ../images/wikiEditor/dialogs/insert-link-exists.png ); + background-image: url( ../images/wikiEditor/dialogs/insert-link-exists.png?1); } #wikieditor-toolbar-link-int-target-status-notexists { - background-image: url( ../images/wikiEditor/dialogs/insert-link-notexists.png ); + background-image: url( ../images/wikiEditor/dialogs/insert-link-notexists.png?1); } #wikieditor-toolbar-link-int-target-status-invalid { - background-image: url( ../images/wikiEditor/dialogs/insert-link-invalid.png ); + background-image: url( ../images/wikiEditor/dialogs/insert-link-invalid.png?1); } #wikieditor-toolbar-link-int-target-status-external { - background-image: url( ../images/wikiEditor/dialogs/insert-link-external.png ); + background-image: url( ../images/wikiEditor/dialogs/insert-link-external.png?1); } /* Reference Dialog */ @@ -230,7 +230,7 @@ background-position: 100% 50%; } body.rtl #wikieditor-toolbar-link-int-target-status-external { - background-image: url( ../images/wikiEditor/dialogs/insert-link-external-rtl.png ); + background-image: url( ../images/wikiEditor/dialogs/insert-link-external-rtl.png?1); } /* Template Editor Dialogs */ .wikiEditor-template-dialog-fields label { Modified: trunk/extensions/UsabilityInitiative/css/wikiEditor.toc.css =================================================================== --- trunk/extensions/UsabilityInitiative/css/wikiEditor.toc.css 2010-05-12 22:44:31 UTC (rev 66315) +++ trunk/extensions/UsabilityInitiative/css/wikiEditor.toc.css 2010-05-12 23:12:20 UTC (rev 66316) @@ -25,7 +25,7 @@ } .tab-toc { /* Should match the toolbar */ - background-image: url(../images/wikiEditor/toolbar/base.png); + background-image: url(../images/wikiEditor/toolbar/base.png?1); background-position: left top; background-repeat: repeat-x; height: 26px; @@ -141,11 +141,11 @@ left: 0; } .wikiEditor-ui-toc-collapse-open { - background: #f3f3f3 url(../images/wikiEditor/toc/close.png) 4px 50% no-repeat; + background: #f3f3f3 url(../images/wikiEditor/toc/close.png?1) 4px 50% no-repeat; border-left: 1px solid #DDDDDD; } .wikiEditor-ui-toc-collapse-closed { - background: #f3f3f3 url(../images/wikiEditor/toc/open.png) 4px 50% no-repeat; + background: #f3f3f3 url(../images/wikiEditor/toc/open.png?1) 4px 50% no-repeat; } /* Resizing Changes */ @@ -174,7 +174,7 @@ top: 7px; left: -12px !important; cursor: ew-resize; - background: url(../images/wikiEditor/toc/grip.png) 50% 50% no-repeat; + background: url(../images/wikiEditor/toc/grip.png?1) 50% 50% no-repeat; z-index: 0; } body.rtl .wikiEditor-ui-right .wikiEditor-ui-toc-resize-grip { Modified: trunk/extensions/UsabilityInitiative/css/wikiEditor.toolbar.css =================================================================== --- trunk/extensions/UsabilityInitiative/css/wikiEditor.toolbar.css 2010-05-12 22:44:31 UTC (rev 66315) +++ trunk/extensions/UsabilityInitiative/css/wikiEditor.toolbar.css 2010-05-12 23:12:20 UTC (rev 66316) @@ -23,35 +23,31 @@ background-color: #E0EEf7; } .wikiEditor-ui-toolbar { - background-image: url(../images/wikiEditor/toolbar/base.png); + background-image: url(../images/wikiEditor/toolbar/base.png?1); background-position: left top; background-repeat: repeat-x; } /* .wikiEditor-ui-toolbar .toolbar { - background-image: url(../images/wikiEditor/toolbar/base.png); + background-image: url(../images/wikiEditor/toolbar/base.png?1); background-position: left top; } */ body.rtl .wikiEditor-ui-toolbar .sections .section { float: right; } -.wikiEditor-ui-toolbar .sections .loading { - padding-top: 0.5em; - padding-bottom: 0.5em; -} /* Gets overridden when the section div is in class loading - see below */ .wikiEditor-ui-toolbar .sections div .spinner { display: none; } .wikiEditor-ui-toolbar .sections .loading .spinner { display: block; - background-image: url(../images/wikiEditor/toolbar/loading.gif); + background-image: url(../images/wikiEditor/toolbar/loading.gif?1); background-position: left center; background-repeat: no-repeat; padding-left: 32px; - margin-left: 1em; - height: 22px; + margin-left: 0.5em; + height: 32px; float: left; color: #666666; } @@ -60,7 +56,7 @@ padding-left: 0; padding-right: 32px; margin-left: 0; - margin-right: 1em; + margin-right: 0.5em; float: right; } /* Top Level Containers */ @@ -145,7 +141,7 @@ height: 26px; cursor: pointer; color: #0645ad; - background-image: url(../images/wikiEditor/toolbar/arrow-right.png); + background-image: url(../images/wikiEditor/toolbar/arrow-right.png?1); background-position: left center; background-repeat: no-repeat; } @@ -153,7 +149,7 @@ body.rtl .wikiEditor-ui-toolbar .tabs span.tab a:visited { padding-left: 12px; padding-right: 18px; - background-image: url(../images/wikiEditor/toolbar/arrow-left.png); + background-image: url(../images/wikiEditor/toolbar/arrow-left.png?1); background-position: right center; } /* IGNORED BY IE6 */ @@ -164,15 +160,18 @@ .wikiEditor-ui-toolbar .tabs span.tab a.current, .wikiEditor-ui-toolbar .tabs span.tab a.current:visited { color: #333333; - background-image: url(../images/wikiEditor/toolbar/arrow-down.png); + background-image: url(../images/wikiEditor/toolbar/arrow-down.png?1); } body.rtl .wikiEditor-ui-toolbar .tabs span.tab a.current, body.rtl .wikiEditor-ui-toolbar .tabs span.tab a.current:visited { - background-image: url(../images/wikiEditor/toolbar/arrow-down.png); + background-image: url(../images/wikiEditor/toolbar/arrow-down.png?1); } .wikiEditor-ui-toolbar .tabs span.tab a.current:hover { text-decoration: none; } +.wikiEditor-ui-toolbar .tabs span.tab a.loading { + background-image: url(../images/wikiEditor/toolbar/loading-small.gif?1) !important; +} /* Toolbar */ .wikiEditor-ui-toolbar .group .label { float: left; @@ -219,7 +218,7 @@ float: right; } .wikiEditor-ui-toolbar .group .tool-select .label { - background-image: url(../images/wikiEditor/toolbar/arrow-down.png); + background-image: url(../images/wikiEditor/toolbar/arrow-down.png?1); background-position: center right; background-repeat: no-repeat; padding: 0; Added: trunk/extensions/UsabilityInitiative/images/wikiEditor/toolbar/loading-small.gif =================================================================== (Binary files differ) Property changes on: trunk/extensions/UsabilityInitiative/images/wikiEditor/toolbar/loading-small.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/extensions/UsabilityInitiative/images/wikiEditor/toolbar/loading.gif =================================================================== (Binary files differ) Modified: trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.toolbar.js =================================================================== --- trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.toolbar.js 2010-05-12 22:44:31 UTC (rev 66315) +++ trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.toolbar.js 2010-05-12 23:12:20 UTC (rev 66316) @@ -588,19 +588,29 @@ $previousSections.fadeOut( 'fast', function() { $(this).css( 'position', 'relative' ); } ); $(this).parent().parent().find( 'a' ).removeClass( 'current' ); $sections.css( 'overflow', 'hidden' ); + function animate( $this ) { + $sections + .css( 'display', 'block' ) + .animate( { 'height': $section.outerHeight() }, $section.outerHeight() * 2, function() { + $this.css( 'overflow', 'visible' ).css( 'height', 'auto' ); + context.fn.trigger( 'resize' ); + } ); + } if ( show ) { $section.addClass( 'section-visible' ); $section.fadeIn( 'fast' ); - $sections - .css( 'display', 'block' ) - .animate( { 'height': $section.outerHeight() }, $section.outerHeight() * 2, function() { - $(this).css( 'overflow', 'visible' ).css( 'height', 'auto' ); - context.fn.trigger( 'resize' ); - } ); - $(this).addClass( 'current' ); if ( $section.hasClass( 'loading' ) ) { // Loading of this section was deferred, load it now - setTimeout( function() { $section.trigger( 'loadSection' ); }, 0 ); + $this = $(this); + $this.addClass( 'current loading' ); + setTimeout( function() { + $section.trigger( 'loadSection' ); + animate( $(this) ); + $this.removeClass( 'loading' ); + }, 1000 ); + } else { + animate( $(this) ); + $(this).addClass( 'current' ); } } else { $sections Modified: trunk/extensions/UsabilityInitiative/js/plugins.combined.js =================================================================== --- trunk/extensions/UsabilityInitiative/js/plugins.combined.js 2010-05-12 22:44:31 UTC (rev 66315) +++ trunk/extensions/UsabilityInitiative/js/plugins.combined.js 2010-05-12 23:12:20 UTC (rev 66316) @@ -11438,19 +11438,29 @@ $previousSections.fadeOut( 'fast', function() { $(this).css( 'position', 'relative' ); } ); $(this).parent().parent().find( 'a' ).removeClass( 'current' ); $sections.css( 'overflow', 'hidden' ); + function animate( $this ) { + $sections + .css( 'display', 'block' ) + .animate( { 'height': $section.outerHeight() }, $section.outerHeight() * 2, function() { + $this.css( 'overflow', 'visible' ).css( 'height', 'auto' ); + context.fn.trigger( 'resize' ); + } ); + } if ( show ) { $section.addClass( 'section-visible' ); $section.fadeIn( 'fast' ); - $sections - .css( 'display', 'block' ) - .animate( { 'height': $section.outerHeight() }, $section.outerHeight() * 2, function() { - $(this).css( 'overflow', 'visible' ).css( 'height', 'auto' ); - context.fn.trigger( 'resize' ); - } ); - $(this).addClass( 'current' ); if ( $section.hasClass( 'loading' ) ) { // Loading of this section was deferred, load it now - setTimeout( function() { $section.trigger( 'loadSection' ); }, 0 ); + $this = $(this); + $this.addClass( 'current loading' ); + setTimeout( function() { + $section.trigger( 'loadSection' ); + animate( $(this) ); + $this.removeClass( 'loading' ); + }, 1000 ); + } else { + animate( $(this) ); + $(this).addClass( 'current' ); } } else { $sections Modified: trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js =================================================================== --- trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js 2010-05-12 22:44:31 UTC (rev 66315) +++ trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js 2010-05-12 23:12:20 UTC (rev 66316) @@ -778,7 +778,8 @@ return html;},buildRow:function(context,row){var html='<tr>';for(cell in row){html+='<td class="cell cell-'+cell+'" valign="top"><span>'+ $.wikiEditor.autoMsg(row[cell],['html','text'])+'</span></td>';} html+='</tr>';return html;},buildCharacter:function(character,actions){if(typeof character=='string'){character={'label':character,'action':{'type':'encapsulate','options':{'pre':character}}};}else if(0 in character&&1 in character){character={'label':character[0],'action':{'type':'encapsulate','options':{'pre':character[1]}}};} -if('action'in character&&'label'in character){actions[character.label]=character.action;return'<span rel="'+character.label+'">'+character.label+'</span>';}},buildTab:function(context,id,section){var selected=$.cookie('wikiEditor-'+context.instance+'-toolbar-section');return $('<span />').attr({'class':'tab tab-'+id,'rel':id}).append($('<a />').addClass(selected==id?'current':null).attr('href','#').text($.wikiEditor.autoMsg(section,'label')).data('context',context).mouseup(function(e){$(this).blur();}).mousedown(function(e){e.preventDefault();return false;}).click(function(e){var $sections=$(this).data('context').$ui.find('.sections');var $section=$(this).data('context').$ui.find('.section-'+$(this).parent().attr('rel'));var show=$section.css('display')=='none';$previousSections=$section.parent().find('.section-visible');$previousSections.css('position','absolute');$previousSections.removeClass('section-visible');$previousSections.fadeOut('fast',function(){$(this).css('position','relative');});$(this).parent().parent().find('a').removeClass('current');$sections.css('overflow','hidden');if(show){$section.addClass('section-visible');$section.fadeIn('fast');$sections.css('display','block').animate({'height':$section.outerHeight()},$section.outerHeight()*2,function(){$(this).css('overflow','visible').css('height','auto');context.fn.trigger('resize');});$(this).addClass('current');if($section.hasClass('loading')){setTimeout(function(){$section.trigger('loadSection');},0);}}else{$sections.css('height',$section.outerHeight()).animate({'height':'hide'},$section.outerHeight()*2,function(){$(this).css({'overflow':'visible','height':0});context.fn.trigger('resize');});} +if('action'in character&&'label'in character){actions[character.label]=character.action;return'<span rel="'+character.label+'">'+character.label+'</span>';}},buildTab:function(context,id,section){var selected=$.cookie('wikiEditor-'+context.instance+'-toolbar-section');return $('<span />').attr({'class':'tab tab-'+id,'rel':id}).append($('<a />').addClass(selected==id?'current':null).attr('href','#').text($.wikiEditor.autoMsg(section,'label')).data('context',context).mouseup(function(e){$(this).blur();}).mousedown(function(e){e.preventDefault();return false;}).click(function(e){var $sections=$(this).data('context').$ui.find('.sections');var $section=$(this).data('context').$ui.find('.section-'+$(this).parent().attr('rel'));var show=$section.css('display')=='none';$previousSections=$section.parent().find('.section-visible');$previousSections.css('position','absolute');$previousSections.removeClass('section-visible');$previousSections.fadeOut('fast',function(){$(this).css('position','relative');});$(this).parent().parent().find('a').removeClass('current');$sections.css('overflow','hidden');function animate($this){$sections.css('display','block').animate({'height':$section.outerHeight()},$section.outerHeight()*2,function(){$this.css('overflow','visible').css('height','auto');context.fn.trigger('resize');});} +if(show){$section.addClass('section-visible');$section.fadeIn('fast');if($section.hasClass('loading')){$this=$(this);$this.addClass('current loading');setTimeout(function(){$section.trigger('loadSection');animate($(this));$this.removeClass('loading');},1000);}else{animate($(this));$(this).addClass('current');}}else{$sections.css('height',$section.outerHeight()).animate({'height':'hide'},$section.outerHeight()*2,function(){$(this).css({'overflow':'visible','height':0});context.fn.trigger('resize');});} if($.trackAction!=undefined){$.trackAction($section.attr('rel')+'.'+(show?'show':'hide'));} $.cookie('wikiEditor-'+$(this).data('context').instance+'-toolbar-section',show?$section.attr('rel'):null);e.preventDefault();return false;}));},buildSection:function(context,id,section){var $section=$('<div />').attr({'class':section.type+' section section-'+id,'rel':id});var selected=$.cookie('wikiEditor-'+context.instance+'-toolbar-section');var show=selected==id;if(typeof section.deferLoad!='undefined'&§ion.deferLoad&&id!=='main'&&!show){$section.addClass('loading').append($('<div />').addClass('spinner'));$section.bind('loadSection',function(){$.wikiEditor.modules.toolbar.fn.reallyBuildSection(context,section,$section);$section.removeClass('loading');});}else{$.wikiEditor.modules.toolbar.fn.reallyBuildSection(context,section,$section);} if(id!=='main'){$section.css('display',show?'block':'none');if(show) _______________________________________________ MediaWiki-CVS mailing list MediaWiki-CVS@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs