Files
danbooru/public/javascripts/compiled/posts.js
albert f051e04550 sync
2010-10-08 18:42:26 -04:00

323 lines
9.0 KiB
JavaScript

Cookie = {
put: function(name, value, days) {
if (days == null) {
days = 365;
}
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
var expires = "; expires=" + date.toGMTString();
document.cookie = name + "=" + encodeURIComponent(value) + expires + "; path=/";
},
raw_get: function(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 "";
},
get: function(name) {
return this.unescape(this.raw_get(name));
},
remove: function(name) {
Cookie.put(name, "", -1);
},
unescape: function(val) {
return decodeURIComponent(val.replace(/\+/g, " "));
},
setup: function() {
if (location.href.match(/^\/(comment|pool|note|post)/) && this.get("tos") != "1") {
// Setting location.pathname in Safari doesn't work, so manually extract the domain.
var domain = location.href.match(/^(http:\/\/[^\/]+)/)[0];
location.href = domain + "/static/terms_of_service?url=" + location.href;
return;
}
if (this.get("hide-upgrade-account") != "1") {
if ($("upgrade-account")) {
$("upgrade-account").show();
}
}
}
}
// Cookie.setup();
$(document).ready(function() {
// $("#hide-upgrade-account-link").click(function() {
// $("#upgrade-account").hide();
// Cookie.put('hide-upgrade-account', '1', 7);
// });
// Comment listing
$(".comment-section form").hide();
$(".comment-section input.expand-comment-response").click(function() {
var post_id = $(this).closest(".comment-section").attr("data-post-id");
$(".comment-section[data-post-id=" + post_id + "] form").show();
$(this).hide();
})
// Image resize sidebar
$("#resize-links").hide();
$("#resize-links a").click(function(e) {
var image = $("#image");
var target = $(e.target);
image.attr("src", target.attr("data-src"));
image.attr("width", target.attr("data-width"));
image.attr("height", target.attr("data-height"));
e.preventDefault();
});
$("#resize-link a").click(function(e) {
$("#resize-links").toggle();
e.preventDefault();
});
});
var Danbooru = {};
// ContextMenu
Danbooru.ContextMenu = {};
Danbooru.ContextMenu.add_icon = function() {
$("menu[type=context] > li").append('<img src="/images/arrow2_s.png">');
}
Danbooru.ContextMenu.toggle_icon = function(li) {
if (li == null) {
$("menu[type=context] > li > img").attr("src", "/images/arrow2_s.png");
} else {
$(li).find("img").attr("src", function() {
if (this.src.match(/_n/)) {
return "/images/arrow2_s.png";
} else {
return "/images/arrow2_n.png";
}
});
}
}
Danbooru.ContextMenu.setup = function() {
$("menu[type=context] li").hover(
function() {$(this).css({"background-color": "#F6F6F6"})},
function() {$(this).css({"background-color": "#EEE"})}
);
this.add_icon();
$("menu[type=context] > li").click(function(e) {
$(this).parent().find("ul").toggle();
e.stopPropagation();
Danbooru.ContextMenu.toggle_icon(this);
});
$(document).click(function() {
$("menu[type=context] > ul").hide();
Danbooru.ContextMenu.toggle_icon();
});
$("menu[type=context] > ul > li").click(function(element) {
$(this).closest("ul").toggle();
var text = $(this).text()
var menu = $(this).closest("menu");
menu.children("li").text(text);
if (menu.attr("data-update-field-id")) {
$("#" + menu.attr("data-update-field-id")).val(text);
Danbooru.ContextMenu.add_icon();
}
if (menu.attr("data-submit-on-change") == "true") {
menu.closest("form").submit();
}
});
}
$(document).ready(function() {
Danbooru.ContextMenu.setup();
});
PostModeMenu = {
init: function() {
this.original_background_color = $(document.body).css("background-color")
if (Cookie.get("mode") == "") {
Cookie.put("mode", "view");
$("#mode-box select").val("view");
} else {
$("#mode-box select").val(Cookie.get("mode"));
}
this.change();
},
change: function() {
var s = $("#mode-box select").val();
Cookie.put("mode", s, 7);
if (s == "view") {
$(document.body).css({"background-color": this.original_background_color});
} else if (s == "edit") {
$(document.body).css({"background-color": "#3A3"});
} else if (s == "add-fav") {
$(document.body).css({"background-color": "#FFA"});
} else if (s == "remove-fav") {
$(document.body).css({"background-color": "#FFA"});
} else if (s == "rating-q") {
$(document.body).css({"background-color": "#AAA"});
} else if (s == "rating-s") {
$(document.body).css({"background-color": "#6F6"});
} else if (s == "rating-e") {
$(document.body).css({"background-color": "#F66"});
} else if (s == "vote-down") {
$(document.body).css({"background-color": "#FAA"});
} else if (s == "vote-up") {
$(document.body).css({"background-color": "#AFA"});
} else if (s == "lock-rating") {
$(document.body).css({"background-color": "#AA3"});
} else if (s == "lock-note") {
$(document.body).css({"background-color": "#3AA"});
} else if (s == "approve") {
$(document.body).css({"background-color": "#26A"});
} else if (s == "unapprove") {
$(document.body).css({"background-color": "#F66"});
} else if (s == "add-to-pool") {
$(document.body).css({"background-color": "#26A"});
} else if (s == "apply-tag-script") {
$(document.body).css({"background-color": "#A3A"});
} else if (s == "edit-tag-script") {
$(document.body).css({"background-color": "#FFF"});
var script = Cookie.get("tag-script");
script = prompt("Enter a tag script", script);
if (script) {
Cookie.put("tag-script", script);
$("#mode-box select").val("apply-tag-script");
} else {
$("#mode-box select").val("view");
}
this.change();
} else {
$(document.body).css({"background-color": "#AFA"});
}
},
click: function(post_id) {
var s = $("#mode-box select").val();
if (s.value == "view") {
return true;
} else if (s.value == "add-fav") {
Favorite.create(post_id);
} else if (s.value == "remove-fav") {
Favorite.destroy(post_id);
} else if (s.value == "edit") {
// TODO
} else if (s.value == 'vote-down') {
PostVote.create("down", post_id);
} else if (s.value == 'vote-up') {
PostVote.create("up", post_id);
} else if (s.value == 'rating-q') {
Post.update(post_id, {"post[rating]": "questionable"});
} else if (s.value == 'rating-s') {
Post.update(post_id, {"post[rating]": "safe"});
} else if (s.value == 'rating-e') {
Post.update(post_id, {"post[rating]": "explicit"});
} else if (s.value == 'lock-rating') {
Post.update(post_id, {"post[is_rating_locked]": "1"});
} else if (s.value == 'lock-note') {
Post.update(post_id, {"post[is_note_locked]": "1"});
} else if (s.value == 'unapprove') {
Unapproval.create(post_id);
} else if (s.value == "approve") {
Post.update(post_id, {"post[is_pending]": "0"});
} else if (s.value == 'add-to-pool') {
Pool.add_post(post_id, 0);
} else if (s.value == "apply-tag-script") {
var tag_script = Cookie.get("tag-script");
TagScript.run(post_id, tag_script);
}
return false
}
}
TagScript = {
parse: function(script) {
return script.match(/\[.+?\]|\S+/g);
},
test: function(tags, predicate) {
var split_pred = predicate.match(/\S+/g);
var is_true = true;
split_pred.each(function(x) {
if (x[0] == "-") {
if (tags.include(x.substr(1, 100))) {
is_true = false
throw $break
}
} else {
if (!tags.include(x)) {
is_true = false
throw $break
}
}
})
return is_true
},
process: function(tags, command) {
if (command.match(/^\[if/)) {
var match = command.match(/\[if\s+(.+?)\s*,\s*(.+?)\]/)
if (TagScript.test(tags, match[1])) {
return TagScript.process(tags, match[2])
} else {
return tags
}
} else if (command == "[reset]") {
return []
} else if (command[0] == "-") {
return tags.reject(function(x) {return x == command.substr(1, 100)})
} else {
tags.push(command)
return tags
}
},
run: function(post_id, tag_script) {
var commands = TagScript.parse(tag_script)
var post = Post.posts.get(post_id)
var old_tags = post.tags.join(" ")
commands.each(function(x) {
post.tags = TagScript.process(post.tags, x)
})
Post.update(post_id, {"post[old_tags]": old_tags, "post[tags]": post.tags.join(" ")})
}
}
$(document).ready(function() {
$("#mode-box select").click(PostModeMenu.change)
PostModeMenu.init();
});