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('Login 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);