|
|
@@ -7,23 +7,31 @@ var should_sort = window.location.href.indexOf("order=4") != -1; |
|
|
|
|
|
|
|
/* ------------------------ Miscellaneous functions ------------------------ */ |
|
|
|
|
|
|
|
String.prototype.cut_after = function(substr) { |
|
|
|
return this.substr(this.indexOf(substr) + substr.length) |
|
|
|
}; |
|
|
|
|
|
|
|
String.prototype.cut_before = function(substr) { |
|
|
|
return this.substr(0, this.indexOf(substr)); |
|
|
|
}; |
|
|
|
|
|
|
|
function get_anime_id_from_href(href) { |
|
|
|
var anime_id; |
|
|
|
if (href.indexOf("/anime/") != -1) |
|
|
|
anime_id = href.substr(href.indexOf("/anime/") + "/anime/".length); |
|
|
|
anime_id = href.cut_after("/anime/"); |
|
|
|
else |
|
|
|
anime_id = href.substr(href.indexOf("id=") + "id=".length); |
|
|
|
anime_id = href.cut_after("id="); |
|
|
|
if (anime_id.indexOf("/") != -1) |
|
|
|
anime_id = anime_id.substr(0, anime_id.indexOf("/")); |
|
|
|
anime_id = anime_id.cut_before("/"); |
|
|
|
if (anime_id.indexOf("&") != -1) |
|
|
|
anime_id = anime_id.substr(0, anime_id.indexOf("&")); |
|
|
|
anime_id = anime_id.cut_before("&"); |
|
|
|
return anime_id; |
|
|
|
} |
|
|
|
|
|
|
|
function get_edit_id_from_href(href) { |
|
|
|
var anime_id = href.substr(href.indexOf("id=") + "id=".length); |
|
|
|
var anime_id = href.cut_after("id="); |
|
|
|
if (anime_id.indexOf("&") != -1) |
|
|
|
anime_id = anime_id.substr(0, anime_id.indexOf("&")); |
|
|
|
anime_id = anime_id.cut_before("&"); |
|
|
|
return anime_id; |
|
|
|
} |
|
|
|
|
|
|
@@ -101,6 +109,7 @@ function update_list_score(anime_id) { |
|
|
|
$("#scorebutton" + anime_id).prop("disabled", false); |
|
|
|
if (should_sort) |
|
|
|
sort_list(); |
|
|
|
update_list_stats(); |
|
|
|
}); |
|
|
|
save_score(anime_id, new_score); |
|
|
|
} |
|
|
@@ -165,7 +174,7 @@ function submit_edit_form(anime_id, submit_type, submit_button) { |
|
|
|
submit_button[0].click(); |
|
|
|
} |
|
|
|
|
|
|
|
/* -------------------------------- Sorting -------------------------------- */ |
|
|
|
/* ------------------------ List stats and sorting ------------------------- */ |
|
|
|
|
|
|
|
function compare(row1, row2) { |
|
|
|
var r1 = $(row1).find("span[id^='scoreval']").text(), |
|
|
@@ -182,7 +191,7 @@ function compare(row1, row2) { |
|
|
|
return r2 - r1; |
|
|
|
} |
|
|
|
|
|
|
|
function setup_sortable_list() { |
|
|
|
function prepare_list() { |
|
|
|
var headers = [".header_cw", ".header_completed", ".header_onhold", |
|
|
|
".header_dropped", ".header_ptw"]; |
|
|
|
$.each(headers, function(i, header) { |
|
|
@@ -210,6 +219,46 @@ function sort_list() { |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
function apply_stats(elem, old_sum, new_sum, nums) { |
|
|
|
var old_score = elem.text().cut_after("Score: ").cut_before(","); |
|
|
|
var old_dev = elem.text().cut_after("Dev.: ").cut_before("\n"); |
|
|
|
var mean, deviation; |
|
|
|
|
|
|
|
mean = Math.round(new_sum / nums * 10) / 10 || 0; |
|
|
|
if (mean == Math.round(mean)) |
|
|
|
mean += ".0"; |
|
|
|
deviation = (new_sum - old_sum) / nums + parseFloat(old_dev) || 0; |
|
|
|
deviation = Math.round(deviation * 100) / 100; |
|
|
|
|
|
|
|
elem.text(elem.text() |
|
|
|
.replace("Score: " + old_score, "Score: " + mean) |
|
|
|
.replace("Dev.: " + old_dev, "Dev.: " + deviation)); |
|
|
|
} |
|
|
|
|
|
|
|
function update_list_stats() { |
|
|
|
var old_sum_all = 0, new_sum_all = 0, nums_all = 0; |
|
|
|
|
|
|
|
$(".category_totals").each(function(i, totals) { |
|
|
|
var group = $(totals).closest("table").prev(); |
|
|
|
var old_sum = 0, new_sum = 0, nums = 0; |
|
|
|
|
|
|
|
group.find("span[id^='scoreval']").each(function(j, elem) { |
|
|
|
if ($(elem).text() != "-") { |
|
|
|
old_sum += parseFloat($(elem).next().text()); |
|
|
|
new_sum += parseFloat($(elem).text()); |
|
|
|
nums++; |
|
|
|
} |
|
|
|
}); |
|
|
|
apply_stats($(totals), old_sum, new_sum, nums); |
|
|
|
old_sum_all += old_sum; |
|
|
|
new_sum_all += new_sum; |
|
|
|
nums_all += nums; |
|
|
|
}); |
|
|
|
|
|
|
|
if ($("#grand_totals").length > 0) |
|
|
|
apply_stats($("#grand_totals"), old_sum_all, new_sum_all, nums_all); |
|
|
|
} |
|
|
|
|
|
|
|
/* ---------------------------- Extension hooks ---------------------------- */ |
|
|
|
|
|
|
|
function hook_list() { |
|
|
@@ -219,6 +268,9 @@ function hook_list() { |
|
|
|
var bucket_id = (parseInt(anime_id) % MAX_BUCKETS).toString(); |
|
|
|
var bucket = data[bucket_id]; |
|
|
|
|
|
|
|
$(elem).after($("<span>") |
|
|
|
.css("display", "none").text($(elem).text())); |
|
|
|
|
|
|
|
if (bucket !== undefined && bucket[anime_id] !== undefined) |
|
|
|
$(elem).text(bucket[anime_id] == 0 ? "-" : bucket[anime_id]); |
|
|
|
else { |
|
|
@@ -253,10 +305,10 @@ function hook_list() { |
|
|
|
.remove(); |
|
|
|
}); |
|
|
|
|
|
|
|
if (should_sort) { |
|
|
|
setup_sortable_list(); |
|
|
|
prepare_list(); |
|
|
|
if (should_sort) |
|
|
|
sort_list(); |
|
|
|
} |
|
|
|
update_list_stats(); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
@@ -357,7 +409,7 @@ function hook_addtolist() { |
|
|
|
/* TODO: this entry point is unimplemented - it's rarely used and difficult |
|
|
|
to inject into, so I'm avoiding it for now. */ |
|
|
|
$("<p><b>Note:</b> For the time being, anime added through this " + |
|
|
|
"interface cannot be given scores on the 100-point scale (the old " + |
|
|
|
"interface cannot be given scores on the 10.0-point scale (the old " + |
|
|
|
"10-point system is used).</p><p>To give a more specific number, " + |
|
|
|
"simply add the anime here, then go to its own page or to your list " + |
|
|
|
"page, and update the score.</p>").insertAfter($("#stype").parent()); |
|
|
|