Hello and welcome to our community! Is this your first visit?
Register
Enjoy an ad free experience by logging in. Not a member yet? Register.
Results 1 to 4 of 4
  1. #1
    New to the CF scene
    Join Date
    May 2009
    Posts
    1
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Ajax rating using thumbs up/down script

    I am having problem during running the following script, the rating count is not increasing.

    code:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/2001/REC-xhtml11-20010531/DTD/xhtml11-flat.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
    <title>Rating Script - Thumbs Up Thumbs Down | Shawngo.com</title>
    <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8"/>

    <link type="text/css" href="thumber.css" rel="stylesheet" media="screen,projection" title="Default Theme" />

    <script src="prototype.js" type="text/javascript"></script>

    <script src="behaviour.js" type="text/javascript"></script>

    <script type="text/javascript" src="voter.js"></script>
    <script type="text/javascript" src="cookies.js"></script>

    <script type="text/javascript">

    // two event handlers .. thumberdown could actually call thumberup..etc
    var myrules = {
    '.thumberup' : function(element){
    element.onclick = function(){
    Voter.vote(this.id);
    alert('asd');
    return false;
    }
    },
    '.thumberdown' : function(element){
    element.onclick = function(){
    Voter.vote(this.id);
    return false;
    }
    }
    };

    Behaviour.register(myrules);
    </script>

    </head>
    <body>
    <div class="thumbs">
    <span id="blog1.msg">Rate Me</span>
    <ul>
    <li class="up"><a id="blog1.up" title="Thumbs Up" class="thumberup" href="#">10</a></li>

    <li class="down"><a id="blog1.down" title="Thumbs Down" class="thumberdown" href="#">11</a></li>
    </ul>
    </div>

    <div class="thumbs">
    <span id="blog2.msg">Rate Me</span>

    <ul>
    <li><a id="blog2.up" title="Thumbs Up" class="thumberup" href="#">10</a></li>
    <li><a id="blog2.down" title="Thumbs Down" class="thumberdown" href="#">11</a></li>

    </ul>
    </div>

    <div id="result"></div>
    <p><input type="button" onclick="Cookies.erase('blog1');" value="Erase cookie"/></p>
    <p><input type="button" onclick="Cookies.erase('blog2');" value="Erase cookie"/></p>

    </body>
    </html>



    Javascript: behaviour.js

    var Behaviour = {
    list : new Array,

    register : function(sheet){
    Behaviour.list.push(sheet);
    },

    start : function(){
    Behaviour.addLoadEvent(function(){
    Behaviour.apply();
    });
    },

    apply : function(){
    for (h=0;sheet=Behaviour.list[h];h++){
    for (selector in sheet){
    list = document.getElementsBySelector(selector);

    if (!list){
    continue;
    }

    for (i=0;element=list[i];i++){
    sheet[selector](element);
    }
    }
    }
    },

    addLoadEvent : function(func){
    var oldonload = window.onload;

    if (typeof window.onload != 'function') {
    window.onload = func;
    } else {
    window.onload = function() {
    oldonload();
    func();
    }
    }
    }
    }

    Behaviour.start();

    /*
    The following code is Copyright (C) Simon Willison 2004.

    document.getElementsBySelector(selector)
    - returns an array of element objects from the current document
    matching the CSS selector. Selectors can contain element names,
    class names and ids and can be nested. For example:

    elements = document.getElementsBySelect('div#main p a.external')

    Will return an array of all 'a' elements with 'external' in their
    class attribute that are contained inside 'p' elements that are
    contained inside the 'div' element which has id="main"

    New in version 0.4: Support for CSS2 and CSS3 attribute selectors:
    See http://www.w3.org/TR/css3-selectors/...bute-selectors

    Version 0.4 - Simon Willison, March 25th 2003
    -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows
    -- Opera 7 fails
    */

    function getAllChildren(e) {
    // Returns all children of element. Workaround required for IE5/Windows. Ugh.
    return e.all ? e.all : e.getElementsByTagName('*');
    }

    document.getElementsBySelector = function(selector) {
    // Attempt to fail gracefully in lesser browsers
    if (!document.getElementsByTagName) {
    return new Array();
    }
    // Split selector in to tokens
    var tokens = selector.split(' ');
    var currentContext = new Array(document);
    for (var i = 0; i < tokens.length; i++) {
    token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');;
    if (token.indexOf('#') > -1) {
    // Token is an ID selector
    var bits = token.split('#');
    var tagName = bits[0];
    var id = bits[1];
    var element = document.getElementById(id);
    if (tagName && element.nodeName.toLowerCase() != tagName) {
    // tag with that ID not found, return false
    return new Array();
    }
    // Set currentContext to contain just this element
    currentContext = new Array(element);
    continue; // Skip to next token
    }
    if (token.indexOf('.') > -1) {
    // Token contains a class selector
    var bits = token.split('.');
    var tagName = bits[0];
    var className = bits[1];
    if (!tagName) {
    tagName = '*';
    }
    // Get elements matching tag, filter them for class selector
    var found = new Array;
    var foundCount = 0;
    for (var h = 0; h < currentContext.length; h++) {
    var elements;
    if (tagName == '*') {
    elements = getAllChildren(currentContext[h]);
    } else {
    elements = currentContext[h].getElementsByTagName(tagName);
    }
    for (var j = 0; j < elements.length; j++) {
    found[foundCount++] = elements[j];
    }
    }
    currentContext = new Array;
    var currentContextIndex = 0;
    for (var k = 0; k < found.length; k++) {
    if (found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b'))) {
    currentContext[currentContextIndex++] = found[k];
    }
    }
    continue; // Skip to next token
    }
    // Code to deal with attribute selectors
    if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)) {
    var tagName = RegExp.$1;
    var attrName = RegExp.$2;
    var attrOperator = RegExp.$3;
    var attrValue = RegExp.$4;
    if (!tagName) {
    tagName = '*';
    }
    // Grab all of the tagName elements within current context
    var found = new Array;
    var foundCount = 0;
    for (var h = 0; h < currentContext.length; h++) {
    var elements;
    if (tagName == '*') {
    elements = getAllChildren(currentContext[h]);
    } else {
    elements = currentContext[h].getElementsByTagName(tagName);
    }
    for (var j = 0; j < elements.length; j++) {
    found[foundCount++] = elements[j];
    }
    }
    currentContext = new Array;
    var currentContextIndex = 0;
    var checkFunction; // This function will be used to filter the elements
    switch (attrOperator) {
    case '=': // Equality
    checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };
    break;
    case '~': // Match one of space seperated words
    checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };
    break;
    case '|': // Match start with value followed by optional hyphen
    checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };
    break;
    case '^': // Match starts with value
    checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };
    break;
    case '$': // Match ends with value - fails with "Warning" in Opera 7
    checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };
    break;
    case '*': // Match ends with value
    checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };
    break;
    default :
    // Just test for existence of attribute
    checkFunction = function(e) { return e.getAttribute(attrName); };
    }
    currentContext = new Array;
    var currentContextIndex = 0;
    for (var k = 0; k < found.length; k++) {
    if (checkFunction(found[k])) {
    currentContext[currentContextIndex++] = found[k];
    }
    }
    // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);
    continue; // Skip to next token
    }

    if (!currentContext[0]){
    return;
    }

    // If we get here, token is JUST an element (not a class or ID selector)
    tagName = token;
    var found = new Array;
    var foundCount = 0;
    for (var h = 0; h < currentContext.length; h++) {
    var elements = currentContext[h].getElementsByTagName(tagName);
    for (var j = 0; j < elements.length; j++) {
    found[foundCount++] = elements[j];
    }
    }
    currentContext = found;
    }
    return currentContext;
    }

    Javascript: voter.js

    Voter = {
    vote : function(what_in){
    var what = what_in.substring(0,what_in.indexOf("."));
    var up_down = what_in.substring(what_in.indexOf(".")+1,what_in.length);

    var voted = Cookies.read(what);
    if(voted == null){
    $(what_in).innerHTML = parseInt($(what_in).innerHTML)+1;
    this.voted=true;
    pars="vote="+up_down+"&what="+what;
    Cookies.create(what,"voted",1);
    var myAjax = new Ajax.Request( 'vote.php', { method: 'get', parameters: pars, onComplete: this.showResponse })
    }else{
    $(what+'.msg').innerHTML="You already voted";
    }
    },
    showResponse : function(originalRequest){
    $('result').innerHTML = originalRequest.responseText;
    }
    }

    Javascript :cookies.js

    Cookies = {
    create : function (name,value,days){
    if (days){
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
    }else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
    },

    read : function read(name){
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++){
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
    },

    erase : function (name){
    this.create(name,"",-1);
    }
    }

    Javascript: prototype.js

    Cookies = {
    create : function (name,value,days){
    if (days){
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
    }else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
    },

    read : function read(name){
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++){
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
    },

    erase : function (name){
    this.create(name,"",-1);
    }
    }

  • #2
    bdl
    bdl is offline
    Regular Coder
    Join Date
    Apr 2007
    Location
    Camarillo, CA US
    Posts
    590
    Thanks
    4
    Thanked 83 Times in 82 Posts
    Did you happen to notice this part:
    The following code is Copyright (C) Simon Willison 2004.

  • #3
    New Coder
    Join Date
    Mar 2009
    Location
    California
    Posts
    15
    Thanks
    0
    Thanked 1 Time in 1 Post
    Quote Originally Posted by bdl View Post
    Did you happen to notice this part:
    I'm no lawyer, but don't believe playing around with the code violates copyright...
    Teach me to be a software engineer, I don't care if it takes a whole day to learn it.
    Feel ready? Test yourself with some Interview questions

  • #4
    bdl
    bdl is offline
    Regular Coder
    Join Date
    Apr 2007
    Location
    Camarillo, CA US
    Posts
    590
    Thanks
    4
    Thanked 83 Times in 82 Posts
    Quote Originally Posted by Spider7 View Post
    I'm no lawyer, but don't believe playing around with the code violates copyright...
    Hmm. IANAL either, but the OP did post it to a public forum. Does that not violate basic copyright rules? Besides, that was several days ago, and there has been no response other than yours, which didn't even address the issue.


  •  

    Posting Permissions

    • You may not post new threads
    • You may not post replies
    • You may not post attachments
    • You may not edit your posts
    •