Reply To: Modify HitCounter script to Add to Favourites button

Forums Requests Modify HitCounter script to Add to Favourites button Reply To: Modify HitCounter script to Add to Favourites button

#34682
Brett
Participant

Hi Alexander,

I’ve finally got this code working from a button in the List View.
Taken me about 3 weeks to reverse engineer each line to figure out how it worked, well worth it.
Just wondering if you have time to make some last adjustments?
1: The buttons reload each time an item is added or removed. Are you able to make it change the single button only?
2: For some reason, my Test User needs at least Contribute permission to the Courses list for the buttons to render, if user has Read permissions, error in console: Uncaught TypeError: jQspjs(…).filterNode is not a function.

Code for Calc Column: *Note the ID is copied to CoursesID via workflow.

="<img src='/_layouts/images/BLANK.GIF' onload=""getIsFavorite('"&CourseID&"')"" ><span id='favBtnPlaceholder"&CourseID&"'></span>"

I’ve changed the “Favorites” list to “Shortlist”.
Also to make the button ID unique, I added the courseID number to the #favBtnPlaceholder.
Code for CEWP:


<a href="/sites/server/training/SPJS/DFFS/plugins/jquery.js">/sites/server/training/SPJS/DFFS/plugins/jquery.js</a>
<a href="/sites/server/training/SPJS/DFFS/plugins/SPJS-utility.js">/sites/server/training/SPJS/DFFS/plugins/SPJS-utility.js</a>

<script type="text/javascript"> 
// Current issues:
// all buttons load each time an item is added to shortlist
// user must have contribute access to Courses list to generate buttons.

function getIsFavorite(courseID){
  var currDocRes, favRes, b = [];

//grabs column variables from Courses list
 currDocRes = spjs.utility.getItemByID({
		"listName":"Courses",
		"id":courseID,
		"viewFields":["ID","Title","Group","Series","TextURL"]
		});

  if(currDocRes !== null){ //checks if exisiting item in Shortlist
        favRes = spjs.utility.queryItems({
			"listName":"Shortlist",
			"query":"<Where><And><Eq><FieldRef Name='Author' LookupId='TRUE' /><Value Type='User'>"+_spPageContextInfo.userId+"</Value></Eq><Eq><FieldRef Name='Title' /><Value Type='Text'>"+currDocRes.Title+"</Value></Eq></And></Where>",
			"viewFields":["ID"]		
			});
        if(favRes.count === 0){
        b.push("<input type='button' style='background-color:green;color:white;cursor: pointer' value='Add to Shortlist' onclick='toggleDocFav(false,\""+currDocRes.ID+"\",\""+currDocRes.Title+"\",\""+currDocRes.Group+"\",\""+currDocRes.Series+"\",\""+currDocRes.TextURL+"\")'>");       
        }else{
            b.push("<input type='button' style='background-color:yellow;cursor: pointer' value='Remove from Shortlist' onclick='toggleDocFav(\""+favRes.items[0].ID+"\",\""+currDocRes.Title+"\")'>");
        }
    }
    jQuery("#favBtnPlaceholder"+courseID).html(b.join(""));
}

function toggleDocFav(shortlistid,courseID,parentTitle,parentGroup,parentSeries,parentURL,parentDescription){
    var res;
          
    if(!shortlistid){
        // add to Shortlist                
        res = spjs.utility.addItem({
        "listName":"Shortlist",
        "data":{
        	"CourseID": courseID,
        	"Title": parentTitle,
        	"Group": parentGroup,
        	"Series": parentSeries,
        	"Link": parentURL
        	}
        });  
   	
        if(res.success){
          //  alert("Successfully added as favourite");
              // Refresh Shortlist web part              
            __doPostBack("ctl00$ctl39$g_388e590e_26cf_4a7d_8a6b_07c09678368a$ctl03","cancel");return false;
            getIsFavorite();           
        }
    }else{
        res = spjs.utility.deleteItem({
        "listName":"Shortlist",
        "id":faveid
        });
    
        if(res.success){
           // alert("Successfully removed from favourite");
                   // Refresh Shortlist web part    
          __doPostBack("ctl00$ctl39$g_388e590e_26cf_4a7d_8a6b_07c09678368a$ctl03","cancel");return false;       
            getIsFavorite();                        
        }
    }
}
</script>

Let me know if any further details needed.
Thanks.