Sequenzia/lib/assets/javascripts/moe-legacy/pool.js

146 lines
3.8 KiB
JavaScript
Raw Normal View History

2013-10-27 01:06:58 +02:00
Pool = {
pools: new Hash(),
register: function(pool)
{
Pool.pools.set(pool.id, pool);
},
register_pools: function(pools)
{
if(pools != null)
pools.each(function(pool) { Pool.register(pool); });
},
register_pool_posts: function(pool_posts, posts)
{
/*
* pool_post is an array of individual posts in pools. It contains only data for posts
* listed in posts.
*
* This means that a pool_post not existing in pool_posts only indicates the post is
* no longer in the pool only if that post is listed in posts.
*
* We don't need to clear the pool_posts entry in posts, because the posts registered
* by this function are always newly registered via Post.register_resp; pool_posts is
* already empty.
*/
pool_posts.each(function(pool_post) {
var post = Post.posts.get(pool_post.post_id);
if(post)
{
if(!post.pool_posts)
post.pool_posts = new Hash();
post.pool_posts.set(pool_post.pool_id, pool_post);
}
});
},
can_edit_pool: function(pool)
{
if(!User.is_member_or_higher())
return false;
return pool.is_public || pool.user_id == User.get_current_user_id();
},
add_post: function(post_id, pool_id) {
notice("Adding to pool...")
new Ajax.Request("/pool/add_post.json", {
parameters: {
"post_id": post_id,
"pool_id": pool_id
},
onComplete: function(resp) {
var resp = resp.responseJSON
if (resp.success) {
notice("Post added to pool")
} else {
notice("Error: " + resp.reason)
}
}
})
},
remove_post: function(post_id, pool_id) {
var complete = function()
{
notice("Post removed from pool")
if($("p" + post_id))
$("p" + post_id).addClassName("deleted");
if($("pool" + pool_id))
$("pool" + pool_id).remove()
}
Post.make_request('/pool/remove_post.json', { "post_id": post_id, "pool_id": pool_id }, complete);
},
transfer_post: function(old_post_id, new_post_id, pool_id, sequence)
{
Post.update_batch(
[{ id: old_post_id, tags: "-pool:" + pool_id, old_tags: "" },
{ id: new_post_id, tags: "pool:" + pool_id + ":" + sequence, old_tags: "" }],
function() {
notice("Pool post transferred to parent")
/* We might be on the parent or child, which will do different things to
* the pool status display. Just reload the page. */
document.location.reload();
}
);
},
detach_post: function(post_id, pool_id, is_parent)
{
Post.update_batch(
[{ id: post_id, tags: "-pool:" + pool_id, old_tags: "" }],
function() {
notice("Post detached")
if(is_parent) {
var elem = $("pool-detach-" + pool_id + "-" + post_id);
if(elem)
elem.remove()
} else {
if($("pool" + pool_id))
$("pool" + pool_id).remove()
}
}
);
},
/* This matches PoolPost.pretty_sequence. */
post_pretty_sequence: function(sequence)
{
if(sequence.match(/^[0-9]+.*/))
return "#" + sequence;
else
return "\"" + sequence + "\"";
},
change_sequence: function(post_id, pool_id, old_sequence)
{
new_sequence = prompt("Please enter the new page number:", old_sequence);
if(new_sequence == null)
return;
if(new_sequence.indexOf(" ") != -1)
{
notice("Invalid page number");
return;
}
Post.update_batch(
[{ id: post_id, tags: "pool:" + pool_id + ":" + new_sequence, old_tags: "" }],
function() {
notice("Post updated")
var elem = $("pool-seq-" + pool_id);
if(!Object.isUndefined(elem.innerText))
elem.innerText = Pool.post_pretty_sequence(new_sequence);
else
elem.textContent = Pool.post_pretty_sequence(new_sequence);
}
);
}
}