// ==UserScript==
// @name Game Comments Enhancer *OLD*
// @namespace ventero.de
// @author Ventero
// @description Lets you specify a rating threshold for & adds pagination to comments
// @include http://www.kongregate.com/games/*/*
// @include http://www.kongregate.com/games/*/*/comments*
// @date 26.09.2011
// @version 1.4
// require http://kong.ventero.de/updates/84216.js
// @license MIT license
// ==/UserScript==
// Written by Ventero (http://www.kongregate.com/accounts/Ventero) 08/23/2010
// Licensed under MIT/X11 license
// Copyright (c) 2010 Ventero
// http://www.opensource.org/licenses/mit-license.php
if(window != top) return;
function runInScope(src, args){
var s = document.createElement("script");
s.textContent = "" +
"if(typeof CommentsEnhancer === 'undefined'){" +
" CommentsEnhancer = {}" +
"};" +
"(function(args){" +
"(" + src.toString() + ").apply(CommentsEnhancer, args);" +
"})(" + (args ? JSON.stringify(args) : "") + ");";
document.body.appendChild(s);
setTimeout(function(){document.body.removeChild(s);}, 100);
}
var OPTION = "kong_rating_threshold";
var threshold = GM_getValue(OPTION, "all");
GM_registerMenuCommand("Set comments rating threshold", function(){
var r = prompt("Please enter the rating threshold. To show all comments, " +
"don't enter anything (or random text) and click ok")
window.setTimeout(function(){
GM_setValue(OPTION, r);
}, 0);
runInScope(function(t){
this.threshold = this.parseThreshold(t);
this.showComments();
}, [r]);
});
runInScope(function(threshold){
function parseThreshold(value){
var parsed = parseInt(value, 10);
if(isNaN(parsed))
return -Infinity;
else
return parsed;
}
function showComments(target){
var threshold = CommentsEnhancer.threshold;
if(target) {
target = $(target);
} else {
target = $("comments_list") || $("all_comments");
}
function hide(a){
target.down("#" + a).hide();
}
function show(a){
target.down("#" + a).show();
}
function getRating(a){
return parseInt(target.down("#comment_current_rating_" + a).innerHTML, 10);
}
var comments = target.getElementsByClassName("user_message comment"), current, id;
for(var i = comments.length - 1; i >= 0; i--){
current = comments[i];
id = current.id.split("_")[1];
if(getRating(id) > threshold) {
current.className = current.className.replace("below_threshold", "above_threshold");
hide('show_comment_content_' + id);
show('hide_comment_content_' + id);
show('comment_content_' + id);
} else {
current.className = current.className.replace("above_threshold", "below_threshold");
show('show_comment_content_' + id);
hide('hide_comment_content_' + id);
hide('comment_content_' + id);
}
}
}
var recent = $('recent_comments')
if(recent && !recent.down(".user_message.comment")) {
recent.observe("DOMNodeInserted", function(){
if(!recent.down(".user_message.comment")) return;
recent.stopObserving("DOMNodeInserted");
showComments(recent);
});
}
this.threshold = parseThreshold(threshold);
this.parseThreshold = parseThreshold;
this.showComments = showComments;
showComments();
}, [threshold]);
/////////////////////////////////////////////////////////////////////////
if(!document.getElementById("comments_list")) return;
runInScope(function(){
var self = this;
var commentsUrl = location.pathname + "/comments";
function loadComments(event, target, params){
divs[params.sort].down("div").hide();
$("spinner_" + params.sort).show();
var tempDiv = new Element("div");
new Ajax.Updater({success: tempDiv}, commentsUrl, {
method: "get",
parameters: params,
requestHeaders: { "Accept" : "text/html, */*" },
onComplete: function(r){
var commentsList = tempDiv.down("div#all_comments").down("div");
var pagination = tempDiv.down(".pagination.simple_pagination");
var oldPagination = target.down(".pagination.simple_pagination");
if(oldPagination) oldPagination.remove();
self.showComments(commentsList);
target.down("div").update(commentsList.innerHTML);
target.appendChild(pagination);
var links = ["next", "last", "prev", "first"];
links.forEach(function(type){
var link = pagination.down("li." + type).down("a");
if(link && link.href){
var paramString = link.href.substring(link.href.indexOf("?"));
if(!paramString) return;
var newParams = paramString.toQueryParams();
link.observe("click", function(event){
return loadComments(event, target, newParams);
});
link.href = "#";
}
});
$("spinner_" + params.sort).hide();
divs[params.sort].down("div").show();
resetLinks[params.sort].show();
comments_controller._comment_ids = commentsList.select(".user_message.comment").map(function(ele){
return ele.id.split("_")[1];
});
comments_controller.checkUserRatingStatus();
}
/* TODO: onFailure */
});
if(event.stop) event.stop();
if(event.preventDefault) event.preventDefault();
return false;
}
var fiveBest, fiveRecent, origIds;
function loadInitialBest(event){
origIds = comments_controller._comment_ids;
fiveBest = top.down("div").innerHTML;
topMore.hide();
return loadComments(event, top, {sort: "best"});
}
function loadInitialRecent(event){
fiveRecent = recent.down("div").innerHTML;
recentMore.hide();
return loadComments(event, recent, {sort: "newest"});
}
function reset(event, target, orig, more, reset){
target.down("div").update(orig);
var pagination = target.down(".pagination.simple_pagination");
if(pagination) pagination.remove();
more.show();
reset.hide();
comments_controller._comment_ids = origIds;
comments_controller.checkUserRatingStatus();
if(event.stop) event.stop();
if(event.preventDefault) event.preventDefault();
return false;
}
function resetBest(event){
return reset(event, top, fiveBest, topMore, topReset);
}
function resetRecent(event){
return reset(event, recent, fiveRecent, recentMore, recentReset);
}
var list = $("comments_list");
var top = list.down(".top_comments");
var recent = $("recent_comments");
var divs = {best: top, newest: recent};
var topMore = new Element("a", {href: "#"}).update("(see more)");
var recentMore = new Element("a", {href: "#"}).update("(see more)");
var topReset = new Element("a", {href: "#"}).update("(see less)").hide();
var recentReset = new Element("a", {href: "#"}).update("(see less)").hide();
var resetLinks = {best: topReset, newest: recentReset}
top.down(".comments_type").insert(" ").insert(topMore).insert(topReset);
topMore.observe("click", loadInitialBest);
topReset.observe("click", resetBest);
recent.down(".comments_type").insert(" ").insert(recentMore).insert(recentReset);
recentMore.observe("click", loadInitialRecent);
recentReset.observe("click", resetRecent);
var topSpinner = new Element("span", {"class": "spinner spinner_big", "id": "spinner_best"}).update("loading").hide();
var recentSpinner = new Element("span", {"class": "spinner spinner_big", "id": "spinner_newest"}).update("loading").hide();
top.insert(topSpinner);
recent.insert(recentSpinner);
});