diff --git a/js/image-hover.js b/js/image-hover.js deleted file mode 100644 index 93d61702..00000000 --- a/js/image-hover.js +++ /dev/null @@ -1,182 +0,0 @@ -/* image-hover.js - * This script is copied almost verbatim from https://github.com/Pashe/8chanX/blob/2-0/8chan-x.user.js - * All I did was remove the sprintf dependency and integrate it into 8chan's Options as opposed to Pashe's. - * I also changed initHover() to also bind on new_post. - * Thanks Pashe for using WTFPL. - */ - -if (active_page === "catalog" || active_page === "thread" || active_page === "index") { -$(document).on('ready', function(){ - -if (window.Options && Options.get_tab('general')) { - Options.extend_tab("general", - "
"); -} - -$('.image-hover').on('change', function(){ - var setting = $(this).attr('id'); - - localStorage[setting] = $(this).children('input').is(':checked'); -}); - -if (!localStorage.imageHover || !localStorage.catalogImageHover || !localStorage.imageHoverFollowCursor) { - localStorage.imageHover = 'false'; - localStorage.catalogImageHover = 'false'; - localStorage.imageHoverFollowCursor = 'false'; -} - -if (getSetting('imageHover')) $('#imageHover>input').prop('checked', 'checked'); -if (getSetting('catalogImageHover')) $('#catalogImageHover>input').prop('checked', 'checked'); -if (getSetting('imageHoverFollowCursor')) $('#imageHoverFollowCursor>input').prop('checked', 'checked'); - -function getFileExtension(filename) { //Pashe, WTFPL - if (filename.match(/\.([a-z0-9]+)(&loop.*)?$/i) !== null) { - return filename.match(/\.([a-z0-9]+)(&loop.*)?$/i)[1]; - } else if (filename.match(/https?:\/\/(www\.)?youtube.com/)) { - return 'Youtube'; - } else { - return "unknown: " + filename; - } -} - -function isImage(fileExtension) { //Pashe, WTFPL - return ($.inArray(fileExtension, ["jpg", "jpeg", "gif", "png"]) !== -1); -} - -function isVideo(fileExtension) { //Pashe, WTFPL - return ($.inArray(fileExtension, ["webm", "mp4"]) !== -1); -} - -function isOnCatalog() { - return window.active_page === "catalog"; -} - -function isOnThread() { - return window.active_page === "thread"; -} - -function getSetting(key) { - return (localStorage[key] == 'true'); -} - -function initImageHover() { //Pashe, influenced by tux, et al, WTFPL - if (!getSetting("imageHover") && !getSetting("catalogImageHover")) {return;} - - var selectors = []; - - if (getSetting("imageHover")) {selectors.push("img.post-image", "canvas.post-image");} - if (getSetting("catalogImageHover") && isOnCatalog()) { - selectors.push(".thread-image"); - $(".theme-catalog div.thread").css("position", "inherit"); - } - - function bindEvents(el) { - $(el).find(selectors.join(", ")).each(function () { - if ($(this).parent().data("expanded")) {return;} - - var $this = $(this); - - $this.on("mousemove", imageHoverStart); - $this.on("mouseout", imageHoverEnd); - $this.on("click", imageHoverEnd); - }); - } - - bindEvents(document.body); - $(document).on('new_post', function(e, post) { - bindEvents(post); - }); -} - -function imageHoverStart(e) { //Pashe, anonish, WTFPL - var hoverImage = $("#chx_hoverImage"); - - if (hoverImage.length) { - if (getSetting("imageHoverFollowCursor")) { - var scrollTop = $(window).scrollTop(); - var imgY = e.pageY; - var imgTop = imgY; - var windowWidth = $(window).width(); - var imgWidth = hoverImage.width() + e.pageX; - - if (imgY < scrollTop + 15) { - imgTop = scrollTop; - } else if (imgY > scrollTop + $(window).height() - hoverImage.height() - 15) { - imgTop = scrollTop + $(window).height() - hoverImage.height() - 15; - } - - if (imgWidth > windowWidth) { - hoverImage.css({ - 'left': (e.pageX + (windowWidth - imgWidth)), - 'top' : imgTop, - }); - } else { - hoverImage.css({ - 'left': e.pageX, - 'top' : imgTop, - }); - } - - hoverImage.appendTo($("body")); - } - - return; - } - - var $this = $(this); - - var fullUrl; - if ($this.parent().attr("href").match("src")) { - fullUrl = $this.parent().attr("href"); - } else if (isOnCatalog()) { - fullUrl = $this.attr("data-fullimage"); - if (!isImage(getFileExtension(fullUrl))) {fullUrl = $this.attr("src");} - } - - if (isVideo(getFileExtension(fullUrl))) {return;} - - hoverImage = $(''); - - if (getSetting("imageHoverFollowCursor")) { - var size = $this.parents('.file').find('.unimportant').text().match(/\b(\d+)x(\d+)\b/), - maxWidth = $(window).width(), - maxHeight = $(window).height(); - - var scale = Math.min(1, maxWidth / size[1], maxHeight / size[2]); - hoverImage.css({ - "position" : "absolute", - "z-index" : 101, - "pointer-events": "none", - "width" : size[1] + "px", - "height" : size[2] + "px", - "max-width" : (size[1] * scale) + "px", - "max-height" : (size[2] * scale) + "px", - 'left' : e.pageX, - 'top' : imgTop, - }); - } else { - hoverImage.css({ - "position" : "fixed", - "top" : 0, - "right" : 0, - "z-index" : 101, - "pointer-events": "none", - "max-width" : "100%", - "max-height" : "100%", - }); - } - hoverImage.appendTo($("body")); - if (isOnThread()) {$this.css("cursor", "none");} -} - -function imageHoverEnd() { //Pashe, WTFPL - $("#chx_hoverImage").remove(); -} - -initImageHover(); -}); -}