Files
danbooru/app/assets/javascripts/post_tooltips.js.erb

130 lines
3.8 KiB
Plaintext

Danbooru.PostTooltip = {};
Danbooru.PostTooltip.render_tooltip = function (event, qtip) {
var post_id = $(event.target).parents("[data-id]").data("id");
$.get("/posts/" + post_id, { variant: "tooltip" }).then(function (html) {
qtip.set("content.text", html);
qtip.elements.tooltip.removeClass("post-tooltip-loading");
// Hide the tooltip if the user stopped hovering before the ajax request completed.
if (Danbooru.PostTooltip.lostFocus) {
qtip.hide();
}
});
};
// Hide the tooltip the first time it is shown, while we wait on the ajax call to complete.
Danbooru.PostTooltip.on_show = function (event, qtip) {
if (!qtip.cache.hasBeenShown) {
qtip.elements.tooltip.addClass("post-tooltip-loading");
qtip.cache.hasBeenShown = true;
}
};
Danbooru.PostTooltip.POST_SELECTOR = "*:not(.ui-sortable-handle) > .post-preview img";
// http://qtip2.com/options
Danbooru.PostTooltip.QTIP_OPTIONS = {
style: "qtip-light post-tooltip",
content: Danbooru.PostTooltip.render_tooltip,
overwrite: false,
position: {
viewport: true,
my: "bottom left",
at: "top left",
effect: false,
adjust: {
y: -2,
method: "shift",
},
/* Position tooltip beneath mouse.
my: "top left",
at: "bottom left",
target: "mouse",
viewport: true,
adjust: {
mouse: false,
y: 25,
method: "shift",
},
*/
},
show: {
solo: true,
delay: 750,
effect: false,
ready: true,
event: "mouseenter",
},
hide: {
delay: 250,
fixed: true,
effect: false,
event: "unfocus click mouseleave",
},
events: {
show: Danbooru.PostTooltip.on_show,
},
};
Danbooru.PostTooltip.initialize = function () {
$(document).on("mouseenter", Danbooru.PostTooltip.POST_SELECTOR, function (event) {
if (Danbooru.PostTooltip.disabled()) {
$(this).qtip("disable");
} else {
$(this).qtip(Danbooru.PostTooltip.QTIP_OPTIONS, event);
}
Danbooru.PostTooltip.lostFocus = false;
});
$(document).on("mouseleave", Danbooru.PostTooltip.POST_SELECTOR, function (event) {
Danbooru.PostTooltip.lostFocus = true;
});
$(document).on("click", ".post-tooltip-disable", Danbooru.PostTooltip.on_disable_tooltips);
// Hide tooltips when pressing keys or clicking thumbnails.
$(document).on("keydown", Danbooru.PostTooltip.hide);
$(document).on("click", Danbooru.PostTooltip.POST_SELECTOR, Danbooru.PostTooltip.hide);
// Disable tooltips on touch devices. https://developer.mozilla.org/en-US/docs/Web/API/Touch_events/Supporting_both_TouchEvent_and_MouseEvent
Danbooru.PostTooltip.isTouching = false;
$(document).on("touchstart", function (event) { Danbooru.PostTooltip.isTouching = true; });
$(document).on("touchend", function (event) { Danbooru.PostTooltip.isTouching = false; });
};
Danbooru.PostTooltip.hide = function (event) {
// Hide on any key except control (user may be control-clicking link inside tooltip).
if (event.type === "keydown" && event.ctrlKey === true) {
return;
}
$(".post-tooltip:visible").qtip("hide");
};
Danbooru.PostTooltip.disabled = function (event) {
return Danbooru.PostTooltip.isTouching || Danbooru.meta("disable-post-tooltips") === "true";
};
Danbooru.PostTooltip.on_disable_tooltips = function (event) {
event.preventDefault();
$(event.target).parents(".qtip").qtip("hide");
if (Danbooru.meta("current-user-id") === "") {
Danbooru.notice('<a href="/session/new">Login</a> to disable tooltips permanently');
return;
}
$.ajax("/users/" + Danbooru.meta("current-user-id") + ".json", {
method: "PUT",
data: { "user[disable_post_tooltips]": "true" },
}).then(function() {
Danbooru.notice("Tooltips disabled; check your account settings to re-enable.");
location.reload();
});
};
$(document).ready(Danbooru.PostTooltip.initialize);