From 6f096004f4f63a5604189562bf78631c7ef4d007 Mon Sep 17 00:00:00 2001 From: Roan Kattouw Date: Wed, 30 Sep 2009 18:46:23 +0000 Subject: [PATCH] Put the watch icon part of the changes reverted in r57125 back in. --- includes/DefaultSettings.php | 11 ++++-- skins/Vector.php | 39 ++++++++------------- skins/common/ajaxwatch.js | 39 +++++++++++++++------ skins/vector/images/watch-icon-loading.gif | Bin 0 -> 840 bytes skins/vector/images/watch-icons.png | Bin 0 -> 1745 bytes skins/vector/main-ltr.css | 38 ++++++++++++++++++++ skins/vector/main-rtl.css | 39 ++++++++++++++++++++- 7 files changed, 129 insertions(+), 37 deletions(-) create mode 100644 skins/vector/images/watch-icon-loading.gif create mode 100644 skins/vector/images/watch-icons.png diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index d86f1cbac9..466855ea7d 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -1606,7 +1606,7 @@ $wgCacheEpoch = '20030516000000'; * to ensure that client-side caches do not keep obsolete copies of global * styles. */ -$wgStyleVersion = '241'; +$wgStyleVersion = '243'; # Server-side caching: @@ -4096,12 +4096,19 @@ $wgEnforceHtmlIds = true; $wgUseTwoButtonsSearchForm = true; /** - * Search form behavior for Vector skin only + * Search form behavior for Vector skin only * true = use an icon search button * false = use Go & Search buttons */ $wgVectorUseSimpleSearch = false; +/** + * Watch and unwatch as an icon rather than a link for Vector skin only + * true = use an icon watch/unwatch button + * false = use watch/unwatch text link + */ +$wgVectorUseIconWatch = false; + /** * Preprocessor caching threshold */ diff --git a/skins/Vector.php b/skins/Vector.php index f65d29ad3f..e18230e4b0 100644 --- a/skins/Vector.php +++ b/skins/Vector.php @@ -59,8 +59,8 @@ class SkinVector extends SkinTemplate { * @private */ function buildNavigationUrls() { - global $wgContLang, $wgLang, $wgOut, $wgUser, $wgRequest, $wgArticle; - global $wgDisableLangConversion; + global $wgContLang, $wgLang, $wgOut, $wgUser, $wgRequest, $wgArticle, $wgStylePath; + global $wgDisableLangConversion, $wgVectorUseIconWatch; wfProfileIn( __METHOD__ ); @@ -271,7 +271,6 @@ class SkinVector extends SkinTemplate { } } wfProfileOut( __METHOD__ . '-live' ); - /** * The following actions use messages which, if made particular to * the Vector skin, would break the Ajax code which makes this @@ -282,29 +281,21 @@ class SkinVector extends SkinTemplate { * the global versions. */ // Checks if the user is logged in - if( $this->loggedin ) { - // Checks if the user is watching this page - if( !$this->mTitle->userIsWatching() ) { - // Adds watch action link - $links['actions']['watch'] = array( - 'class' => - ( $action == 'watch' or $action == 'unwatch' ) ? - 'selected' : false, - 'text' => wfMsg( 'watch' ), - 'href' => $this->mTitle->getLocalUrl( 'action=watch' ) - ); + if ( $this->loggedin ) { + if ( $wgVectorUseIconWatch ) { + $class = 'icon '; + $place = 'views'; } else { - // Adds unwatch action link - $links['actions']['unwatch'] = array( - 'class' => - ($action == 'unwatch' or $action == 'watch') ? - 'selected' : false, - 'text' => wfMsg( 'unwatch' ), - 'href' => $this->mTitle->getLocalUrl( 'action=unwatch' ) - ); + $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 ) ); @@ -722,7 +713,7 @@ class VectorTemplate extends QuickTemplate {
msg('views') ?>
diff --git a/skins/common/ajaxwatch.js b/skins/common/ajaxwatch.js index c8d90b8090..f3211edd81 100644 --- a/skins/common/ajaxwatch.js +++ b/skins/common/ajaxwatch.js @@ -21,16 +21,29 @@ wgAjaxWatch.watching = false; // currently watching page wgAjaxWatch.inprogress = false; // ajax request in progress wgAjaxWatch.timeoutID = null; // see wgAjaxWatch.ajaxCall wgAjaxWatch.watchLinks = []; // "watch"/"unwatch" links +wgAjaxWatch.iconMode = false; // new icon driven functionality +wgAjaxWatch.imgBasePath = ""; // base img path derived from icons on load -wgAjaxWatch.setLinkText = function(newText) { - for (i = 0; i < wgAjaxWatch.watchLinks.length; i++) { - changeText(wgAjaxWatch.watchLinks[i], newText); +wgAjaxWatch.setLinkText = function( newText ) { + if( wgAjaxWatch.iconMode ) { + for ( i = 0; i < wgAjaxWatch.watchLinks.length; i++ ) { + wgAjaxWatch.watchLinks[i].firstChild.alt = newText; + if ( newText == wgAjaxWatch.watchingMsg || newText == wgAjaxWatch.unwatchingMsg ) { + wgAjaxWatch.watchLinks[i].className += ' loading'; + } else if ( newText == wgAjaxWatch.watchMsg || newText == wgAjaxWatch.unwatchMsg ) { + wgAjaxWatch.watchLinks[i].className = wgAjaxWatch.watchLinks[i].className.replace( /loading/i, '' ); + } + } + } else { + for ( i = 0; i < wgAjaxWatch.watchLinks.length; i++ ) { + changeText( wgAjaxWatch.watchLinks[i], newText ); + } } }; -wgAjaxWatch.setLinkID = function(newId) { +wgAjaxWatch.setLinkID = function( newId ) { // We can only set the first one - wgAjaxWatch.watchLinks[0].setAttribute( 'id', newId ); + wgAjaxWatch.watchLinks[0].parentNode.setAttribute( 'id', newId ); akeytt(newId); // update tooltips for Monobook }; @@ -112,27 +125,33 @@ wgAjaxWatch.processResult = function(request) { wgAjaxWatch.onLoad = function() { // This document structure hardcoding sucks. We should make a class and // toss all this out the window. + var el1 = document.getElementById("ca-unwatch"); var el2 = null; - if (!el1) { + if ( !el1 ) { el1 = document.getElementById("mw-unwatch-link1"); el2 = document.getElementById("mw-unwatch-link2"); } - if(el1) { + if( el1 ) { wgAjaxWatch.watching = true; } else { wgAjaxWatch.watching = false; el1 = document.getElementById("ca-watch"); - if (!el1) { + if ( !el1 ) { el1 = document.getElementById("mw-watch-link1"); el2 = document.getElementById("mw-watch-link2"); } - if(!el1) { + if( !el1 ) { wgAjaxWatch.supported = false; return; } } - + + // Detect if the watch/unwatch feature is in icon mode + if ( el1.className.match( /icon/i ) ) { + wgAjaxWatch.iconMode = true; + } + // The id can be either for the parent (Monobook-based) or the element // itself (non-Monobook) wgAjaxWatch.watchLinks.push( el1.tagName.toLowerCase() == "a" diff --git a/skins/vector/images/watch-icon-loading.gif b/skins/vector/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/skins/vector/images/watch-icons.png b/skins/vector/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/skins/vector/main-ltr.css b/skins/vector/main-ltr.css index 411ff76efe..b9cc55fb93 100644 --- a/skins/vector/main-ltr.css +++ b/skins/vector/main-ltr.css @@ -1049,3 +1049,41 @@ div#bodyContent { line-height: 1.5em; } +/* Watch/Unwatch Icon Styling */ +#ca-unwatch.icon, +#ca-watch.icon { +} +#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; +} diff --git a/skins/vector/main-rtl.css b/skins/vector/main-rtl.css index 69b3de21fb..cf5d9a234b 100644 --- a/skins/vector/main-rtl.css +++ b/skins/vector/main-rtl.css @@ -1049,4 +1049,41 @@ div#bodyContent { line-height: 1.5em; } - \ No newline at end of file +/* Watch/Unwatch Icon Styling */ +#ca-unwatch.icon, +#ca-watch.icon { +} +#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; +} -- 2.20.1