diff options
author | rvelices <rv-github@modusoptimus.com> | 2008-07-15 01:29:23 +0000 |
---|---|---|
committer | rvelices <rv-github@modusoptimus.com> | 2008-07-15 01:29:23 +0000 |
commit | 9c96b905ff3327ad5264b794048b6c71bbc5e4ee (patch) | |
tree | a0565907ca8d5546ffcd963c952e331e37109c9a /template/yoga/rating.js | |
parent | df29ffbde72e88635f454d5d6d84c5a7209460f3 (diff) |
- image rating on picture page done through ajax (tested safari/ie 6&7/ff)
git-svn-id: http://piwigo.org/svn/trunk@2435 68402e56-0260-453c-a942-63ccdbb3a9ee
Diffstat (limited to '')
-rw-r--r-- | template/yoga/rating.js | 142 |
1 files changed, 76 insertions, 66 deletions
diff --git a/template/yoga/rating.js b/template/yoga/rating.js index a4f8f86b8..682ab10d0 100644 --- a/template/yoga/rating.js +++ b/template/yoga/rating.js @@ -1,90 +1,100 @@ -makeNiceRatingForm(); +var gRatingOptions, gRatingButtons, gUserRating; -function makeNiceRatingForm() +function makeNiceRatingForm(options) { - var form = document.getElementById('rateForm'); - if (!form) return; //? template changed - gRatingButtons = form.getElementsByTagName('input'); + gRatingOptions = options || {}; + var form = document.getElementById('rateForm'); + if (!form) return; //? template changed - gUserRating = ""; - for (var i=0; i<gRatingButtons.length; i++) - { - if ( gRatingButtons[i].type=="button" ) - { - gUserRating = gRatingButtons[i].value; - break; - } - } + gRatingButtons = form.getElementsByTagName('input'); + gUserRating = ""; + for (var i=0; i<gRatingButtons.length; i++) + { + if ( gRatingButtons[i].type=="button" ) + { + gUserRating = gRatingButtons[i].value; + break; + } + } - for (var i=0; i<gRatingButtons.length; i++) - { - var rateButton = gRatingButtons[i]; - rateButton.initialRateValue = rateButton.value; // save it as a property + for (var i=0; i<gRatingButtons.length; i++) + { + var rateButton = gRatingButtons[i]; + rateButton.initialRateValue = rateButton.value; // save it as a property + try { rateButton.type = "button"; } catch (e){}// avoid normal submit (use ajax); not working in IE6 - rateButton.value = ""; //hide the text IE/Opera - with (rateButton.style) - { - textIndent = "-50px"; //hide the text FF - marginLeft = marginRight = 0; - } + if (navigator.userAgent.indexOf('AppleWebKit/') == -1 ) rateButton.value = ""; //hide the text IE/Opera - breaks safari + with (rateButton.style) + { + textIndent = "-50px"; //hide the text FF + marginLeft = marginRight = 0; + } - if (i!=gRatingButtons.length-1 && rateButton.nextSibling.nodeType == 3 /*TEXT_NODE*/) - rateButton.parentNode.removeChild(rateButton.nextSibling); - if (i>0 && rateButton.previousSibling.nodeType == 3 /*TEXT_NODE*/) - rateButton.parentNode.removeChild(rateButton.previousSibling); + if (i!=gRatingButtons.length-1 && rateButton.nextSibling.nodeType == 3 /*TEXT_NODE*/) + rateButton.parentNode.removeChild(rateButton.nextSibling); + if (i>0 && rateButton.previousSibling.nodeType == 3 /*TEXT_NODE*/) + rateButton.parentNode.removeChild(rateButton.previousSibling); - if(window.addEventListener){ // Mozilla, Netscape, Firefox - rateButton.addEventListener("click", updateRating, false ); - rateButton.addEventListener("mouseout", resetRatingStarDisplay, false ); - rateButton.addEventListener("mouseover", updateRatingStarDisplayEvt, false ); - } - else if(window.attachEvent) { // IE - rateButton.attachEvent("onclick", updateRating); - rateButton.attachEvent("onmouseout", resetRatingStarDisplay); - rateButton.attachEvent("onmouseover", updateRatingStarDisplayEvt); - } - } - resetRatingStarDisplay(); + if(window.addEventListener){ // Mozilla, Netscape, Firefox + rateButton.addEventListener("click", updateRating, false ); + rateButton.addEventListener("mouseout", resetRatingStarDisplay, false ); + rateButton.addEventListener("mouseover", updateRatingStarDisplayEvt, false ); + } + else if(window.attachEvent) { // IE + rateButton.attachEvent("onclick", updateRating); + rateButton.attachEvent("onmouseout", resetRatingStarDisplay); + rateButton.attachEvent("onmouseover", updateRatingStarDisplayEvt); + } + } + resetRatingStarDisplay(); } function resetRatingStarDisplay() { - updateRatingStarDisplay( gUserRating ); + updateRatingStarDisplay( gUserRating ); } function updateRatingStarDisplay(userRating) { - for (i=0; i<gRatingButtons.length; i++) - { - var rateButton = gRatingButtons[i]; - if (userRating!=="" && userRating>=rateButton.initialRateValue ) - { - rateButton.className = "rateButtonStarFull"; - } - else - { - rateButton.className = "rateButtonStarEmpty"; - } - } + for (var i=0; i<gRatingButtons.length; i++) + gRatingButtons[i].className = (userRating!=="" && userRating>=gRatingButtons[i].initialRateValue ) ? "rateButtonStarFull" : "rateButtonStarEmpty"; } function updateRatingStarDisplayEvt(e) { - if (e.target) - updateRatingStarDisplay(e.target.initialRateValue); - else //IE - updateRatingStarDisplay(e.srcElement.initialRateValue); + updateRatingStarDisplay( + e.target ? e.target.initialRateValue : e.srcElement.initialRateValue); } function updateRating(e) { - if (e.target) - var rateButton = e.target; - else //IE - var rateButton = e.srcElement; - if (rateButton.initialRateValue == gUserRating) - return false; //nothing to do - // some ajax here one day would be nice - rateButton.value = rateButton.initialRateValue; // put back real value - return true; + var rateButton = e.target || e.srcElement; + if (rateButton.initialRateValue == gUserRating) + return false; //nothing to do + + for (var i=0; i<gRatingButtons.length; i++) gRatingButtons[i].disabled=true; + var y = new PwgWS(gRatingOptions.rootUrl); + y.callService( + "pwg.images.rate", {image_id: gRatingOptions.image_id, rate: rateButton.initialRateValue } , + { + onFailure: function(num, text) { + alert(num + " " + text); + document.location = rateButton.form.action + "&rate="+rateButton.initialRateValue; + }, + onSuccess: function(result) { + gUserRating = rateButton.initialRateValue; + for (var i=0; i<gRatingButtons.length; i++) gRatingButtons[i].disabled=false; + if (gRatingOptions.updateRateElement) gRatingOptions.updateRateElement.innerHTML = gRatingOptions.updateRateText; + if (gRatingOptions.ratingSummaryElement) + { + var t = gRatingOptions.ratingSummaryText; + var args =[result.average, result.count, result.stdev], idx = 0, rexp = new RegExp( /%\.?\d*[sdf]/ ); + _xxx = t.match( rexp ); + while (idx<args.length) t=t.replace(rexp, args[idx++]); + gRatingOptions.ratingSummaryElement.innerHTML = t; + } + } + } + ); + return false; }
\ No newline at end of file |